通过METAMASK调试和发布智能合约指南》

青旅半醒 2022-06-04 09:26 325阅读 0赞

转载一篇发布智能合约的指南原地址http://www.sohu.com/a/209216399\_783969

本文主要是针对有兴趣进行以太坊智能合约开发的技术爱好者,进行开发调试工具使用方面的指导。

1.安装METAMASK

MetaMask 是一款浏览器插件钱包,不需下载安装客户端,只需添加至浏览器扩展程序即可使用,非常方便,并且可以很方便的调试和测试以太坊的智能合约。

1.1首先安装Google Chrome浏览器

Google Chrome是一款由Google公司开发的网页浏览器,该浏览器基于其他开源软件撰写,包括WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

MetaMask是Chrome浏览器上的一种插件,所以必须先安装Chrome浏览器。直接在百度浏览器中搜索,可以直接进行下载。

276ff5bf781e4aa48b6ce4826e3f99cb.jpeg

1.2 安装Chrome的METAMASK插件

这里先需要提醒下,MetaMask目前必须在Chrome浏览器的在线应用商店进行在线下载和安装,因为网络原因你需要使用VPN才能下载安装。

输入MetaMask官网地址,https://metamask.io/,在官网主页参考下图指引通过Chrome应用商店来安装该插件。

cdf80717ec6f43a490890b2ec19a9167.jpeg

5390061109c44ec1bdeff97cfb702821.jpeg

安装完毕后,在浏览器上会显示该插件的小图标,点击下图中“小狐狸”图标,会出现MetaMask的主操作界面。

a3dc7d60f61a43a09bb3b15465bc6710.jpeg

首先是提示界面,可以忽略,点击“Accept”,进入下一步,下一步也是声明,需要拉倒低才能点击“Accept”。

8080fa66371c47bcbd8a5a64b4bdb824.jpeg

然后会看到此界面,请输入账号密码一定不能忘记(也可以导入先去已有的Metamask账号):

ba56c6a4c4554699b60f544ab0371b26.png

在创建账号的时候为了防止账号密码丢失,这里提供的找回的助记词功能,拷贝恢复账号的安全码,一共是12个单词,切记,这一步很重要,一定要把这安全码记录下来方便恢复账号。

250d30960df24e48bd0222547b0c3bb7.jpeg

然后系统会生成一个以太坊的账号,你可以进行以他操作:

  • 可以很方便的查看钱包地址
  • 将地址转换为二维码
  • 买入以太币
  • 发送以太币

687c3cd79aa046ac84f2c51551b23292.png

1.3 配置MetaMask

MetaMask默认连接的是以太坊的Main Ethereum Network,为了方便我们测试智能合约,需要切换到Ropsten Test Network。

2a82ba3a49934fc98becdbb85a905d45.jpeg

1.4 在测试网络中获取以太币

在测试网络中获取以太币不需要付费,直接点击“BUY”,进入获取测试网络以太币界面,点击“ROPSTEN TEST FAUCET”,进入挖矿界面,每次最多挖去13个测试网络以太币。

256d3e844da3438b9faf80340b7010dc.png

380b65a223a64fd691fc5531cf7d5839.png

633c1a048f0b448094e2ad15b2d4013c.jpeg

2.智能合约发布

2.1获取HPB智能合约源码

本章节的智能合约发布调试主要以发布在以太坊的HPB智能合约作为测试和调试的对象。

HPB的智能合约源码已提交到etherscan.io,并认证通过,大家可以从以下地址获取:

https://etherscan.io/address/0x38c6A68304cdEfb9BEc48BbFaABA5C5B47818bb2\#code

4b20f1ed3ce04e6599e35605e568d594.jpeg

2.2在线智能合约编译器

通过MetaMask来发布校验代码,需要结合一款Solidity在线编译器,可以很方便的对智能合约的代码进行调试。

请在网页中输入在线Solidity的编辑器地址,直接在网页中打开:https://ethereum.github.io/browser-solidity/

282655f4524740a49a87f6b967e06339.jpeg

2.3 编译智能合约

