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