Щоденник розвитку смартконтрактів 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 ( у його підрахунках, наприклад:
pcp.sputnik-dao.near
test-dao-bro.sputnik-dao.near
blaqkstereo.sputnik-dao.near
Організації можуть відкрито викликати метод create)( контракту sputnikdao-factory в основній мережі NEAR для створення нових 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 не змінює змінні стану
Привілейовані функції можуть виконуватися тільки власником
розумний механізм обробки помилок
!
!
!
!
!
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
18 лайків
Нагородити
18
7
Поділіться
Прокоментувати
0/400
AltcoinOracle
· 10год тому
дегенерати сплять на сputnik... їхня фабрична модель це буквально web3 управління 2.0
Глибина аналізу контракту фабрики 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 ( у його підрахунках, наприклад:
Організації можуть відкрито викликати метод create)( контракту sputnikdao-factory в основній мережі NEAR для створення нових DAO-екземплярів.
! [])https://img-cdn.gateio.im/webp-social/moments-78921e045e487159a6dd01b0f3466573.webp(
3. розшифровка коду контракту sputnikdao-factory
) 3.1 створення DAO
стан контракту sputnikdao-factory складається в основному з двох частин:
іржа pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet, }
створити###( визначення методу:
іржа #) pub fn create[payable]&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)( })) .очікувати)'Не вдалося серіалізувати'(; self.factory_manager.створити_contract) self.get_default_code_hash((, account_id, 'новий', &арг.0, 'on_create', &callback_args, ); }
! [])https://img-cdn.gateio.im/webp-social/moments-db234efe334b609e12be80398e4e6fa5.webp(
конкретна реалізація factory_manager.create_contract:
іржа Паб Fn create_contract) і себе, code_hash: Base58CryptoHash, account_id: Ідентифікатор облікового запису, new_method: &str, args: &(, callback_method: &str, callback_args: &[u8], [u8] { // Завантаження коду смартконтракту // Створення Promise // Створити акаунт // Переказ // Розгортання смартконтракту
// Виклик функції ініціалізації // Налаштування зворотного виклику }
! [])https://img-cdn.gateio.im/webp-social/moments-373080ddb66a4cb83e0722b387056be0.webp(
on_create колбек-функція:
іржа #) Паб ФН on_create[private] і mut self, account_id: Ідентифікатор облікового запису, attached_deposit: U128, predecessor_account_id: Ідентифікатор облікового запису, ( -> bool { if near_sdk::is_promise_success)( { self.daos.insert)&account_id(; Справжній } інакше { Обіцянка::new)predecessor_account_id(.transfer019283746574839201attached_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
Головним чином гарантувати безпеку з наступних кількох аспектів:
!
!
!
!
!