Управление доступом в смарт-контрактах на Rust: видимость функций и управление привилегированным доступом

robot
Генерация тезисов в процессе

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

В этой статье будут рассмотрены два аспекта контроля доступа в смарт-контрактах Rust:

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

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

Разумная настройка видимости функций смарт-контрактов имеет решающее значение для защиты ключевых частей. В качестве примера можно привести инцидент с безопасностью на бирже Bancor Network в июне 2020 года, когда по ошибке ключевая функция трансфера была установлена как public, что поставило под угрозу активы пользователей.

В смарт-контрактах Rust видимость функций также важна. В NEAR SDK макрос #[near_bindgen] определяет следующие атрибуты видимости:

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

Также можно определить внутренние методы через блок impl Contract, который не помечен #[near_bindgen].

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

Следует отметить, что в Rust по умолчанию видимость является частной, но элементы в trait и enum - исключение.

!

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

Помимо видимости функций, необходимо создать полноценный механизм белого списка для контроля доступа. Подобно контракту Ownable в Solidity, некоторые привилегированные функции могут вызываться только владельцем.

В Rust-контракте можно реализовать следующий трейт Ownable:

ржавчина pub trait 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); }

На основе этого можно реализовать белый список для владельца. Также можно настроить более сложные параметры для многопользовательского белого списка или группового контроля доступа.

!

!

!

!

!

!

!

!

!

Посмотреть Оригинал
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
  • Закрепить