# Rustスマートコントラクトにおける権限管理本文は、Rustスマートコントラクトにおける権限管理について2つの側面から紹介します:1. 合約メソッドの可視性2. 特権関数のアクセス制御## 1. コントラクト関数の可視性Rustのスマートコントラクトでは、関数の可視性制御が非常に重要です。2020年6月のBancor Network取引所のセキュリティ事件を例に挙げると、重要な送金関数をpublicに設定してしまったため、ユーザーの資産が危険にさらされました。Rustのスマートコントラクトでは、関数の可視性には以下の種類があります:- pub fn: パブリック関数で、コントラクトの外部から呼び出すことができます。- fn: コントラクト内部のみ呼び出し可能- pub(crate) fn: 内部でのみcrateから呼び出すことができます未だ#[near_bindgen]で修飾されていないimplブロック内でメソッドを定義することによってinternal関数を実装することもできます。コールバック関数については、publicに設定する必要がありますが、同時に契約自身のみが呼び出せるようにする必要があります。この目的を達成するために#[private]マクロを使用することができます。注意すべきことは、Rustではデフォルトですべてがprivateであり、これは古いバージョンのSolidityのデフォルトpublicとは異なるということです。! [](https://img-cdn.gateio.im/social/moments-6967d12c897f0589b734fb88bc385e7c)## 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);}この方法により、オーナーのみが特定の特権関数を呼び出すことができるようになります。この原理に基づいて、より複雑なホワイトリストを設定して、詳細なグループアクセス制御を実現できます。さらなるアクセス制御方法として、呼び出しタイミング制御やマルチシグメカニズムなどが、今後の記事で紹介されます。! [](https://img-cdn.gateio.im/social/moments-ca94a7442872cab9f91f2842feb96bad)! [](https://img-cdn.gateio.im/social/moments-4c9e1911156dc6134b40fab37dd6c539)! [](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スマートコントラクトにおける権限管理
本文は、Rustスマートコントラクトにおける権限管理について2つの側面から紹介します:
1. コントラクト関数の可視性
Rustのスマートコントラクトでは、関数の可視性制御が非常に重要です。2020年6月のBancor Network取引所のセキュリティ事件を例に挙げると、重要な送金関数をpublicに設定してしまったため、ユーザーの資産が危険にさらされました。
Rustのスマートコントラクトでは、関数の可視性には以下の種類があります:
未だ#[near_bindgen]で修飾されていないimplブロック内でメソッドを定義することによってinternal関数を実装することもできます。
コールバック関数については、publicに設定する必要がありますが、同時に契約自身のみが呼び出せるようにする必要があります。この目的を達成するために#[private]マクロを使用することができます。
注意すべきことは、Rustではデフォルトですべてがprivateであり、これは古いバージョンのSolidityのデフォルトpublicとは異なるということです。
!
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); }
この方法により、オーナーのみが特定の特権関数を呼び出すことができるようになります。
この原理に基づいて、より複雑なホワイトリストを設定して、詳細なグループアクセス制御を実現できます。
さらなるアクセス制御方法として、呼び出しタイミング制御やマルチシグメカニズムなどが、今後の記事で紹介されます。
!
!
!
!
!
!
!
!
!