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

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

Управление доступом в смарт-контрактах на Rust

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

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

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

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

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

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

Другой способ настройки метода internal заключается в определении отдельного блока кода impl Contract, без использования #[near_bindgen].

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

Важно отметить, что в Rust по умолчанию все элементы являются приватными, за исключением элементов в pub Trait и pub Enum.

!

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

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

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

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

!

3. Другие методы контроля доступа

Также будут подробно рассмотрены некоторые другие методы контроля доступа, такие как управление моментом вызова контракта, механизм многоподписей, реализация DAO и т.д., в последующих статьях.

!

!

!

!

!

!

!

!

GET7.36%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 4
  • Репост
  • Поделиться
комментарий
0/400
MetaNomadvip
· 08-04 05:07
rust новичок спрашивает, что безопаснее?
Посмотреть ОригиналОтветить0
NftPhilanthropistvip
· 08-04 05:02
*вздох* еще одна проблема с безопасностью, потому что кто-то забыл основные разрешения... когда же разработчики научатся внимательному минтингу, смх
Посмотреть ОригиналОтветить0
BearMarketGardenervip
· 08-04 04:57
Управление доступом полностью провалилось.
Посмотреть ОригиналОтветить0
RuntimeErrorvip
· 08-04 04:45
Некорректный контроль доступа, дебаг в коленях.
Посмотреть ОригиналОтветить0
  • Закрепить