Rust akıllı sözleşmeler yetiştirme günlüğü(10-2): Sputnik DAO fabrika sözleşmesi analizi
Bu makale, Sputnik DAO platformunun fabrika modeli ( sputnikdao-factory) tasarımının uygulanmasını derinlemesine inceleyecektir.
1. Sputnik-DAO Fabrika Akıllı Sözleşmesi
Sputnik-DAO, oluşturucu fabrika tasarım modelini kullanarak bu platform altındaki merkeziyetsiz özerk organizasyon (DAO)'ın birleşik yaratım ve yönetimini gerçekleştirmiştir.
İlgili sözleşmenin kaynak kodu deposu şurada bulunmaktadır:
2. DAPP Modül Fonksiyon Tanıtımı
Sputnik DAO platformunun DAPP sayfası, oluşturulmuş DAO örnek nesnelerini (Sputnikdaov2 akıllı sözleşmesi ) ile göstermektedir. 2022 Mart itibarıyla, bu platform altında en aktif DAO news.sputnik-dao.near olup, 3051 teklif oylama aşamasında veya sona ermiştir.
Sputnik DAO platformunda oluşturulan tüm DAO örnek sözleşmeleri, sputnik-dao.near hesabı ( altında, ) sözleşmesi ile tek bir şekilde alt hesaplarına dağıtılmaktadır. Örneğin:
pcp.sputnik-dao.near
test-dao-bro.sputnik-dao.near
blaqkstereo.sputnik-dao.near
Organizasyonlar, NEAR ana ağında sputnikdao-factory akıllı sözleşmesinin create() metodunu kullanarak yeni DAO örnekleri oluşturabilir.
pas
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,
'Fabrika sahibi veya DAO tarafından güncellenmelidir'
);
assert!)
self.daos.contains(&account_id(,
'Fabrika tarafından oluşturulmuş bir sözleşme olmalıdır'
);
self.factory_manager
.update_contract)account_id, code_hash, 'update'(;
}
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
18 Likes
Reward
18
7
Share
Comment
0/400
AltcoinOracle
· 10h ago
degens sputnik'te uyuyor... fabrikaları modeli kelimenin tam anlamıyla web3 yönetimi 2.0
View OriginalReply0
not_your_keys
· 10h ago
Bu tasarım gerçekten sert, vay!
View OriginalReply0
ImpermanentPhilosopher
· 10h ago
Zihinsiz modüler geliştirme, bayıldım
View OriginalReply0
PensionDestroyer
· 10h ago
Fabrika sözleşmesi güvenilir görünüyor.
View OriginalReply0
ImaginaryWhale
· 10h ago
Bu sözleşmenin bir şeyleri var.
View OriginalReply0
InfraVibes
· 10h ago
Yerli üretim de bu tuzağı yapabiliyor.
View OriginalReply0
BanklessAtHeart
· 11h ago
Fabrika sözleşmesinin güvenliği gerçekten önemlidir.
Derinlik analizi Sputnik DAO platform fabrika sözleşmesi: tasarım uygulaması ve güvenlik mekanizmaları
Rust akıllı sözleşmeler yetiştirme günlüğü(10-2): Sputnik DAO fabrika sözleşmesi analizi
Bu makale, Sputnik DAO platformunun fabrika modeli ( sputnikdao-factory) tasarımının uygulanmasını derinlemesine inceleyecektir.
1. Sputnik-DAO Fabrika Akıllı Sözleşmesi
Sputnik-DAO, oluşturucu fabrika tasarım modelini kullanarak bu platform altındaki merkeziyetsiz özerk organizasyon (DAO)'ın birleşik yaratım ve yönetimini gerçekleştirmiştir.
İlgili sözleşmenin kaynak kodu deposu şurada bulunmaktadır:
2. DAPP Modül Fonksiyon Tanıtımı
Sputnik DAO platformunun DAPP sayfası, oluşturulmuş DAO örnek nesnelerini (Sputnikdaov2 akıllı sözleşmesi ) ile göstermektedir. 2022 Mart itibarıyla, bu platform altında en aktif DAO news.sputnik-dao.near olup, 3051 teklif oylama aşamasında veya sona ermiştir.
Sputnik DAO platformunda oluşturulan tüm DAO örnek sözleşmeleri, sputnik-dao.near hesabı ( altında, ) sözleşmesi ile tek bir şekilde alt hesaplarına dağıtılmaktadır. Örneğin:
Organizasyonlar, NEAR ana ağında sputnikdao-factory akıllı sözleşmesinin create() metodunu kullanarak yeni DAO örnekleri oluşturabilir.
3. sputnikdao-factory akıllı sözleşmeler kodunun yorumlanması
3.1 DAO oluşturma
sputnikdao-factory akıllı sözleşmeler durumu esasen iki bölümden oluşur:
pas pub struct SputnikDAOFactory { factory_manager: FabrikaYönetici, daolar: SırasızKüme\u003chesapkimliği\u003e, }
create() yöntem tanımı:
pas #[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()), 'önceki_hesap_id': env::önceki_hesap_id() })) .expect('Hata: seri hale getirilemedi'); self.factory_manager.create_contract( self.get_default_code_hash(), hesap_id, 'yeni', &args.0, 'on_create', &callback_args, ); }
factory_manager.create_contract'ın spesifik uygulaması:
pas pub fn create_contract( &self, code_hash: Base58CryptoHash, account_id: AccountId, new_method: &str, args: [u8], callback_method: &str, callback_args: [u8], ) { // Sözleşme kodunu yükle // Promise oluştur // Hesap oluştur // Transfer // Sözleşmeyi dağıt // Başlatma fonksiyonu çağrılıyor // Geri çağrıyı ayarla }
on_create geri çağırma fonksiyonu:
pas #[private] pub fn on_create( &mut self, account_id: AccountId, attached_deposit: U128, predecessor_account_id: AccountId, bool { eğer near_sdk::is_promise_success)( { self.daos.insert)&account_id(; doğru } else { Promise::new)önceki_hesap_id(.transfer)ekli_depozito.0(; false } }
![])https://img-cdn.gateio.im/webp-social/moments-8b462e3ac0fd55e990921d21d66e3d42.webp(
) 3.2 DAO'yu güncelle
update###( yöntemi:
pas 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, 'Fabrika sahibi veya DAO tarafından güncellenmelidir' ); assert!) self.daos.contains(&account_id(, 'Fabrika tarafından oluşturulmuş bir sözleşme olmalıdır' ); self.factory_manager .update_contract)account_id, code_hash, 'update'(; }
![])https://img-cdn.gateio.im/webp-social/moments-a8d69d504693c5c14767aed9244a090a.webp(
4. Sputnik-DAO Fabrika akıllı sözleşmeler güvenlik analizi
Güvenliği aşağıdaki birkaç açıdan sağlamak:
![])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(