🐈

[Astar]コントラクト備忘録31(Flashmintの、「_on_flashloan」について)

2023/03/07に公開

こちらの知見がたまったので、備忘録として残します。

1 概要

  1. psp22 Flashmintについて

2 内容

ここでは、「_on_flashloan」関数を見てみましょう。

まずは、こちらが大まかな中身になります。

https://github.dev/Supercolony-net/openbrush-contracts

最初と最後で、「flush」関数と「load」関数が実行されています。

このように、ストレージキャッシュをクリアして、再ロードをしています。

こちらもご参照ください。
https://zenn.dev/yuki2020/articles/206f780680b1a9

次に、こちらの「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