Rustスマートコントラクト安全: 関数の可視性とアクセス制御の実践

robot
概要作成中

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

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

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

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

契約の関数の可視性を適切に設定することは、契約の安全を保護するために非常に重要です。2020年6月18日にBancor Network取引所で発生したセキュリティ事件を例に挙げると、重要な送金関数をpublicとして誤って設定したため、ユーザーの資産が深刻なリスクにさらされました。

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

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

また、#[near_bindgen]を付けないimplブロックを定義することでinternalメソッドを実装できます。

コールバック関数については、publicに設定する必要がありますが、追加のアクセス制御が必要です。

さび #[private] pub fn resolve_transfer(&mut self) { env::log_str("これはコールバックです"); }

!

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

関数の可視性に加えて、完全なアクセス制御ホワイトリストメカニズムを構築する必要があります。Traitをカスタマイズして、SolidityのonlyOwner修飾子に似た効果を実現できます。

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

これにより、オーナーだけが特定の特権関数を呼び出すことが制限されます。これに基づいて、より複雑なマルチユーザーのホワイトリストや複数のホワイトリストを設定し、詳細なグループアクセス制御を実現できます。

Rustスマートコントラクト中には、呼び出しタイミング制御やマルチシグ機構など、他のアクセス制御方法もあります。これらは後続の記事で紹介します。

!

!

!

!

!

!

!

!

!

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