Development
This page explains how to compile/deploy/test/interact with smart contracts. There are four major contracts which are Cyclone token, GovernorAlpha/Timelock, Aeolus, and Cyclone (Coin, ERC20)
Preparation
Install truffle
npm install -g truffleInstall dependencies
npm installInstall
ioctl- the command-line tool to interact with IoTeX blockchain
install ioctl following the instructions: https://docs.iotex.io/developer/ioctl/install.html
Compile contracts
npm run build:contract
Deploy contracts
CycloneToken
Deploy a CycloneToken
ct
ioctl contract deploy bytecode CYCLONETOKEN_BYTECODE ABI_PATH '{"_operator": "OPERATOR_ADDRESS", "_lp": "INITIAL_LP_ADDRESS"}'Timelock & GovernorAlpha
Deploy Timelock
tl
ioctl contract deploy bytecode TIMELOCK_BYTECODE TIMELOCK_ABI_PATH '{"admin_": DEPLOY_ADMIN_ADDRESS, "delay_": DELAY_IN_SEC}' 2. Deploy GorvernorAlpha ga (e.g., voting duration:3 days)
3. Set Timelock's pending admin to GovernorAlpha ga
4. Accept Admin from GovernorAlpha ga triggered by guardian
Aeolus
Add Liquidity for CYC/IOTX on MimoFactory and receive CYC-IOTX LP Token
Deploy an Aeolus
aswithctaddress
3. Invoke ct.addMinter() to set as to be minters for CYC token
CoinCyclone, ERC20Cyclone
Deploy Hasher
hrDeploy Verifier
vrDeploy CoinCyclone
cc, ERC20Cycloneeclinked by Hasherhrwithas,vr,ct,mfand if necessary, XRC20 token addressInvoke
ct.addMinter()to setccandecto be minters for CYC tokenInvoke
as.addAddressToWhitelist() to setccandecto be whitelists for Aeolus to invokeaddReward()
Test contracts
node version
nvm use 11.15.0build zk circuits
npm run buildif you want to use
testnetwork, just runnpm run test(default).If you want to use
developmentnetwork,modify truffle-config.js (uncomment development network)
run
ganache-cli i 1337run
npm run test
Interaction with Cyclone contracts [Anonymity Mining]
Requirements
nvm use 11.15.0npm install -g npxSet up .env file
cp .env.example .envvi .env- add your private key, deployed contract address and denomination value
Build zk circuits:
npm run build. Note that if you want to build zk circuits (including verifier.sol, proof/verify-keys) locally, you need to:npm uninstall websnarknpm install websnark@"git+https://github.com/tornadocash/websnark.git#2041cfa5fa0b71cd5cca9022a4eeea4afe28c9f7"npm run build:local- It might take more than 10 minutes as it performs the trust-setup locally.
Deposit
Testnet
./client.js deposit IOTX|XRC20 --rpc http://api.testnet.iotex.one:80Mainnet
./client.js deposit IOTX|XRC20 --rpc http://api.iotex.one:80
Withdraw
Testnet
./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
Interaction with Aeolus contract [Liquidity Mining]
Add Liquidity for CYC/IOTX on MimoFactory and receive CYC-IOTX LP Token
Deposit
Approve CYC-IOTX LP Token
Deposit CYC-IOTX LP Token
3. Withdraw
Interaction with GovernorAlpha contract [Governance]
Self-delegate or delegate your CYC token for governance. If you do not delegate your votes, the token will not be considered as voting power.
2. Propose a new change in cyclone contracts such as updateConfig, changeGovDAO, and updateVerifier. The proposer should have more than 1000 CYC Token. Voting will run for 3 days. -- Use abi-encoder to get encoded argument data.
3. During the 3 days of voting duration, token holders who self-delegate or delegate can cast votes for a certain proposal.
4. After 3 days of voting duration, if the proposal gets more than 4000 CYC votes, the proposer can queue the transaction into Timelock.
5. After the timelock delay, the proposer can execute the transaction in timelock.
Last updated
Was this helpful?