1.4 智能合约的部署与执行

如果智能合约编译成功后,我们可以将它部署在以太坊主网上。但由于智能合约的特殊性,一旦其部署到以太坊主网,将无法再修改,为了避免这个问题,通常我们将合约部署到以太坊主网之前,要先进行本地测试。在这一节我们使用几种方式做测试。

1.4.1 在本地部署和执行智能合约

1.4.1.1 在本地部署智能合约

在Remix主页面,我们点击“Run”,进入另一个界面,会看能达到“Deploy”按钮,如下图所示。

我们做测试,在“Environment”那一栏选择“JavaScript VM”,然后在“Account”那一栏选“0xca3…”,再点击“Deploy”将看到如下界面:

点击上图中所标示的展开按钮会看到合约中定义为“public”的两个函数“setData”和“getData”,如下图所示。

此时,这个合约已经在我们的测试环境中部署好了。实际上在以太坊上部署一个合约就是一笔交易,我们在窗口底下点击“Debug”右边的下拉箭头可看到详细信息,下拉箭头的位置如下图所示:

点击该箭头可看到交易的详细信息,如下图所示:

1.4.1.2 在本地执行智能合约

我们成功在本地部署了智能合约后,下一步就要来运行测试智能合约。

首先我们检查“Account”。继续选择我们部署合约时用到的账户“0xca3…”。然后把鼠标移到页面右下角“getData”,点击该函数,执行成功我们会看到“0: uint256: retVal 0”,如下图所示:

这个结果表示函数“getData”执行成功,也即是合约执行成功,返回目前合约内存储的值为“0”。

下一步我们来检查函数“setData”是否能执行成功。我们把鼠标移到“setData”右边的空格,输入数字“10”,然后点击函数“setData”。然后再点击函数“getData”,如果执行成功,会看到“0: uint256: retVal 10”,如下图所示:

这证明我们刚刚输入的值“10”被成功写入到合约并且被成功读出。至此我们的合约已经成功进行了本地测试。

1.4.2在MetaMask部署和执行智能合约

刚刚我们在本地进行了测试,在这一节,我们介绍更进一步,介绍在以太坊测试网上进行测试。我们要用到以太坊的钱包客户端MetaMask。

1.4.2.1 安装MetaMask

MetaMask是浏览器端的以太坊钱包,可以连接以太坊测试网和主网。用户可自行在搜索引擎中搜索MetaMask插件并安装。目前MetaMask仅支持谷歌的chrome浏览器,火狐的firefox浏览器和Opera浏览器。

安装好MetaMask后,其界面如下:

1.4.2.2 选择以太坊测试网

在MetaMask上输入密码进入MetaMask。找到左上角的“Main Network”,如下图所示:

点击“Main Network”右边下拉箭头选择测试网,如下图所示:

选择“Ropsten Test Network”,Remix页面会弹出对话框询问是否要重新加载,选择“是”让页面重新加载。 此时我们再回到Remix页面,点击“Run”会在“Account”一栏看到我们MetaMask的钱包地址被自动填进了“Account”,同时“Environment”这一栏被自动设置成了 “Injected Web3”。

1.4.2.3 部署智能合约

我们在Remix的“Run”页面点击“Deploy”会弹出MetaMask的弹出窗口,如下图所示。

在MetaMask的窗体上点击“SUBMIT”(如下图所示)就可以将智能合约部署在以太坊测试网上了。

稍等片刻,若部署成功将会看到成功部署的界面。

1.4.2.4 执行智能合约

职能合约部署成功后,其执行的步骤和前面章节在本地部署后执行是一样的 。在此不再赘述。

1.4.3 在以太坊主网部署和执行智能合约

下面,我们将真正地把我们的智能合约部署到以太坊主网上进行测试。在运行下列步骤前,请确保您的MetaMask钱包中有足够的以太币余额。

1.4.3.1 选择以太坊主网

在MetaMask上输入密码进入MetaMask。找到左上角“Main Network”,如下图所示:

点击“Main Network”右边下拉箭头选择“Main Ethereum Network”,如下图所示:

选择“Main Ethereum Network”后,Remix页面会弹出对话框询问是否要重新加载,选择“是”让页面重新加载。 此时我们再回到Remix页面,点击“Run”会在“Account”一栏看到我们MetaMask的钱包地址被自动填进了“Account”,同时“Environment”这一栏被自动设置成了 “Injected Web3”。

1.4.3.2 部署智能合约

我们在Remix的“Run”页面点击“Deploy”会弹出确认窗口,如下图所示。

该窗口提示用户,即将在以太坊主网上部署智能合约,这将花掉用户的一部分以太坊代币。我们点击图中红框标注的“Confirm”确认要部署。然后出现以下弹出窗口:

请注意:在MetaMask弹出窗口的“Max Total”这一栏中我们将看到部署此合约要花费大概0.11美元。我们点击窗体上的“SUBMIT”就可以将智能合约真正部署在以太坊主网上了。同时我们在MetaMask中可以看到该合约的部署信息,如下图所示:

稍等片刻,若部署成功将会看到如下界面。此界面和测试版有个显著的不同,在图中我们标注了以太坊浏览器信息,我们可以点击该链接打开浏览器页面查看该部署交易的详细信息。

1.4.3.3 执行智能合约

执行该智能合约和前述在本地测试执行智能合约的方法与步骤一样,在此,我们不再赘述。