[Astar]コントラクト備忘録25(psp22のallowanceについて)
こちらの知見がたまったので、備忘録として残します。
1 概要
- psp22のallowanceについて
2 内容
本日は、psp22のallowanceのあたりを見てみようと思います。
下のように、デフォルトで「increaseAllowance」などの関数が用意されています。
では、Githubを見てみましょう。
「_approve_from_to」という関数が使われているということがわかります。
https://github.dev/Supercolony-net/openbrush-contracts
では、「_approve_from_to」を見てみましょう。
このように、「allowances」にキーとバリューが「insert」されています。
そして、「allowances」というデータを見るとこのように、「Mapping」であることがわかります。
また、TypeGurardを実装した、「AllowancesKey」というキーを用いていることわかりました。
そして、「_allowance」関数を確認すると、「get」関数を使用していることがわかります。
なお、getは次に見るように、Option型で返します。
Nullで返ってくる場合があるので、「unwrap」ではなく、「unwrap_or」を使っています。
https://doc.rust-lang.org/std/option/enum.Option.html#method.unwrap
ちなみに、「allowances」がMappingの型なので、こちらの「get」関数を使えています。
では次に、この「allowances」がどこで使われているかを見てみましょう。
それがこちらの「transfer_from」関数です。
「allowance」が「value」より小さい時に、「InsufficientAllowance」というエラーを返します。
では、実際にやってみましょう。
現在の「allowance」は0です。
次に、「increaseAllowance」で「allowance」を500にしました。(0 + 500 = 500)
では、「transferFrom」を実行してみましょう。
「allowance(500)」より多い「value」を指定すると、このように、想定通り、エラーが起きました。
そして、このように、「allowance」より小さい値を設定するとうまくいきました。
最後に、「allowance」を確認すると、このように、減っていることも確認できました。(500 - 300 = 200)
shibuya
amX69oo96z88FreQRF3A1eAeUes5rd1t7YLotmBMozZw5fr
今回は以上です。
Discussion