主要なストレージ操作を定義するモジュールはsui::transferである。これはSuiフレームワークに依存するすべてのパッケージにおいて暗黙的にインポートされるため、他の暗黙的にインポートされるモジュール(例:std::optionstd::vector)と同様に、use文を追加する必要はない。

概要

トランスファー(transfer)モジュールは、前述した所有権タイプに対応する全3つのストレージ操作を実行するための関数を提供する:

<aside> ⚠️ このページでは、いわゆる制限付きストレージ操作についてのみ説明する。後ほど、ストア(store)アビリティが導入された後に、パブリックなストレージ操作についても説明する。

</aside>

  1. トランスファー - オブジェクトをアドレスに送り、アカウント所有状態にする;
  2. 共有 - オブジェクトを共有状態にするため、誰でもそれを利用できる;
  3. 凍結 - オブジェクトを不変状態にすることで、それはパブリックな定数となり、決して変更できない

トランスファー(transfer)モジュールは、ほとんどのストレージ操作に対応している。ただし、次の章ではダイナミックフィールドを使った特別なケースが待ち構えている。

所有権と参照:簡単な要約

所有権、スコープ参照の章では、Moveにおける所有権と参照の基本を説明した。ストレージ関数を使用する際には、これらの概念を理解していることが重要である。ここで、最も重要なポイントの簡単な要約を示す:

/// Moved by value
public fun take<T>(value: T) { /* value is moved here! */ abort 0 }

/// For immutable reference
public fun borrow<T>(value: &T) { /* value is borrowed here! can be read */ abort 0 }

/// For mutable reference
public fun borrow_mut<T>(value: &mut T) { /* value is mutably borrowed here! */ abort 0 }

トランスファー

transfer::transfer関数は、オブジェクトを別のアドレスに転送するための公開関数である。そのシグネチャは以下の通りで、キー(key)アビリティを持つタイプと受取人のアドレスのみを受け入れる。注意してもらいたいが、オブジェクトは値として関数に渡されるため、関数のスコープに移動され、その後受取人のアドレスに移動される: