# Rust スマートコントラクト養成日記(7)契約の安全性における計算精度この記事では、Rustのスマートコントラクトにおける権限管理について2つの観点から紹介します:- コントラクトメソッドのアクセス/呼び出しの可視性- 特権関数のアクセス制御/権限と責任の分割## 1. コントラクト関数の可視性コントラクト関数の可視性制御は、重要な部分が誤操作されないように保護するために重要です。2020年6月18日にBancor Network取引所で発生したセキュリティ事件を例に挙げると、重要な送金関数をpublicに設定してしまったため、ユーザーの59万ドルの資産が危険にさらされました。! [](https://img-cdn.gateio.im/social/moments-6967d12c897f0589b734fb88bc385e7c)Rustのスマートコントラクトにおいて、関数の可視性は主に次のようになります:- pub fn: 公開関数で、契約の外部から呼び出すことができます- fn: デフォルトはprivateで、コントラクト内部からのみ呼び出すことができます- pub(crate) fn: クレート内からの通話を制限する別のinternalメソッドを設定する方法は、#[near_bindgen]修飾子を加えずに独立したimpl Contractコードブロックを定義することです。コールバック関数はpublicに設定する必要がありますが、コントラクト自身のみが呼び出せるように制限する必要があります。#[private]マクロを使用して実現できます。Rustはデフォルトですべての内容がprivateであり、pub traitとpub enumの項目を除きます。! [](https://img-cdn.gateio.im/social/moments-ca94a7442872cab9f91f2842feb96bad)## 2. 特権関数のアクセス制御関数の可視性に加えて、意味的な観点から完全なアクセス制御ホワイトリストメカニズムを構築する必要があります。SolidityのOwnableコントラクトに似て、特定の特権関数はownerのみが呼び出すことができます。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);}これにより、特権関数へのアクセス制御を実現できます。これに基づいて、複数のユーザーのホワイトリストや複数のホワイトリストグループを設定することもできます。! [](https://img-cdn.gateio.im/social/moments-4c9e1911156dc6134b40fab37dd6c539)## 3. より多くのアクセス制御方法その他のアクセス制御方法には、次のものが含まれます:- コントラクト呼び出しのタイミング制御- 合約関数のマルチシグ呼び出しメカニズム- DAOガバナンスの実現これらの内容は、今後の記事で詳しく紹介されます。! [](https://img-cdn.gateio.im/social/moments-b465966b93b04b1f687c676e62c39bc2)! [](https://img-cdn.gateio.im/social/moments-6211a037604bd45f9d638f6f0a7ce5c2)! [](https://img-cdn.gateio.im/social/moments-7f9b5788662e38094194172212155bb5)! [](https://img-cdn.gateio.im/social/moments-2c64fb18a6182ccc014ef4c949213e7e)! [](https://img-cdn.gateio.im/social/moments-5b7fd87c1bbe1b57c40c5349716f6d7c)! [](https://img-cdn.gateio.im/social/moments-5c3bdf877fa7e468268992229d94bebc)! [](https://img-cdn.gateio.im/social/moments-54c0aed04624592c740791245f01325a)
Rustスマートコントラクト安全の関数の可視性と権限管理の詳細解説
Rust スマートコントラクト養成日記(7)契約の安全性における計算精度
この記事では、Rustのスマートコントラクトにおける権限管理について2つの観点から紹介します:
1. コントラクト関数の可視性
コントラクト関数の可視性制御は、重要な部分が誤操作されないように保護するために重要です。2020年6月18日にBancor Network取引所で発生したセキュリティ事件を例に挙げると、重要な送金関数をpublicに設定してしまったため、ユーザーの59万ドルの資産が危険にさらされました。
!
Rustのスマートコントラクトにおいて、関数の可視性は主に次のようになります:
別のinternalメソッドを設定する方法は、#[near_bindgen]修飾子を加えずに独立したimpl Contractコードブロックを定義することです。
コールバック関数はpublicに設定する必要がありますが、コントラクト自身のみが呼び出せるように制限する必要があります。#[private]マクロを使用して実現できます。
Rustはデフォルトですべての内容がprivateであり、pub traitとpub enumの項目を除きます。
!
2. 特権関数のアクセス制御
関数の可視性に加えて、意味的な観点から完全なアクセス制御ホワイトリストメカニズムを構築する必要があります。SolidityのOwnableコントラクトに似て、特定の特権関数はownerのみが呼び出すことができます。
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); }
これにより、特権関数へのアクセス制御を実現できます。これに基づいて、複数のユーザーのホワイトリストや複数のホワイトリストグループを設定することもできます。
!
3. より多くのアクセス制御方法
その他のアクセス制御方法には、次のものが含まれます:
これらの内容は、今後の記事で詳しく紹介されます。
!
!
!
!
!
!
!