成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

以太坊智能合約開(kāi)發(fā)第六篇:truffle開(kāi)發(fā)框架

ityouknow / 3339人閱讀

摘要:原文發(fā)表于以太坊智能合約開(kāi)發(fā)第六篇開(kāi)發(fā)框架在前面幾篇教程中,我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的合約,并通過(guò)編譯器將合約代碼編譯后,部署在私有鏈上。

原文發(fā)表于:以太坊智能合約開(kāi)發(fā)第六篇:truffle開(kāi)發(fā)框架

在前面幾篇教程中,我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的 Hello 合約,并通過(guò) solc 編譯器將合約代碼編譯后,部署在私有鏈Ganache上。本篇將介紹通過(guò)truffle框架來(lái)構(gòu)建自動(dòng)編譯、部署合約代碼。

truffle框架

Truffle是基于Solidity語(yǔ)言的一套開(kāi)發(fā)框架,它簡(jiǎn)化了去中心化應(yīng)用(Dapp)的構(gòu)建和管理流程。本身是采用Javascript編寫(xiě),支持智能合約的編譯、部署和測(cè)試。
truffle開(kāi)發(fā)框架提供了很多功能,簡(jiǎn)化了我們的開(kāi)發(fā)、編譯、部署與調(diào)試過(guò)程:

內(nèi)置了智能合約編譯、鏈接、部署和二進(jìn)制文件的管理

方便快速開(kāi)發(fā)的合約自動(dòng)化測(cè)試

方便擴(kuò)展的、腳本化的部署與發(fā)布框架

方便的網(wǎng)絡(luò)管理功能。不論是公有網(wǎng)絡(luò)還是私有網(wǎng)絡(luò)

基于ERC190標(biāo)準(zhǔn),使用EthPM & NPM進(jìn)行依賴包管理

內(nèi)置控制臺(tái)功能。項(xiàng)目構(gòu)建后,可以直接在命令行調(diào)用輸出結(jié)果,方便了開(kāi)發(fā)調(diào)試

可配的構(gòu)建流程,支持持續(xù)集成。

支持外部腳本的執(zhí)行

接下來(lái),我們將通過(guò)truffle框架來(lái)構(gòu)建 Hello 合約的編譯、部署過(guò)程。

truffle安裝
npm install -g truffle

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

truffle version

本篇示例基于如下版本:

Truffle v4.0.1 (core: 4.0.1)
Solidity v0.4.18 (solc-js)
初始化項(xiàng)目

truffle提供了很多項(xiàng)目模板,可以快速搭建一個(gè)去中心化應(yīng)用的代碼骨架。我們使用 webpack 項(xiàng)目模板來(lái)構(gòu)建 Hello 合約。在 smartcontract 目錄下,執(zhí)行如下命令:

truffle unbox webpack

初始化項(xiàng)目的時(shí)候,它會(huì)創(chuàng)建運(yùn)行一個(gè)完整Dapp所需的文件和目錄。我們將 strings.solHello.sol 兩個(gè)合約文件移動(dòng)到 contracts 目錄下,并刪除 contracts 目錄下原有的 ConvertLib.solMetaCoin.sol 文件(Migrations.sol 合約用來(lái)管理應(yīng)用合約的部署,因此請(qǐng)勿刪除)。目錄結(jié)構(gòu)如下:

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使用該目錄下的腳本來(lái)管理合約的部署。在前面幾篇教程中,我們是通過(guò)自己編寫(xiě)編譯部署腳本 deploy.js ,并在node控制臺(tái)中運(yùn)行來(lái)將 Hello 合約部署到區(qū)塊鏈上的。有了truffle,以后再也不用這么做了。

第一個(gè)腳本 1_initial_migration.js 的作用是向區(qū)塊鏈部署 Migrations 合約。 這個(gè)合約的作用是存儲(chǔ)并跟蹤已經(jīng)部署的最新合約。每次運(yùn)行腳本時(shí),truffle就會(huì)向區(qū)塊鏈查詢獲取已部署好的合約,然后部署新的合約。部署完成后,這個(gè)腳本會(huì)更新 Migrations 合約中的last_completed_migration 字段指向最新部署的合約。

我們可以簡(jiǎn)單地把 Migrations 合約當(dāng)成是一個(gè)數(shù)據(jù)庫(kù)表,字段last_completed_migration 總是保持最新?tīng)顟B(tài)。

我們來(lái)修改第二個(gè)腳本 2_deploy_contracts.js

