Truffle是一个综合性的开发环境,它提供了编译、部署、测试和构建的命令行工具,同时也作为一个框架,支持各种程序包以简化测试编写、代码部署和客户端构建等任务。此外,Truffle还充当资产管道,帮助用户发布和利用他人发布的软件包,从而构建基于以太坊的去中心化应用(DApp)。
使用Truffle,您可以享受到以下功能:
- 内置的智能合约编译、链接、部署及二进制管理。
- 集成Mocha和Chai进行自动化合约测试。
- 可配置的构建管道,支持自定义构建过程。
- 可编写脚本的部署和迁移框架。
- 网络管理功能,支持部署到多个公共和私有网络。
- 用于直接与合约交互的控制台。
- 在开发过程中即时重建资产。
- 外部脚本运行程序,可以在Truffle环境中执行脚本。
要使用大部分Truffle命令,您需要在现有的Truffle项目中运行它们。因此,第一步是创建一个Truffle项目。让我们从安装Truffle开始:
确保您已经安装了相应的依赖:
接下来创建项目:
在此,您可以运行Truffle compile、Truffle migrate和Truffle test命令,以编译合约、将合约部署到网络中并执行相关的单元测试。
Truffle自带本地开发区块链服务器,当您执行上述命令时,该服务器会自动启动。如果您需要配置更高级的开发环境,建议通过命令行运行NPM install -g ganache-cli来单独安装区块链服务器。
ganache-cli:Truffle的区块链服务器的命令行版本。
ganache:服务器的图形用户界面,展示交易历史和链状态。

Truffle项目的结构
您创建的Truffle文件夹结构如下:
- 合同
- ConvertLib.sol
- MetaCoin.sol
- Migrations.sol
- 迁移
- 1_initial_migration.js
- 2_deploy_contracts.js
- 测试
- testMetacoin.sol
- Metacoin.js
- truffle-config.js
- truffle.js
现在,继续编写代码,您会看到Truffle为我们创建了文件结构。跳到合同文件夹,创建STorage.sol文件,并在其中编写智能合约代码:
pragma solidity ^0.4.8; contract Storage { uint256 storedData; function set(uint256 data) { storedData = data; } function get() constant returns (uint256) { return storedData; }}
接下来,修改Migrations/2_deploy_contracts.js文件如下:
var Storage = artifacts.require(“./Storage.sol”); module.exports = function(deployer) { deployer.deploy(Storage); }
现在我们已完成基本设置,接下来是将其部署到区块链。我们可以使用testRPC来完成测试开发。在一个单独的选项卡中,输入以下命令:
然后返回运行Truffle项目的选项卡:
$ truffle compile $ truffle migrate
这样我们就成功完成了合约的部署。接下来,我们将检查是否能够调用合约功能。
$ truffle console truffle(development)> Storage.deployed().then(instance => instance.get.call()).then(result => storedData = result) { [String: ‘0’] s: 1, e: 0, c: [ 0 ] } truffle(development)> storedData.toString() ‘0’
现在,让我们尝试将storedData设置为99。
truffle(development)> Storage.deployed().then(instance => instance.set.sendTransaction(99)).then(result => newStoredData = result) ‘0xc5e2f9c9da4cf9f563c8e59073d5b6ca9458f112a6dcfc14aaea7c16a99422d4′ truffle(development)> Storage.deployed().then(instance => instance.get.call()).then(result => storedData = result) { [String: ’99’] s: 1, e: 1, c: [ 99 ] } truffle(development)> storedData.toString() ’99’
到目前为止,我们已经成功部署并测试了Truffle项目的合约。
