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

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

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

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

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

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

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

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

  • 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) реализация

Эти материалы будут представлены в последующих дневниках по смарт-контрактам.

!

!

!

!

!

!

!

!

PUBLIC-2.99%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 5
  • Репост
  • Поделиться
комментарий
0/400
TheMemefathervip
· 08-18 14:36
А, это событие с Bancor слишком абсурдно.
Посмотреть ОригиналОтветить0
PancakeFlippavip
· 08-18 11:42
Играл в Bancor? Рект...
Посмотреть ОригиналОтветить0
ReverseFOMOguyvip
· 08-16 02:20
баги Bancor действительно не выдерживают
Посмотреть ОригиналОтветить0
BoredApeResistancevip
· 08-16 02:05
А это не тот баг, из-за которого Bancor когда-то потерпел неудачу?
Посмотреть ОригиналОтветить0
rekt_but_not_brokevip
· 08-16 02:01
Случай атаки довольно новый, заставил меня вспотеть от страха.
Посмотреть ОригиналОтветить0
  • Закрепить