Rustスマートコントラクトにおける権限管理:コントラクト関数の可視性と特権アクセス

robot
概要作成中

Rustスマートコントラクトにおける権限管理

本文は、Rustスマートコントラクトにおける権限管理について2つの側面から紹介します:

  1. 合約メソッドの可視性
  2. 特権関数のアクセス制御

1. コントラクト関数の可視性

Rustのスマートコントラクトでは、関数の可視性制御が非常に重要です。2020年6月のBancor Network取引所のセキュリティ事件を例に挙げると、重要な送金関数をpublicに設定してしまったため、ユーザーの資産が危険にさらされました。

Rustのスマートコントラクトでは、関数の可視性には以下の種類があります:

  • pub fn: パブリック関数で、コントラクトの外部から呼び出すことができます。
  • fn: コントラクト内部のみ呼び出し可能
  • pub(crate) fn: 内部でのみcrateから呼び出すことができます

未だ#[near_bindgen]で修飾されていないimplブロック内でメソッドを定義することによってinternal関数を実装することもできます。

コールバック関数については、publicに設定する必要がありますが、同時に契約自身のみが呼び出せるようにする必要があります。この目的を達成するために#[private]マクロを使用することができます。

注意すべきことは、Rustではデフォルトですべてがprivateであり、これは古いバージョンのSolidityのデフォルトpublicとは異なるということです。

!

2. 特権関数のアクセス制御

関数の可視性に加えて、意味的な観点から完全なアクセス制御ホワイトリストメカニズムを構築する必要があります。

SolidityのonlyOwner修飾子に似て、Rustでカスタムトレイトを実装できます。

さび pub トレイト Ownable { fn assert_owner(&self) { assert_eq!(env::p redecessor_account_id(), self.get_ owner()); } fn get_owner(&self) -> AccountId; fn set_owner(&mut自己、所有者:AccountId); }

この方法により、オーナーのみが特定の特権関数を呼び出すことができるようになります。

この原理に基づいて、より複雑なホワイトリストを設定して、詳細なグループアクセス制御を実現できます。

さらなるアクセス制御方法として、呼び出しタイミング制御やマルチシグメカニズムなどが、今後の記事で紹介されます。

!

!

!

!

!

!

!

!

!

GET7%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 5
  • リポスト
  • 共有
コメント
0/400
Rugman_Walkingvip
· 12時間前
またBancorの古い罠にはまってしまった。パンツもなくなるところだった。
原文表示返信0
TokenToastervip
· 08-07 12:36
バンコールは本当に馬鹿げた例だ。
原文表示返信0
MevTearsvip
· 08-06 06:28
bancorそれは見たことがあります 本当にダメです
原文表示返信0
OnlyOnMainnetvip
· 08-06 06:26
うーん、bancorの件は今でも私を怖がらせる。
原文表示返信0
0xLuckboxvip
· 08-06 06:18
どうしていつも誰かが権限設定を間違えるのか
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)