У цій статті буде розглянуто контроль доступу в смартконтрактах Rust з двох сторін:
Видимість методів смартконтракту
Контроль доступу до функцій привілеїв
1. Видимість функцій смартконтракту
У Rust смартконтрактах контроль видимості функцій є дуже важливим. Наприклад, у червні 2020 року під час інциденту безпеки на біржі Bancor Network, через помилку ключову функцію переказу було встановлено як public, що поставило під загрозу активи користувачів.
У смартконтрактах на Rust існує кілька видів видимості функцій:
pub fn: публічна функція, доступна для виклику ззовні контракту
fn: Тільки внутрішні виклики смартконтракту
pub(crate) fn: лише для виклику внутрішнього crate
Також можна реалізувати функцію internal, визначивши методи в блоці impl, який не позначений #[near_bindgen].
Для функції зворотного виклику потрібно встановити публічний доступ, але при цьому потрібно забезпечити, щоб вона могла бути викликана лише самим контрактом. Це можна реалізувати за допомогою макроса #[private].
Слід зазначити, що в Rust за замовчуванням усе є приватним, що відрізняється від певних старих версій Solidity, де за замовчуванням усе є публічним.
!
2. Контроль доступу до привілейованих функцій
Окрім видимості функцій, також необхідно з семантичної точки зору встановити повноцінний механізм білого списку контролю доступу.
Подібно до модифікатора onlyOwner у Solidity, ми можемо реалізувати власний трейти в Rust:
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Контроль доступу в смартконтрактах Rust: видимість функцій контракту та привілейований доступ
Контроль доступу в смартконтрактах Rust
У цій статті буде розглянуто контроль доступу в смартконтрактах Rust з двох сторін:
1. Видимість функцій смартконтракту
У Rust смартконтрактах контроль видимості функцій є дуже важливим. Наприклад, у червні 2020 року під час інциденту безпеки на біржі Bancor Network, через помилку ключову функцію переказу було встановлено як public, що поставило під загрозу активи користувачів.
У смартконтрактах на Rust існує кілька видів видимості функцій:
Також можна реалізувати функцію internal, визначивши методи в блоці impl, який не позначений #[near_bindgen].
Для функції зворотного виклику потрібно встановити публічний доступ, але при цьому потрібно забезпечити, щоб вона могла бути викликана лише самим контрактом. Це можна реалізувати за допомогою макроса #[private].
Слід зазначити, що в Rust за замовчуванням усе є приватним, що відрізняється від певних старих версій Solidity, де за замовчуванням усе є публічним.
!
2. Контроль доступу до привілейованих функцій
Окрім видимості функцій, також необхідно з семантичної точки зору встановити повноцінний механізм білого списку контролю доступу.
Подібно до модифікатора onlyOwner у Solidity, ми можемо реалізувати власний трейти в 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); }
Цим способом можна реалізувати, що тільки owner може викликати деякі привілейовані функції.
На основі цього принципу можна налаштувати більш складний білий список для реалізації детального контролю доступу за групами.
Більше методів контролю доступу, таких як контроль часу виклику, механізм багатопідпису тощо, буде представлено в наступних статтях.
!
!
!
!
!
!
!
!
!