Управление доступом к смарт-контрактам Rust: видимость функций и управление привилегированным доступом

Управление доступом в смарт-контрактах на Rust

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

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

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

В 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:

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

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

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

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

!

!

!

!

!

!

!

!

!

GET-13.84%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 8
  • Репост
  • Поделиться
комментарий
0/400
WalletManagervip
· 08-01 21:48
Контроль доступа должен быть строгим.
Посмотреть ОригиналОтветить0
HashBrowniesvip
· 08-01 05:29
Контроль доступа действительно великолепен
Посмотреть ОригиналОтветить0
GasFeeCriervip
· 07-30 19:25
Будьте осторожны при настройке прав доступа.
Посмотреть ОригиналОтветить0
TeaTimeTradervip
· 07-30 19:21
Контроль доступа действительно трудно реализовать
Посмотреть ОригиналОтветить0
CoinBasedThinkingvip
· 07-30 19:07
Слишком много уязвимостей безопасности.
Посмотреть ОригиналОтветить0
NotFinancialAdvicevip
· 07-30 18:57
Действительно полезный контент
Посмотреть ОригиналОтветить0
  • Закрепить