Truffle使用

Truffle是一个以太坊智能合约开发框架,利用它可以方便地生成项目模板、编译合约、部署合约到区块链、测试合约等等。

一、创建项目

新建一个目录并进入该目录,然后创建项目:

$ mkdir myContract && cd myContract
$ truffle init

执行truffle init后,会在当前目录生成一个项目模板,生成的项目目录结构如下:

myContract
├── contracts
│     │   
│   └── Migrations.sol
├── migrations
│     │
│   └── 1_initial_migration.js 
├── test
│ 
├── truffle-config.js 
│ 
└── truffle.js

contracts下面存放合约代码,migrations里面是部署合约的脚本,test下面是测试脚本,truffle.js是项目的配置文件。

注:truffle版本从3.1.2生成的项目模板中不再包含app目录。

二、编写合约

编写合约代码,并把代码文件保存在contracts目录下,默认已经生成了一个示例合约Migrations.sol,如果不需要可以将它删除,本例就使用默认的示例合约文件。

三、编译合约

在终端中输入:

$ truffle compile

如果出现类似如下输出,则编译成功:

Compiling Migrations.sol...
Writing artifacts to ./build/contracts

四、部署合约

在本机部署合约,先要启动虚拟机testrpc;

修改truffle.js文件

module.exports = {
  // See <http://truffleframework.com/docs/advanced/configuration>
  // to customize your Truffle configuration!
    networks: {
      development: {
        host: '127.0.0.1',
        port: 8545,
        network_id: '*'
      }
    }
};

还要修改migrations/1_initial_migration.js,将deployer.deploy的参数中的合约名改为自己要部署的合约名;

最后部署合约到区块链,在终端中执行:

$ truffle migrate --reset

如果出现类似如下输出,则部署成功:

... (省略)
Running migration: 1_initial_migration.js
  Deploying ConvertLib...
  ConvertLib: 0x4d7032160ef9b300fb0cc83cad97819f89e6fc38
  Linking ConvertLib to MetaCoin
  Deploying MetaCoin...
  MetaCoin: 0x3e16298422c552ac794c8a83f4fdae62c6bc2a20
Saving successful migration to network...
Saving artifacts...

五、测试合约

进入truffle控制台调试合约
合约部署成功后,在终端执行truffle console,可以进入Javascript控制台对合约进行调试:

$ truffle console
truffle(default)>

在Javascript控制台通过ContractName.deployed()或ContractName.at(contractAddress)获取已部署的合约对象,之后就可以通过该对象调用合约的方法进行调试:

获取已部署的合约对象:

truffle(default)> var metacoin = Migrations.deployed()

输入.exit可以退出truffle控制台。

运行单元测试
Truffle集成了nodejs测试框架Chai(https://github.com/chaijs/chai),我们可以使用nodejs内置的断言模块assert对合约进行测试。在test/目录下编写合约的测试脚本,然后通过 truffle test 命令执行脚本:

$ truffle test