ERC20智能合约锁仓与解锁主网发布过程:
[if !supportLists]1、 [endif]Solidity发布合约
智能合约代码拷贝到” https://ethereum.github.io/browser-solidity”
[if !vml]
[endif]
图1.1
[if !supportLists]2、 [endif]发布合约Remix设置
发布” ZHRTEST”智能合约,MetaMask网络选择”Main Network”, Account为Account1的地址,刷新浏览器自动显示。”2”中的选择“ZHRTEST”合约;先点击“Run”切换到运行中,Enviroment选择”Injected Web3”,点击Create.
[if !vml]
[endif]
图2.1
[if !vml]
[endif]
图2.2
[if !supportLists]3、 [endif]发布合约Gas Price与Meta Mask选择
发布的时候Gas Price可以根据当前行情选择”https://etherscan.io/txs”,一般设置7-14即可。打开“Meta Mask”,点击0 ETH,即可看到合约创建信息,如图3.1所示。(默认Gas Limit不用管,若是提示Gas Limit to low,适当加大limit)。注意:这里面代码是现在修改过的,在主网发布时采用的是symbol=”ZHR”。
[if !vml]
[endif]
图3.1
[if !vml]
[endif]
图3.2
其中“1”为success时,代表合约创建成功;“2”中地址即为合约地址;“4”为设置的gas价格;“5”为实际消耗的gas量。若出现失败图3.3所示则表示Gas limit小了。
[if !vml]
[endif]
图3.3
4、生成5个锁仓钱包地址(初始发行时,其他不用考虑)
打开”MyEtherWallet”(https://www.myetherwallet.com),先生成5个钱包地址,用于存储放仓后的代币。生成钱包地址的如图4.1所示(若已经有5个地址,则不需要再生成):
[if !vml]
[endif]
图4.1
5、拷贝“ABI”(MyEtherWallet运行合约时的ABI)
在图5.1中“Compile”中选择”ZHRTEST”,点击”Details”,,在弹出的框里面图5.2中找到”ABI”, 点击“1”,即可看到拷贝”ABI”成功。
[if !vml]
[endif]
图5.1
[if !vml]
[endif]
图5.2
6、运行“ZHRTEST”合约
图6.1中点击合同(contract), 输入“ZHRTEST”合约地址和” ZHRTEST”发布时对应的“ABI”。把“1”中Gas Price 设置为当前交易行情,一般6-14即可。“2”中网络一定要选择ETH的主网。若要在测试网发布则选择如图6.2所示的“Ropsten”。输入刚才拷贝的ABI,即可查看“ZHRTEST”合约的内容。
[if !vml]
[endif]
图6.1
[if !vml]
[endif]
图6.2
7、查看“ZHRTEST”合约信息。注意:一定要查看一下该合约的变量,查看该合约所有变量是否都正常。
点击“ACCESS”, 即可根据函数或者变量查看合约相关信息。
[if !vml]
[endif]
图7.1
8、发布锁仓解锁的“ZHRTokenVault”合约
在“ZHRTEST”下发布锁仓解锁的“ZHRTokenVault”合约,与Create同一行的输入框填上“ZHRTEST”合约地址,其地址为“0x80104364386e764a0c25467f13a9f40b7931834a”,如图8.1所示。点击Create,创建该合约。若Gas
limit太小创建会提示出现“2”的情况。此时调大Gas limit,例如:5000000。注意:此时“1”的地址一定要是“ZHRTEST”的地址,否则后面所有的操作都将无效,还有网络一定要在主网络下哦!发布完成后一定要在MyEtherWallet下运行该合约,并查看相关变量信息,看看该合约所有变量是否都正常(尤其是token是否为“ZHRTokenVault”合约地址)。
[if !vml]
[endif]
图8.1
9、初始发行转账给5个账户(若要锁的币已在原先的5个地址中,则不需要此步骤)
用发行智能合约的账户(即” ZHRTEST”的“owner”)给5个锁定地址转账。若新发布合约中owner账户中没有ZHR币,则按照图9.2点击Add,填写合约地址,代币符号,位数;添加后如图9.3所示(这里面ZHR的量是给5个地址转过后的量。)转账完成后,查询每一个账户的代币数量,如图9.4所示。(若是在原有的合约上面锁仓的话,直接用原先的账户给5个地址发币,然后5个地址再发给合约;如果要锁的币原先就在5个不同的地址,则直接用5个账户转账给该合约。)
[if !vml]
[endif]
图9.1
[if !vml]
[endif]
图9.2
[if !vml]
[endif]
图9.3
[if !vml]
[endif]
图9.4
10、将要锁仓money转到锁仓合约
将5个锁仓账号的代币发到智能合约“ZHRTokenVault”,其合约地址为“0x8495de357c9c5daf33ee388cf0deb62e855bcce5”。注意:转账时一定要注意地址和数量哦,数量对不住的话,锁仓将失败,耗费更多money。
11、执行与操作“ZHRTokenVault”合约
在MyEtherWallet中运行“ZHRTokenVault”合约,填写合约地址和对应的“ABI”。
[if !vml]
[endif]
图11.1
[if !vml]
[endif]
图11.2
12、查看“ZHRTokenVault”合约信息
通过getTotalBanlance查看” ZHRTokenVault”合约的总金额(注意:有一部分金额已经放仓)。也可以查询其他信息。对比totalAllocation是否等于getTotalBanlance得到的金额,若不等,则锁仓将要失败。
[if !vml]
[endif]
图12.1
13、锁仓操作。
选择“allocate”函数,将出现如图13.1所示。输入当前账号的秘钥,出现图13.2所示。点击” WRITE”,如图13.3所示,若Gas limit 没有默认的则可填写300000-910000,这个要根据具体情况。注意:一定要注意是否在主网和Gas Price,还有使用allocate时一定要有让你输入自己私钥方式的哦,要是没有就刷新一下,重新进行步骤12和13操作。
注明:一旦出错是合约错误,首先比对要锁仓数量是否与自定义的要锁定数量相等。
[if !vml]
[endif]
图13.1
[if !vml]
[endif]
图13.2
[if !vml]
[endif]
图13.3
14、查看锁仓
①、查询开始锁定时间如图14.1所示。
②、查询未放仓的总金额,如图14.2所示。
③、查询” claimed”变量的值,输入每个钱包的地址查看每个地址下claimed对应的值,为0时代表该地址对应的金额处于锁定状态。
[if !vml]
[endif]
图14.1
[if !vml]
[endif]
图14.2
[if !vml]
[endif]
图14.3
15、解仓操作。输入5个锁仓地址对应的私钥,然后运行该地址对应合约的函数。注意:一旦出错合约出错,不是Gas被消耗完,首先查看地址对应的函数是否正确。
[if !vml]
[endif]
图15.1
16、查询解仓信息。
[if !vml]
[endif]
图16.1
17、常见错误:
[if !supportLists]① [endif]、Gas问题
Gas Price 设置太大,Gas
limit较小,Gas耗尽后仍然没有执行完该合约。在MyEtherWallet里面一定要改Gas Price,要不然默认就是41 Gwei。
[if !vml]
[endif]
[if !supportLists]② [endif]、合约执行问题
合约中某个函数执行失败。
[if !vml]
[endif]