簡單介紹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框架,編譯和部署都用一條命令便可搞定。

相關文章
相關標籤/搜索