编译、测试工具安装¶
我们来学习一下Truffle这个进阶工具。Truffle [1] 在以太坊的开发环境里扮演了举足轻重的角色,作为一个基于JavaScript的Solidity开发框架,Truffle最大特色就是集成了开发与测试一条龙的服务。它同时是一个开发环境、测试框架,也是一个资产管道。它功能强大到让开发者可以不用离开Truffle 命令行即可执行一系列的编译与测试工作。而且它还可以配置对接的以太坊网络,让开发者灵活地选择在各个测试网络之前来回切换。Truffle 拥有的特性有。
- 内置合约编译、链接、部署管理功能。
- 对合约可以进行自动化测试。
- 同时支持公有链、私有链以及测试链,轻松调整测试环境。
- 完全基于JavaScript编写的项目和API,易于上手。
- 基于NPM包管理器管理项目,便于添加其他Javascript依赖。
- 命令行集成度高,方便放置在服务器上做持续集成。
除此之外,Truffle还内置了一个默认的测试底层网络实现 Ganache。Ganache 原名 Test-RPC,是以太坊开源项目中采用JavaScript编写的模拟区块链运行的节点。它本身并不联网产生区块,而是一个测试环境中的高度仿真模拟器。它的Web3命令支持丰富,紧跟社区的最新提案和开发进度,因为没有实际挖矿(仅仅模拟挖矿行为),所以它的运行速度是惊人的,非常利于测试环境下的高速使用,不需要等实际区块链的出块时间间隔。下面是 Ganache 的运行界面。
Truffle的安装¶
通过 npm 管理器我们可以非常轻松地获取Truffle。 Truffle与 Ganache一起安装在全局。安装的前提是,计算机需要 Node.js 高于8.3.0以上的版本。
我们通过如下命令行确认Node.js 的版本:
node --version
v10.9.0
通过如下命令执行最新稳定版 Truffle 的安装:
npm install –g truffle
truffle
Truffle v4.1.13 - a development framework for Ethereum
Usage: truffle <command> [options]
Commands:
init Initialize new and empty Ethereum project
compile Compile contract source files
migrate Run migrations to deploy contracts
deploy (alias for migrate)
build Execute build pipeline (if configuration present)
test Run JavaScript and Solidity tests
debug Interactively debug any transaction on the blockchain (experimental)
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 Install a package from the Ethereum Package Registry
publish Publish a package to the Ethereum Package Registry
networks Show addresses for deployed contracts on each network
watch Watch filesystem for changes and rebuild the project automatically
serve Serve the build directory on localhost and watch for changes
exec Execute a JS module within this Truffle environment
unbox Download a Truffle Box, a pre-built Truffle project
version Show version number and exit
我们确认安装的Truffle版本是v4.1.13。值得注意的是,Truffle 在npm安装过程中已经被安装到了全局,而非一个项目中,所以我们可以在控制台非常轻松地直接键入truffle命令来启动Truffle。Truffle相关的使用命令如下表所示,我们最常用的是compile、test两个命令。
子命令 | 解释 |
init | 初始化一个项目,可从模板初始化 |
compile | 编译一个智能合约项目 |
migrate | 执行部署脚本 |
deploy | 执行部署脚本,和 migrate 同义词 |
test | 执行指定的测试 |
networks | 展示各个以太坊网络部署的合约地址 |
watch | 追踪源代码修改,随时重构项目 |
serve | 启动本地服务器,展示项目情况 |
Ganache的安装¶
Ganache 继承了原来的 Test-RPC的使命,作为测试环境里的模拟区块链而存在(我们终于可以不使用Geth来建立真实的节点网络了)。我们需要8.3.0以上的Node.js环境支持。我们通过如下命令安装 Ganache。
$ node --version
v10.9.0
$ npm install -g ganache-cli
其实 Ganache 也就是旧的 Test-RPC 项目换了一个名字而已,你同样可以安装 testrpc 来安装同一个软件。
$ npm install –g testrpc
启动Ganache与启动testrpc一致,都只需要输入包名即可。
ganache-cli
Ganache CLI v6.1.6 (ganache-core: 2.1.5)
Available Accounts
==================
(0) 0xf096552fd17b6d43ab4fc8cde9013c7e2e59e92a (~100 ETH)
(1) 0x28908951d8621570f21a36dbca8568c7c0403b9a (~100 ETH)
(2) 0x3dbe5e8338ba08c0e95841d1cd88d280521da167 (~100 ETH)
(3) 0x4902e5f070a2ad3dd13faaf73fdf5f00af77db06 (~100 ETH)
(4) 0x27b3df0443a0a653fd28972024a45d4bbf45cd88 (~100 ETH)
(5) 0xf44c4f3d26ee666ce0c8e25b0cad51cda3038d54 (~100 ETH)
(6) 0xda0eeefc53c602c40280b6199efe6a2596fc6a83 (~100 ETH)
(7) 0xc2a2d0116ffc4b088e73a6e1ae7f9c2a9775023a (~100 ETH)
(8) 0x10c7bea0cbc1b864db044696b1269819696f9c0c (~100 ETH)
(9) 0xa3c62dcfe700c213a9a2cfb911f40e8b2c8fe983 (~100 ETH)
Private Keys
==================
(0) 0x33270e0fef2525619fdf10b3568abc21a2fed4c2f2c5a597c1be78d898599949
(1) 0xcdd6263fabbfeef6924ef4fbb2510dee9757f56f5bbae0f54e2ff433a21d6039
(2) 0x76e99dcf6f7fd9ef2e8ac62f0c9c90a1a94ec9d9aaf5ee995678a007147c7763
(3) 0x4796fd5c3202fda98ceb0f2d981d732ace2aedcaace50ff865158884698fe5b4
(4) 0xa43347fbcadfb28af70c8bb2c008da0d279934f88f8930b06dddaabdb7efd4da
(5) 0x83a1fd902af38b0e2ffac7bcb16bcd21434ef64a24cfd91dd594f350fcb0fbc0
(6) 0x3102424399c97bbfd7f6d23387f6bd8b8822e168ecc39d5d2faaabe830e1025e
(7) 0x2e25026d88e2095e7a712a881159ebba55e736b4b822d427af9d06eaefd1d254
(8) 0xd0be42aefa447ed693daaca4f9b449f55ceb86744efa36f369eab449038e48f7
(9) 0x06574e68519dd2773a0987aa9f25d2ef8bc8a0c91d88447fad087dba4d247f76
HD Wallet
==================
Mnemonic: wolf capable soon aisle crunch chair subway prosper fall make grab range
Base HD Path: m/44'/60'/0'/0/{account_index}
Gas Price
==================
20000000000
Gas Limit
==================
6721975
Listening on 127.0.0.1:8545
在以上启动过程中,我们发现Ganache已经自动帮我们创建了10个测试用的地址,它们各自对应的私钥也已经打印在控制台上;Ganache还额外为我们模拟了一个硬件钱包以及硬件钱包的助记词;Ganache已经代我们确定了网络的gasPrice和单一区块的gas上限;Ganache启动并监听在我们的端口8545上;Ganache 的版本号是v6.1.6。
至此,Ganache可以完全替代我们早先的Geth客户端作为测试的通讯节点。在我们对代码信心十足后,我们可以将测试网络换成Geth节点的私链进行近似公链的测试,再之后可以部署到以太坊公链的测试网上进行全真测试。
[1] | 笔者注:项目源代码地址 https://truffleframework.com/ |