Глибина аналізу контракту фабрики 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 ( у його підрахунках, наприклад:

  • pcp.sputnik-dao.near
  • test-dao-bro.sputnik-dao.near
  • blaqkstereo.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, }

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

створити###( визначення методу:

іржа #) 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

Головним чином гарантувати безпеку з наступних кількох аспектів:

  • Контроль доступу: метод view не змінює змінні стану
  • Привілейовані функції можуть виконуватися тільки власником
  • розумний механізм обробки помилок

!

!

!

!

!

Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 7
  • Поділіться
Прокоментувати
0/400
AltcoinOraclevip
· 17год тому
дегенерати сплять на сputnik... їхня фабрична модель це буквально web3 управління 2.0
Переглянути оригіналвідповісти на0
not_your_keysvip
· 17год тому
Цей дизайн досить жорсткий, вау
Переглянути оригіналвідповісти на0
ImpermanentPhilosophervip
· 17год тому
Безмозкова модульна розробка, люблю це.
Переглянути оригіналвідповісти на0
PensionDestroyervip
· 17год тому
Фабричний контракт виглядає надійно.
Переглянути оригіналвідповісти на0
ImaginaryWhalevip
· 17год тому
Цей контракт має дещо цікаве.
Переглянути оригіналвідповісти на0
InfraVibesvip
· 17год тому
Вітчизняні також можуть зробити цю пастку!
Переглянути оригіналвідповісти на0
BanklessAtHeartvip
· 18год тому
Безпека контрактів на фабриках дійсно є ключовою.
Переглянути оригіналвідповісти на0
  • Закріпити