[Astar]コントラクト備忘録29(psp22 Flashmintを触ってみよう)
こちらの知見がたまったので、備忘録として残します。
1 概要
- psp22 Flashmintについて
2 内容
本日は、こちらのOpenBrushのexample(psp22 Flashmint)につきまして、まずはどのように動かすのかをみてみようと思います。
#![cfg_attr(not(feature = "std"), no_std)]
#![feature(min_specialization)]
#[openbrush::contract]
pub mod my_psp22_flashmint {
use openbrush::{
contracts::psp22::extensions::flashmint::*,
traits::Storage,
};
#[ink(storage)]
#[derive(Default, Storage)]
pub struct Contract {
#[storage_field]
psp22: psp22::Data,
}
impl PSP22 for Contract {}
impl FlashLender for Contract {}
// To override an internal method from OpenBrush implementation
// you need to override that in the `PSP22FlashLenderInternal` trait
impl Internal for Contract {
/// Override `get_fee` function to add 1% fee to the borrowed `amount`
fn _get_fee(&self, amount: Balance) -> Balance {
amount / 100
}
}
impl Contract {
#[ink(constructor)]
pub fn new(total_supply: Balance) -> Self {
let mut instance = Self::default();
assert!(instance._mint_to(Self::env().caller(), total_supply).is_ok());
instance
}
}
}
ではGithubからコードを見てみましょう。
まずは、「max_flashloan」からです。
ここで、if分岐で「Self::env()::account_id」となっていますので、自分自身のコントラクトを指定する必要があります。
https://github.dev/727-Ventures/openbrush-contracts
このように指定すると、「flashloan」ができる最大値が出てきました。
「totalsupply」は現在こちらになります。
そして、Balance::MAXは下のように、u128型の最大値を表す定数です。
では次に、手数料を表す「flash_fee」を見てみましょう。
先ほどと同様に、引数にアカウントIDを取ります。
エラーも見てみましょう。
「FlashLenderError」の中に「WrongTokenAddress」が入っていました。
そして、「get_fee」関数を見ると、このように0がデフォルトで設定されていました。
そのため、今回使うコードでは、overrideされ、amountの100分の1となるように設定されていました。
では、実際にやってみましょう。
異なるアドレスを設定した時には、このように、「WrongTokenAddress」というエラーが出ました。
自信を設定し、1000を入れたところ、その100分の1の10が出てきました。
では、最後に「flashloan」を見てみましょう。
下のように、mintやburnが行われています。
「_on_flashloan」は長くなるので、別の記事にしようと思います。
まずは、現在、下のbalanceがある状態でテストをしてみます。
下のように、「flashloan」をしようと知ると「AllowanceDoesNotAllowRefund」というエラーが発生しました。
そのため、まずは「allowance」を増やします。
下のようにして、「allowance」を4000にしました。
下のように確認して、4000が確かにあることを確認しました。
では、「flashloan」をしてみましょう。
ここでは500を実行しました。
では、「allowance」を見てみましょう。
下のように減っていることが確認できました。
続いて、balanceOfも確認してみます。
このように想定通りに動いていることが確認できました。
shibuya
XBW8z2hVjD3Raz4m7D2QA6Prigz8Kp2mNaUGtbpKTENAWNm
本日は以上です。
Discussion