У цій статті буде розглянуто контроль доступу в смартконтрактах Rust з двох аспектів:
Доступність/виклик методів смартконтракту
Контроль доступу до функцій привілеїв/Розподіл повноважень і відповідальності
1. Видимість функцій смартконтракту
Розумна налаштування видимості функцій контракту є критично важливою для захисту ключових частин. Як приклад, інцидент безпеки на біржі Bancor Network у червні 2020 року, через помилкове встановлення ключової функції переказу як public, призвів до ризику для активів користувачів.
У смартконтрактах Rust видимість функцій також є важливою. Макрос #[near_bindgen] у NEAR SDK визначає такі атрибути видимості:
pub fn: публічна функція, може бути викликана ззовні контракту
fn: може бути викликаний лише всередині смартконтракту
pub(crate) fn: обмежити виклики всередині crate
Можна також визначити внутрішні методи через блоки impl Contract, які не були відзначені #[near_bindgen].
Для функцій зворотного виклику їх потрібно встановити як public, але дозволити виклик лише з самого контракту. Цю функцію можна реалізувати за допомогою макросу #[private].
Слід звернути увагу, що за замовчуванням видимість в Rust є приватною, але елементи в trait та enum є винятком.
!
2. Контроль доступу до функцій привілеїв
Окрім видимості функцій, необхідно створити повний механізм білого списку контролю доступу. Подібно до контракту Ownable в Solidity, деякі привілейовані функції можуть викликатися лише власником.
В контракті Rust можна реалізувати наступний власний трейд:
На основі цього можна реалізувати білу списку для власника. Також можна налаштувати більш складні параметри trait для створення багатокористувацького білого списку або контролю доступу за групами.
!
!
!
!
!
!
!
!
!
Переглянути оригінал
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
10 лайків
Нагородити
10
4
Поділіться
Прокоментувати
0/400
WhaleWatcher
· 07-13 07:29
Спочатку про Ownable, а потім поговоримо.
Переглянути оригіналвідповісти на0
GateUser-e51e87c7
· 07-13 07:23
Є руки, і цього достатньо.
Переглянути оригіналвідповісти на0
DecentralizeMe
· 07-13 07:22
Ух-ух базова логіка
Переглянути оригіналвідповісти на0
ChainSpy
· 07-13 07:21
Контроль доступу такий складний, що краще все відкрити.
Rust смартконтракти контроль доступу: видимість функцій та управління привілейованим доступом
Rust смартконтракти养成日记(7)合约安全之权限控制
У цій статті буде розглянуто контроль доступу в смартконтрактах Rust з двох аспектів:
1. Видимість функцій смартконтракту
Розумна налаштування видимості функцій контракту є критично важливою для захисту ключових частин. Як приклад, інцидент безпеки на біржі Bancor Network у червні 2020 року, через помилкове встановлення ключової функції переказу як public, призвів до ризику для активів користувачів.
У смартконтрактах Rust видимість функцій також є важливою. Макрос #[near_bindgen] у NEAR SDK визначає такі атрибути видимості:
Можна також визначити внутрішні методи через блоки impl Contract, які не були відзначені #[near_bindgen].
Для функцій зворотного виклику їх потрібно встановити як public, але дозволити виклик лише з самого контракту. Цю функцію можна реалізувати за допомогою макросу #[private].
Слід звернути увагу, що за замовчуванням видимість в Rust є приватною, але елементи в trait та enum є винятком.
!
2. Контроль доступу до функцій привілеїв
Окрім видимості функцій, необхідно створити повний механізм білого списку контролю доступу. Подібно до контракту Ownable в Solidity, деякі привілейовані функції можуть викликатися лише власником.
В контракті Rust можна реалізувати наступний власний трейд:
іржа паб трейті Ownable { 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 для створення багатокористувацького білого списку або контролю доступу за групами.
!
!
!
!
!
!
!
!
!