Rustスマートコントラクト安全実践:アクセス制御と権限管理

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

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

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

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

契約関数の可視性は、誰がこれらの関数を呼び出すことができるかを決定します。可視性を正しく設定することは、契約の重要な部分を保護するために極めて重要です。

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

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

また、単独のimpl Contractコードブロック内でメソッドを定義することで、それを内部メソッドとして設定することができます:

さび #[near_bindgen] impl コントラクト { pub fn increment(&mut self) { self.internal_increment(); } }

impl コントラクト { pub fn internal_increment(&mut self) { self.counter += 1; } }

コールバック関数については、pubに設定し、#[private]マクロを使用して、コントラクト自身のみが呼び出せるように制限する必要があります:

さび #[near_bindgen] impl コントラクト { #[private] pub fn resolve_transfer(&mut self) { // コールバックロジック } }

!

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

関数の可視性を設定するだけでなく、特権関数の呼び出しを制限するためにアクセス制御ホワイトリストメカニズムを構築する必要があります。

以下の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); }

その後、特権関数内でassert_owner()を呼び出して呼び出し元の身分を確認します:

さび impl コントラクト { pub fn privileged_function(&mut self) { self.assert_owner(); // 特権関数のロジック } }

これにより、基本的なオーナー権限の制御を実現できます。さらに、複数のユーザーホワイトリストや複数のホワイトリストグループに拡張することで、より詳細なアクセス制御を実現できます。

それに加えて、コールのタイミング制御やマルチシグメカニズムなど、より複雑なアクセス制御のソリューションも検討できます。契約関数の可視性とアクセス制御を適切に設定することは、契約の安全性を確保するために重要です。

!

!

!

!

!

!

!

!

!

GET6.22%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 5
  • リポスト
  • 共有
コメント
0/400
CryingOldWalletvip
· 07-28 07:37
ついにrustに関するものを見ました、メモしておきます
原文表示返信0
PumpingCroissantvip
· 07-28 03:49
また学べないrust
原文表示返信0
CryptoGoldminevip
· 07-25 08:04
技術デプスは悪くないが、実測ROIはマイニングプールのスケジューリング最適化による。
原文表示返信0
SchrodingerAirdropvip
· 07-25 08:01
この初心者チュートリアルは私を頭が痛くさせる、rustはいつも難しいことをする。
原文表示返信0
GateUser-2fce706cvip
· 07-25 08:01
進化こそが硬い理論であり、Rustのこの波は潮のように生まれました!急いでレイアウトを整えましょう!
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)