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

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

Rust смарт-контракты养成日记(7)合约安全之计算精度

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

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

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

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

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

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

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

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

ржавчина #[private] pub fn resolve_transfer(&mut self) { env::log_str("Это обратный вызов"); }

!

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

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

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

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

В смарт-контрактах на Rust также есть другие методы контроля доступа, такие как управление временем вызова, многоподписные механизмы и т. д., которые будут представлены в последующих статьях.

!

!

!

!

!

!

!

!

!

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 3
  • Поделиться
комментарий
0/400
DaoDevelopervip
· 07-26 11:50
Отличные пункты аудита
Посмотреть ОригиналОтветить0
DAOdreamervip
· 07-23 12:21
Разрешенный список审核要严格
Посмотреть ОригиналОтветить0
SchroedingerMinervip
· 07-23 12:21
Разрешенный список – это меч с двумя лезвиями.
Посмотреть ОригиналОтветить0
  • Закрепить