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

Контроль доступу в смартконтрактах Rust

Ця стаття розгляне питання контролю доступу в смартконтрактах Rust з двох сторін:

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

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

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

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

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

Крім того, визначення функції в блоці impl, який не позначений #[near_bindgen], також може бути встановлено як внутрішню функцію.

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

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

!

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

Окрім видимості функцій, також необхідно з семантичної точки зору встановити повний механізм контролю доступу. Аналогічно до модифікатора onlyOwner у Solidity, ми можемо визначити подібний trait у Rust:

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

На основі цього принципу ми можемо реалізувати детальний контроль доступу для багатокористувацького білого списку або кількох груп білого списку, налаштувавши більш складні trait.

Крім того, можна реалізувати контроль часу виклику, багатопідписну механіку та інші методи контролю доступу, щоб задовольнити різні потреби безпеки в різних сценаріях.

!

!

!

!

!

!

!

!

!

GET-14.08%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 8
  • Репост
  • Поділіться
Прокоментувати
0/400
WalletManagervip
· 08-01 21:48
Контроль доступу має бути суворим
Переглянути оригіналвідповісти на0
HashBrowniesvip
· 08-01 05:29
Контроль доступу справді вражаючий
Переглянути оригіналвідповісти на0
GasFeeCriervip
· 07-30 19:25
Обережно налаштовуйте права доступу
Переглянути оригіналвідповісти на0
TeaTimeTradervip
· 07-30 19:21
Контроль доступу справді важко налаштувати
Переглянути оригіналвідповісти на0
CoinBasedThinkingvip
· 07-30 19:07
Занадто багато вразливостей безпеки.
Переглянути оригіналвідповісти на0
NotFinancialAdvicevip
· 07-30 18:57
Дійсно корисний контент
Переглянути оригіналвідповісти на0
  • Закріпити