1. 程式人生 > >區塊鏈開發(六)truffle使用入門和testrpc安裝

區塊鏈開發(六)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,執行成功,顯示結果如下圖。
這裡寫圖片描述