前言
这是一篇 在window 下 搭建以太坊 测试服务 的学习笔记
一、安装
1. 首先安装NodeJS(Truffle依赖它):
- 1、新建nodejs的程序根路径为
mkdir /app/software/
cd /app/software/
- 2、下载 打开 http://nodejs.cn/download/ 确认最新包
wget https://npm.taobao.org/mirrors/node/v10.8.0/node-v10.8.0-linux-arm64.tar.xz
- 3、解压
(解压后的文件我这边将名字改为了nodejs,这个地方自己随意,只要在建立软连接的时候写正确就可以)
tar -C nodejs -xvf node-v10.8.0-linux-arm64.tar.xz
确认一下nodejs下bin目录是否有node 和npm文件 4、建立软连接,变为全局
$ ln -s /app/software/nodejs/bin/npm /usr/local/bin/
$ ln -s /app/software/nodejs/bin/node /usr/local/bin/
下载后检查版本
>node -v
配置npm源为国内源(可选,可加快 node 插件下载速度)
>npm config set registry http://registry.npm.taobao.org
2. Truffle
安装
> npm install -g truffle
安装过程自动设置软链接
/usr/bin/truffle -> /usr/lib/node_modules/truffle/build/cli.bundled.js
3. 安装测试环境
测试环境每次启动 都是一组新的 用户,所有的测试合约都要发布,下面3种测试环境,你可以选择三个中任何一个客户端来跟truffle交互.
需要特别说明的是:
所有的测试框架每次启动后,都会在内存中重新生成临时用户,一旦关闭,所有用户以及部署过的合约都会消失.
1) ethereumjs-testrpc
> npm install -g ethereumjs-testrpc
> testrpc
#启动
2) ganache-cli
ganache-cli 是内存测试环境,前身就是testRPC,命令版:
> npm install -g ganache-cli
> ganache-cli
#启动
window cmd 环境用 truffle.cmd xxxx
linux shell 环境用 truffle xxxx
Compile:truffle.cmd compile
(linux:truffle complie
)
Migrate:truffle.cmd migrate
Test contracts:truffle.cmd test
Run linter:npm run lint
Run dev server:npm run dev
Build for production:npm run build
一个是带图形界面的版本,下载地址:
https://github.com/trufflesuite/ganache/releases
3)truffle develop
这个是truffle内置的客户端,跟命令行版本的Ganache基本类似。唯一要注意的是在truffle develop里执行truffle命令的时候需要省略前面的“truffle”,比如“truffle compile”只需要敲“compile”就可以了。
> truffle develop
二、开发
1. 建项目目录,在目录下初始化项目框架
> mkdir 目录名 # 新建目录
> cd 目录 #进入目录
有两种方法初始化框架 init 或者 unbox指令格式如下
> truffle init
#在当前目录下,创建一个空项目
> truffle unbox webpack
#在当前目录下,创建示例项目
主要分为3个部分:
1) contracts目录中包含Solidity合约代码,整个目录被编译,其中Migrations.sol是默认的,必须的,其他就是你自己写的合约代码了。
2) migrations目录中包含合约部署脚本, 整个目录被编译,其中1_initial_migration.js就是用来部署Migrations.sol的,其他的脚本 最好从2开始编号, 会按照顺序依次执行。
3) test目录中存放的是测试用例的代码。
三、编译和部署合约
3.1. 更改truffle.js 文件配置
module.exports = {
networks: {
development: {
host: 'localhost',
port: '7545',
network_id: '*' // Match any network id
}
}
};
这里要注意的是:
Ganache默认运行在8545端口
Ethereumjs-testrpc 默认运行在8545端口 Truffle Develop
默认运行在9545端口
3.2. 编译合约
truffle框架里已经给我们提供了demo代码,我们暂时不用写新的合约,我们直接用demo进行编译和部署。
输入命令:
> truffle.cmd compile
#window下
> truffle compile
#linux下
3.3. 部署合约
部署合约之前,请开启之前下载的以太坊客户端:
Ganache:请打开下载的软件,或者在命令行中输入 > ganache-cli #启动
Ethereumjs-testrpc:在终端输入> testrpc
命令,以出现测试账号为成功,不要关闭,打开新的终端窗口进行下一步。
Truffle Develop:在终端输入 > truffle develop
命令,以出现测试账号为成功,可直接在此窗口进行下一步。
开启客户端之后再输入命令:
> truffle.cmd migrate
#window下
> truffle migrate
#linux下
四、测试网页与合约交互
- 在上面的合约部署成功后,我们就可以在服务器中查看效果了。执行
> npm run dev
- 浏览器打开http://localhost:8080/ 可以看到一个demo 页面
- 你也可以用MetaCoin 浏览器 插件 连接 http://llocalhost:8545, 如果你用的以太坊可视客户端Ganache 或 Truffle Develop的话, Custom RPC 添加 http://localhost:7545 或 http://localhost:9545
五、从源代码构建Docker容器:
1.git下载
> git clone https://github.com/trufflesuite/ganache-cli.git&& cd ganache-cli
> docker build -t trufflesuite/ganache-cli
2. 运行镜像
> docker run -d -p 8545:8545 trufflesuite/ganache-cli:latest
六、附
虽然现在很多教程都是truffle和Ethereumjs-testrpc配合,但truffle官方推荐的是Ganache,所以建议用Ganache,文档会新一点。