В этой статье будут рассмотрены два аспекта контроля доступа в смарт-контрактах Rust:
Видимость доступа/вызова методов смарт-контрактов
Контроль доступа к привилегированным функциям / Разделение полномочий
1. Видимость функций смарт-контрактов
Разумная настройка видимости функций смарт-контрактов имеет решающее значение для защиты ключевых частей. В качестве примера можно привести инцидент с безопасностью на бирже Bancor Network в июне 2020 года, когда по ошибке ключевая функция трансфера была установлена как public, что поставило под угрозу активы пользователей.
В смарт-контрактах Rust видимость функций также важна. В NEAR SDK макрос #[near_bindgen] определяет следующие атрибуты видимости:
pub fn: публичная функция, доступная для вызова извне контракта
fn: может быть вызван только внутри смарт-контракта
pub(crate) fn: Ограничить вызов внутри crate
Также можно определить внутренние методы через блок impl Contract, который не помечен #[near_bindgen].
Для обратных вызовов необходимо установить их как public, но разрешить вызов только самому контракту. Для реализации этой функции можно использовать макрос #[private].
Следует отметить, что в Rust по умолчанию видимость является частной, но элементы в trait и enum - исключение.
!
2. Контроль доступа к функциям привилегий
Помимо видимости функций, необходимо создать полноценный механизм белого списка для контроля доступа. Подобно контракту Ownable в Solidity, некоторые привилегированные функции могут вызываться только владельцем.
В Rust-контракте можно реализовать следующий трейт Ownable:
На основе этого можно реализовать белый список для владельца. Также можно настроить более сложные параметры для многопользовательского белого списка или группового контроля доступа.
!
!
!
!
!
!
!
!
!
Посмотреть Оригинал
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
10 Лайков
Награда
10
4
Поделиться
комментарий
0/400
WhaleWatcher
· 07-13 07:29
Сначала поговорим о Ownable.
Посмотреть ОригиналОтветить0
GateUser-e51e87c7
· 07-13 07:23
С руками все просто.
Посмотреть ОригиналОтветить0
DecentralizeMe
· 07-13 07:22
Угу базовая логика
Посмотреть ОригиналОтветить0
ChainSpy
· 07-13 07:21
Управление доступом так сложно, что лучше сделать всё открытым.
Управление доступом в смарт-контрактах на Rust: видимость функций и управление привилегированным доступом
Rust смарт-контракты养成日记(7)合约安全之权限控制
В этой статье будут рассмотрены два аспекта контроля доступа в смарт-контрактах Rust:
1. Видимость функций смарт-контрактов
Разумная настройка видимости функций смарт-контрактов имеет решающее значение для защиты ключевых частей. В качестве примера можно привести инцидент с безопасностью на бирже Bancor Network в июне 2020 года, когда по ошибке ключевая функция трансфера была установлена как public, что поставило под угрозу активы пользователей.
В смарт-контрактах Rust видимость функций также важна. В NEAR SDK макрос #[near_bindgen] определяет следующие атрибуты видимости:
Также можно определить внутренние методы через блок impl Contract, который не помечен #[near_bindgen].
Для обратных вызовов необходимо установить их как public, но разрешить вызов только самому контракту. Для реализации этой функции можно использовать макрос #[private].
Следует отметить, что в Rust по умолчанию видимость является частной, но элементы в trait и enum - исключение.
!
2. Контроль доступа к функциям привилегий
Помимо видимости функций, необходимо создать полноценный механизм белого списка для контроля доступа. Подобно контракту Ownable в Solidity, некоторые привилегированные функции могут вызываться только владельцем.
В Rust-контракте можно реализовать следующий трейт Ownable:
ржавчина 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); }
На основе этого можно реализовать белый список для владельца. Также можно настроить более сложные параметры для многопользовательского белого списка или группового контроля доступа.
!
!
!
!
!
!
!
!
!