Ganache 与 Truffle 介绍

Ganache

主要功能为在本地启动一个以太坊私有网络,并在一开始,创建10个account,供开发者使用。

下载开箱即用 ganache

Truffle

官网介绍:以太坊智能合约开发、测试的一把瑞士军刀。

安装

npm install -g truffle

教程系列

运行完以下四个教程,基本能掌握 truffle 的大致用法(此文可不看)。

  1. VARIABLE INSPECTION: GOING DEEPER WITH THE TRUFFLE SOLIDITY DEBUGGER
  2. DEBUGGING A SMART CONTRACT
  3. BUILDING ROBUST SMART CONTRACTS WITH OPENZEPPELIN
  4. ETHEREUM PET SHOP

基本用法

truffle init 通过脚本工具创建一个初始化,里面包含

  1. contracts
  2. migrations
  3. tests
  4. truffle.js

其中 truffle.js 中配置项,用于连接对应的网络。例如 Ganache

1
2
3
4
5
6
7
8
9
10
11
module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// for more about customizing your Truffle configuration!
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "*" // Match any network id
}
}
};

contracts 目录下编写智能合约。

migrations 目录下对应文件用于部署智能合约到区块链上,以 1、2、3… 等序号开头。

test 目录下,用于编写测试。支持 智能合约.sol的测试,以及支持使用 javascript 进行测试(使用 mochachai)。

truffle boxes

truffle init 构建一个空项目。而 truffle unbox <boxname> 用于从远程仓库拉一个box下来做初始化。

当前已有的 box 列表见:TRUFFLE BOXES

truffle compile

truffle compile 编译 contracts 目录下 .sol 文件,在 build/contracts 目录下生成对应 artifacts JSON 文件。

如果需要重新编译,使用 truffle compile --all

其他内容具体见:COMPILING CONTRACTS

truffle migrate

truffle migrate 按照 migrations 下的序号命名顺序,进行调用并部署。

此部分功能,主要使用 truffle-contract 工具实现。

一般形态为:

1
2
3
4
5
var Migrations = artifacts.require("./Migrations.sol");

module.exports = function(deployer) {
deployer.deploy(Migrations);
};

artifactstruffle-contract 提供的功能,require 需要是 contracts/<name>.sol 文件中同名的 name

而如果同一个.sol文件中,定义了两个 contract,可通过 require(<contract-name>) 的形式来引入。

function 除了接收 deployer 之外,还接收 network 参数,deployer.deploy 也支持其他的参数形式传递。

具体见:RUNNING MIGRATIONS

truffle test

详见:

  1. TESTING YOUR CONTRACTS
  2. WRITING TESTS IN JAVASCRIPT
  3. WRITING TESTS IN SOLIDITY

packages

import 优先引用 .sol 模块(同名情况下)

contract packages

ethpm

truffle install <eth-package-name>

包列表(界面较为简陋,基本没什么人提交,时间戳还是错的,文件存在 ipfs 上)—— Ethereum Package Management

更多内容见:PACKAGE MANAGEMENT VIA ETHPM

npm

一些example contracts 可直接拿来使用:example-truffle-library —— 包已经被移除了 😊

Debug

  1. 教程 VARIABLE INSPECTION: GOING DEEPER WITH THE TRUFFLE SOLIDITY DEBUGGER
  2. 文档 DEBUGGING YOUR CONTRACTS

Console 与 debug

truffle consoletruffle develop 都是进入 truffle 环境,相应的 compile 等命令,只需要敲一个 compile 即可,不需要 truffle compile

另外一些高级选项,如在写、调试智能合约,如果有需要,可以再参考配置与更多参数选项 —— 见 ADVANCED 部分。CONFIGURATION

其他

  1. truffle-hdwallet-provider 通过助记词构建一个 web3 provider。
  2. openzeppelin-solidity 已存在的、安全的智能合约通用代码,例如 SafeMath 等,降低出问题的风险。
  3. DRIZZLE 前端开发Dapp的工具