原文地址:石匠的blognode
truffle是一個基於Javascript開發的一套智能合約開發框架,使用Solidity語言編寫合約。truffle有一套自動的項目構建機制,集成了開發,測試和部署的各個流程細節,不用開發人員關注。truffle使用說明.python
testrpc是基於pyethereum,能夠快速的搭建一個模擬以太坊的測試網絡,而且預製了若干存有代幣的帳號,能夠直接使用。不像geth是一個真正的以太網網絡,testrpc在內存中模擬了以太坊網絡,運行速度很是快,很適合作智能合約的開發和測試,待測試完整後再上geth會比較高效。webpack
預期經過truffle和testrpc搭建一個只能合約的開發測試環境,部署官方的測試合約metacoin進行驗證和後續的測試學習。git
truffle使用npm安裝,因此在mac上先安裝npm:github
brew install npm
而後依次安裝truffle和testrpcweb
npm install -g truffle npm install -g ethereumjs-testrpc
truffle安裝好之後,準備安裝默認的metacoin作測試。npm
我當前用的最新版本是:vim
Truffle v4.1.11 (core: 4.1.11) Solidity v0.4.24 (solc-js)
按照以前的老版本truffle使用流程進行搭建和部署(好比這裏介紹的),大概步驟以下:api
1.創建一個獨立的目錄 2.運行truffle init建立默認的合約項目 3.運行truffle compile編譯合約項目 4.運行testrpc 5.運行truffle deploy部署合約到testrpc 6.運行truffle serve啓動服務,在localhost:8080啓動web服務 7.瀏覽器打開localhost:8080,就出現了metacoin的主頁
按照以上步驟,出現了各類問題,好比:瀏覽器
truffle deploy運行報錯:
No network specified. Cannot determine current network.
解決辦法是須要再truffle.js中設置網絡參數以下:
module.exports = { networks: { development: { host: "localhost", port: 8545, network_id: "*" // Match any network id } } };
truffle serve運行報錯:
TypeError: fsevents is not a constructor
最後再github的官方issue裏面找到了一種解決辦法,就是強行修改js代碼,不適用useFsEvents參數,以下:
vim /usr/local/lib/node_modules/truffle/build/cli.bundled.js // Enable fsevents on OS X when polling isn't explicitly enabled. //if (undef('useFsEvents')) opts.useFsEvents = !opts.usePolling; // If we can't use fsevents, ensure the options reflect it's disabled. //if (!FsEventsHandler.canUse()) opts.useFsEvents = false; opts.useFsEvents = false;
採用truffle serve啓動後,原本應該是要在localhost:8080看到metacoin的範例主頁的,可是訪問後,只能獲得:
Cannot get /
我當前mac使用的truffle版本是Truffle v4.1.11,解決問題過程當中,發現了線索,metacoin的項目可使用webpack來安裝:
$truffle unbox webpack
以上命令運行成功後,能夠看到返回結果:
$truffle unbox webpack Downloading... Unpacking... Setting up... Unbox successful. Sweet! Commands: Compile: truffle compile Migrate: truffle migrate Test contracts: truffle test Run linter: npm run lint Run dev server: npm run dev Build for production: npm run build
從Commands裏面能夠看到,當前正確的命令是什麼,總結以前的操做流程,正確的步驟以下:
1.創建一個獨立的目錄metacoin 2.運行truffle unbox webpack下載合約項目 3.運行truffle compile編譯合約項目(爲提升效率,默認只編譯修改過的合約文件, 添加"--all"選項,能夠強制編譯全部文件) 4.運行testrpc(新建一個獨立窗口執行) 5.修改truffe.js文件,設置testrpc的地址:localhost和8545 6.運行truffle migrate部署合約到testrpc(此時能夠再運行testrpc的窗口看到有日誌出現) 6.運行npm run dev啓動服務,在localhost:8080啓動web服務 7.瀏覽器打開localhost:8080,就出現了metacoin的主頁
出現的metcoin主頁是這樣的:
到了這裏,metacoin的環境就搭建起來了,剩下的能夠繼續對智能合約進行修改,測試和驗證。
testrpc是python開發,使用pip能夠很方便的安裝和自動處理依賴關係。testrpc項目地址在這裏。也能夠經過testrpc的官方向導,單獨安裝。
pip install eth-testrpc
安裝的時候遇到如下問題,不管是sudo與否都過不去:
error: [Errno 1] Operation not permitted: '/System/Library/Frameworks/Python.framework/Versions/2.7/LICENSE'
google後發現是系統版本問題(這裏),個人mac是10.13.2 High Sierra版本,而mac從10.11.x(EI Capitan)就引入了SIP機制(System Integrity Protection),運行時會對系統的完整性作保護,不容許改變系統目錄,因此須要關掉這個機制,關閉方法:
1.重啓電腦,按住Command+R(直到出現蘋果標誌)進入Recovery Mode(恢復模式) 2.左上角菜單裏找到實用工具->終端 3.輸入csrutil disable回車 4.重啓Mac (若是想從新啓動SIP機制重複上述步驟改用csrutil enable便可)
解決問題後,從新pip安裝,成功後便可使用testrpc-py命令來使用。