Аналіз контракту фабрики Sputnik DAO: створення, оновлення та проектування безпеки

robot
Генерація анотацій у процесі

Щоденник розвитку смартконтрактів Rust(10-2): Аналіз контракту фабрики Sputnik DAO

Ця стаття детально розгляне реалізацію дизайну фабричної моделі платформи Sputnik-DAO (sputnikdao-factory).

1. Sputnik-DAO смартконтракти

Sputnik-DAO використовує шаблон проектування фабрики для реалізації єдиного створення та управління децентралізованою автономною організацією (DAO) на цій платформі.

Статус контракту на завод складається з двох основних частин:

іржа pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet, }

  • factory_manager: Реалізація основної внутрішньої логіки функцій контракту, що надає методи для створення/видалення/оновлення DAO-екземплярів.
  • daos: зафіксовано адреси NEAR-рахунків усіх створених DAO-екземплярів в історії платформи.

!

2. Створення DAO

Створення екземпляра DAO за допомогою методу create():

іржа #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { let account_id: AccountId = format!("{}. {}", name, env::current_account_id()) .parse() .unwrap(); // ... self.factory_manager.створити_contract( self.get_default_code_hash(), account_id, "новий", &арг.0, "on_create", &callback_args, ); }

основні етапи методу create_contract():

  1. Завантажити шаблон коду смартконтракту DAO
  2. Побудова Promise для відстеження результатів обробки
  3. Створення облікового запису для розгортання смартконтракту DAO
  4. Переказати токени NEAR
  5. Розгортання коду смартконтракту
  6. Викликати функцію ініціалізації new()
  7. Виклик функції on_create()

!

3. Оновлення DAO

За допомогою методу update() можна оновити смартконтракти DAO:

іржа pub fn update(&self, account_id: AccountId, code_hash: Base58CryptoHash) { let caller_id = env::p redecessor_account_id(); стверджувати!( caller_id == self.get_owner() || caller_id == account_id, "Повинен бути оновлений власником заводу або самим DAO" ); // ... self.factory_manager .update_contract(account_id, code_hash, «оновити»); }

!

4. Аналіз безпеки

  • Контроль доступу: метод view не змінює стан, функції з привілегіями можуть виконуватися тільки owner
  • Обробка помилок: реалізовано розумний механізм обробки для аномальних ситуацій
  • Виправлено вразливість безпеки, що дозволяла будь-якому користувачу оновлювати смартконтракти DAO

Контракт фабрики Sputnik-DAO забезпечує безпеку контракту за допомогою цих механізмів.

!

!

!

!

!

!

!

!

GET-7.56%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 5
  • Поділіться
Прокоментувати
0/400
JustHereForAirdropsvip
· 07-25 18:43
Дослідження показали, що створення DAO буде так само простим, як і створення вебсайту.
Переглянути оригіналвідповісти на0
GateUser-4745f9cevip
· 07-22 23:42
Управління правами доступу – це все.
Переглянути оригіналвідповісти на0
New_Ser_Ngmivip
· 07-22 23:41
Код написаний непогано!
Переглянути оригіналвідповісти на0
PebbleHandervip
· 07-22 23:36
Управління виглядає досить суворо.
Переглянути оригіналвідповісти на0
GateUser-1a2ed0b9vip
· 07-22 23:33
Аналіз контрактів має певний інтерес
Переглянути оригіналвідповісти на0
  • Закріпити