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

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

この記事では、Rustスマートコントラクトにおける権限管理に関する内容を2つの視点から紹介します:

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

1. コントラクト関数(メソッド)の可視性

スマートコントラクトを作成する際に、契約関数の可視性を指定することで、関数の呼び出し権限を制御できます。これは、契約内の重要な部分が偶発的にアクセスまたは操作されないように保護するために非常に重要です。

Bancor Network取引所を例にとると、2020年6月18日に契約の重要な関数のアクセス制御権限設定ミスによるセキュリティ事件が発生しました。この契約はSolidity言語で書かれており、関数の可視性はpublic/externalとprivate/internalの2種類に分かれています。

Bancorはセキュリティの脆弱性を修正する際に、一部の重要な送金関数をpublic属性に設定してしまい、誰でも契約外からこれらの関数を呼び出して送金操作を行うことができるようになり、ユーザーの59万ドルの資産が深刻なリスクにさらされました。

!

Rustのスマートコントラクトにおいて、関数の可視性制御も同様に重要です。NEAR SDKが定義した#[near_bindgen]マクロで修飾された契約関数には以下のような可視属性があります:

  • pub fn: パブリック関数は、コントラクトインターフェースの一部であり、コントラクトの外部から呼び出すことができます。
  • fn: pubが指定されていない関数は、コントラクト内部でのみ呼び出すことができます。
  • pub(crate) fn: クレートの範囲内で通話を制限します。

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

コールバック関数は、function callで呼び出すためにpublic属性に設定する必要があります。同時に、コールバック関数は契約自体のみが呼び出せるようにする必要があります。#[private]マクロを使用して実現できます。

!

2. 特権関数のアクセス制御(ホワイトリストメカニズム)

関数の可視性に加えて、セマンティックな観点から完全なアクセスコントロールホワイトリストメカニズムを確立する必要があります。特定の特権関数(契約の初期化、開始/一時停止、統一送金など)は、契約の所有者(owner)のみに呼び出すことができます。

特権関数へのアクセスを制御するためにカスタムTraitを実装し、トランザクションの呼び出し者がコントラクトのオーナーであるかどうかを確認できます。

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

この原理に基づいて、カスタムのより複雑なtraitを使用して、ホワイトリストに複数のユーザーまたは複数のホワイトリストを設定し、細かいグループアクセス制御を実現できます。

!

3. より多くのアクセス制御方法

他のRustスマートコントラクトにおけるアクセス制御方法には、次のものが含まれます:

  • コントラクトの呼び出しタイミング制御
  • コントラクト関数のマルチシグ呼び出しメカニズム
  • ガバナンス(DAO)の実現

これらの内容は後続のスマートコントラクト育成日記シリーズで詳細に紹介されます。

!

!

!

!

!

!

!

NEAR-0.93%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 4
  • 共有
コメント
0/400
not_your_keysvip
· 3時間前
Bancorのそのバグについては、今でも理解できていない。
原文表示返信0
SigmaBrainvip
· 22時間前
確かにBancorの失敗の教訓は心に刻まれています
原文表示返信0
NewPumpamentalsvip
· 22時間前
また権限管理について話しているが、なぜBancorの教訓を学ばないのか?
原文表示返信0
ChainWallflowervip
· 22時間前
この権限の問題は理解できました~
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)