搭建以太坊智能合约测试环境

早就想学习区块链相关技术了,可惜因为懒惰一直没有付诸实践,最近随着诸如 God.Game,Fomo3D 等区块链游戏接连暴出安全漏洞,让我坚定了学习智能合约的想法,于是利用周末搭建以太坊智能合约测试环境,原想应该很简单,实际却花了不少精力,记录一下以飨读者。

既然要搭建以太坊智能合约测试环境,那么至少得安装一个合适的以太坊客户端,比如:命令行的 Geth,图形界面得 Mist,对于我这样记忆力欠佳的人而言,总是对命令行工具抱有一丝恐惧感,于是我选择了从 Mist 入手,不过在 Mist 的下载页面,竟然有两种下载链接,分别是 Ethereum Wallet 和 Mist,到底用哪个?实际上哪个都可以!如果一定要说出二者的区别,那么可以打个比方:Mist 相当于 Chrome,而 Ethereum Wallet 则相当于是一个 Wallet 定制版 Chrome。本文选择下载 Ethereum Wallet,当然你要是选择下载 Mist 也完全没有问题,只是注意一些路径可能会有些许的差异。

当我第一次运行 Ethereum Wallet 的时候,便遇到了问题,界面长时间卡在 Connecting… Waiting for blocks… 的状态上,如下图所示:

搭建以太坊智能合约测试环境

解决此问题浪费了我不少时间,其原因在于 Ethereum Wallet 本身依赖 Geth,所以它会从网络上自动下载 Geth,可偏偏中国的网络因为你懂的原因,于是就卡住了。知道了原因,解决方案就显而易见了:翻墙!如果你不方便翻墙,那么可以通过其他途径获得 Geth 的二进制文件,然后放到相应的目录里,以此欺骗一下Ethereum Wallet 不要再自动下载了,以我的 Mac 系统为例,自动下载的 Geth 会被放在目录:

~/Library/Application\ Support/Ethereum\ Wallet/binaries/Geth/unpacked

解决了此问题再运行 Ethereum Wallet 的时候,一切都正常了:

搭建以太坊智能合约测试环境

不过正如你所见,截止本文发稿时,需要同步六百多万个区块,这多半需要几百 G 的硬盘和不菲的时间,对于测试目的的我们来说,完全不可接受,好在 Geth 支持启动开发用的私有网络,以我的 Mac 系统为例:

shell> geth --dev --dev.period 10 --datadir ~/Library/Ethereum

说明:如果 datadir 目录之前不为空,并且没有用,清空它!

其中,「–dev」表示这是一个开发用的私有网络,「–dev.period 10」设置很重要,因为缺省情况下,开发用的私有网络不支持挖矿,只是提交新交易的时候才会产生一个新的块,如果没有新交易,那么之前的交易会一直停留在 0 confirmations 的状态,这无疑不利于调试,有了「–dev.period 10」,可以保证每 10 秒产生一个新的块,既不会太快,也不会太慢,最后设置「–datadir ~/Library/Ethereum」的原因是因为 ~/Library/Ethereum 是一个公共目录,Ethereum Wallet 也会读取这里的数据,我把 Geth 的数据保存在这里,以后操作 Ethereum Wallet 就方便了,再运行 Ethereum Wallet 看看:

搭建以太坊智能合约测试环境

可以看到,上面已经提示现在是 Private-net 私有网络了,同时自动生成了一个有好多好多钱的用户(缺省密码为空),不过正因为钱太多了,数字太大,不利于测试观察,所以我们可以尝试用 ADD ACCOUNT 功能添加一个新账号 ACCOUNT 2,并且从 ACCOUNT 1 转账(SEND)试试:

搭建以太坊智能合约测试环境

至此,一个基本的以太坊智能合约测试环境就搭建好了。我们接下来,可以通过 Ethereum Wallet 来部署(DEPLOY)一个简单的 HelloWorld 智能合约:

搭建以太坊智能合约测试环境

用 Solidity 写一个最简版本的 Hello World 程序,源代码如下:

pragma solidity ^0.4.18;

contract HelloWorld {

function run() pure public returns(string) {

return "hello, world";

}

}

部署成功后,我们在 Copy address 里能拿到地址,在 Show Interface 里能查到 abi,接下来让我们可以试着在控制台(geth attach)里执行合约看看:

搭建以太坊智能合约测试环境

是不是有点小兴奋!熟悉了智能合约的基本套路后,我们可以试试更高级的工具,比如 Remix IDE,Remix App,如此就算是入门智能合约开发了。


分享到:


相關文章: