(日本語訳) Chain Castle – Lesson 3 Chapter 3

Libra
Libra Move言語
スポンサーリンク

Chapter 3 リソースの破棄

Move言語にはガーベッジコレクション機構がないので、スマートコントラクト内で宣言してクリエイトした、リソースのライフサイクルはコントラクトの消滅の最後まで続きます。そのため、リソースはリソースが生成されたモジュールの中でUnapckにより破棄されなければなりません。

特定のリソースをブロックチェーン内に保存しておきたいケースでは、それをブロックチェーンのアドレスに紐づけて、グローバルストレージに公開する必要があります。

このレッスンでは、どの様にしてリソースを破棄するかから始めます。そして、続くセクションでリソースの解放についてカバーします。

とりわけ、リソースをresource name {member variable} = move(resoruce to be destroyed)とすることでアンパックして破壊できます。
簡単な具体例を見てみましょうLibraCoinの破棄プロシージャです。

public destroy_zero(coin: Self.T) {
        let value: u64;
        T { value } = move(coin);
        return;
}

このプロシージャにおいて、最初にu64型のメンバ変数valueを持った、ローカルリソース変数のTを宣言し、そして破棄したいcoinリソースをローカルリソースのTmove()関数を通して、再バインドします。このプロシージャの終わりに、ローカルリソース変数Tは自動的に破棄されます。一連の結果としてcoinリソースはアンバインドとなってもうアクセス不能になります。システムはアンバインドされたリソースをリサイクルするので、結果的にcoinリソースの破壊は達成されます。

実習

さて、CastleCastleAccountリソースを作り、まさにこれらの破棄プロシージャを実装しようとしています。

このレッスンの例の通りに、desCastleプロシージャをBuildCastleモジュールに作ってください。このプロシージャのパラメータ名はcastleで、一時変数名は前のレッスンで使われた名前と同じです。

また同様にCastleAccountモジュールにdesAccountプロシージャを作成します。このプロシージャのパラメータ名はaccountで、一時変数にはnumという名前を付けます。

Move Castle
タイトルとURLをコピーしました