Анализ контракта фабрики 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: НеупорядоченноеМножество, }

  • 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!("{}. {}", имя, env::current_account_id()) .parse() .unwrap(); // ... self.factory_manager.создать_contract( self.get_default_code_hash(), account_id, "новый", &args.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 .обновить_контракт(идентификатор_аккаунта, хэш_кода, "обновить"); }

!

4. Анализ безопасности

  • Контроль доступа: метод view не изменяет состояние, привилегированные функции могут выполняться только владельцем
  • Обработка ошибок: реализован разумный механизм обработки исключительных ситуаций
  • Исправлена уязвимость, позволяющая любому пользователю обновлять смарт-контракты DAO

Фабрика контрактов Sputnik-DAO обеспечивает безопасность контрактов с помощью этих механизмов.

!

!

!

!

!

!

!

!

GET0.8%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании 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
  • Закрепить