以太坊開發(一)——Truffle和Ganache

Truffle是目前最流行的以太坊開發框架,採用JavaScript編寫,支援智慧合約的編譯、部署和測試。

一、安裝Truffle
1. 首先安裝Truffle依賴的NodeJS:

curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install npm

    配置npm源為國內源(可選,可加快下載速度):

sudo npm config set registry http://registry.npm.taobao.org 

2. 安裝Truffle

sudo npm install -g truffle

二、建立工程
如果想建立一個空工程,可以用下面的命令:

truffle init

在早期版本的truffle中,剛剛建立的工程中還會包含metacoin的示例程式碼。新版本truffle引入了box的概念,所有的示例程式碼都以box的形式提供。因此我們不需要用truffle init命令,用下面的命令就可以直接下載metacoin的示例程式碼:

truffle unbox metacoin

程式碼結構如下圖所示:

主要分為3個部分:

●  contracts目錄中包含Solidity合約程式碼,其中Migrations.sol是必須的,其他就是你自己寫的合約程式碼了。

●  migrations目錄中包含合約部署指令碼,其中1_initial_migration.js就是用來部署Migrations.sol的,其他的指令碼會按照順序依次執行。

●  test目錄中就是測試程式碼了。

三、安裝以太坊客戶端

智慧合約必須要部署到鏈上進行測試。可以選擇部署到一些公共的測試鏈比如Rinkeby或者Ropsten上,缺點是部署和測試時間比較長,而且需要花費一定的時間賺取假代幣防止out of gas。

還有一種方式就是部署到私鏈上,Truffle官方推薦使用以下兩種客戶端:

●  Ganache

●  truffle develop

1. Ganache

Ganache這個名字比較陌生,但是它的前身testRPC卻是大名鼎鼎,網上的很多老文章裡都是用testRPC。Ganache是奶油巧克力的意思,據說是很久之前有個學徒做巧克力的放多了牛奶,師傅正要罵他,結果一嘗發現味道還真不錯,於是一種新的巧克力就誕生了~ Truffle是松露巧克力,一般是以Ganache為核,然後上面撒上可可粉,所以這兩個產品的名字還是很貼切的。
Ganache現在有兩個版本,一個是帶圖形介面的版本,下載地址:
https://github.com/trufflesuite/ganache/releases

這些可執行檔案的字尾都比較奇葩,參見下面的對應關係:

●  Windows: Ganache-*.appx

●  Mac: Ganache-*.dmg

●  Linux: Ganache-*.AppImage

還有一個就是命令列版本了,下載方法:

sudo npm install -g ganache-cli

具體的命令列引數配置參見github:
https://github.com/trufflesuite/ganache-cli

本文采用帶圖形介面的Ganache版本。

2. truffle develop
這個是truffle內建的客戶端,跟命令列版本的Ganache基本類似。唯一要注意的是在truffle develop裡執行truffle命令的時候需要省略前面的“truffle”,比如“truffle compile”只需要敲“compile”就可以了。

四、編譯和部署合約
Ganache預設執行在7545埠,可以在介面右上方的“設定”裡進行更改。執行後預設建立10個賬號,每個賬號裡有100ETH的餘額。
要部署到鏈上,需要把IP、埠、網路ID告訴truffle。修改truffle.js:

module.exports = {
networks: {
development: {
host: 'localhost',
port: '7545',
network_id: '*' // Match any network id
}
}
};

然用下面兩條命令編譯和部署:

truffle compile
truffle migrate

五、測試合約
metacoin的示例程式碼裡已經把測試程式碼寫好了,直接用下面的命令執行就可以了:

truffle test

去Ganache上看一下執行結果:

●  Accounts標籤:第一個賬戶裡ETH略有減少,因為交易消耗了gas

●  Blocks標籤:Ganache是自動挖礦,生成了6個新區塊,每個區塊裡有一個交易

●  Transactions標籤:有6筆新交易,可以點開看交易詳情

●  Logs標籤:顯示交易和挖礦日誌

下一篇分析一下這個最簡單例子裡的合約程式碼和部署、測試指令碼。