Глубина анализа контракта фабрики платформы Sputnik DAO: проектирование, реализация и механизмы безопасности

robot
Генерация тезисов в процессе

Rust смарт-контракты养成日记(10-2): Sputnik DAO 工厂合约解析

В этой статье будет глубоко проанализирован дизайн и реализация фабричной модели платформы Sputnik DAO ( sputnikdao-factory ).

1. Sputnik-DAO фабричный смарт-контракт

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

Исходный код контракта находится в репозитории:

!

2. Введение в функционал модуля DAPP

Страница DAPP платформы Sputnik DAO отображает созданные экземпляры DAO (Sputnikdaov2 смарт-контракта ). На март 2022 года наиболее активным DAO на этой платформе является news.sputnik-dao.near, с 3051 предложением, находящимся на голосовании или завершившимся.

Все экземпляры смарт-контрактов DAO, созданные на платформе Sputnik DAO, развертываются единообразно в подаккаунтах от имени аккаунта sputnik-dao.near ( с использованием контракта sputnikdao-factory ), например:

  • pcp.sputnik-dao.near
  • test-dao-bro.sputnik-dao.near
  • blaqkstereo.sputnik-dao.near

Организации могут публично вызывать метод create() контракта sputnikdao-factory в основной сети NEAR для создания новых экземпляров DAO.

!

3. Разбор кода контракта sputnikdao-factory

3.1 Создание DAO

статус контракта sputnikdao-factory состоит из двух основных частей:

рут pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet, }

  • factory_manager: предоставляет методы для создания/удаления/обновления DAO экземпляров
  • daos: адреса NEAR-аккаунтов, на которых были созданы DAO-экземпляры

create() метод определения:

ржавчина #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { let account_id: AccountId = format!('{}. {}', имя, env::current_account_id()) .parse() .unwrap(); let callback_args = serde_json::to_vec(&json!({ 'account_id': account_id, 'attached_deposit': U128(env::attached_deposit()), 'predecessor_account_id': env::p redecessor_account_id() })) .expect('Не удалось сериализовать'); self.factory_manager.создать_contract( self.get_default_code_hash(), account_id, 'новый', &args.0, «on_create», &callback_args, ); }

!

конкретная реализация factory_manager.create_contract:

ржавчина паб fn create_contract( и себя, code_hash: Base58CryptoHash, account_id: AccountId, new_method: &str, args: &[u8], callback_method: &str, callback_args: &[u8], ) { // Загрузка кода смарт-контрактов // Создание Promise // Создание аккаунта // Перевод // Развертывание контракта
// Вызов функции инициализации // Установить обратный вызов }

!

on_create коллбэк-функция:

ржавчина #[private] паб fn on_create( &mut self, account_id: AccountId, attached_deposit: U128, predecessor_account_id: AccountId, ) -> bool { if near_sdk::is_promise_success() { self.daos.insert(&account_id); истинный } иначе { Promise::new(предшествующий_идентификатор_аккаунта).transfer(attached_deposit.0); ложный } }

!

3.2 обновление DAO

update() метод:

ржавчина 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.daos.contains(&account_id), 'Должен быть контракт, созданный фабрикой' ); self.factory_manager .обновить_контракт(идентификатор_аккаунта, хэш_кода, 'обновить'); }

!

4. Анализ безопасности контракта Sputnik-DAO Factory

Основные аспекты обеспечения безопасности:

  • Контроль доступа: метод view не изменяет состояние переменных
  • Привилегированные функции могут выполняться только владельцем
  • Рациональный механизм обработки ошибок

!

!

!

!

!

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 7
  • Поделиться
комментарий
0/400
AltcoinOraclevip
· 13ч назад
дегенераты спят на спутнике... их фабричная модель это буквально веб3 управление 2.0
Посмотреть ОригиналОтветить0
not_your_keysvip
· 13ч назад
Этот дизайн довольно хардкорный, вау.
Посмотреть ОригиналОтветить0
ImpermanentPhilosophervip
· 13ч назад
Безмозглая модульная разработка, люблю это
Посмотреть ОригиналОтветить0
PensionDestroyervip
· 13ч назад
Фабричный контракт выглядит надежно.
Посмотреть ОригиналОтветить0
ImaginaryWhalevip
· 13ч назад
Этот контракт довольно интересный.
Посмотреть ОригиналОтветить0
InfraVibesvip
· 13ч назад
国产也能搞这 ловушка啊
Посмотреть ОригиналОтветить0
BanklessAtHeartvip
· 13ч назад
Безопасность контрактов на фабриках действительно имеет ключевое значение.
Посмотреть ОригиналОтветить0
  • Закрепить