iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
Web 3

從BlockChain看Web3系列 第 12

[Day 12] Tutorial-Step 6:把BasicCoin module改為通用

  • 分享至 

  • xImage
  •  

在 Move 中,我們可以使用泛型來定義不同輸入資料類型的函數和結構。泛型是庫程式碼的一個很好的構建塊。在本節中,我們將使我們的簡單BasicCoin模組變得通用,以便它可以作為可供其他使用者模組使用的庫模組。

首先,我們將類型參數新增到資料結構:

struct Coin<phantom CoinType> has store {
    value: u64
}

struct Balance<phantom CoinType> has key {
    coin: Coin<CoinType>
}

我們也以相同的方式將類型參數新增到我們的方法中。例如,withdraw變成如下:

fun withdraw<CoinType>(addr: address, amount: u64) : Coin<CoinType> acquires Balance {
    let balance = balance_of<CoinType>(addr);
    assert!(balance >= amount, EINSUFFICIENT_BALANCE);
    let balance_ref = &mut borrow_global_mut<Balance<CoinType>>(addr).coin.value;
    *balance_ref = balance - amount;
    Coin<CoinType> { value: amount }
}

看一下step_6/BasicCoin/sources/BasicCoin.move完整的實作。

此時,熟悉以太坊的讀者可能會注意到,該模組與ERC20 代幣標準具有類似的用途,它提供了在智能合約中實現可互換代幣的介面。使用泛型的一個關鍵優點是能夠重複使用程式碼,因為泛型庫模組已經提供了標準實現,並且實例化模組可以透過包裝標準實現來提供客製化。

我們提供了一個名為的小模組MyOddCoin,用於實例化Coin類型並自訂其傳輸策略:只能傳輸奇數個硬幣。我們還包括兩個 測試來測試此行為。您可以使用在step2 和step 5 中學到的命令來執行測試。


上一篇
[Day 11] Tutorial-Step 5: BasicCoin module 加上Unit Test
下一篇
[Day13] 區塊鏈智能合約原理 - 複習1
系列文
從BlockChain看Web330
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言