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

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

本文は、Rust スマートコントラクトにおける権限管理の問題を二つの側面から探討します:

  1. コントラクトメソッドの可視性
  2. 特権関数のアクセス制御

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

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

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

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

また、#[near_bindgen] 修飾されていない impl ブロック内に関数を定義することで、内部関数として設定することもできます。

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

注意が必要なのは、Rustではデフォルトですべての内容がprivateであり、pub Traitとpub Enumの項目を除いていることです。

!

特権関数のアクセス制御

関数の可視性に加えて、意味的な観点から完全なアクセス制御メカニズムを構築する必要があります。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); }

このようなトレイトを使用することで、特権関数へのアクセス制御を実現し、契約の所有者のみがこれらの関数を呼び出すことができるようにします。

この原理に基づいて、より複雑なトレイトをカスタマイズすることで、複数のユーザーのホワイトリストや複数のホワイトリストグループに対する精密なアクセス制御を実現できます。

そのほかにも、呼び出しタイミングの制御やマルチシグネチャメカニズムなど、さまざまなアクセス制御方法を実現して、異なるシーンでのセキュリティニーズに応えることができます。

!

!

!

!

!

!

!

!

!

GET1.52%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 6
  • 共有
コメント
0/400
WalletManagervip
· 08-01 21:48
権限管理は厳格に行うべきです
原文表示返信0
HashBrowniesvip
· 08-01 05:29
権限管理は本当に素晴らしいです
原文表示返信0
GasFeeCriervip
· 07-30 19:25
呼び出し権限は慎重に設定する必要があります
原文表示返信0
TeaTimeTradervip
· 07-30 19:21
権限管理は本当に難しい
原文表示返信0
CoinBasedThinkingvip
· 07-30 19:07
セキュリティの脆弱性が多すぎるのではないか
原文表示返信0
NotFinancialAdvicevip
· 07-30 18:57
確かにとても役に立つ内容です
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)