В данной статье будут рассмотрены проблемы контроля доступа в смарт-контрактах на Rust с двух сторон:
Видимость методов смарт-контракта
Контроль доступа к функциям привилегий
Видимость функций контракта
В Rust смарт-контрактах контроль видимости функций имеет решающее значение. Например, в случае инцидента с безопасностью на бирже Bancor Network в 2020 году, из-за неправильной настройки ключевой функции перевода как public, активы пользователей оказались под угрозой.
В смарт-контрактах Rust на NEAR основными типами видимости функций являются следующие:
pub fn: открытая функция, доступная для вызова из внешних контрактов
fn: может вызываться только внутри смарт-контрактов
pub(crate) fn: ограничить вызов внутри crate
Кроме того, определение функции в блоке impl, который не помечен #[near_bindgen], также может сделать её внутренней функцией.
Для обратных функций необходимо установить их как public, но одновременно ограничить возможность вызова только самим контрактом. Для этого можно использовать макрос #[private].
Следует отметить, что по умолчанию в Rust все содержимое является частным, за исключением элементов pub Trait и pub Enum.
!
Контроль доступа к функциям привилегий
Кроме видимости функции, необходимо установить полную механизм контроля доступа с семантической точки зрения. Подобно модификатору onlyOwner в Solidity, мы можем определить аналогичный трейт в Rust:
Использование такого трейта позволяет реализовать контроль доступа к привилегированным функциям, обеспечивая возможность вызова этих функций только владельцем контракта.
Основываясь на этом принципе, мы можем реализовать тонкий контроль доступа для нескольких пользователей в белом списке или нескольких групп белых списков, настроив более сложные трейты.
Кроме того, можно реализовать контроль времени вызова, механизмы многоподписей и другие методы контроля доступа, чтобы удовлетворить различные требования безопасности в разных сценариях.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
Управление доступом к смарт-контрактам Rust: видимость функций и управление привилегированным доступом
Управление доступом в смарт-контрактах на Rust
В данной статье будут рассмотрены проблемы контроля доступа в смарт-контрактах на Rust с двух сторон:
Видимость функций контракта
В Rust смарт-контрактах контроль видимости функций имеет решающее значение. Например, в случае инцидента с безопасностью на бирже Bancor Network в 2020 году, из-за неправильной настройки ключевой функции перевода как public, активы пользователей оказались под угрозой.
В смарт-контрактах Rust на NEAR основными типами видимости функций являются следующие:
Кроме того, определение функции в блоке impl, который не помечен #[near_bindgen], также может сделать её внутренней функцией.
Для обратных функций необходимо установить их как public, но одновременно ограничить возможность вызова только самим контрактом. Для этого можно использовать макрос #[private].
Следует отметить, что по умолчанию в Rust все содержимое является частным, за исключением элементов pub Trait и pub Enum.
!
Контроль доступа к функциям привилегий
Кроме видимости функции, необходимо установить полную механизм контроля доступа с семантической точки зрения. Подобно модификатору onlyOwner в 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); }
Использование такого трейта позволяет реализовать контроль доступа к привилегированным функциям, обеспечивая возможность вызова этих функций только владельцем контракта.
Основываясь на этом принципе, мы можем реализовать тонкий контроль доступа для нескольких пользователей в белом списке или нескольких групп белых списков, настроив более сложные трейты.
Кроме того, можно реализовать контроль времени вызова, механизмы многоподписей и другие методы контроля доступа, чтобы удовлетворить различные требования безопасности в разных сценариях.
!
!
!
!
!
!
!
!
!