Разработка
На этой странице объясняется, как компилировать / развертывать / тестировать / взаимодействовать со смарт-контрактами. Существует четыре основных контракта: токен Cyclone, GovernorAlpha / Timelock, Aeolus и Cyclone (Coin, ERC20).
Подготовка
Установить трюфель
npm install -g truffleУстановить зависимости
npm installУстановите
ioctl-инструмент командной строки для взаимодействия с блокчейном IoTeX
установите ioctl, следуя инструкциям: https://docs.iotex.io/developer/ioctl/install.html
Составляем контракты
npm run build:contract
Развернуть контракты
CycloneToken
Развернуть CycloneToken
ct
ioctl contract deploy bytecode CYCLONETOKEN_BYTECODE ABI_PATH '{"_operator": "OPERATOR_ADDRESS", "_lp": "INITIAL_LP_ADDRESS"}'Timelock & GovernorAlpha
Развертывать Timelock
tl
ioctl contract deploy bytecode TIMELOCK_BYTECODE TIMELOCK_ABI_PATH '{"admin_": DEPLOY_ADMIN_ADDRESS, "delay_": DELAY_IN_SEC}' 2. Развертывать GorvernorAlpha ga (например, продолжительность голосования: 3 дня)
ioctl contract deploy bytecode GORVERNOR_BYTECODE GOVERNOR_ABI_PATH '{"timelock_": TIMELOCK_ADDRESS, "sushi_": CYCTOKEN_ADDRESS, "guardian_": ADMIN_ADDRESS, "votingDuration_": 51840}' 3. Установите ожидающего администратора Timelock на GovernorAlpha ga
ioctl contract invoke function TIMELOCK_ADDRESS TIMELOCK_ABI_PATH "setPendingAdmin" --with-arguments '{"pendingAdmin_": GOVERNOR_ADDRESS}' 4. Accept Admin from GovernorAlpha ga triggered by guardian
ioctl contract invoke function GOVERNOR_ADDRESS GOVERNOR_ABI_PATH "__acceptAdmin"Aeolus
Добавьте ликвидность для CYC / IOTX на MimoFactory и получите токен CYC-IOTX LP
Разверните Aeolus
asсctадресом
ioctl contract deploy bytecode AEOLUS_BYTECODE ABI_PATH '{"_cycToken": CYC_TOKEN, "_lpToken" : LP_TOKEN}' 3. Вызовите ct.addMinter (), чтобы установить as в качестве минтеров для токена CYC
ioctl contract invoke function CYCTOKEN_ADDRESS CYCTOKEN_ABI_PATH "addMinter" --with-arguments '{"_minter": AEOLUS_ADDRESS}'CoinCyclone, ERC20Cyclone
Развертывать Hasher
hrioctl contract deploy bytecode HASHER_BYTECODEРазвертывать Verifier
vrioctl contract deploy bytecode VERIFIER_BYTECODEРазвертывать CoinCyclone
cc, ERC20Cycloneecсвязано с Hasherhrсas,vr,ct,mfи при необходимости адрес токена XRC20link CoinCyclone_BYTECODE/ERC20Cyclone_BYTECODE with HASHER_ADDRESS (use linker.js)ioctl contract deploy bytecode CoinCyclone_LINKED_BYTECODE CoinCyclone_ABI_PATH'{"_verifier": VERIFIER_ADDRESS, "_cyctoken": CYCTOKEN_ADDRESS, "_mimoFactory": MIMOFACTORY_ADDRESS, "_aeolus": AEOLUS_ADDRESS, "_initDenomination" : DENOMINATION_AMOUNT, "_denominationRound": DENOMINATION_ROUND, "_merkleTreeHeight" : MERKLETREE_HEIGHT, "_operator": TIMELOCK_ADDRESS}'ioctl contract deploy bytecode ERC20Cyclone_LINKED_BYTECODE ERC20Cyclone_ABI_PATH '{"_verifier": VERIFIER_ADDRESS, "_cyctoken": CYCTOKEN_ADDRESS, "_mimoFactory": MIMOFACTORY_ADDRESS, "_aeolus": AEOLUS_ADDRESS, "_initDenomination" : DENOMINATION_AMOUNT, "_denominationRound": DENOMINATION_ROUND, "_merkleTreeHeight" : MERKLETREE_HEIGHT, "_operator": TIMELOCK_ADDRESS, "_xrc20Token" : XRC20TOKEN_ADDRESS}'Вызовите
ct.addMinter (), чтобы установитьccиecв качестве minters для токена CYCioctl contract invoke function CYCTOKEN_ADDRESS CYCTOKEN_ABI_PATH "addMinter" --with-arguments '{"_minter": CoinCyclone_ADDRESS}' ioctl contract invoke function CYCTOKEN_ADDRESS CYCTOKEN_ABI_PATH "addMinter" --with-arguments '{"_minter": ERC20Cyclone_ADDRESS}'Вызов
as.addAddressToWhitelist (), чтобы установитьccиecв белые списки для Aeolus, чтобы вызватьaddReward ()ioctl contract invoke function AEOLUS_ADDRESS AEOLUS_ABI_PATH "addAddressToWhitelist" --with-arguments '{"addr": CoinCyclone_ADDRESS}' ioctl contract invoke function AEOLUS_ADDRESS AEOLUS_ABI_PATH "addAddressToWhitelist" --with-arguments '{"addr": ERC20Cyclone_ADDRESS}'
Контракты на тестирование
версия узла
nvm use 11.15.0построить схемы zk
npm run buildесли вы хотите использовать
testсеть, просто запуститеnpm run test(дефолт).Если вы хотите использовать
developmentсеть,изменить truffle-config.js (раскомментировать сеть разработки)
пробег
ganache-cli i 1337пробег
npm run test
Взаимодействие с контрактами Cyclone [Анонимность Майнинг]
Требования
nvm use 11.15.0npm install -g npxНастроить файл .env
cp .env.example .envvi .env- добавьте свой закрытый ключ, развернутый адрес контракта и номинал
Построить схемы zk:
npm run build. Обратите внимание, что если вы хотите создавать схемы zk (включая verifier.sol, proof / verify-keys) локально, вам необходимо:npm uninstall websnarknpm install websnark@"git+https://github.com/tornadocash/websnark.git#2041cfa5fa0b71cd5cca9022a4eeea4afe28c9f7"npm run build:local- Это может занять более 10 минут, поскольку установка доверия выполняется локально.
Депозит
Тестовая сеть
./client.js deposit IOTX|XRC20 --rpc http://api.testnet.iotex.one:80Mainnet
./client.js deposit IOTX|XRC20 --rpc http://api.iotex.one:80
Снять со счета
Тестовая сеть
./client.js withdraw NOTE RECIPIENT_ADDRESS --rpc http://api.testnet.iotex.one:80 --relayer RELAYER_URLMainnet
./client.js withdraw NOTE RECIPIENT_ADDRESS --rpc http://api.iotex.one:80 --relayer RELAYER_URL
Взаимодействие с контрактом Aeolus [Ликвидность Майнинг]
Добавьте ликвидность для CYC / IOTX на MimoFactory и получите токен CYC-IOTX LP
Депозит
Утвердить токен CYC-IOTX LP
ioctl xrc20 approve AEOLUS_ADDRESS AMOUNT -c LPTOKEN_ADDRESSДепозит CYC-IOTX LP Token
ioctl contract invoke function AEOLUS_ADDRESS abi/Aeolus.json "deposit" --with-arguments '{"_amount": AMOUNT}'3. Снять со счета
ioctl contract invoke function AEOLUS_ADDRESS abi/Aeolus.json "withdraw" --with-arguments '{"_amount": AMOUNT}'Взаимодействие с GovernorAlpha контракт [Управление]
1.Самостоятельно делегируйте или делегируйте свой токен CYC для управления. Если вы не делегируете свои голоса, жетон не будет считаться правом голоса.
ioctl contract invoke function CYCTOKEN_ADDRESS abi/CycloneToken.json "delegate" --with-arguments '{"delegatee": ADDRESS_YOU_WANT_TO_DELEGATE}' -s mainnet -y2. Предложите новое изменение в контрактах циклонов, таких как updateConfig, changeGovDAO и updateVerifier. У предлагающего должно быть более 1000 токенов CYC. Голосование продлится 3 дня. - Используйте abi-encoder, чтобы получить закодированные данные аргумента.
ioctl contract invoke function GOVERNOR_ADDRESS abi/GovernorAlpha.json "propose" --with-arguments '{"targets": [CYCLONE_ADDRESS], "values": [0], "signatures": ["updateConfig(uint256,uint256,uint256,uint256)"], "calldatas": ["..."], "description": "update configs in cyclone contract"}'3. В течение 3 дней, в течение которых проводится голосование, держатели токенов, которые делегируют или делегируют собственные полномочия, могут голосовать за определенное предложение.
ioctl contract invoke function GOVERNOR_ADDRESS abi/GovernorAlpha.json "castVote" --with-arguments '{"proposalId": 1, "support": true}'4. Если после 3 дней голосования, если предложение набирает более 4000 голосов CYC, предлагающий может поставить транзакцию в очередь в Timelock.
ioctl contract invoke function GOVERNOR_ADDRESS abi/GovernorAlpha.json "queue" --with-arguments '{"proposalId": 1}'5. После задержки временной привязки предлагающий может выполнить транзакцию с временной привязкой.
ioctl contract invoke function GOVERNOR_ADDRESS abi/GovernorAlpha.json "execute" --with-arguments '{"proposalId": 1}'Last updated
Was this helpful?