Аналіз проектування контракту фабрики Sputnik-DAO: створення, оновлення та механізми безпеки

Аналіз контракту фабрики Sputnik-DAO

Платформа Sputnik-DAO використовує фабричну модель для централізованого управління створенням та розгортанням різних DAO екземплярів. У цій статті буде детально представлено проектування та реалізацію фабричного контракту Sputnik-DAO (sputnikdao-factory).

1. Структура заводського контракту

Фабричний контракт складається головним чином з двох частин:

іржа pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet, }

  • factory_manager: надає основні функції для створення/видалення/оновлення екземплярів DAO
  • daos: записує адреси рахунків усіх створених DAO-екземплярів

!

2. Створення DAO

Основний метод створення 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,
);

}

Цей метод головним чином виконує:

  1. Створення нового облікового запису адреси DAO
  2. Підготовка параметрів зворотного виклику
  3. Викликати factory_manager для створення контракту

Основні кроки factory_manager.create_contract():

  1. Завантаження шаблону коду контракту DAO
  2. Створити новий акаунт
  3. Початкові кошти для переказу
  4. Розгортання коду контракту
  5. Виклик методу ініціалізації контракту
  6. Обробка результату on_create

!

3. Оновлення DAO

Фабричний контракт надає метод оновлення ( для оновлення контракту 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, 'оновлення'(; }

Цей метод перевіряє права виклику, а потім викликає factory_manager.update_contract)( для оновлення коду контракту.

! [])https://img-cdn.gateio.im/webp-social/moments-db234efe334b609e12be80398e4e6fa5.webp(

4. Розгляд безпеки

Безпека фабричних контрактів в основному проявляється в:

  • Контроль доступу: Привілейовані функції можуть бути викликані лише власником
  • Узгодженість стану: повернення коштів у разі невдачі створення DAO
  • Обробка виключень: обробка різних виключних ситуацій
  • Механізм оновлення: суворий контроль за правами на оновлення контракту

! [])https://img-cdn.gateio.im/webp-social/moments-373080ddb66a4cb83e0722b387056be0.webp(

! [])https://img-cdn.gateio.im/webp-social/moments-8b462e3ac0fd55e990921d21d66e3d42.webp(

! [])https://img-cdn.gateio.im/webp-social/moments-a8d69d504693c5c14767aed9244a090a.webp(

! [])https://img-cdn.gateio.im/webp-social/moments-729b65b1335931b4645ff5a9981d125b.webp(

! [])https://img-cdn.gateio.im/webp-social/moments-074c1aa0b7f9adfa5780a29c73654fc0.webp(

! [])https://img-cdn.gateio.im/webp-social/moments-aebf6315f45abba98b7345259ffe8b5d.webp(

! [])https://img-cdn.gateio.im/webp-social/moments-a3a84d139b8950498848a5cafbdfea83.webp(

! [])https://img-cdn.gateio.im/webp-social/moments-46f1a89001b11b13b1a8d1b484d4877d.webp(

Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 7
  • Поділіться
Прокоментувати
0/400
DiamondHandsvip
· 07-22 02:04
Фабричні контракти дуже складні, я в шоці.
Переглянути оригіналвідповісти на0
GasFeeCryvip
· 07-21 22:01
Якось все виглядає заплутано... Контракт дуже складний.
Переглянути оригіналвідповісти на0
ContractCollectorvip
· 07-19 04:27
Є руки - це вже добре, я - аудитор контрактів Блокчейн!

Будь ласка, дайте коментар у стилі простого китайського.
Переглянути оригіналвідповісти на0
GateUser-26d7f434vip
· 07-19 04:26
Фабричний контракт на такому ж рівні? Чисте списування
Переглянути оригіналвідповісти на0
FadCatchervip
· 07-19 04:23
Ех, це ж обов'язковий курс для любителів Блокчейн!
Переглянути оригіналвідповісти на0
TokenBeginner'sGuidevip
· 07-19 04:18
Нагадуємо: знання, пов'язані з контрактами, стосуються безпеки фінансів, дані показують, що 92% Новачків зазнають збитків через нерозуміння базових механізмів.
Переглянути оригіналвідповісти на0
MEVHunterZhangvip
· 07-19 04:12
пампнуло газ, але не можу написати цей контракт...
Переглянути оригіналвідповісти на0
  • Закріпити