💬

[Astar]RMRKコントラクト備忘録⑦(MultiAssetを読み進めてみよう!②)

2023/04/03に公開

では、こちらの「add_asset_to_token」メソッドを見ていきましょう。

まずは「collection_asset_entries」でアセットが設定されているかを確認しています。

続いて、下のように、このトークンのオーナーを取得しています。

ここでは、該当のトークンIDにアセットが設定されていないことを確認しています。

また、どのようなデータが存在するかも確認します。

このように、「accepted_assets」「pending_assets」が存在しています。

その上で、「ensure_not_accepted」「ensure_not_pending」を確認してみます。

それぞれ、トークンIDに設定されていないことを確認し、設定されている場合には、エラーを返します。

ちなみに、「contains」はこのようにその内容が含まれているかどうかを返します。

こちらの「replace_asset」関数も見てみましょう。

まずは、「accepted_assets」を取得し、引数に設定した、「replace_with_id」でインデックスを取得しています。

それを元に、「insert」で書き換えを行っています。

その続きを見てみましょう。

下のように、callerがownerか否かによって、「accepted_assets」か「pending_assets」かに振り分けられています。

例えば、下のように、owner以外で実行してみます。

すると、Pendingの方に設定されたことが確認できました。

ちなみに、「get_pending_token_assets」は下のように、「pending_assets」の値を取得していることがわかります。

また、「total_token_assets」を確認すると、次のようになりました。

コードを確認すると、下のようになっており、「accepted_assets」と「pending_assets」をそれぞれ取得していることが確認できました。

では、「accept_asset」関数を実行してみましょう。

pending状態のものをacceptedに変えます。

owner以外で実施しようとすると、このように、ownerではない旨のエラーが出ます。

ownerに変更すると、実行することができました。

「total_token_assets」で確認すると、pendingがなくなっていることが確認できました。

なお、「accept_asset」関数を確認すると、このようになっております。

「remove_from_pending_assets」を確認すると、pending_assetsからindexのものがremoveされていることが確認できました。

今回は以上です。

Discussion