[Astar]コントラクト備忘録30(Flushを学ぼう)
こちらの知見がたまったので、備忘録として残します。
1 概要
- Flushについて
2 内容
Flushについて知見が溜まりましたので、記事にいたします。
まずは、こちらの「Flush」のtraitを見てみましょう。
このように、「flush」と「load」の二つの関数があることがわかります。
ではまず、「flush」から見てみましょう。
https://github.dev/727-Ventures/openbrush-contracts
「flush」内では、こちらの「set_contract_storage」が使われています。
こちらに書かれているように、値をコントラクトのストレージに書き込むときに使われます。
https://paritytech.github.io/ink/ink_env/
このようにドキュメントを確認すると、キーとバリューを引数に取ることがわかります。
https://paritytech.github.io/ink/ink_env/fn.set_contract_storage.html
では、次に、「load」を見てみましょう。
今度は、「set」ではなく、「get_contract_storage」が使われています。
https://github.dev/727-Ventures/openbrush-contracts
では、何をやっているのかを確認しましょう。
その名の通り、下のように、ストレージキーに対応したストレージを取得することがわかります。
https://paritytech.github.io/ink/ink_env/
こちらを見てみると、引数にキーをとり、値を取ることがわかります。
https://paritytech.github.io/ink/ink_env/fn.get_contract_storage.html
そして、取ってきたstateを「core::mem::swap」を行っています。
ちなみに、「core::mem::swap」はその名の通り、交換を行なっています。
selfと新しく取得したstateを入れ替えています。
ちなみに、「core::mem::swap」はこのようになっています。
https://doc.rust-lang.org/beta/core/mem/fn.swap.html
そして、交換したstate(元々のself)を明示的に破棄するために「ManuallyDrop」を使用しています。
ちなみに、「ManuallyDrop」はこちらになります。
https://doc.rust-lang.org/stable/core/mem/struct.ManuallyDrop.html
今回は以上です。
Discussion