Безопасность смарт-контрактов на Rust: подробное объяснение контроля доступа и видимости функций

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

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

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

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

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

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

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

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

Кроме того, методы, определенные в блоке impl, не помеченном #[near_bindgen], также являются внутренними.

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

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

!

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

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

В Rust это можно реализовать через пользовательские трейты:

ржавчина 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
ser_we_are_ngmivip
· 2ч назад
Так сложно понять, ускользаю.
Посмотреть ОригиналОтветить0
NFT_Therapyvip
· 07-17 01:06
Контроль доступа необходим! Иначе контракт может быть испорчен.
Посмотреть ОригиналОтветить0
PonziDetectorvip
· 07-17 01:05
Rust yyds самый хардкорный
Посмотреть ОригиналОтветить0
MetaMuskRatvip
· 07-17 01:02
Снова вижу кто-то с управленческими правами, ускользаю.
Посмотреть ОригиналОтветить0
ser_we_are_earlyvip
· 07-17 00:46
Просто и грубо - это просто добавить контроль доступа.
Посмотреть ОригиналОтветить0
MemeEchoervip
· 07-17 00:40
Смотрю и засыпаю, кто-нибудь действительно учился?
Посмотреть ОригиналОтветить0
  • Закрепить