涉及内容:利用truffle编译、部署、验证合约,实践过程中的问题以及tips,truffle和remix在etherscan上验证,在etherscan上进行mint
本篇是一个学习记录,有任何错误和建议欢迎twitter私聊,我们共同进步
案例合约:
SAC只有一个.sol文件,所有相关的代码都放在了一起。这是一个721类型合约,功能主要是白名单和公售mint,接下来会部署在测试网rinkeby上,只测试公售mint。
最初不明白为什么SAC所有文件都放在一个sol里面,跑通全部之后才知道可能是用的remix的flatten插件将文件扁平汇总到一个sol里面,再部署验证
1、合约编译
将SAC合约粘贴到contracts/Sac.sol,执行完会出现build目录
$ truffle compile
合约测试部分,以后学习的时候会再单独讲,这部分需要对合约有一个更加细致的了解,目前很多合约出现各种漏洞,都是因为测试没有做好,合约好写,测试不好做,以后会花更多的时间在这部分研究。
2、合约部署
$ truffle migrate --network rinkeby
--reset 强制重新部署
部署过程中出现了一些问题:
1⃣️在truffle-config.js里面设置一个合适的gas,可以先进行gas估计,根据估计出的gas去部署就不会再出现gas不足的情况
$ truffle consle --network rinkeby
truffle(rinkeby)>SAC.new.estimateGas()
5741260
2⃣️在修改了一些代码之后重新部署,如果不更新,在命令后面加上--reset
3、合约验证
通过以上的操作我们已经成功将合约部署到rinkeby,但是在etherscan查询的时候,看不到具体的内容
这时候需要安装插件truffle-plugin-verify,并在truffle-config.js添加设置
然后执行命令
$ truffle run verify SAC --network rinkeby
出现错误无法连接api-rinkeby.etherscan.io,命令加上--debug可以看错误的详细信息
ping api-rinkeby.etherscan.io也确实出现timeout
尝试了三种方法:
1⃣️用https://url5.co/?t=1636355893这个网址查看对应的ip,sudo vim /private/etc/hosts添加进去,再次ping就能够访问,但是依然报错
2⃣️在本地终端加入VPN http://127.0.0.1:1087(mac的端口是1087),依然没有成功
3⃣️在truffle-config.js里面设置VPN
第三种方法成功设置,在网上查了很多办法,最后在truffle-plugin-verify的github上看到了详细的使用方法(还是官方文档更可靠)
到此就可以在etherscan上mint了。
4、public mint
代码里面有很多依赖,但是我们只需要关注SAC合约开始的这一部分
用另外的地址进行mint
以上就是truffle部署到最终mint的全部过程,下面准备用remix的方式进行合约验证。
如果是多个sol文件,用插件flatten将所有sol文件聚合在一个文件中,然后复制黏贴到etherscan进行验证
这里的ABI因为SAC的构造函数没有参数所以填空,remix上面可以找到ABI,然后通过下面这个网站得到hash值输入进去
总结:
1、全部流程跑通才知道为什么有的合约是多个sol文件,有的是一个sol文件,一个sol文件大概率是remix直接部署,手动etherscan验证,
2、truffle命令的时候,会报错找不到一些东西,这个时候不要先google,先仔细看一下相关的关键词有没有写对
3、合约发布之前,整体估计gas,测试阶段每个函数都估计一下gas
4、整个流程走完发现还是挺简单的,但是自己走一遍会对工具更熟悉