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 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 или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
18 Лайков
Награда
18
7
Поделиться
комментарий
0/400
AltcoinOracle
· 10ч назад
дегенераты спят на спутнике... их фабричная модель это буквально веб3 управление 2.0
Посмотреть ОригиналОтветить0
not_your_keys
· 10ч назад
Этот дизайн довольно хардкорный, вау.
Посмотреть ОригиналОтветить0
ImpermanentPhilosopher
· 10ч назад
Безмозглая модульная разработка, люблю это
Посмотреть ОригиналОтветить0
PensionDestroyer
· 10ч назад
Фабричный контракт выглядит надежно.
Посмотреть ОригиналОтветить0
ImaginaryWhale
· 10ч назад
Этот контракт довольно интересный.
Посмотреть ОригиналОтветить0
InfraVibes
· 10ч назад
国产也能搞这 ловушка啊
Посмотреть ОригиналОтветить0
BanklessAtHeart
· 11ч назад
Безопасность контрактов на фабриках действительно имеет ключевое значение.
Глубина анализа контракта фабрики платформы Sputnik DAO: проектирование, реализация и механизмы безопасности
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 ), например:
Организации могут публично вызывать метод create() контракта sputnikdao-factory в основной сети NEAR для создания новых экземпляров DAO.
!
3. Разбор кода контракта sputnikdao-factory
3.1 Создание DAO
статус контракта sputnikdao-factory состоит из двух основных частей:
рут pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet, }
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
Основные аспекты обеспечения безопасности:
!
!
!
!
!