[Astar]コントラクト備忘録31(Flashmintの、「_on_flashloan」について)
こちらの知見がたまったので、備忘録として残します。
1 概要
- psp22 Flashmintについて
2 内容
ここでは、「_on_flashloan」関数を見てみましょう。
まずは、こちらが大まかな中身になります。
https://github.dev/Supercolony-net/openbrush-contracts
最初と最後で、「flush」関数と「load」関数が実行されています。
このように、ストレージキャッシュをクリアして、再ロードをしています。
こちらもご参照ください。
次に、こちらの「FlashBorrowerRef」部分を見てみましょう。(借り手)
こちらにあるように、「FlashBorrowerRef」のインスタンスを作成しています。
次に、そのインスタンスに対して行なっている、「call_flags」を見てみましょう。
これにより、トランザクションが歳入可能である旨を設定します。
ちなみに、「call_flags」についてはこちらをご参照ください。
https://paritytech.github.io/ink/ink_env/call/struct.CallBuilder.html#method.call_flags
また、「set_allow_reentry」についてはこちらです。
https://paritytech.github.io/ink/ink_env/struct.CallFlags.html#method.set_allow_reentry
では、戻り、こちらの「fire」メソッドを見てみましょう。
「fire」メソッドはこちらになりますが。。
4.0.0のバージョンから無くなってしまったようです。。
https://docs.rs/ink_env/3.4.0/ink_env/call/struct.CallBuilder.html#method.fire
ちなみに、やっている内容としましては、「on_flashloan」メソッドをトリガーしているようです。
そして、結果を下のように受け取っています。
ちなみに、「NotCallable」と「CalleeTrapped」の説明もこのように記載されています。
「NotCallable」は受け取り側がコントラクトではないこと、「CalleeTrapped」は受け取り側が「before_received」を実装していないことで発生するようです。
なお、2つのエラーである、「FlashLenderError」「FlashBorrowerError」の二つについても言及されていました。
その名の通り、エラーの原因が貸す側なのか、借りる側を知ることができます。
本日は以上です。
Discussion