Truffle的基础使用介绍

目录

  • truffle 命令行帮助
  • 初始化工程
  • 使用 Debug 功能
  • Zeppelin Solutions
  • Pet Shop 示例
  • 关于 BlockChain
  • Quorum 建立企业私有区块链网络
  • 使用自动化工具构建前端项目
  • 创建一个命令行程序

相关链接

官方文档: http://truffleframework.com/docs/

代码模板: http://truffleframework.com/boxes/

一些更新新闻: http://truffleframework.com/blog/ 建议偶尔关注一下

Ganache: http://truffleframework.com/ganache

Drizzle: http://truffleframework.com/docs/drizzle/getting-started

truffle 命令行帮助

1
truffle --help
Truffle v4.1.3 - a development framework for Ethereum

Usage: truffle <command> [options]

Commands:
  init        初始化新的 Ethereum 项目
  compile     编译 Contract 源码
  migrate     运行 migrations 将 Contract 部署到 Eth, migrate --reset会将部署重置, 消除执行某些语句的修改
  deploy      migrate 的别名
  build       Execute build pipeline (if configuration present)
  test        执行test文件夹下的JS和Sol测试
  debug txID  交互式调试区块链
  opcode      Print the compiled opcodes for a given contract
  console     Run a console with contract abstractions and commands available
  develop     Open a console with a local development blockchain
  create      Helper to create new contracts, migrations and tests
  install     安装一个 Eth 包
  publish     发布一个 Eth 包
  networks    展示部署的 Contract 列表
  watch       监听文件自动重建部署
  serve       Serve the build directory on localhost and watch for changes
  exec        Execute a JS module within this Truffle environment
  unbox       下载一个预编译的Truffle工程
  version     当前版本

See more at http://truffleframework.com/docs

执行部分命令的时候提示:

Could not find suitable configuration file.

在含有 truffle.js 配置文件的文件夹目录下执行即可.

初始化工程

1
2
3
4
5
6
# 初始化项目目录结构
truffle init

# 个人由于使用webstorm, 进行如下额外操作
npm init
eslint --init

为了做版本规划, 编写 .gitignore 文件:

1
2
3
node_modules
.idea
*.log

为了解除经常拼写错误, 编写 Makefile 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
main: compile migrate


c:
truffle compile

compile: c


m:
truffle migrate

migrate: m


t:
truffle test
truffle develop

test: t



install:
npm install -g yarn
npm install -g truffle
npm install -g solc
npm install -g ganache-cli
npm install -g eslint

为了连接本地测试环境, 将 truffle.js 文件内容修改成:

1
2
3
4
5
6
7
8
9
module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// to customize your Truffle configuration!
networks: {
host: '127.0.0.1',
port: 7545,
network_id: '*'
}
};

使用 Debug 功能

参考官方文档: http://truffleframework.com/tutorials/debugging-a-smart-contract

编写好 sol, js 文件后, 执行 make c 命令(compile) 进行编译, 然后运行测试环境 make t (test + develop) 进入命令行交互式模式.

交互式模式下, 执行 migrate 进行测试环境的部署, 运行某 Contract 中的方法, 之后会打印交互式结果, 记录 tx/transactionHash 字段的内容.

另一个 bash shell 控制台执行 truffle develop --log 监听相对详细的执行过程内容.

回到交互式模式控制台下, 执行 debug [tx/transactionHash], 其中 tx/transactionHash 为前面获取到的 ID, 0x… 开头的字符串.

然后就开始了该方法的调试, 使用 n 单步运行…

Zeppelin Solutions

参考官方文档: http://truffleframework.com/tutorials/robust-smart-contracts-with-openzeppelin

文档介绍Zeppelin Solutions主要功能就是将程序发往 Ethereum 前进行审计, 免于出错浪费 Gas. https://openzeppelin.org/ 就是一个用来完成目标的工具集.

1
2
truffle unbox tutorialtoken
yarn add zeppelin-solidity

