Детальний розгляд видимості функцій та контролю доступу в безпеці смартконтрактів Rust

robot
Генерація анотацій у процесі

Rust смартконтракти养成日记(7)合约安全之计算精度

Ця стаття розгляне контроль доступу в смартконтрактах 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, деякі привілейовані функції можуть бути викликані лише власником.

У контракті 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. Більше методів контролю доступу

Інші методи контролю доступу також включають:

  • Контроль часу виклику смартконтракту
  • Механізм виклику функцій смартконтрактів з багатопідписом
  • Реалізація управління DAO

Ці матеріали будуть детально розглянуті в наступних статтях.

!

!

!

!

!

!

!

Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • Прокоментувати
  • Поділіться
Прокоментувати
0/400
Немає коментарів
  • Закріпити