Kedalaman analisis kontrak pabrik Sputnik DAO: desain implementasi dan mekanisme keamanan

robot
Pembuatan abstrak sedang berlangsung

Buku Harian Pengembangan Kontrak Pintar Rust (10-2): Analisis Kontrak Pabrik Sputnik DAO

Artikel ini akan memberikan analisis mendalam tentang implementasi desain model pabrik platform Sputnik DAO ( sputnikdao-factory).

1. Sputnik-DAO pabrik kontrak

Sputnik-DAO menggunakan pola desain pabrik pembuatan untuk mewujudkan penciptaan dan pengelolaan yang terintegrasi dari organisasi otonomi terdesentralisasi (DAO) di bawah platform ini.

Repositori kode sumber dari kontrak yang sesuai terletak di:

2. Pengenalan Fitur Modul DAPP

Halaman DAPP platform Sputnik DAO menampilkan objek contoh DAO yang telah dibuat ( kontrak Sputnikdaov2 ). Hingga Maret 2022, DAO yang paling aktif di platform ini adalah news.sputnik-dao.near, dengan 3051 proposal yang sedang dipilih atau telah selesai.

Semua kontrak instance DAO yang dibuat di platform Sputnik DAO dideploy secara bersamaan oleh akun sputnik-dao.near ( kontrak sputnikdao-factory ) di bawah sub-akunnya, misalnya:

  • pcp.sputnik-dao.near
  • test-dao-bro.sputnik-dao.near
  • blaqkstereo.sputnik-dao.near

Organisasi dapat secara publik memanggil metode create() dari kontrak sputnikdao-factory di jaringan utama NEAR untuk membuat instance DAO baru.

3. Penjelasan Kode Kontrak sputnikdao-factory

3.1 Membuat DAO

Status kontrak sputnikdao-factory terdiri dari dua bagian utama:

karat pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet\u003caccountid\u003e, }

  • factory_manager: menyediakan metode untuk membuat/menghapus/memperbarui instance DAO
  • daos: mencatat alamat akun NEAR yang telah membuat instance DAO

create() metode definisi:

karat #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { let account_id: AccountId = format!('{}.{}', name, 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::predecessor_account_id() })) .expect('Tidak dapat diserialisasi'); self.factory_manager.create_contract( self.get_default_code_hash(), account_id, 'baru', &args.0, 'on_create', &callback_args, ); }

implementasi spesifik dari factory_manager.create_contract:

karat pub fn create_contract( &self, code_hash: Base58CryptoHash, account_id: AccountId, new_method: &str, args: &[u8], callback_method: &str, callback_args: &[u8], ) { // Memuat kode kontrak // Membuat Promise // Membuat akun // transfer // Deploy kontrak
// Memanggil fungsi inisialisasi // Atur callback }

fungsi callback on_create:

karat #[private] pub fn on_create( &mut diri, account_id: AccountId, attached_deposit: U128, predecessor_account_id: AccountId, bool { jika near_sdk::is_promise_success)( { self.daos.insert)&account_id(; benar } else { Promise::new)predecessor_account_id(.transfer)attached_deposit.0(; salah } }

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

) 3.2 memperbarui DAO

update###( metode:

karat pub fn update)&self, account_id: AccountId, code_hash: Base58CryptoHash( { let caller_id = env::predecessor_account_id)(; assert!) caller_id == self.get_owner(( || caller_id == account_id, 'Harus diperbarui oleh pemilik pabrik atau DAO itu sendiri' ); assert!) self.daos.contains(&account_id(, 'Harus ada kontrak yang dibuat oleh pabrik' ); self.factory_manager .update_contract)account_id, code_hash, 'update'(; }

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

4. Analisis Keamanan Kontrak Sputnik-DAO Factory

Keamanan dijamin dari beberapa aspek berikut:

  • Kontrol akses: metode view tidak mengubah variabel status
  • Fungsi hak istimewa hanya dapat dijalankan oleh pemilik
  • Mekanisme penanganan kesalahan yang wajar

![])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(\u003c/accountid\u003e

Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
  • Hadiah
  • 7
  • Bagikan
Komentar
0/400
AltcoinOraclevip
· 10jam yang lalu
degens tidur di sputnik... model pabrik mereka secara harfiah adalah tata kelola web3 2.0
Lihat AsliBalas0
not_your_keysvip
· 10jam yang lalu
Desain ini cukup keren, wow
Lihat AsliBalas0
ImpermanentPhilosophervip
· 10jam yang lalu
Pengembangan modular tanpa berpikir, suka!
Lihat AsliBalas0
PensionDestroyervip
· 10jam yang lalu
Kontrak pabrik terlihat dapat dipercaya.
Lihat AsliBalas0
ImaginaryWhalevip
· 10jam yang lalu
Kontrak ini cukup menarik.
Lihat AsliBalas0
InfraVibesvip
· 10jam yang lalu
Produk lokal juga bisa melakukan jebakan ini ya
Lihat AsliBalas0
BanklessAtHeartvip
· 10jam yang lalu
Keamanan kontrak pabrik memang sangat penting.
Lihat AsliBalas0
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)