В данной статье будут рассмотрены два аспекта контроля доступа в смарт-контрактах на Rust:
Видимость доступа/вызова методов смарт-контракта
Контроль доступа к привилегированным функциям/распределение полномочий и ответственности
1. Видимость функций смарт-контрактов
Рациональная настройка видимости функций смарт-контрактов имеет решающее значение для обеспечения безопасности контракта. В качестве примера можно привести инцидент с безопасностью на бирже Bancor Network 18 июня 2020 года, когда ошибка в установке ключевой функции перевода как public поставила под угрозу активы пользователей.
В смарт-контрактах на Rust основными видами видимости функций являются следующие:
pub fn: публичная функция, любой может вызывать ее извне контракта
fn: по умолчанию private, может быть вызван только внутри контракта
pub(crate) fn: ограничить вызов внутри crate
Кроме того, можно реализовать внутренние методы, определив блок impl без #[near_bindgen].
Для обратных вызовов необходимо установить публичный доступ, но требуется дополнительный контроль доступа:
Помимо видимости функций, необходимо создать полную механизмы белого списка для контроля доступа. Можно настроить Trait для реализации эффекта, аналогичного модификатору onlyOwner в Solidity:
Это ограничит вызов некоторых привилегированных функций только владельцем. На основе этого можно установить более сложные многоуровневые белые списки или несколько белых списков, чтобы реализовать тонкое управление доступом по группам.
В смарт-контрактах на Rust также есть другие методы контроля доступа, такие как управление временем вызова, многоподписные механизмы и т. д., которые будут представлены в последующих статьях.
!
!
!
!
!
!
!
!
!
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
Безопасность смарт-контрактов на Rust: Практика видимости функций и контроля доступа
Rust смарт-контракты养成日记(7)合约安全之计算精度
В данной статье будут рассмотрены два аспекта контроля доступа в смарт-контрактах на Rust:
1. Видимость функций смарт-контрактов
Рациональная настройка видимости функций смарт-контрактов имеет решающее значение для обеспечения безопасности контракта. В качестве примера можно привести инцидент с безопасностью на бирже Bancor Network 18 июня 2020 года, когда ошибка в установке ключевой функции перевода как public поставила под угрозу активы пользователей.
В смарт-контрактах на Rust основными видами видимости функций являются следующие:
Кроме того, можно реализовать внутренние методы, определив блок 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 также есть другие методы контроля доступа, такие как управление временем вызова, многоподписные механизмы и т. д., которые будут представлены в последующих статьях.
!
!
!
!
!
!
!
!
!