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

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

Rust смартконтракти养成日记(7)合约安全之权限控制

У цій статті буде представлено контролювати доступ у смартконтрактах Rust з двох точок зору:

  1. Видимість доступу/виклику методів смартконтракту
  2. Контроль доступу до функцій привілеїв/розподіл обов'язків

1. Видимість функцій смартконтрактів

Налаштування видимості функцій контракту є критично важливим для захисту ключових частин від випадкового доступу або маніпуляцій. Наприклад, у безпековій події біржі Bancor Network у червні 2020 року, через помилкове встановлення ключової функції переказу на public, активи користувачів опинилися під загрозою.

У Rust смартконтрактах основні види видимості функцій такі:

  • pub fn: публічна функція, може бути викликана ззовні контракту
  • fn: може бути викликано лише всередині смартконтракту
  • pub(crate) fn: обмежити виклик всередині crate

Інший спосіб налаштування методу internal - це визначення окремого коду блоку impl Contract без використання #[near_bindgen] модифікатора.

Для функцій зворотного виклику їх потрібно встановити як public, але при цьому забезпечити, щоб вони могли бути викликані лише самим контрактом. Цю функцію можна реалізувати за допомогою макроса #[private].

Слід зазначити, що за замовчуванням у Rust все є приватним, крім елементів у pub Trait та pub Enum.

!

2. Контроль доступу до привілейованих функцій

Окрім видимості функцій, також необхідно з семантичної точки зору встановити повноцінний механізм контролю доступу у вигляді білого списку. Подібно до функції "onlyOwner" в 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) реалізація

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

!

!

!

!

!

!

!

!

PUBLIC-2.99%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 5
  • Репост
  • Поділіться
Прокоментувати
0/400
TheMemefathervip
· 08-18 14:36
А це подія з Bancor просто неймовірна.
Переглянути оригіналвідповісти на0
PancakeFlippavip
· 08-18 11:42
Грав у Bancor? Рект...
Переглянути оригіналвідповісти на0
ReverseFOMOguyvip
· 08-16 02:20
баг Bancor дійсно не витримує
Переглянути оригіналвідповісти на0
BoredApeResistancevip
· 08-16 02:05
А це ж той самий баг, через який Bancor колись зазнав невдачі.
Переглянути оригіналвідповісти на0
rekt_but_not_brokevip
· 08-16 02:01
Приклади атак досить нові, у мене від цього холодний піт.
Переглянути оригіналвідповісти на0
  • Закріпити