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