iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 4
0
Blockchain

區塊練起來-智能合約與DApp開發系列 第 4

[區塊練起來-智能合約與DApp開發] DAY 04 - 智能合約開發工具

  • 分享至 

  • xImage
  •  

貼心小語

上一篇的內容講解手續費的觀念與計算,這一篇就會開始進行實作的部分,會先從工具切入,在後面能夠更快速進入開發!


開發工具簡介與安裝

開發智能合約的工具有很多,這邊會以我較常用的工具來實作與講解。

Ganache

https://ithelp.ithome.com.tw/upload/images/20190808/201193382P9iQYcC7N.png
圖片來源:Ganache 官方文檔

Ganache 是由 Truffle 開發團隊打造的區塊鏈測試環境,有圖形化介面版本與 CLI 版本。 Ganache 可以讓開發者迅速建立一個虛擬的區塊鏈環境,以提供智能合約完善的測試環境,預設情況下會自動完成挖礦,交易處理速度可以說是立即完成,而一切在 Ganache 上所部署的合約、進行的交易都是存在記憶體中,關閉程式後就會清空。

安裝方式十分簡單,至官方網站下載即可。

安裝完開啟後,點選 QuickStart 快速建置工作站,畫面如下:
https://ithelp.ithome.com.tw/upload/images/20190809/20119338d7RQDZJ2pd.png

畫面上可以看到 Ganache 在預設下有10個擁有100 ETH的帳戶(可惜不是真的 ETH),給開發者完整的開發體驗,瞬間變成有錢人!(誤
介面上也有該測試環境的相關配置,如:Gas Price、Gas Limit、RPC Server等,這些設定都可以由開發者進行調整。

以太坊用 JSON RPC 的方式提供 API 來與以太坊做互動,所以節點需要架設 RPC Server 來提供 API 服務。

Ganache 共有6個頁面,分別是:

  • 帳戶(Account):顯示帳戶相關資訊,為預設頁面,也就是上方那張圖的畫面。
  • 區塊(Blocks):顯示在區塊鏈中已經挖到的區塊、消耗的 Gas 和交易。
  • 交易(Transactions):列出所有交易。
  • 合約(Contracts):列出該工作站的 Truffle 專案中所有合約。
  • 事件(Events):列出自此工作站創建以來已觸發的所有事件。
  • 日誌(Logs):記錄 Server 的日誌紀錄。

使用 Ganache 來建置測試環境可以省去許多成本,學習上也比較沒有難度,可以快速上手,好 Ganache 不用嗎/images/emoticon/emoticon24.gif

Truffle


圖片來源:Truffle Github

Truffle 是一套針對 Solidity 語言的智能合約開發框架,可以讓開發者快速編譯、部署、測試智能合約,並且可以使用 JavaScript 來進行智能合約測試,對於 DApp 開發者而言非常友善,十分推薦給大家!

那麼怎麼安裝呢?只要打開終端機並使用 npm 來安裝就可以囉!安裝指令如下:

npm install -g truffle

在想要建立專案的路徑下輸入指令來初始化 Truffle 專案:

truffle init

初始化完畢後如下:
https://ithelp.ithome.com.tw/upload/images/20190809/20119338sjJtXCmmlq.png
產生了三個資料夾:

  • contracts:存放智能合約的資料夾。
  • migrations:存放部署合約用的檔案。
  • test:存放測試合約用的檔案。

並產生了三個檔案:

  • contracts/Migrations.sol
    智能合約程式範例,合約名稱為Migrations。
  • migrations/1_initial_migration.js
    部署範例合約用的 JavaScript 檔,檔案名稱開頭必須是 阿拉伯數字 ,代表的意義為 執行的順序
    ※ require 的字串即為合約名稱。
const Migrations = artifacts.require("Migrations");

module.exports = function(deployer) {
  deployer.deploy(Migrations);
};
  • truffle-config.js
    Truffle 專案的設定檔。

部署合約到Ganache

先將範例程式進行編譯:

truffle compile

完成後如下圖:
https://ithelp.ithome.com.tw/upload/images/20190809/20119338VnpgVPaw33.png
並且在專案下會多一個資料夾,叫 build ,裡面會有完成編譯的智能合約:
https://ithelp.ithome.com.tw/upload/images/20190809/20119338Ks3HgmkkyR.png
咦?怎麼是 JSON 檔呢?
沒錯,編譯完成後產生的即為 JSON 檔,內容為智能合約的相關資訊,包含了 ABIbytecode
完成編譯後進行部署的設定,針對 Ganache RPC Server (從Ganache中查詢)來變更 truffle-config.js 的內容:

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

設定完畢後,就可以部署啦~(撒花
輸入下方指令執行部署的動作:

truffle migrate

部署完成後可以看到 Ganache 中第一個帳戶的金額減少了,沒錯,預設是使用第一個帳戶來扣款。
https://ithelp.ithome.com.tw/upload/images/20190809/20119338YGr8e4slvH.png
最後透過 Ganache 的交易頁面來查看剛剛部署的合約位址:
https://ithelp.ithome.com.tw/upload/images/20190809/20119338YudskaNYuk.png
這樣就可以使用合約位址來呼叫智能合約,並使用ABI進行互動。


今日小結

今天的內容就是了解 Truffle 與 Ganache 的基本操作並學會部署智能合約。這在開發上會非常頻繁使用,務必熟練!


參考資料

Ganache官方網站


上一篇
[區塊練起來-智能合約與DApp開發] DAY 03 - 介紹智能合約(2)
下一篇
[區塊練起來-智能合約與DApp開發] DAY 05 - HelloWorld合約
系列文
區塊練起來-智能合約與DApp開發31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
U0733133
iT邦新手 5 級 ‧ 2021-05-24 14:47:04

您好,想請問部署完成後Ganache 中第一個帳戶的金額"沒有"減少了,
重複測試過幾次了還是無法解決想問,可能是出了甚麼問題嗎?謝謝您

C:\Users\user>cd /d C:\Users\user\Administrator

C:\Users\user\Administrator>truffle migrate

Compiling your contracts...

Everything is up to date, there is nothing to compile.

Network up to date.
有確認過版本

HAO iT邦研究生 1 級 ‧ 2021-05-25 19:50:37 檢舉

你好,從你的錯誤訊息來看,應該是你的智能合約沒有變動的關係,如果你先前已經 compile 過,但智能合約沒有變動過,truffle 會認定你已經編譯過了,可以試著把 truffle 專案砍掉重新建立一個試試看。

U0733133 iT邦新手 5 級 ‧ 2021-05-26 10:43:22 檢舉

好的謝謝您

我要留言

立即登入留言