[Astar]コントラクト備忘録21(AccessControlの「only_role」について)
こちらの知見がたまったので、備忘録として残します。
1 概要
- AccessControlの「only_role」について
2 内容
今回は「modifier(修飾子)」である、「only_role」について見ていきます。
なお、こちらはこの記事の続きになります。
まずは、コード内のこれらの箇所に「only_role」というmodifiersがあることが確認できます。
Githubを確認すると、このように「#[modifier_definition]」で定義されていることがわかります。
まずは、こちらを見てみましょう。
https://github.dev/Supercolony-net/openbrush-contracts
chatGPTによると、これらはジェネリック型パラメータのリストになります。
chatGPT
そして、「body」は一度しか呼び出せない「FnOnce」であるという制約も受けています。
ちなみに、chatGPTによると、一度しか呼び出せないのは所有権が奪われるからということがわかりました。
chatGPT
その他、「only_role」の中で実行されている「check_role」を確認すると、このようになっています。
このように、roleがない場合は、「AccessControlError」の「MissingRole」を返すことがわかります。
なお、下のように、「AccessControlError」は3つあり、「MissingRole」はその中の一つです。
では、実際のこちらのコードで、「only_role」を試してみましょう。
「mint」関数でやってみます。
すると、このように、「test2」には「MINTER」というroleがないので、エラーになっています。
では、このように「grant_role」で「MINTER」のroleを付与してみましょう。
すると、このようにまだエラーは出ているものの、先ほどのエラーは出なくなったことがわかります。
shibuya
bJz21JKwPDaNHtMN9KeQJQJxHWTHxYoaoWb3ux3wr1KnJEf
今回は以上です。
Discussion