以太坊智慧合約開發第六篇:truffle開發框架
truffle框架
Truffle是基於Solidity語言的一套開發框架,它簡化了去中心化應用(Dapp)的構建和管理流程。本身是採用Javascript編寫,支援智慧合約的編譯、部署和測試。 truffle開發框架提供了很多功能,簡化了我們的開發、編譯、部署與除錯過程:
內建了智慧合約編譯、連結、部署和二進位制檔案的管理
方便快速開發的合約自動化測試
方便擴充套件的、指令碼化的部署與釋出框架
方便的網路管理功能。不論是公有網路還是私有網路
基於ERC190標準,使用EthPM & NPM進行依賴包管理
內建控制檯功能。專案構建後,可以直接在命令列呼叫輸出結果,方便了開發除錯
可配的構建流程,支援持續整合。
支援外部指令碼的執行
接下來,我們將透過truffle框架來構建 Hello 合約的編譯、部署過程。
truffle安裝
npm install -g truffle
安裝好後,檢視一下版本資訊:
truffle version
本篇示例基於如下版本:
Truffle v4.0.1 (core: 4.0.1)Solidity v0.4.18 (solc-js)
初始化專案
truffle提供了很多專案模板,可以快速搭建一個去中心化應用的程式碼骨架。我們使用 webpack 專案模板來構建 Hello 合約。在 smartcontract 目錄下,執行如下命令:
truffle unbox webpack
初始化專案的時候,它會建立執行一個完整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的地址 :
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框架,編譯和部署都用一條命令即可搞定。
作者:Marser_cn
來源:https://my.oschina.net/KevinJay/blog/1795948
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3034/viewspace-2808932/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- windows 以太坊開發框架Truffle環境搭建Windows框架
- 以太坊智慧合約開發:讓合約接受轉賬
- 以太坊開發框架Truffle基礎使用介紹框架
- eth以太坊智慧合約交易平臺開發
- Truffle 配置本地 ETH 系合約開發環境開發環境
- 以太坊智慧合約開發第四篇:實現Hello World智慧合約
- 使用truffle部署以太坊智慧合約到區塊鏈區塊鏈
- 以太坊Solidity程式語言開發框架————1、Truffle簡介Solid框架
- 以太坊Solidity程式語言開發框架————16、Truffle命令指南Solid框架
- 以太坊智慧合約開發第七篇:智慧合約與網頁互動網頁
- 以太坊智慧合約開發第二篇:理解以太坊相關概念
- 第五課 以太坊開發框架Truffle從入門到實戰框架
- 以太坊Solidity程式語言開發框架————4、編譯合約Solid框架編譯
- 以太坊Solidity程式語言開發框架————7、合約互動Solid框架
- 以太坊Solidity程式語言開發框架————8、測試合約Solid框架
- SET智慧合約量化系統開發|秒合約量化開發搭建
- 智慧合約開發神器-RemixREM
- 智慧合約開發(3)—— 以太坊虛擬機器(EVM)基礎虛擬機
- olidity語言開發以太坊智慧合約中的繼承繼承
- 以太坊智慧合約開發第五篇:字串拼接—Solidity字串Solid
- DAPP開發流程 | DAPP智慧合約開發APP
- 智慧合約Dapp專案如何開發構建?智慧合約開發原始碼示例APP原始碼
- 智慧合約系統開發原理介紹丨智慧合約開發原始碼詳情原始碼
- 區塊鏈智慧合約開發區塊鏈
- Polygon馬蹄鏈在以太坊上的智慧合約開發應用Go
- 以太坊開發實戰學習-合約安全(八)
- 智慧合約鏈遊開發詳情丨智慧合約鏈遊系統開發(開發方案)及原始碼分析原始碼
- 智慧合約盲盒遊戲開發上線版丨智慧合約盲盒遊戲系統開發(開發案例)遊戲開發
- FDF互助遊戲智慧合約開發(馬蹄鏈開發)遊戲
- 中移鏈合約常用開發介紹(三)工程化開發智慧合約
- 以太坊智慧合約開發環境搭建以及第一個Dapp開發環境APP
- 以太坊智慧合約開發第三篇:安裝節點工具Ganache
- Dapp 合約代幣系統開發智慧合約APP
- 智慧合約開發環境搭建及Hello World合約開發環境
- ProTradex質押智慧合約系統開發技術框架框架
- ptahDAO智慧合約模式系統開發模式
- DApp智慧合約系統開發APP
- Conflux與以太坊合約開發工具區別UX