🙆‍♀️

[Astar]コントラクト備忘録21(AccessControlの「only_role」について)

2023/03/01に公開

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

1 概要

  1. AccessControlの「only_role」について

2 内容

今回は「modifier(修飾子)」である、「only_role」について見ていきます。
なお、こちらはこの記事の続きになります。

https://zenn.dev/yuki2020/articles/19d46504c6c109

まずは、コード内のこれらの箇所に「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