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

robot
概要作成中

Rust スマートコントラクト養成日記(7)契約の安全性における権限管理

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

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

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

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

Rustのスマートコントラクトにおいて、関数の可視性も同様に重要です。NEAR SDKの#[near_bindgen]マクロは、以下のような可視性属性を定義します:

  • pub fn: public関数,契約の外部から呼び出すことができます
  • fn: コントラクト内部でのみ呼び出すことができます
  • pub(crate) fn: クレート内からの通話を制限する

未だ#[near_bindgen]で修飾されていないimpl Contractブロックを通じてinternalメソッドを定義することができます。

コールバック関数はpublicに設定する必要がありますが、契約自体のみが呼び出すことを許可されます。この機能は#[private]マクロを使用して実現できます。

Rustではデフォルトの可視性はプライベートですが、traitとenumの項目は例外です。

!

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

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

Rustコントラクトでは、次のOwnableトレイトを実装できます:

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

これに基づいて、オーナーに対するホワイトリストを実現できます。また、カスタマイズされたより複雑なトレイトを使用して、複数のユーザーのホワイトリストやグループアクセス制御を設定することもできます。

!

!

!

!

!

!

!

!

!

原文表示
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • 報酬
  • 4
  • 共有
コメント
0/400
WhaleWatchervip
· 07-13 07:29
まずはOwnableについて話しましょう
原文表示返信0
GateUser-e51e87c7vip
· 07-13 07:23
手があればそれでいい、こんなに簡単だ
原文表示返信0
DecentralizeMevip
· 07-13 07:22
ううベースロジック
原文表示返信0
ChainSpyvip
· 07-13 07:21
アクセス制御はこんなに複雑なら、全て公開した方がいい。
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)