欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

七、区块链:truffle使用入门和testrpc安装

程序员文章站 2024-02-29 13:01:52
...


在上篇博文中我们已经成功安装了truffle及所需相关环境,此篇就简单介绍一些truffle的使用及目录结构等。

简介truffle和testrpc

truffle是本地的用来编译、部署智能合约的工具。testrpc不同于geth,geth是真正的以太坊环境,testrpc是在本地使用内存模拟的一个以太坊环境,对于开发调试来说,更为方便快捷,当合约在testrpc中测试通过后,再部署到geth中去。所以可以说truffle和testrpc就是两大杀器。

项目初始化

创建一个目录,并在目录下面新建项目:

$ mkdir truffleProject
$ cd truffleProject/
$ truffle init
  • 1
  • 2
  • 3

执行以上命令之后,truffle会默认生成一个MetaCoin的demo。现在我们就来了解一下truffle的架构。
七、区块链:truffle使用入门和testrpc安装

文件目录

每个目录的作用如下:

.
├── 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

TestRPC安装

安装Ethereum客户端来支持JSON RPC API调用开发环境,推荐使用EthereumJS。
安装命令:

sudo npm install -g ethereumjs-testrpc
  • 1

这里的安装如果无法下载,请参考上一篇博客中安装truffle中使用淘宝镜像的方法。此步安装遇到很多问题,也尝试了各种方法,比如gcc依赖的安装升级,Python的安装,npm的升级,git的配置,还有node版本是否影响。虽然最终把问题给解决了,但修改的地方太多具体什么原因导致安装过程中出现那么多问题,还有待大家去尝试分析。

在执行以上命令之后,只是把ethereumjs-testrpc安装在nodejs的以下路径:

/home/zhuzs/app/nodejs/node-v6.9.1/lib/node_modules/ethereumjs-testrpc
  • 1

还行进行软连接的配置:

ln -s /home/zhuzs/app/nodejs/node-v6.9.1/lib/node_modules/ethereumjs-testrpc/bin/testrpc /usr/local/bin/testrpc
  • 1

执行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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

从命令结果来看,testrpc已经安装成功,但是在执行的过程中有配置的问题,导致出现异常。

为了解决上面的异常尝试了多种方案,也安装了很多依赖,下面总结一下解决的基本方法。
(1)通过异常并检查依赖,发现缺少scrypt依赖。于是,先安装:

sudo apt install scrypt
  • 1

(2)安装之后发现依然有异常出现,通过vi命令查看编辑中提示的文件:

/home/zhuzs/app/nodejs/node-v6.9.1/lib/node_modules/ethereumjs-testrpc/node_modules/scrypt/index.js
  • 1

文件中有以下配置:

"use strict";

var scryptNative = require("./build/Release/scrypt")
  , Crypto = require("crypto")
  , Os = require("os");
  • 1
  • 2
  • 3
  • 4
  • 5

然后根据配置,在testrpc的安装目录下并没有“./build/Releses/scrypt”目录:

/home/zhuzs/app/nodejs/node-v6.9.1/lib/node_modules/ethereumjs-testrpc/node_modules
  • 1

然而在同级目录下却有scrypt程序。
于是将上面配置文件中的:

./build/Release/scrypt
  • 1

改为:

scrypt
  • 1

重新执行testrpc,执行成功,显示结果如下图。
七、区块链:truffle使用入门和testrpc安装