Ця стаття розгляне питання контролю доступу в смартконтрактах Rust з двох сторін:
Видимість методів смартконтракту
Контроль доступу до функцій з привілейованим доступом
Видимість функцій смартконтракту
У Rust смартконтрактах контроль видимості функцій є надзвичайно важливим. Наприклад, у безпековій події, що сталася в біржі Bancor Network у 2020 році, через неправильне налаштування критичної функції переказу на public, активи користувачів опинилися під загрозою.
У смартконтрактах Rust на NEAR основними типами видимості функцій є такі:
pub fn: публічна функція, доступна для виклику ззовні контракту
fn: Можна викликати лише всередині смартконтракту
pub(crate) fn: обмежити виклик всередині crate
Крім того, визначення функції в блоці impl, який не позначений #[near_bindgen], також може бути встановлено як внутрішню функцію.
Для функцій зворотного виклику потрібно встановити доступність як public, але при цьому обмежити виклики тільки самим контрактом. Для цього можна використовувати макрос #[private].
Слід звернути увагу, що за замовчуванням у Rust все є приватним, окрім елементів у pub Trait та pub Enum.
!
Контроль доступу до привілейованих функцій
Окрім видимості функцій, також необхідно з семантичної точки зору встановити повний механізм контролю доступу. Аналогічно до модифікатора onlyOwner у Solidity, ми можемо визначити подібний trait у Rust:
Використання такого trait дозволяє реалізувати контроль доступу до привілейованих функцій, забезпечуючи, що лише власник контракту може викликати ці функції.
На основі цього принципу ми можемо реалізувати детальний контроль доступу для багатокористувацького білого списку або кількох груп білого списку, налаштувавши більш складні trait.
Крім того, можна реалізувати контроль часу виклику, багатопідписну механіку та інші методи контролю доступу, щоб задовольнити різні потреби безпеки в різних сценаріях.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Rust смартконтракти контроль доступу: видимість функцій та управління привілейованим доступом
Контроль доступу в смартконтрактах Rust
Ця стаття розгляне питання контролю доступу в смартконтрактах Rust з двох сторін:
Видимість функцій смартконтракту
У Rust смартконтрактах контроль видимості функцій є надзвичайно важливим. Наприклад, у безпековій події, що сталася в біржі Bancor Network у 2020 році, через неправильне налаштування критичної функції переказу на public, активи користувачів опинилися під загрозою.
У смартконтрактах Rust на NEAR основними типами видимості функцій є такі:
Крім того, визначення функції в блоці impl, який не позначений #[near_bindgen], також може бути встановлено як внутрішню функцію.
Для функцій зворотного виклику потрібно встановити доступність як public, але при цьому обмежити виклики тільки самим контрактом. Для цього можна використовувати макрос #[private].
Слід звернути увагу, що за замовчуванням у Rust все є приватним, окрім елементів у pub Trait та pub Enum.
!
Контроль доступу до привілейованих функцій
Окрім видимості функцій, також необхідно з семантичної точки зору встановити повний механізм контролю доступу. Аналогічно до модифікатора onlyOwner у Solidity, ми можемо визначити подібний trait у Rust:
іржа публічний трейд Власний { fn assert_owner(&self) { assert_eq!(env::p redecessor_account_id(), self.get_ owner()); } fn get_owner(&self) -> AccountId; fn set_owner(&mut self, власник: AccountId); }
Використання такого trait дозволяє реалізувати контроль доступу до привілейованих функцій, забезпечуючи, що лише власник контракту може викликати ці функції.
На основі цього принципу ми можемо реалізувати детальний контроль доступу для багатокористувацького білого списку або кількох груп білого списку, налаштувавши більш складні trait.
Крім того, можна реалізувати контроль часу виклику, багатопідписну механіку та інші методи контролю доступу, щоб задовольнити різні потреби безпеки в різних сценаріях.
!
!
!
!
!
!
!
!
!