简单介绍Truffle框架

链客,专为开发者而生,有问必答!node

此文章来自链客区块链技术问答社区,未经容许拒绝转载。webpack

图片描述

truffle框架web

Truffle是基于Solidity语言的一套开发框架,它简化了去中心化应用(Dapp)的构建和管理流程。自己是采用Javascript编写,支持智能合约的编译、部署和测试。 数据库

truffle开发框架提供了不少功能,简化了咱们的开发、编译、部署与调试过程:npm

  • 内置了智能合约编译、连接、部署和二进制文件的管理
  • 方便快速开发的合约自动化测试
  • 方便扩展的、脚本化的部署与发布框架
  • 方便的网络管理功能。不管是公有网络仍是私有网络
  • 基于erc190标准,使用EthPM & NPM进行依赖包管理
  • 内置控制台功能。项目构建后,能够直接在命令行调用输出结果,方便了开发调试
  • 可配的构建流程,支持持续集成。
  • 支持外部脚本的执行

接下来,咱们将经过truffle框架来构建 Hello 合约的编译、部署过程。truffle安装,npm install -g trufflejson

安装好后,查看一下版本信息:promise

truffle versionbabel

本篇示例基于以下版本:网络

Truffle v4.0.1 (core: 4.0.1)app

Solidity v0.4.18 (solc-js)

初始化项目

truffle提供了不少项目模板,能够快速搭建一个去中心化应用的代码骨架。咱们使用 webpack 项目模板来构建 Hello 合约。在 smartcontract 目录下,执行以下命令:

truffle unbox webpack

1

初始化项目的时候,它会建立运行一个完整Dapp所需的文件和目录。咱们将 strings.sol 和 Hello.sol两个合约文件移动到 contracts 目录下,并删除 contracts 目录下原有的 ConvertLib.sol 和 MetaCoin.sol 文件(Migrations.sol 合约用来管理应用合约的部署,所以请勿删除)。目录结构以下:

smartcontract

├── app

├── contracts

├── Hello.sol

├── Migrations.sol

└── strings.sol

├── migrations

├── 1_initial_migration.js

└── 2_deploy_contracts.js

├── node_modules

├── package.json

├── test

├── truffle.js

└── webpack.config.js

修改部署脚本

目录migrations (迁移的意思) 很是重要。truffle使用该目录下的脚原本管理合约的部署。在前面几篇教程中,咱们是经过本身编写编译部署脚本 deploy.js ,并在node控制台中运行来将 Hello 合约部署到区块链上的。有了truffle,之后不再用这么作了。

第一个脚本 1_initial_migration.js 的做用是向区块链部署 Migrations 合约。 这个合约的做用是存储并跟踪已经部署的最新合约。每次运行脚本时,truffle就会向区块链查询获取已部署好的合约,而后部署新的合约。部署完成后,这个脚本会更新 Migrations 合约中的last_completed_migration 字段指向最新部署的合约。

咱们能够简单地把 Migrations 合约当成是一个数据库表,字段last_completed_migration 老是保持最新状态。

咱们来修改第二个脚本 2_deploy_contracts.js :

//artifacts对象为truffle框架提供//artifacts.require()方法与Node中的require()方法相似//编译合约代码。自动调用solc编译器来编译合约代码并返回编译结果对象var stringsContract = artifacts.require(“./strings.sol“);var HelloContract = artifacts.require(“./Hello.sol“);

//部署器对象deployer为truffle框架提供

module.exports = function(deployer) {

//部署string.sol合约

deployer.deploy(stringsContract);

//将已部署的strings合约类库链接到Hello合约

deployer.link(stringsContract, HelloContract);

//部署Hello.sol合约

deployer.deploy(HelloContract);

};

代码不难,加上了注释很容易理解。

修改truffle配置

部署脚本修改完后,咱们还须要在配置文件中声明要链接的以太坊节点地址,这里使用Ganache的地址 http://localhost:7545 :

require(‘babel-register‘)

module.exports = {

networks: {

development: {

host: ‘localhost‘,

port: 7545,

network_id: ‘*‘

}

}

}

注意 development 关键字。truffle支持将合约部署到多个区块链网络,例如开发网络、私有网络、测试网或公网。 在上面的配置中,咱们只定义了一个用于开发的网络。

编译合约

在 smartcontract 目录下执行 truffle compile 命令,终端输出以下:

Compiling ./contracts/Hello.sol...

Compiling ./contracts/Migrations.sol...

Compiling ./contracts/strings.sol...

Writing artifacts to ./build/contracts

能够看到,contracts 目录下的三个合约文件都编译了,而且在当前目录下生成了 build/contracts目录,同时也产生了三个文件:

smartcontract/build/contracts

├── Hello.json

├── Migrations.json

└── strings.json

部署合约

合约编译成功后,就能够部署了。在 smartcontract 目录下执行部署命令 truffle migrate ,能够看到终端上输出了部署日志:

关键信息能够标注出来。咱们也能够在 Ganache 中的 LOGS 面板中查看 transaction id 和 合约地址:

合约调用

合约部署成功后,咱们能够经过 truffle console 命令进入控制台。在控制台里调用刚才部署的合约:

$ truffle console

truffle(development)> Hello.deployed().then(function(contractInstance){contractInstance.say.call(‘Guys‘).then(function(result){console.log(result)})})

truffle(development)> Hello Guys

须要注意的是,truffle 的全部调用都会返回 promise (node语法),因此每一个响应都被包裹在 then() 函数里。

至此,经过truffle框架进行合约的编译、部署与调用就介绍完了。和以前手动编写编译部署脚本,及调用脚本的方式相比,是否是更方便快捷?并且代码量还更少更精炼。 经过truffle框架,编译和部署都用一条命令便可搞定。

相关文章
相关标签/搜索