搭建以太坊智能合約測試環境

早就想學習區塊鏈相關技術了,可惜因為懶惰一直沒有付諸實踐,最近隨著諸如 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,如此就算是入門智能合約開發了。


分享到:


相關文章: