iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0
Web 3

Smart-Contract Language: Move系列 第 18

Day 18 Advanced Topics: Resource part 2

  • 分享至 

  • xImage
  •  

建立和移動資源

定義一個Collection具有Key能力的結構,它將保存類型為向量Item

module Collection {

    struct Item has store {
       
    }
		
		// 通常會在主資源上取名跟 module 一樣,來更好的進行閱讀
    struct Collection has key {
        items: vector<Item>
    }
}

我們來實作如何開始新的收藏和在 account 下儲存資源。

address 0x5 {
  module Collection {

    use 0x1::Vector;

    struct Item has store {}

    struct Collection has key {
        items: vector<Item>
    }

    public fun start_collection(account: &signer) {
        move_to<Collection>(account, Collection {
            items: Vector::empty<Item>()
        })
    }

	}

}

上面範例使用了內置函數 move_to,將 signer 作為第一個參數和 collection 為第二個參數。

move_to 的 schema 為:

native fun move_to<T: key>(account: &signer, value: T);

透過這範例我們可以知道:

  • 只能將資源放在帳戶下,無法訪問 signer 另一個帳戶的值,因此無法將資源放在其他地方。
  • 一個地址下只能儲存一種單一類型的資源,兩次執行相同的操作會導致丟棄現有資源,需避免這種情形發生。

檢查地址是否存在

Move 提供了 exists 功能:

T 的類型可以接受任何資源的類型

schema

native fun exists<T: key>(addr: address): bool;

example

address 0x5 {
  module Collection {

   struct Item has store, drop {}

    struct Collection has store, key {
        items: Item
    }

    // ... skipped ...

    /// 回傳 true 如果 address 存在 Collection resource
    public fun exists_at(at: address): bool {
        exists<Collection>(at)
    }

	}

}

讓我們 Move to Day 19


上一篇
Day 17 Advanced Topics: Resource
下一篇
Day 19 Advanced Topics: Resource part 3
系列文
Smart-Contract Language: Move30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言