//artifacts對(duì)象為truffle框架提供
//artifacts.require()方法與Node中的require()方法類似
//編譯合約代碼。自動(dòng)調(diào)用solc編譯器來(lái)編譯合約代碼并返回編譯結(jié)果對(duì)象
var stringsContract = artifacts.require("./strings.sol");
var HelloContract = artifacts.require("./Hello.sol");

//部署器對(duì)象deployer為truffle框架提供
module.exports = function(deployer) {
  //部署string.sol合約
  deployer.deploy(stringsContract);
  //將已部署的strings合約類庫(kù)連接到Hello合約
  deployer.link(stringsContract, HelloContract);
  //部署Hello.sol合約
  deployer.deploy(HelloContract);
};

代碼不難,加上了注釋很容易理解。

修改truffle配置

部署腳本修改完后,我們還需要在配置文件中聲明要連接的以太坊節(jié)點(diǎn)地址,這里使用Ganache的地址 http://localhost:7545

require("babel-register")
module.exports = {
  networks: {
    development: {
      host: "localhost",
      port: 7545,
      network_id: "*"
    }
  }
}

注意 development 關(guān)鍵字。truffle支持將合約部署到多個(gè)區(qū)塊鏈網(wǎng)絡(luò),例如開(kāi)發(fā)網(wǎng)絡(luò)、私有網(wǎng)絡(luò)、測(cè)試網(wǎng)或公網(wǎng)。 在上面的配置中,我們只定義了一個(gè)用于開(kāi)發(fā)的網(wǎng)絡(luò)。

編譯合約

smartcontract 目錄下執(zhí)行 truffle compile 命令,終端輸出如下:

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

可以看到,contracts 目錄下的三個(gè)合約文件都編譯了,并且在當(dāng)前目錄下生成了 build/contracts 目錄,同時(shí)也產(chǎn)生了三個(gè)文件:

smartcontract/build/contracts
    ├── Hello.json
    ├── Migrations.json
    └── strings.json

這三個(gè)都是 abi 文件(abi概念的解釋,可以翻看以太坊智能合約開(kāi)發(fā)第二篇:理解以太坊相關(guān)概念)。

部署合約

合約編譯成功后,就可以部署了。在 smartcontract 目錄下執(zhí)行部署命令 truffle migrate ,可以看到終端上輸出了部署日志:

關(guān)鍵信息可以標(biāo)注出來(lái)。我們也可以在 Ganache 中的 LOGS 面板中查看 transaction id 和 合約地址:

合約調(diào)用

合約部署成功后,我們可以通過(guò) truffle console 命令進(jìn)入控制臺(tái)。在控制臺(tái)里調(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)用都會(huì)返回 promise (node語(yǔ)法),所以每個(gè)響應(yīng)都被包裹在 then() 函數(shù)里。

至此,通過(guò)truffle框架進(jìn)行合約的編譯、部署與調(diào)用就介紹完了。和之前手動(dòng)編寫(xiě)編譯部署腳本,及調(diào)用腳本的方式相比,是不是更方便快捷?而且代碼量還更少更精煉。 通過(guò)truffle框架,編譯和部署都用一條命令即可搞定。

拋磚引玉

本篇中合約的調(diào)用是在truffle控制臺(tái)中,如何通過(guò)網(wǎng)頁(yè)調(diào)用合約呢?

我的專欄:智能合約
智能合約開(kāi)發(fā)QQ群:753778670


目前有幾套區(qū)塊鏈實(shí)踐的視頻課程(視頻+源碼),需要的可加我微信(kuangwenjie)私信我(付費(fèi)):

『區(qū)塊鏈』從零構(gòu)建以太坊(Ethereum)智能合約到項(xiàng)目實(shí)戰(zhàn)

基于Ethereum & IPFS的去中心化Ebay區(qū)塊鏈項(xiàng)目開(kāi)發(fā)實(shí)戰(zhàn)

HyperLedger(超級(jí)賬本)Fabric


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/24040.html

