[Astar]RMRKコントラクト備忘録⑦(MultiAssetを読み進めてみよう!②)
では、こちらの「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