摘要:原文發(fā)表于以太坊智能合約開發(fā)第六篇開發(fā)框架在前面幾篇教程中,我們實現(xiàn)了一個簡單的合約,并通過編譯器將合約代碼編譯后,部署在私有鏈上。
原文發(fā)表于:以太坊智能合約開發(fā)第六篇:truffle開發(fā)框架
在前面幾篇教程中,我們實現(xiàn)了一個簡單的 Hello 合約,并通過 solc 編譯器將合約代碼編譯后,部署在私有鏈Ganache上。本篇將介紹通過truffle框架來構建自動編譯、部署合約代碼。
truffle框架Truffle是基于Solidity語言的一套開發(fā)框架,它簡化了去中心化應用(Dapp)的構建和管理流程。本身是采用Javascript編寫,支持智能合約的編譯、部署和測試。
truffle開發(fā)框架提供了很多功能,簡化了我們的開發(fā)、編譯、部署與調(diào)試過程:
內(nèi)置了智能合約編譯、鏈接、部署和二進制文件的管理
方便快速開發(fā)的合約自動化測試
方便擴展的、腳本化的部署與發(fā)布框架
方便的網(wǎng)絡管理功能。不論是公有網(wǎng)絡還是私有網(wǎng)絡
基于ERC190標準,使用EthPM & NPM進行依賴包管理
內(nèi)置控制臺功能。項目構建后,可以直接在命令行調(diào)用輸出結果,方便了開發(fā)調(diào)試
可配的構建流程,支持持續(xù)集成。
支持外部腳本的執(zhí)行
接下來,我們將通過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 目錄下,執(zhí)行如下命令:
truffle unbox webpack
初始化項目的時候,它會創(chuàng)建運行一個完整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 合約部署到區(qū)塊鏈上的。有了truffle,以后再也不用這么做了。
第一個腳本 1_initial_migration.js 的作用是向區(qū)塊鏈部署 Migrations 合約。 這個合約的作用是存儲并跟蹤已經(jīng)部署的最新合約。每次運行腳本時,truffle就會向區(qū)塊鏈查詢獲取已部署好的合約,然后部署新的合約。部署完成后,這個腳本會更新 Migrations 合約中的last_completed_migration 字段指向最新部署的合約。
我們可以簡單地把 Migrations 合約當成是一個數(shù)據(jù)庫表,字段last_completed_migration 總是保持最新狀態(tài)。
我們來修改第二個腳本 2_deploy_contracts.js :
//artifacts對象為truffle框架提供 //artifacts.require()方法與Node中的require()方法類似 //編譯合約代碼。自動調(diào)用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配置部署腳本修改完后,我們還需要在配置文件中聲明要連接的以太坊節(jié)點地址,這里使用Ganache的地址 http://localhost:7545 :
require("babel-register") module.exports = { networks: { development: { host: "localhost", port: 7545, network_id: "*" } } }
注意 development 關鍵字。truffle支持將合約部署到多個區(qū)塊鏈網(wǎng)絡,例如開發(fā)網(wǎng)絡、私有網(wǎng)絡、測試網(wǎng)或公網(wǎng)。 在上面的配置中,我們只定義了一個用于開發(fā)的網(wǎng)絡。
編譯合約在 smartcontract 目錄下執(zhí)行 truffle compile 命令,終端輸出如下:
Compiling ./contracts/Hello.sol... Compiling ./contracts/Migrations.sol... Compiling ./contracts/strings.sol... Writing artifacts to ./build/contracts
可以看到,contracts 目錄下的三個合約文件都編譯了,并且在當前目錄下生成了 build/contracts 目錄,同時也產(chǎn)生了三個文件:
smartcontract/build/contracts ├── Hello.json ├── Migrations.json └── strings.json
這三個都是 abi 文件(abi概念的解釋,可以翻看以太坊智能合約開發(fā)第二篇:理解以太坊相關概念)。
部署合約合約編譯成功后,就可以部署了。在 smartcontract 目錄下執(zhí)行部署命令 truffle migrate ,可以看到終端上輸出了部署日志:
關鍵信息可以標注出來。我們也可以在 Ganache 中的 LOGS 面板中查看 transaction id 和 合約地址:
合約部署成功后,我們可以通過 truffle console 命令進入控制臺。在控制臺里調(diào)用剛才部署的合約:
$ truffle console truffle(development)> Hello.deployed().then(function(contractInstance){contractInstance.say.call("Guys").then(function(result){console.log(result)})}) truffle(development)> Hello Guys
需要注意的是,truffle 的所有調(diào)用都會返回 promise (node語法),所以每個響應都被包裹在 then() 函數(shù)里。
至此,通過truffle框架進行合約的編譯、部署與調(diào)用就介紹完了。和之前手動編寫編譯部署腳本,及調(diào)用腳本的方式相比,是不是更方便快捷?而且代碼量還更少更精煉。 通過truffle框架,編譯和部署都用一條命令即可搞定。
拋磚引玉本篇中合約的調(diào)用是在truffle控制臺中,如何通過網(wǎng)頁調(diào)用合約呢?
我的專欄:智能合約
智能合約開發(fā)QQ群:753778670
目前有幾套區(qū)塊鏈實踐的視頻課程(視頻+源碼),需要的可加我微信(kuangwenjie)私信我(付費):
『區(qū)塊鏈』從零構建以太坊(Ethereum)智能合約到項目實戰(zhàn)
基于Ethereum & IPFS的去中心化Ebay區(qū)塊鏈項目開發(fā)實戰(zhàn)
HyperLedger(超級賬本)Fabric
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/24040.html
摘要:原文發(fā)表于以太坊智能合約開發(fā)第七篇智能合約與網(wǎng)頁交互上一篇中,我們通過開發(fā)框架快速編譯部署了合約。智能合約與網(wǎng)頁交互啟動腳本修改完了之后,就需要與網(wǎng)頁進行整合。 原文發(fā)表于:以太坊智能合約開發(fā)第七篇:智能合約與網(wǎng)頁交互 上一篇中,我們通過truffle開發(fā)框架快速編譯部署了合約。本篇,我們將來介紹網(wǎng)頁如何與智能合約進行交互。 編寫網(wǎng)頁 首先我們需要編寫一個網(wǎng)頁。打開 smartcon...
摘要:一理解以太坊工具以太坊有很多工具,隨著時間的推移有些會過時,但早期的網(wǎng)絡文章會有介紹,從而與目前的工具造成時差上的迷惑,有些工具是隨著工程化的需要逐漸流行起來的??梢暬囊蕴诲X包,可以管理賬戶發(fā)布合約。 一、理解以太坊工具 以太坊有很多工具,隨著時間的推移有些會過時,但早期的網(wǎng)絡文章會有介紹,從而與目前的工具造成時差上的迷惑,有些工具是隨著工程化的需要逐漸流行起來的。有必要梳理以下:...
摘要:以太坊是什么以太坊是一個建立在區(qū)塊鏈技術之上,去中心化應用平臺。運行環(huán)境以太坊虛擬機是以太坊中智能合約的運行環(huán)境。是由以太坊客戶端提供的是典型的開發(fā)以太坊時使用的客戶端,基于語言開發(fā)。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊是什么 - 以太坊開發(fā)入門指南原文已更新,請讀者前往原文閱讀 很多同學已經(jīng)躍躍欲試投入到區(qū)塊鏈開發(fā)隊伍當中來,可是又感覺無從下手,本文將基于以太坊平臺,以通俗...
摘要:目前通常指代基于以太坊或者上的智能合約開發(fā)的相關應用。引入以太坊通過的交互流程大致如下總結隨著區(qū)塊鏈近些年的大紅大紫,被推上了風口浪尖,本文從技術的角度大致介紹了一下所涉及的技術要點。 當你開始探索區(qū)塊鏈開發(fā),需要了解到這些。 showImg(https://segmentfault.com/img/remote/1460000016608233?w=1370&h=389); 一、DA...
摘要:原文地址石匠的是一個基于開發(fā)的一套智能合約開發(fā)框架,使用語言編寫合約。預期通過和搭建一個只能合約的開發(fā)測試環(huán)境,部署官方的測試合約進行驗證和后續(xù)的測試學習。 原文地址:石匠的blog truffle是一個基于Javascript開發(fā)的一套智能合約開發(fā)框架,使用Solidity語言編寫合約。truffle有一套自動的項目構建機制,集成了開發(fā),測試和部署的各個流程細節(jié),不用開發(fā)人員關注。t...
閱讀 1982·2019-08-30 15:54
閱讀 3609·2019-08-29 13:07
閱讀 3133·2019-08-29 12:39
閱讀 1799·2019-08-26 12:13
閱讀 1556·2019-08-23 18:31
閱讀 2168·2019-08-23 18:05
閱讀 1857·2019-08-23 18:00
閱讀 1053·2019-08-23 17:15