用 Truffle 插件自动在Etherscan上验证合约代码

2020-07-28 18:13 栏目:经验之谈 来源:网络整理 查看()

以太网是以太网中最流行的浏览器。它的主要功能之一是验证智能合同的源代码。这样用户就可以在使用合同之前通过源代码了解合同的功能。从而增加用户对合同的信任,使开发者受益。

通过Etherscan网站表单提交代码是验证代码的主要方法,但是需要大量的手工工作。需要输入编译器版本和构造函数参数等内容,并提交扩展的契约源代码(译者注:这里,当契约引用其他文件时,引用需要扩展),契约源代码需要与部署的代码完全匹配。

有些人使用命令行工具来扩展块菌契约,并使用基于浏览器的混合集成开发环境来部署扩展的源代码。然后,将相同的扩展源代码复制到Etherscan验证表单中进行提交。这是一个非常繁琐的过程,应该自动化。

这就是为什么我创建了块菌插件验证插件,它通过以太扫描应用编程接口自动验证块菌合同。这个插件是一个开源项目,有许多不同的参与者,包括任的一些开发人员[7]。使用此插件通过一个简单的命令来验证合同:

块菌运行验证合同名称

依赖条件

在本文中,我们假设您已经有了一个可部署的桁架项目。如果没有,您可以参考这个块菌教程[8],它也解释了如何使用Infura来设置块菌项目的部署。

您也可以在GitHub [9]上查看本文的源代码。

合同

让我们以赌场合同为例。在合同中,玩家可以下注1-10个eth。为了保证合同不会到期,玩家只能下注合同总金额的一小部分。

获胜号码是对当前块号进行模运算的结果。这个操作在测试中是可以的,但是应该注意的是,它可能在正式生产中被滥用。

在本文中,我们将具体地进一步拆分合同,以便合同可以分散到多个文件中。显示插件的所有功能很方便。

合同/Killeble . sol

务实稳健的^0.5.8;

可终止合同{

应付给公共所有者的地址;

构造函数()公共{

owner=msg.sender

{}

函数kill()外部{

要求(消息发送者==所有者,“只有所有者才能终止此合同”);

自毁(所有者);

{}

{}

合同/赌场

务实稳健的^0.5.8;

“导入”。/Killeble . sol '

合同赌场是可杀的

事件播放(应付地址索引玩家,uint256 betSize,uint8 betNumber,uint 8 Winning NumBer);

事件支出(应付赢家地址,uint256支出);

功能基金()外部应付款{}

功能下注(uint8号码)外部应付{

要求(消息值=getMaxBet(),“下注金额不能超过最大下注大小”);

要求(消息值0,“应该下注”);

uint8赢号码=生成赢号码();

发出播放(消息。发送者,消息。值,号码,赢的号码);

if (number==winningNumber) {

支出(msg.sender,msg . value * 10);

{}

{}

函数getMaxBet()公共视图返回(uint256) {

回信地址(此)。余额/100;

{}

函数generateWinningNumber()内部视图返回(uint8) {

返回uint8(块号% 101);//不要在生产中这样做

{}

职能支出(应付赢家地址,uint256金额)内部{

断言(金额0);

断言(金额=地址(此)。余额);

赢家。转移(金额);

发出支付(赢家,金额);

{}

{}

验证合同

现在我们已经准备好了合同,我们可以展示用truss-plugin-verify来验证合同是多么容易。

1.安装并启用truss插件验证

块菌插件可以使用npm或纱线安装:

npm安装-D块菌-插件-验证

纱线添加-松露-插件-验证

安装后,将以下内容添加到truffle-config.js或truffle.js文件中,以便truss可以启用插件:

module.exports={

/*.剩余松露-配置*/

plugins: [

块菌插件验证

]

{}

2.创建一个以太扫描应用编程接口密钥,并将其添加到块菌

用 Truffle 插件自动在Etherscan上验证合约代码

要创建以太扫描应用编程接口密钥,首先需要在以太扫描网站[10]上创建一个帐户。创建帐户后,可以在个人资料页[11]上添加新的美国石油学会密钥,如上图所示。创建新密钥后,将其添加到块菌-配置。js或块菌。js文件的api _ keys下的:

module.exports={

/*.剩余松露-配置*/

api _ keys: {

etherscan: ' MY _ API _ KEY '

{}

{}

当前,你可以不提交应用编程接口密钥到代码库中,建议使用dotenv[12]来保存应用编程接口密钥,然后在饭桶库中忽略环境文件,然后在块菌-配置。js或块菌。js配置文件读取它,读取方式如下:

var HDWalletProvider=必需(块菌-hdwallet-提供商);

要求(' dotenv ').config();

module.exports={

网络: {

rinkeby: {

provider:函数()

返回新的HDwallet提供程序(` $ {进程。env。INFORT } `,` https://rinke by。INF ura。io/v3/$ {进程。env。INF ura _ ID } `)

},

network_id: 4

{}

},

plugins: [

块菌插件验证

],

api _ keys: {

ethercan :进程。env。以太网接口密钥

{}

};

你的配置文件可能和上面有所不同,但是只要设置了公共网络部署,并且正确设置了插件和api _ keys就可以。

3.部署及验证合约

块菌-插件-验证的使用设置好了,接下来就是实际部署和验证智能合约。

部署:

块菌迁徙网络

这将花费一些时间,部署完之后,将显示以下类似的内容:

摘要

======

部署总数: 2

最终成本: 0.0146786

部署合同后,我们就可以使用块菌-插件-验证对我们的赌城风云合同进行以太扫描验证:

块菌运行验证赌场网络林克比

依旧需要花费一些时间,并最终返回:

林克通过: https://认证。乙醚扫描。io/address/0x ff 6 e 21d 371 f1 F3 d 2459d 352242564451 F9 aa 23 f #合同

结论

本文中,我们讨论了通过以太扫描在线表单进行验证代码的麻烦程度,因为每次部署合约时都需要执行几个手动步骤。在本文中,我们通过块菌-插件-验证开发者只需一个简单的命令就可以验证任何智能合约,这为手动验证提供一种简单、自动的替代方法。

本翻译得到登链社区[13]及细胞网络[14]支持。

参考资料

[1]登链翻译计划: https://github.com/lbc-team/Pioneer

[2]很小熊: https://learnblockchain.cn/people/15

[3]在https://kalis.me/verify-truffle-smart-contracts-etherscan/以太网:上自动验证块菌智能合同

[4]罗斯科卡利: https://kalis.me/

[5]验证智能合约的源代码: https://媒体。com/ethercan-blog/verificing-contracts-on-ethercan-f995 ab 772327

[6]块菌插件-验证: https://www.npmjs.com/package/truffle-plugin-verify

[7]伦: https://renproject.io/

[8]此松露教程: https://learnblockchain.cn/2019/03/30/dapp_noteOnChain

[9]源代码: https://github。com/rka lis/tru露-插件-验证/树/主/文档/kalis-me-教程-代码

[10]以太扫描网站: https://etherscan.io/

[11]个人资料页: https://etherscan.io/myapikey

[12]dotenv : https://www.npmjs.com/package/dotenv

[13]登链社区: https://learnblockchain.cn/

[14]蜂窝网络: https://www.cellnetwork.io/?utm_souce=learnblockchain

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:币友交流QQ/WX群请联系客服加入!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
虚拟币开发,虚拟币交易平台开发,山寨币交易平台开发 Keywords: 虚拟币开发 虚拟币交易平台开发 山寨币交易平台开发