Ця стаття розгляне контроль доступу в смартконтрактах Rust з двох точок зору:
Видимість доступу/виклику методів смартконтракту
Контроль доступу до функцій привілеїв/Розподіл повноважень
1. Видимість функцій смартконтракту
Контроль видимості функцій контракту є важливим для захисту критичних частин від помилкових операцій. Як приклад, можна навести інцидент безпеки на біржі Bancor Network 18 червня 2020 року, коли через помилкове встановлення ключової функції переказу в публічний доступ, активи користувачів на суму 590 тисяч доларів опинилися під загрозою.
!
У Rust смартконтрактах основними рівнями видимості функцій є:
pub fn: публічна функція, може бути викликана ззовні контракту
fn: за замовчуванням private, може бути викликаний лише всередині контракту
pub(crate) fn: обмежити виклик всередині crate
Інший спосіб налаштування методу internal полягає в визначенні окремого блоку коду impl Contract без модифікатора #[near_bindgen].
Для функцій зворотного виклику потрібно встановити public, але обмежити виклики тільки з самого контракту. Можна використовувати макрос #[private] для реалізації.
За замовчуванням у Rust все є приватним, крім елементів у публічних трейтах та публічних перерахуваннях.
!
2. Контроль доступу до функцій привілеїв
Окрім видимості функцій, необхідно також на семантичному рівні встановити повноцінний механізм контрольного списку доступу. Подібно до контракту Ownable в Solidity, деякі привілейовані функції можуть бути викликані лише власником.
Це дозволяє реалізувати контроль доступу до привілейованих функцій. На цій основі також можна налаштувати багатокористувацький білий список або кілька груп білих списків.
!
3. Більше методів контролю доступу
Інші методи контролю доступу також включають:
Контроль часу виклику смартконтракту
Механізм виклику функцій смартконтрактів з багатопідписом
Реалізація управління DAO
Ці матеріали будуть детально розглянуті в наступних статтях.
!
!
!
!
!
!
!
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Детальний розгляд видимості функцій та контролю доступу в безпеці смартконтрактів Rust
Rust смартконтракти养成日记(7)合约安全之计算精度
Ця стаття розгляне контроль доступу в смартконтрактах Rust з двох точок зору:
1. Видимість функцій смартконтракту
Контроль видимості функцій контракту є важливим для захисту критичних частин від помилкових операцій. Як приклад, можна навести інцидент безпеки на біржі Bancor Network 18 червня 2020 року, коли через помилкове встановлення ключової функції переказу в публічний доступ, активи користувачів на суму 590 тисяч доларів опинилися під загрозою.
!
У Rust смартконтрактах основними рівнями видимості функцій є:
Інший спосіб налаштування методу internal полягає в визначенні окремого блоку коду impl Contract без модифікатора #[near_bindgen].
Для функцій зворотного виклику потрібно встановити public, але обмежити виклики тільки з самого контракту. Можна використовувати макрос #[private] для реалізації.
За замовчуванням у Rust все є приватним, крім елементів у публічних трейтах та публічних перерахуваннях.
!
2. Контроль доступу до функцій привілеїв
Окрім видимості функцій, необхідно також на семантичному рівні встановити повноцінний механізм контрольного списку доступу. Подібно до контракту Ownable в Solidity, деякі привілейовані функції можуть бути викликані лише власником.
У контракті Rust можна реалізувати власний Trait:
іржа публічний трейд Власний { 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); }
Це дозволяє реалізувати контроль доступу до привілейованих функцій. На цій основі також можна налаштувати багатокористувацький білий список або кілька груп білих списків.
!
3. Більше методів контролю доступу
Інші методи контролю доступу також включають:
Ці матеріали будуть детально розглянуті в наступних статтях.
!
!
!
!
!
!
!