Rustスマートコントラクト安全の関数の可視性と権限管理の詳細解説

robot
概要作成中

Rust スマートコントラクト養成日記(7)契約の安全性における計算精度

この記事では、Rustのスマートコントラクトにおける権限管理について2つの観点から紹介します:

  • コントラクトメソッドのアクセス/呼び出しの可視性
  • 特権関数のアクセス制御/権限と責任の分割

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

コントラクト関数の可視性制御は、重要な部分が誤操作されないように保護するために重要です。2020年6月18日にBancor Network取引所で発生したセキュリティ事件を例に挙げると、重要な送金関数をpublicに設定してしまったため、ユーザーの59万ドルの資産が危険にさらされました。

!

Rustのスマートコントラクトにおいて、関数の可視性は主に次のようになります:

  • pub fn: 公開関数で、契約の外部から呼び出すことができます
  • fn: デフォルトはprivateで、コントラクト内部からのみ呼び出すことができます
  • pub(crate) fn: クレート内からの通話を制限する

別のinternalメソッドを設定する方法は、#[near_bindgen]修飾子を加えずに独立したimpl Contractコードブロックを定義することです。

コールバック関数はpublicに設定する必要がありますが、コントラクト自身のみが呼び出せるように制限する必要があります。#[private]マクロを使用して実現できます。

Rustはデフォルトですべての内容がprivateであり、pub traitとpub enumの項目を除きます。

!

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

関数の可視性に加えて、意味的な観点から完全なアクセス制御ホワイトリストメカニズムを構築する必要があります。SolidityのOwnableコントラクトに似て、特定の特権関数はownerのみが呼び出すことができます。

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); }

これにより、特権関数へのアクセス制御を実現できます。これに基づいて、複数のユーザーのホワイトリストや複数のホワイトリストグループを設定することもできます。

!

3. より多くのアクセス制御方法

その他のアクセス制御方法には、次のものが含まれます:

  • コントラクト呼び出しのタイミング制御
  • 合約関数のマルチシグ呼び出しメカニズム
  • DAOガバナンスの実現

これらの内容は、今後の記事で詳しく紹介されます。

!

!

!

!

!

!

!

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • コメント
  • 共有
コメント
0/400
コメントなし
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)