使用Truffle作smart contract測試及debug - I 部署
今天來介紹一下truffle。
版本 - truffle 4.1.11
在我一開始踏入這個圈子的時候,是truffle是出testrpc這個工具,當時google了一下,有人說不好安裝設定,所以就選用了parity。parity對於初期開發還不錯用,有圖形化的介面,寫完的code直接部署,呼叫function有下拉式選單可以直接使用,event log也很清楚顯示。其實也滿推的,不過一開始不懂的時候,genesis 設定檔也是搞了一陣子(不過現在也沒多懂 XD)。
那parity既然這麼好用,幹嘛用truffle?truffle後來出了Ganache,一個圖形化的介面,會有transaction的列表,裡面會有input data (我覺得可惜的是沒有output event),還有log,可以看實際呼叫了哪個rpc call等一些資訊。但重要的安裝完後,點兩下直接就可以用,不需複雜的設定檔,對於單純只要開發smart contract的人來說,才是最方便的。
但是!這些都不是重點,重點是truffle可以跑test cases跟逐步debug。對!逐步,我跟同事分享,同事眼睛都亮起來了,因為在寫smart contract在debug部分其實挺麻煩的,雖然Remix也可以做到debug,但是class越多source file越多,在Remix上需要一個一個copy過去,就沒這麼方便。此外,寫test case這部分對公司產品開發的流程上有很大的幫助,不用像我之前還傻傻的用web3j自己寫testing framework.....
這偏廢話有點多,接下來就介紹怎麼寫test cases跟debug(安裝就不用講了吧,下載下來點兩下,下一步下一步下一步....我是用Windows XD),細節可以參考這篇,官方說得滿清楚的,懶得看英文的可以繼續往下看
首先,在Windows上不要使用Windows的cmd,會有名稱問題,我是用Git的bash shell,然後下
這邊有個要注意的地方,官網上沒寫到,就是要指定 contracts_build_directory:,不然build的時候會出錯。接下來,把你的smart contract放到contracts的目錄下,注意喔! 放到目錄下的contract都會被build,然後在migrations的目錄下建立2_deploy_contracts.js,內容如下
再來,你就可以部署你的contract了。首先,在shell上輸入
truffle會在剛剛指定的地方產生檔案,依照剛剛的設定就是在build/contracts下面,然後!要把build這整個目錄複製到migrations下面,不然在migrate的時候會出現找不到檔案的錯誤,接著輸入
truffle就會自動幫你部署了,但是! 假設你改了code要重新部署怎麼辦?! compile完在做一次migrate? 這樣會有錯誤,這個時候要下
部署的部分,就大概這樣。接著就是測試了!篇幅好像有點長,就下篇再續!
版本 - truffle 4.1.11
在我一開始踏入這個圈子的時候,是truffle是出testrpc這個工具,當時google了一下,有人說不好安裝設定,所以就選用了parity。parity對於初期開發還不錯用,有圖形化的介面,寫完的code直接部署,呼叫function有下拉式選單可以直接使用,event log也很清楚顯示。其實也滿推的,不過一開始不懂的時候,genesis 設定檔也是搞了一陣子(不過現在也沒多懂 XD)。
那parity既然這麼好用,幹嘛用truffle?truffle後來出了Ganache,一個圖形化的介面,會有transaction的列表,裡面會有input data (我覺得可惜的是沒有output event),還有log,可以看實際呼叫了哪個rpc call等一些資訊。但重要的安裝完後,點兩下直接就可以用,不需複雜的設定檔,對於單純只要開發smart contract的人來說,才是最方便的。
但是!這些都不是重點,重點是truffle可以跑test cases跟逐步debug。對!逐步,我跟同事分享,同事眼睛都亮起來了,因為在寫smart contract在debug部分其實挺麻煩的,雖然Remix也可以做到debug,但是class越多source file越多,在Remix上需要一個一個copy過去,就沒這麼方便。此外,寫test case這部分對公司產品開發的流程上有很大的幫助,不用像我之前還傻傻的用web3j自己寫testing framework.....
這偏廢話有點多,接下來就介紹怎麼寫test cases跟debug(安裝就不用講了吧,下載下來點兩下,下一步下一步下一步....我是用Windows XD),細節可以參考這篇,官方說得滿清楚的,懶得看英文的可以繼續往下看
首先,在Windows上不要使用Windows的cmd,會有名稱問題,我是用Git的bash shell,然後下
truffle init會在目錄下長出這些東西,其中Mirgrations.sol跟1_initial_migration.js都不要去動它,truffle內部會使用這兩個檔案
contracts - Migrations.sol migrations/ - 1_initial_migration.js test/ truffle.js truffle-config.js然後更改truffle.js檔案
module.exports = { contracts_build_directory: "./build/contracts", networks: { development: { host: "192.168.1.103", port: 7545, network_id: "5777" } } };
這邊有個要注意的地方,官網上沒寫到,就是要指定 contracts_build_directory:,不然build的時候會出錯。接下來,把你的smart contract放到contracts的目錄下,注意喔! 放到目錄下的contract都會被build,然後在migrations的目錄下建立2_deploy_contracts.js,內容如下
我這邊是實作ERC777 token的程式,下面的部分是兩個範例,一個是需要另一個contract 的地址當作某一個contract constructor的input。另一個是如果需要系統建立好的帳號當作你的input。var token = artifacts.require("Token777"); var receiver = artifacts.require("TokenReceiver"); module.exports = function(deployer) { deployer.deploy(token, "NAME", "SYM", 10000000000000000000000, 1000); deployer.deploy(receiver, true); // if you need to input other contract's address to another contract // deployer.deploy(Factory).then(function(){ // return deployer.deploy(Tokendeployer, Factory.address) // }); }; // if you need to input accounts in your contract constructor // module.exports = (deployer, network, accounts) => { // const userAddress = accounts[3]; // deployer.deploy(BaconMaker, userAddress) // }
再來,你就可以部署你的contract了。首先,在shell上輸入
$ truffle compile
truffle會在剛剛指定的地方產生檔案,依照剛剛的設定就是在build/contracts下面,然後!要把build這整個目錄複製到migrations下面,不然在migrate的時候會出現找不到檔案的錯誤,接著輸入
$ truffle migrate
truffle就會自動幫你部署了,但是! 假設你改了code要重新部署怎麼辦?! compile完在做一次migrate? 這樣會有錯誤,這個時候要下
$ truffle migrate --reset
部署的部分,就大概這樣。接著就是測試了!篇幅好像有點長,就下篇再續!
頭推
回覆刪除