使用truffle部署以太坊智慧合約到區塊鏈

langyahappy發表於2018-06-15

truffle是以太坊(ethereum)開發智慧合約(smart contract)過程中最受歡迎的框架,本文我們來構建一個基本的Truffle專案並部署一個智慧合約到區塊鏈。

開始本文之前希望你已經瞭解區塊鏈、以太坊、智慧合約等基本概念。

安裝 Truffle

安裝 Truffle 框架非常的簡單,只需要一行命令:

npm install -g truffle

當然前提是你已經安裝好了NodeJS並且版本要在5.0以上。

Tunffle還要求一個執行的以太坊客戶端,以便支援標準的JSON RPC API,有很多的選擇比如Ganache、geth。

構建一個Truffle專案

要使用大量的Tunffle命令,我們通過使用一個現成的Tunffle專案來學習。第一步是建立一個Truffle專案。

我們可以建立一個空的專案模板,不過剛開始構建專案,我們可以使用Tunffle Boxs,裡面有很多的示例應用程式和專案模板。本文使用MetaCoin box,它建立一個可以在帳戶之間傳輸代幣的應用程式示例。

  1. 為構建Truffle專案建立新目錄:
mkdir MetaCoin
cd MetaCoin
  1. 下載 MetaCoin box,使用truffle unbox <box-name>來下載各種示例,如果要建一個空的不包括智慧合約的專案可以使用truffle init
truffle unbox metacoin

上述命令完成後,我們獲得一個有以下目錄結構的專案:

  • contracts/: Solidity編寫的智慧合約目錄。
  • migrations/:指令碼部署目錄。
  • test/:用來測試應用程式和智慧合約的測試目錄。
  • truffle.js/:Truffle 配置檔案。

瀏覽一下這個專案

  1. 開啟contracts/MetaCoin.sol,這是一個用Solidity編寫的智慧合約檔案,這個智慧合約建了Metacoin代幣,我們可以注意到它引用了同目錄下的另外一個solidity編寫的檔案contracts/ConvertLib.sol

  2. 開啟contracts/Migrations.sol,這是一個單獨的Solidity檔案,用來管理和更新部署的智慧合同的狀態。這個檔案每個Tunffle專案都有,通常不用管。

  3. 開啟migrations/1_initial_deployment.js檔案,這個指令碼是為了部署Migrations.sol檔案中的Migrations合約。

  4. 開啟migrations/2_deploy_contracts.js檔案,這個指令碼是為了部署MetaCoin合約,會按順序執行完上一步的指令碼後執行。

  5. 開啟test/TestMetacoin.sol檔案,這是一個Solidity編寫的測試檔案,確保你的合約正常工作。

  6. 開啟test/metacoin.js檔案,這個指令碼與上面的測試檔案類似。

  7. 開啟truffle.js檔案,用於設定網路資訊和其他與專案相關的內容。檔案是空白的,沒關係,因為我們將使用一個內建有預設值的Truffle命令。

測試專案

  1. 開啟終端,執行命令:
truffle test ./test/TestMetacoin.sol

輸出結果是這樣的:

TestMetacoin
    √ testInitialBalanceUsingDeployedContract (71ms)
    √ testInitialBalanceWithNewMetaCoin (59ms)

  2 passing (794ms)
  1. 執行JavaScript測試:
truffle test ./test/metacoin.js

輸出結果是這樣的:

  Contract: MetaCoin
    √ should put 10000 MetaCoin in the first account
    √ should call a function that depends on a linked library (40ms)
    √ should send coin correctly (129ms)

  3 passing (255ms)

編譯智慧合約

truffle compile

輸出結果是這樣的:

Compiling .\contracts\ConvertLib.sol...
Compiling .\contracts\MetaCoin.sol...
Compiling .\contracts\Migrations.sol...

Writing artifacts to .\build\contracts

使用 Ganache 部署專案

當使用Tuffle開發一個多功能的私有鏈和控制檯時也可以使用ganache,它作為一個桌面應用程式來啟動私有鏈。對於以太坊和區塊鏈新手來說ganache是一個更容易理解的工具,因為它會顯示更多的資訊給我們。

除了執行Ganache之外,需要額外編輯一下Tunffle配置檔案,以指向ganache例項。

  1. 下載和安裝 Ganache

  2. 開啟 truffle.js ,用下面的內容替換:

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*"
    }
  }
};

這樣就可以使用Ganache的預設引數進行連線了。

  1. 儲存一下這個檔案。

  2. 啟動 Ganache

truffle-quickstart

  1. 開啟終端,用Ganache部署智慧合約到區塊鏈
truffle migrate

輸出結果是這樣的:

Using network 'development'.

Running migration: 1_initial_migration.js
  Replacing Migrations...
  ... 0x63b393bd50251ec5aa3e159070609ee7c61da55531ff5dea5b869e762263cb90
  Migrations: 0xd6d1ea53b3a7dae2424a0525d6b1754045a0df9f
Saving successful migration to network...
  ... 0xe463b4cb6a3bbba06ab36ac4d7ce04e2a220abd186c8d2bde092c3d5b2217ed6
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Replacing ConvertLib...
  ... 0xa59221bc26a24f1a2ee7838c36abdf3231a2954b96d28dd7def7b98bbb8a7f35
  ConvertLib: 0x33b217190208f7b8d2b14d7a30ec3de7bd722ac6
  Replacing MetaCoin...
  ... 0x5d51f5dc05e5d926323d580559354ad39035f16db268b91b6db5c7baddef5de5
  MetaCoin: 0xcd2c65cc0b498cb7a3835cfb1e283ccd25862086
Saving successful migration to network...
  ... 0xeca6515f3fb47a477df99c3389d3452a48dfe507980bfd29a3c57837d6ef55c5
Saving artifacts...

內容顯示的是交易id和你所部署的智慧合約地址。

  1. 在Ganache中,點選Transactions 按鈕可以看到被處理的交易。

  2. 要與合約進行互動,可以使用Truffle控制檯。類似於Truffle Develop,唯一不同的是它連線到現有區塊鏈(在這種情況下,由Ganache生成的)

truffle console

你會看到下面的提示:

truffle(development)>

與智慧合約互動

使用控制檯通過下面的方式進行互動:

  • 檢視賬戶餘額
MetaCoin.deployed().then(function(instance){return instance.getBalance(web3.eth.accounts[0]);}).then(function(value){return value.toNumber()});
  • 看看有多少以太合適(並注意合約定義1個metacoin價值2以太)
MetaCoin.deployed().then(function(instance){return instance.getBalanceInEth(web3.eth.accounts[0]);}).then(function(value){return value.toNumber()});
  • 從一個賬號轉賬到另一個賬號
MetaCoin.deployed().then(function(instance){return instance.sendCoin(web3.eth.accounts[1], 500);});
  • 檢查是否收到metacoin
MetaCoin.deployed().then(function(instance){return instance.getBalance(web3.eth.accounts[1]);}).then(function(value){return value.toNumber()});
  • 檢查給別人轉賬的賬戶
MetaCoin.deployed().then(function(instance){return instance.getBalance(web3.eth.accounts[0]);}).then(function(value){return value.toNumber()});

ok,Truffle快速入門的教程就到這裡,如果還有疑問可以訪問我們的線上互動課程:

  • 以太坊教程,主要介紹智慧合約與dapp應用開發,適合入門。
  • 以太坊開發,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。

轉載自使用truffle部署以太坊智慧合約到區塊鏈

相關文章