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

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

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

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

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

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 можна реалізувати наступний власний трейд:

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

!

!

!

!

!

!

!

!

!

Переглянути оригінал
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.
  • Нагородити
  • 4
  • Поділіться
Прокоментувати
0/400
WhaleWatchervip
· 07-13 07:29
Спочатку про Ownable, а потім поговоримо.
Переглянути оригіналвідповісти на0
GateUser-e51e87c7vip
· 07-13 07:23
Є руки, і цього достатньо.
Переглянути оригіналвідповісти на0
DecentralizeMevip
· 07-13 07:22
Ух-ух базова логіка
Переглянути оригіналвідповісти на0
ChainSpyvip
· 07-13 07:21
Контроль доступу такий складний, що краще все відкрити.
Переглянути оригіналвідповісти на0
  • Закріпити