相關(guān)文章

  • 以太智能合約開(kāi)發(fā)第七篇:智能合約與網(wǎng)頁(yè)交互

    摘要:原文發(fā)表于以太坊智能合約開(kāi)發(fā)第七篇智能合約與網(wǎng)頁(yè)交互上一篇中,我們通過(guò)開(kāi)發(fā)框架快速編譯部署了合約。智能合約與網(wǎng)頁(yè)交互啟動(dòng)腳本修改完了之后,就需要與網(wǎng)頁(yè)進(jìn)行整合。 原文發(fā)表于:以太坊智能合約開(kāi)發(fā)第七篇:智能合約與網(wǎng)頁(yè)交互 上一篇中,我們通過(guò)truffle開(kāi)發(fā)框架快速編譯部署了合約。本篇,我們將來(lái)介紹網(wǎng)頁(yè)如何與智能合約進(jìn)行交互。 編寫(xiě)網(wǎng)頁(yè) 首先我們需要編寫(xiě)一個(gè)網(wǎng)頁(yè)。打開(kāi) smartcon...

    sherlock221 評(píng)論0 收藏0
  • 理解以太DApp及開(kāi)發(fā)工具

    摘要:一理解以太坊工具以太坊有很多工具,隨著時(shí)間的推移有些會(huì)過(guò)時(shí),但早期的網(wǎng)絡(luò)文章會(huì)有介紹,從而與目前的工具造成時(shí)差上的迷惑,有些工具是隨著工程化的需要逐漸流行起來(lái)的??梢暬囊蕴诲X包,可以管理賬戶發(fā)布合約。 一、理解以太坊工具 以太坊有很多工具,隨著時(shí)間的推移有些會(huì)過(guò)時(shí),但早期的網(wǎng)絡(luò)文章會(huì)有介紹,從而與目前的工具造成時(shí)差上的迷惑,有些工具是隨著工程化的需要逐漸流行起來(lái)的。有必要梳理以下:...

    tinna 評(píng)論0 收藏0
  • 以太是什么 - 以太開(kāi)發(fā)入門指南

    摘要:以太坊是什么以太坊是一個(gè)建立在區(qū)塊鏈技術(shù)之上,去中心化應(yīng)用平臺(tái)。運(yùn)行環(huán)境以太坊虛擬機(jī)是以太坊中智能合約的運(yùn)行環(huán)境。是由以太坊客戶端提供的是典型的開(kāi)發(fā)以太坊時(shí)使用的客戶端,基于語(yǔ)言開(kāi)發(fā)。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊是什么 - 以太坊開(kāi)發(fā)入門指南原文已更新,請(qǐng)讀者前往原文閱讀 很多同學(xué)已經(jīng)躍躍欲試投入到區(qū)塊鏈開(kāi)發(fā)隊(duì)伍當(dāng)中來(lái),可是又感覺(jué)無(wú)從下手,本文將基于以太坊平臺(tái),以通俗...

    tomlingtm 評(píng)論0 收藏0
  • 在區(qū)塊鏈上編程:DApp 開(kāi)發(fā)簡(jiǎn)介

    摘要:目前通常指代基于以太坊或者上的智能合約開(kāi)發(fā)的相關(guān)應(yīng)用。引入以太坊通過(guò)的交互流程大致如下總結(jié)隨著區(qū)塊鏈近些年的大紅大紫,被推上了風(fēng)口浪尖,本文從技術(shù)的角度大致介紹了一下所涉及的技術(shù)要點(diǎn)。 當(dāng)你開(kāi)始探索區(qū)塊鏈開(kāi)發(fā),需要了解到這些。 showImg(https://segmentfault.com/img/remote/1460000016608233?w=1370&h=389); 一、DA...

    huangjinnan 評(píng)論0 收藏0
  • Mac下基于testrpc和truffle以太智能合約開(kāi)發(fā)環(huán)境搭建

    摘要:原文地址石匠的是一個(gè)基于開(kāi)發(fā)的一套智能合約開(kāi)發(fā)框架,使用語(yǔ)言編寫(xiě)合約。預(yù)期通過(guò)和搭建一個(gè)只能合約的開(kāi)發(fā)測(cè)試環(huán)境,部署官方的測(cè)試合約進(jìn)行驗(yàn)證和后續(xù)的測(cè)試學(xué)習(xí)。 原文地址:石匠的blog truffle是一個(gè)基于Javascript開(kāi)發(fā)的一套智能合約開(kāi)發(fā)框架,使用Solidity語(yǔ)言編寫(xiě)合約。truffle有一套自動(dòng)的項(xiàng)目構(gòu)建機(jī)制,集成了開(kāi)發(fā),測(cè)試和部署的各個(gè)流程細(xì)節(jié),不用開(kāi)發(fā)人員關(guān)注。t...

    MasonEast 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

ityouknow

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<