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

robot
概要作成中

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

この記事では、Rust スマートコントラクトにおける権限管理の問題を2つの側面から検討します:契約メソッドの可視性と特権関数のアクセス制御。

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

スマートコントラクトを作成する際に、関数の可視性を指定することで、特定の関数を呼び出せるのは誰かを制御し、契約の重要な部分を保護することができます。

2020年6月18日にある取引所で発生したセキュリティ事件を例に挙げます。スマートコントラクトの重要な関数のアクセス制御権限が誤って設定されたため、ユーザー資産がリスクにさらされました。このケースは、契約関数の可視性を正しく設定することの重要性を強調しています。

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

  • pub fn: このメソッドは公開されており、コントラクトインターフェースの一部であり、誰でも外部から呼び出すことができます。
  • fn: pubが明示的に指定されていない場合、その関数はコントラクト内部の他の関数からのみ呼び出されることを意味します。
  • pub(crate) fn: メソッドを crate 内部の範囲内で呼び出すように制限します。

別の内部メソッドの設定方法は、#[near_bindgen]で修飾されていないimpl Contractコードブロック内で定義することです。

コールバック関数については、function callによって呼び出すためにはpublic属性として設定する必要があります。また、コールバック関数が自由に呼び出されないようにするために、#[private]マクロを使用してこれを実現できます。

注意すべきは、Rustではデフォルトですべての内容がプライベートであり、pub Traitのサブプロジェクトとpub Enumの変数のみがデフォルトでパブリックであるということです。

!

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

関数の可視性に加えて、意味的な観点から完全なアクセス制御ホワイトリストメカニズムを確立する必要があります。特定の特権関数(コントラクトの初期化、開始/一時停止など)は、コントラクトの所有者のみが呼び出すことができます。

Rust スマートコントラクトでは、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); }

この方法を使用することで、特権関数へのアクセス制御を実現し、契約の所有者のみがこれらの関数を完全に実行できるようにします。この原理に基づいて、より複雑なホワイトリストメカニズムを設定し、詳細なグループアクセス制御を実現できます。

!

3. その他のアクセス制御方法

上記の方法に加えて、Rust スマートコントラクトには、契約呼び出しのタイミング制御、マルチシグ呼び出しメカニズム、ガバナンス(DAO)の実装など、他のアクセス制御方法もあります。これらの内容は、今後の記事で詳しく探討されます。

!

GET0.59%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 4
  • 共有
コメント
0/400
ProxyCollectorvip
· 4時間前
また権限設定の罠か。誰が引っかかれば不運だ。
原文表示返信0
SelfRuggervip
· 17時間前
また権限の問題で困っています
原文表示返信0
AllTalkLongTradervip
· 17時間前
へへ、去年の取引所のあの罠にまた会ったね。
原文表示返信0
PermabullPetevip
· 18時間前
権限を制御できず、ほぼダウンしそうになった。
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)