Remix 測試智能合約:收益共享合約

Rogerh.eth
誌瓜筆記
Published in
6 min readOct 31, 2019

--

Remix 簡介

Remix 是以太坊提供的線上版官方整合開發環境(IDE),有許多可助於開發者開發智能合約的功能,其中包含完整的編譯器、執行合約、環境建置、發布合約等等,讓您在將智能合約部署於區塊鏈前,能夠先測試該合約。

本文將會介紹一個經典的智能合約:收益共享合約
並帶您將此合約部署於 Remix 上,請讀者在學習與閱讀的同時,也跟著步驟操作,相信您能學會測試智能合約的完整流程。

i. 收益共享合約

這個應用被稱為「收益共享」。

簡而言之,這邊要做的是讓合約在部署時產生一組給定的地址,並且任何參與合約的人都可以發送一定數量的資金,而這些資金會被平均分配到每一個地址上,是一個相當簡單的 Solidity 智能合約。

此智能合約的內容摘自於 A.Bahga 和 V.Madisetti 撰寫的 《Blockchain Applications: A Hands-On Approach》 的第四章節,不過 Solidity 的版本較舊,網路上也只有提供到 ^0.4.8 的版本,所以我按照 Solidity 的最新版本做出了修正,將其版本更新至 ^0.5.11。

以下我提供了 RevenueSharing.sol 的 ^0.4.8 版本,也根據每個細節給了詳細解釋,想自行找出版本更新所導致的錯誤並修正的人,可以在理解智能合約後,到 Remix 運行看看,並根據編譯後的錯誤作出調整,再對照 RevenueSharing.sol ^0.5.11 版本:

RevenueSharing.sol ^0.4.8

了解智能合約的內容與編程後,開啟 Remix IDE(線上版本), Remix IDE 是一套與以太坊區塊鏈進行交互來調適交易的工具,除了當作 IDE 來用,還有其他方便開發者測試智能合約的功能,而在這邊我們會使用到以下功能:

  1. Solidity 編譯器,生成我們在其他環境需要用到的訊息。
  2. 運行環境,包括嵌入的 Web3、Web3 提供者、JavaScript 虛擬機。

在這幾個運行環境中,
我們可以在不需要挖礦的狀況下順利測試我們的合約。

如果運行後還是有錯誤無法解決的,可以參考以下代碼來調整:

RevenueSharing.sol ^0.5.11

完成編譯後,點擊 [Details 按鈕],就可以看到這個合約的訊息。
包含:Bytecode、ABI 應用二進制接口與 Web3Deploy
這些訊息在之後要在別的環境部署合約時都是必要的。

我們等等會回到這邊來看這些訊息。

確認好智能合約的內容沒有問題後,
接著我們要將此合約部署於 Remix 上來做測試,
點擊 [DEPLOY&RUN TRANSACTION 按鈕] 進入頁面,便可以開始進行合約部署。

ii.合約部署

Deploy & Run Transaction

[“0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c”, “0x14723A09ACff6D2A60DcdF7aA4AFf308FDDC160C”, “0x4B0897b0513fdC7C541B6d9D7E929C4e5364D2dB”, “0x4B0897b0513fdC7C541B6d9D7E929C4e5364D2dB”]
  • Gas 限制是為了指明能在任一交易中花費的 gas 數量,
    由於目前處於測試環境所以暫時不用調整。
  • Value 部分是我們在合約部署和執行一個函數時發送的以太幣數量。
    這個例子中部署時不需要設定,但當您要執行並測試此合約時,便要填入數值,例如我想分配 40 ether,Value 空格處便要填入 40,並將選擇 ether 作為貨幣。

將合約部署至 JavaScript VM

選取我們剛剛撰寫的合約 RevenueSharing.sol,按下 [Deploy] 鈕來將合約部署到 JavaScript VM 上。
另外,部署合約時需要指定 “address[] addresses”,還記得我們剛剛複製到剪貼簿的帳戶嗎?將那些帳戶輸入至 ShareRevenuePrepare() 這個構造函數中,如此便完成了合約部署!

注意 ShareRevenuePrepare() 的參數是否為以上設定的帳號

合約部署後

與已部署合約進行交互

  • 檢查變量
點擊可以看到詳細內容,如下:
  • 讓第一個帳戶存入 40 ETH,根據邏輯這 40 ETH 會被均分到每一個帳戶之中,所以我們在 Value 欄位填入 40 ETH,並點擊 ShareRevenue 函數紐,就會執行以上說明的操作
執行 ShareRevenue() 函數結果

由以上結果可以看出第一個帳戶減少了 40ETH 並分給了剪貼簿的 4 個帳戶,但我們會發現有個帳戶又多賺了 10 ETH,這是因為我在當初分配的時候就多給了這位股東一份,用此辦法就可以讓這個合約不一定需要「平均」分配。

總結

以上就是如何以 Remix 幫助我們測試智能合約,Remix 有非常方便的功能和直觀的用戶介面,這能夠幫助用戶以較低的成本測試智能合約。希望這篇教程對您有幫助,如果有任何問題歡迎在底下留言區留言或討論。

參考資料

Blockchain Applications: A Hands-On Approach

Solidity IDE Remix 簡單教學

開發智能合約 — 線上版 IDE 之 Remix 基礎篇 (Day09)

--

--

Rogerh.eth
誌瓜筆記

Sharing what i have learned for becoming a great developer.