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

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

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

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

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

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

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

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

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

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

!

!

!

!

!

!

!

!

!

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