把从etherscan.io下载的HPB智能合约源码黏贴到编辑器中。HPB的源码技术爱好者可以自己分析理解下,这里为了后续能在MetaMask中进行调试测试和检查发布结果,这里需要对代码进行校验和编译。

请先在Chrome中登录MetaMask账号,在下图界面上选择“run”按钮,系统会自动把MetaMask中你的ETH账号同步到下图中的“Account”选项中,其他属性不用修改。

a5736aa9f4ac4238aba9c9565ee1169d.jpeg

注意在下图中,选择智能合约的名称,名称和源码中的名称保持一致:

b474d1a82ee844dc8c5b386241704d9c.png

424014498607483f95824ac974598ec3.jpeg

在Create按钮旁边的输入框输入构造参数,此参数是接受ETH转账地址的账号

例如本文中ETH测试网络中的账号:“0x2F89c15a7e52b00084e01Cc957C656fc53ceAc11”,注意一定要带有双引号。

同时请选择编译版本,和智能合约代码中指定的版本保持一致,同时后发布成功后也需要校验也需要选择和发布时候一致的编译版本。

6950a797dec645bba161f49b4fc6a56b.jpeg

2.4 发布智能合约

提示:发布智能合约的时候必须指定一个以太坊的账号进行发布。

校验完毕后点“Create”,在线编译器会自动的进行代码校验,如果校验通过会弹出MetaMask对话框。本文是通过创建的账户Account1来提交创建的合约。

d4249eaa92b14440914f78358dfb7eaf.jpeg

2.5查看智能合约产生的代币

智能合约发布成功后,会自动生成代币,HPB的代币总量是1亿枚。

c5db57f2702b4b32912396e718de9c29.png

a6367ac7f83240eca67a19648c829d41.png

528a9b5862834294afc58016c416b8d2.png

2.6 查看创建智能合约交易

点击metamask查看最新的一笔发布智能合约的交易,点击跳转到网页显示详情。

019c5c3d0ef04be1be6c2428cedc2330.png

通过下图可以找到智能合约的地址,以及ABI字符串,请复制ABI字符串后续校验智能合约的时候需要使用。

提示:注意ABI字符串是通用的截取规范是在下图中的“0029”数字之后。

e1a1d7453c0c426aa86cf64817e0fd5d.jpeg

2.7 校验已发布的智能合约

点击下图中的智能合约地址链接,进入智能合约详情页面。

defb3ad7067d4159b6c404d7c8265e35.jpeg

跳转到此页面后,点击下图中的“Verify And Publish”,进入验证页面。

6c6e7ced05d64364bf75e78a4178d42f.jpeg

进入验证页面后,请注意一下几点:

  • Contract Name 务必保持和源码中的Contract Name保持一致。
  • Compiler选择的版本号务必和在MetaMask发布的版本保持一致。、
  • Optimization 请选择Disabled

5e798d10ea294fd5872b355736700dfe.jpeg

还是在本页面,找到下图输入项,然后输入本次发布智能合约生成的ABI字符串,点击“Verify And Publish”验证智能合约。

0430bade0a7c4340b596b6d0d661fb63.jpeg

发布过程如果没出现报错提示,会显示下列信息,表示验证通过。

0c05fc167701463ca621cd9f5b8f2d25.jpeg

2.8查看校验通过的智能合约

校验通过后,可以在以太坊测试网络上查看校验通过智能合约详情。

测试网查询地址:https://ropsten.etherscan.io

24326bc27afd4b16b30f0d549abcb317.jpeg

可以很清晰的看到智能合约的相关属性,输入输出项。

56f915786898459988a434a4416b9ec5.jpeg

发表评论

表情:
评论列表 (有 0 条评论,325人围观)

还没有评论,来说两句吧...

相关阅读

    相关 智能合约

    智能合约(英语:Smart contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。

    相关 智能合约调试指南

      不像你在其他地方看到的纸质合约,以太坊的智能合约是代码组成的,需要你以非常谨慎的态度去对待它。 (这是一件好事,想象下如果现实世界的合同需要编译的话会更清晰么?)