Практика безпеки смартконтрактів Rust: контроль доступу та управління правами

Rust смартконтракти养成日记(7)合рат безпеки之计算精度

У цій статті буде розглянуто два аспекти контролю доступу в смартконтрактах Rust:

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

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

Видимість функцій контракту визначає, хто може їх викликати. Правильна настройка видимості є вкрай важливою для захисту ключових частин контракту.

У смартконтрактах Rust основні види видимості функцій такі:

  • pub fn: публічна функція, яка може бути викликана ззовні контракту
  • fn: внутрішня функція, може бути викликана лише всередині смартконтракту
  • pub(crate) fn: обмежити виклики всередині crate

Крім того, ви можете визначити методи в окремому кодовому блоці impl Contract, щоб зробити їх внутрішніми методами:

іржа #[near_bindgen] impl Контракт { pub fn increment(&mut self) { self.internal_increment(); } }

impl Contract { pub fn internal_increment(&mut self) { self.counter += 1; } }

Для функції зворотного виклику потрібно встановити як pub і використовувати макрос #[private], щоб обмежити виклики лише з самого контракту.

іржа #[near_bindgen] impl Контракт { #[private] pub fn resolve_transfer(&mut self) { // Логіка зворотного виклику } }

!

2. Контроль доступу до функцій привілеїв

Крім налаштування видимості функцій, також необхідно створити механізм білого списку контролю доступу для обмеження викликів привілейованих функцій.

можна реалізувати подібний до наступного власницький трейта:

іржа pub trait Власник { 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); }

потім у функції привілеїв викликайте assert_owner() для перевірки особи виклику.

іржа impl Контракт { pub fn privileged_function(&mut self) { self.assert_owner(); // Логіка привілейованих функцій } }

Таким чином можна реалізувати базовий контроль прав owner. Це можна додатково розширити до багатокористувацького білого списку або кількох груп білого списку для досягнення більш точного контролю доступу.

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

!

!

!

!

!

!

!

!

!

GET7.16%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 5
  • Репост
  • Поділіться
Прокоментувати
0/400
CryingOldWalletvip
· 07-28 07:37
Нарешті побачив, що стосується rust, кодуй, кодуй
Переглянути оригіналвідповісти на0
PumpingCroissantvip
· 07-28 03:49
Знову не можу вивчити rust
Переглянути оригіналвідповісти на0
CryptoGoldminevip
· 07-25 08:04
Технічна глибина непогана, але реальний ROI ще потрібно оцінити за оптимізацією розподілу в Майнінговому пулі.
Переглянути оригіналвідповісти на0
SchrodingerAirdropvip
· 07-25 08:01
Цей новачок посібник змусив мене головоломити, rust постійно робить щось складне.
Переглянути оригіналвідповісти на0
GateUser-2fce706cvip
· 07-25 08:01
Еволюція - це ключова істина, ланцюг Rust зараз на підйомі! Поспішайте з розробкою!
Переглянути оригіналвідповісти на0
  • Закріпити