Щоденник розвитку смартконтрактів 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, наприклад:
pcp.sputnik-dao.near
test-dao-bro.sputnik-dao.near
blaqkstereo.sputnik-dao.near
octopode-dao.sputnik-dao.near
Організації можуть викликати метод create() контракту sputnikdao-factory у основній мережі NEAR для створення нових DAO екземплярів.
іржа
Паб Fn create_contract(
і себе,
code_hash: Base58CryptoHash,
account_id: Ідентифікатор облікового запису,
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
.оновити_контракт(ідентифікатор_рахунку, код_вмісту, 'оновити');
}
!
4. Аналіз безпеки контракту Sputnik-DAO Factory
Контроль доступу: методи класу view не змінюють змінні стану
Контроль доступу: Привілейовані функції можуть виконуватись лише власником контракту або рахунком DAO
Обробка помилок: реалізація розумного механізму обробки помилок для аномальних ситуацій
!
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
15 лайків
Нагородити
15
5
Поділіться
Прокоментувати
0/400
ChainSpy
· 6год тому
Шаблон проектування "фабрика" варто дослідити
Переглянути оригіналвідповісти на0
AirdropSweaterFan
· 6год тому
Новачок новачок обов'язковий до перегляду навчальний посібник
Аналіз контракту заводу 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, }
Метод створення екземпляра 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, 'новий', &арг.0, 'on_create', &callback_args, ); }
конкретна реалізація factory_manager.create_contract:
іржа Паб Fn create_contract( і себе, code_hash: Base58CryptoHash,
account_id: Ідентифікатор облікового запису, 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 .оновити_контракт(ідентифікатор_рахунку, код_вмісту, 'оновити'); }
!
4. Аналіз безпеки контракту Sputnik-DAO Factory
!