Управление доступом в смарт-контрактах на 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); }

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

!

!

!

!

!

!

!

!

!

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 6
  • Поделиться
комментарий
0/400
CryptoTarotReadervip
· 07-16 04:56
Сможет ли она устоять против запрета~
Посмотреть ОригиналОтветить0
FloorSweepervip
· 07-15 01:10
Неужели нужно учить так много?
Посмотреть ОригиналОтветить0
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
  • Закрепить