Rustスマートコントラクト安全:アクセス制御と関数の可視性の詳細解説

robot
概要作成中

Rust スマートコントラクト養成日記(7)合約安全之アクセスコントロール

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

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

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

契約関数の可視性を正しく設定することは、契約の安全を保護するために極めて重要です。2020年6月のBancor Network取引所の事件を例に挙げると、重要な転送関数を誤ってpublicに設定したため、ユーザーの資産がリスクにさらされました。

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

  • pub fn: public関数,外部からコントラクトを呼び出すことができる
  • fn: デフォルトの内部関数で、コントラクト内でのみ呼び出すことができます。
  • pub(crate) fn: クレート内部での呼び出しを制限する

また、#[near_bindgen]で修飾されていないimplブロック内で定義されたメソッドもinternalです。

コールバック関数については、publicに設定する必要がありますが、同時に呼び出し元のチェックを行う必要があります。#[private]マクロを使用して実現できます。

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

!

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

関数の可視性を設定するだけでなく、アクセス制御のホワイトリストメカニズムを確立する必要もあります。 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); }

これにより、基本的な所有者権限の制御が可能になります。 さらに、マルチユーザーホワイトリストまたはマルチグループホワイトリストに拡張して、より詳細なアクセス制御を行うことができます。

!

!

!

!

!

!

!

!

!

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 6
  • 共有
コメント
0/400
ser_we_are_ngmivip
· 6時間前
難しいですね、さようならさようなら
原文表示返信0
NFT_Therapyvip
· 07-17 01:06
権限管理は必要です!そうでないと、契約がハックされてしまうと大変なことになります。
原文表示返信0
PonziDetectorvip
· 07-17 01:05
錆びたyydsは最もハードコアです
原文表示返信0
MetaMuskRatvip
· 07-17 01:02
また管理権限のやつが出てきた、逃げる逃げる
原文表示返信0
ser_we_are_earlyvip
· 07-17 00:46
シンプルで過激なのは、権限管理を追加することです。
原文表示返信0
MemeEchoervip
· 07-17 00:40
見ているだけで眠くなる 誰か本当に学んだの?
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)