一、前言
当我们编写完 Vote 合约后,如何把它部署到以太坊的链上?
实际上,部署合约也是一个交易,需要一个外部账户,花费一定的 Gas,就可以把合约部署到链上。
因此,我们首先需要一个便于开发和测试的钱包,才能创建一个外部账户,并且账户上要有一定的 Ether。
二、MetaMask
我们强烈推荐使用 MetaMask 钱包,这是一个基于浏览器插件的钱包,支持 Chrome、FireFox 等浏览器。使用的时候,通过 Dapp 网站的 JavaScript 可以发起交易,用户通过 MetaMask 确认后即可将交易发送至链上。
安装MetaMask非常简单,请参考官方文档。安装完成后,第一次启动 MetaMask 需要创建或导入一个钱包,设置一个解锁口令,MetaMask 允许创建多个账号,可随时切换账号,还可切换不同的链,例如,以太坊主网、Ropsten 测试网、Rinkeby 测试网等。
在开发阶段,直接使用主网太费钱,可以使用测试网,并从 faucet.egorfine.com 或faucet.dimensions.network 获取一些测试网的 Ether。
以太坊有多个测试网,开发前请在 Etherscan 确认使用哪个活动的测试网。

三、部署合约
以太坊官方提供了一个 Remix 的在线 IDE,用于编写、编译和部署以太坊合约。这是从零开始部署一个合约的最简单的方式。
我们访问 Remix(注意:要部署合约,只能通过 http 访问,不能使用 https),在左侧选择“File explorers”,在默认的 Workspace 的 contracts 目录下新建文件 Vote.sol,然后贴入上一节我们编写的代码:

接下来是编译该合约。选择左侧的“Solidity compiler”,点击“Compile Vote.sol”开始编译:

如果没有编译错误,可以看到编译成功的标志。接下来选择“Deploy & run transactions”:

在“ENVIRONMENT”中,选择“Injected Web3”,表示我们要使用 MetaMask 注入的 Web3 环境,如果已正确连接 MetaMask,可以看到“Ropsten (3) network”,表示已连接到 Ropsten 测试网。
在“CONTRACT”中,选择“Vote - contracts/Vote.sol”,这是我们将要部署的合约。
在“Deploy”按钮左侧,填入构造函数的参数,例如 1735719000,然后点击“Deploy”按钮开始部署,此时会弹出MetaMask的交易签名确认,确认后部署合约的交易即被发送至测试链。在 MetaMask 的账户 - 活动中可以看到正在发送的交易,查看详情可以在 Etherscan 查看该交易的详细信息。当交易被打包确认后,即可获得部署后合约的地址 0x5b2a...5a46。
至此,我们就成功地部署了一个以太坊合约。
对于熟练的 Solidity 开发者,可以使用 Truffle 这个 JavaScript 工具通过 JavaScript 脚本全自动部署合约,减少手动操作导致的出错的可能。
四、小结
编写 Solidity 合约后,可以通过 Remix 在线编译、部署;
可以使用 Truffle 完成合约的自动化编译、测试、部署。
区块链 第11.3章 部署合约