В данной статье подробно рассматривается проектирование и реализация фабричной модели Sputnik-DAO (sputnikdao-factory).
1. Sputnik-DAO фабричный контракт
Sputnik-DAO использует паттерн проектирования фабрики для создания единого управления децентрализованной автономной организацией (DAO) на этой платформе.
!
2. Введение в функции модуля DAPP
На платформе DAPP Sputnik DAO видно, что на этой платформе уже создано множество экземпляров DAO. По состоянию на март 2022 года самым активным DAO является news.sputnik-dao.near, уже существует 3051 предложение, которое находится на открытом голосовании или было закончено.
Все экземпляры смарт-контрактов DAO, созданные на платформе Sputnik DAO, разворачиваются в подаккаунтах учетной записи sputnik-dao.near, например:
pcp.sputnik-dao.near
test-dao-bro.sputnik-dao.near
blaqkstereo.sputnik-dao.near
octopode-dao.sputnik-dao.near
Организации могут вызывать метод create() контракта sputnikdao-factory в основной сети NEAR для создания новых экземпляров DAO.
!
3. Разбор кода контракта sputnikdao-factory
3.1 Создание DAO
состояние контракта sputnikdao-factory в основном состоит из следующих двух частей:
ржавчина
паб fn create_contract(
и себя,
code_hash: Base58CryptoHash,
account_id: AccountId,
new_method: &str,
args: &[u8],
callback_method: &str,
callback_args: &[u8],
) {
// 1. Загрузка кода шаблона смарт-контракта
// 2. Конструктор Promise
// 3. Создание учетной записи для развертывания
// 4. Перевод NEAR
// 5. Развертывание смарт-контрактов
// 6. Вызов функции инициализации new()
// 7. коллбек on_create()
}
Логика обработки функции обратного вызова on_create:
Если шаги 3-6 выполнены неудачно, вернуть NEAR
Если выполнение прошло успешно, запишите адрес аккаунта нового DAO экземпляра.
!
3.2 обновление 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.daos.contains(&account_id),
'Должен быть контракт, созданный фабрикой'
);
self.factory_manager
.update_contract(account_id, code_hash, 'обновить');
}
!
4. Анализ безопасности контракта Sputnik-DAO Factory
Контроль доступа: методы класса view не изменяют переменные состояния
Контроль доступа: Привилегированные функции могут выполняться только владельцем контракта или учетной записью DAO
Обработка ошибок: реализация разумного механизма обработки исключительных ситуаций
!
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
18 Лайков
Награда
18
5
Поделиться
комментарий
0/400
ChainSpy
· 08-06 13:04
Шаблон проектирования фабрики стоит изучить
Посмотреть ОригиналОтветить0
AirdropSweaterFan
· 08-06 13:01
Новичок новичок必看教程
Посмотреть ОригиналОтветить0
SandwichVictim
· 08-06 12:49
Шаблон проектирования "Фабрика" действительно хорош.
Анализ контракта фабрики SputnikDAO: массовое создание и управление DAO в блокчейне Near
Rust смарт-контракты养成日记(10-2): SputnikDAO工厂合约代码解析
В данной статье подробно рассматривается проектирование и реализация фабричной модели Sputnik-DAO (sputnikdao-factory).
1. Sputnik-DAO фабричный контракт
Sputnik-DAO использует паттерн проектирования фабрики для создания единого управления децентрализованной автономной организацией (DAO) на этой платформе.
!
2. Введение в функции модуля DAPP
На платформе DAPP Sputnik DAO видно, что на этой платформе уже создано множество экземпляров DAO. По состоянию на март 2022 года самым активным DAO является news.sputnik-dao.near, уже существует 3051 предложение, которое находится на открытом голосовании или было закончено.
Все экземпляры смарт-контрактов DAO, созданные на платформе Sputnik DAO, разворачиваются в подаккаунтах учетной записи sputnik-dao.near, например:
Организации могут вызывать метод create() контракта sputnikdao-factory в основной сети NEAR для создания новых экземпляров DAO.
!
3. Разбор кода контракта sputnikdao-factory
3.1 Создание DAO
состояние контракта sputnikdao-factory в основном состоит из следующих двух частей:
руда pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet, }
Определение метода create() для создания экземпляра DAO выглядит следующим образом:
ржавчина #[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], ) { // 1. Загрузка кода шаблона смарт-контракта // 2. Конструктор Promise // 3. Создание учетной записи для развертывания // 4. Перевод NEAR // 5. Развертывание смарт-контрактов // 6. Вызов функции инициализации new() // 7. коллбек on_create() }
Логика обработки функции обратного вызова on_create:
!
3.2 обновление 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.daos.contains(&account_id), 'Должен быть контракт, созданный фабрикой' ); self.factory_manager .update_contract(account_id, code_hash, 'обновить'); }
!
4. Анализ безопасности контракта Sputnik-DAO Factory
!