區塊鏈開發(六)truffle使用入門和testrpc安裝
在上篇博文中我們已經成功安裝了truffle及所需相關環境,此篇就簡單介紹一些truffle的使用及目錄結構等。
簡介truffle和testrpc
truffle是本地的用來編譯、部署智慧合約的工具。testrpc不同於geth,geth是真正的以太坊環境,testrpc是在本地使用記憶體模擬的一個以太坊環境,對於開發除錯來說,更為方便快捷,當合約在testrpc中測試通過後,再部署到geth中去。所以可以說truffle和testrpc就是兩大殺器。
專案初始化
建立一個目錄,並在目錄下面新建專案:
$ mkdir truffleProject
$ cd truffleProject/
$ truffle init
執行以上命令之後,truffle會預設生成一個MetaCoin的demo。現在我們就來了解一下truffle的架構。
檔案目錄
每個目錄的作用如下:
.
├── app
│ ├── images 前端介面用到的圖片
│ ├── index.html 前端介面用到的頁面
│ ├── javascripts 前端介面用到的javascript
│ │ └── app.js
│ └── stylesheets 前端介面用到的css檔案
│ └── app.css
├── contracts 智慧合約檔案
│ ├── ConvertLib.sol
│ ├── MetaCoin.sol
│ └── Migrations.sol
├── migrations 部署用到的指令碼
│ ├── 1_initial_migration.js
│ └── 2_deploy_contracts.js
├── test 編寫的測試
│ └── metacoin.js
└── truffle.js
TestRPC安裝
安裝Ethereum客戶端來支援JSON RPC API呼叫開發環境,推薦使用EthereumJS。
安裝命令:
sudo npm install -g ethereumjs-testrpc
這裡的安裝如果無法下載,請參考上一篇部落格中安裝truffle中使用淘寶映象的方法。此步安裝遇到很多問題,也嘗試了各種方法,比如gcc依賴的安裝升級,Python的安裝,npm的升級,git的配置,還有node版本是否影響。雖然最終把問題給解決了,但修改的地方太多具體什麼原因導致安裝過程中出現那麼多問題,還有待大家去嘗試分析。
在執行以上命令之後,只是把ethereumjs-testrpc安裝在nodejs的以下路徑:
/home/zhuzs/app/nodejs/node-v6.9.1/lib/node_modules/ethereumjs-testrpc
還行進行軟連線的配置:
ln -s /home/zhuzs/app/nodejs/node-v6.9.1/lib/node_modules/ethereumjs-testrpc/bin/testrpc /usr/local/bin/testrpc
執行testrpc進行驗證:
$ testrpc
Secp256k1 bindings are not compiled. Pure JS implementation will be used.
/home/zhuzs/app/nodejs/node-v6.9.1/lib/node_modules/ethereumjs-testrpc/node_modules/solc/soljson.js:1
(function (exports, require, module, __filename, __dirname) { var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);v
Error: Cannot find module './build/Release/scrypt'
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/home/zhuzs/app/nodejs/node-v6.9.1/lib/node_modules/ethereumjs-testrpc/node_modules/scrypt/index.js:3:20)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
從命令結果來看,testrpc已經安裝成功,但是在執行的過程中有配置的問題,導致出現異常。
為了解決上面的異常嘗試了多種方案,也安裝了很多依賴,下面總結一下解決的基本方法。
(1)通過異常並檢查依賴,發現缺少scrypt依賴。於是,先安裝:
sudo apt install scrypt
(2)安裝之後發現依然有異常出現,通過vi命令檢視編輯中提示的檔案:
/home/zhuzs/app/nodejs/node-v6.9.1/lib/node_modules/ethereumjs-testrpc/node_modules/scrypt/index.js
檔案中有以下配置:
"use strict";
var scryptNative = require("./build/Release/scrypt")
, Crypto = require("crypto")
, Os = require("os");
然後根據配置,在testrpc的安裝目錄下並沒有“./build/Releses/scrypt”目錄:
/home/zhuzs/app/nodejs/node-v6.9.1/lib/node_modules/ethereumjs-testrpc/node_modules
然而在同級目錄下卻有scrypt程式。
於是將上面配置檔案中的:
./build/Release/scrypt
改為:
scrypt
重新執行testrpc,執行成功,顯示結果如下圖。