使用 make 即可部署成功, npm run dev 运行示例, 如果有报错可能是因为 jquery.min.js 无法从 google 服务器下载, 只需要下载一个到本地, 并且修改 index.html 中的路径即可.

Pet Shop 示例

参考官方文档: http://truffleframework.com/tutorials/pet-shop

安装依赖

  1. 安装 Ganache 以太坊模拟器.
  2. 浏览器安装 MetaMask 插件, https://metamask.io/ .
  3. 下载本代码 https://github.com/NICKNAME/pet-store.
  4. 执行依赖安装 npm install 或者 yarn install
  5. 安装执行环境
1
2
3
4
yarn global add truffle
yarn global add solc
yarn global add ganache-cli
yarn global add eslint

启动项目

  1. 修改配置文件 truffle.js, 对应 ganache 的地址, 一般情况默认是对应的
  2. 启动 Ganache, 默认监听地址为 http://127.0.0.1:7545
  3. 执行代码编译
1
make && make t
  1. 运行程序
1
npm run dev
  1. 浏览器运行 http://localhost:3000

开启 MetaMask, 点击 Import Existing DEN, 填入 Ganache 中的 MNEMONIC 配置, 导入 Ganache 中的第一个账号.

  1. 试着玩儿一下吧…

关于 BlockChain

参考官方文档: http://truffleframework.com/tutorials/ethereum-overview

一个分布式数据库, 完全去中心化, 极高容错, 节点独立验证, 用于数据的交互存储.

挖矿 vs 矿工: 就是节点争夺记账权, 优先者有奖励; 矿工就是所有的计算单元.

哈希:

一系列交易产生区块(类似于数据库分页查询), 区块数据经过一致性单方向算法得到一个定长字符串, 称之为哈希. 如果原数据被更改, 哈希结果也随之更改, 而且用哈希值无法反向得出原数据, 这也就可以用哈希值简单的替代原数据. 未验证的数据经过相同算法得到的哈希值与要验证的哈希值比较, 如果相同说明数据有效.

超过一半的矿工验证过交易后, 认为该网络达到一致性, 区块被永远不可更改的写入链表, 并且向全部节点广播同步数据.

Ethereum: 一个可编程的受信任的区块链环境. 通过以太坊虚拟机(EVM)实现代码(smart contract)的解析.

智能合约: smart contract, 是一段代码, 一般可以由 Solidity 编写. 可以处理并存储以太币和自定义数据,

参考: Solidity

以太坊网络:

MainNet 主网络:8545, 数据公开

本地测试(Ganache:7545, truffle-develop:9545)网络, 单点, 重启即丢失数据.

公网测试(Ropsten, Ropsten, Rinkeby)

私有企业网(Quorum): 数据私有, 存储敏感数据, 更小的数据包实现高吞吐.

参考: Ganache, Quorum

DApps: distributed applications, 分布式应用

以传统网页形式提供服务, 架设在传统 web 服务器或者去中心化文件服务 Swarm 或 IPFS 上.

参考: Swarm, IPFS,

脑洞大开的方向: 记录存储, 金融, 供应链, 不动产, 交易市场…

Quorum 建立企业私有区块链网络

参考官方文档: http://truffleframework.com/tutorials/building-dapps-for-quorum-private-enterprise-blockchains

Quorum 在 Ethereum 基础之上, 增加创建私有网络的功能, 参与者也增加权限限制, 并且提供交易数据隐私功能.

Truffle Ethereum
Quorum 简介 Quorum 文档
Solidity

集成环境用到的依赖: VirtualBox, Vagrant 和 Git

社区: https://gitter.im/ConsenSys/truffle

使用自动化工具构建前端项目

参考官方文档: http://truffleframework.com/tutorials/building-testing-frontend-app-truffle-3

webpack
Grunt
Gulp

Webpack Docker Travis CI 自动构建例子

创建一个命令行程序

参考官方文档: http://truffleframework.com/tutorials/creating-a-cli-with-truffle-3

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.