📢 Gate廣場 #NERO发帖挑战# 秀觀點贏大獎活動火熱開啓!
Gate NERO生態周來襲!發帖秀出NERO項目洞察和活動實用攻略,瓜分30,000NERO!
💰️ 15位優質發帖用戶 * 2,000枚NERO每人
如何參與:
1️⃣ 調研NERO項目
對NERO的基本面、社區治理、發展目標、代幣經濟模型等方面進行研究,分享你對項目的深度研究。
2️⃣ 參與並分享真實體驗
參與NERO生態周相關活動,並曬出你的參與截圖、收益圖或實用教程。可以是收益展示、簡明易懂的新手攻略、小竅門,也可以是行情點位分析,內容詳實優先。
3️⃣ 鼓勵帶新互動
如果你的帖子吸引到他人參與活動,或者有好友評論“已參與/已交易”,將大幅提升你的獲獎概率!
NERO熱門活動(帖文需附以下活動連結):
NERO Chain (NERO) 生態周:Gate 已上線 NERO 現貨交易,爲回饋平台用戶,HODLer Airdrop、Launchpool、CandyDrop、餘幣寶已上線 NERO,邀您體驗。參與攻略見公告:https://www.gate.com/announcements/article/46284
高質量帖子Tips:
教程越詳細、圖片越直觀、互動量越高,獲獎幾率越大!
市場見解獨到、真實參與經歷、有帶新互動者,評選將優先考慮。
帖子需原創,字數不少於250字,且需獲得至少3條有效互動
Sputnik DAO工廠合約:統一創建與管理DAO的設計實現
Sputnik DAO 工廠合約解析
Sputnik DAO 採用工廠設計模式實現了平台下DAO的統一創建與管理。本文將詳細介紹 Sputnik DAO 平台工廠模式的設計實現。
1. DAPP 功能介紹
Sputnik DAO 平台已有多個DAO實例被創建。截至2022年3月,最活躍的DAO爲 news.sputnik-dao.near,已有3051個提案。
所有基於 Sputnik DAO 創建的DAO實例合約都部署在 sputnik-dao.near 的子帳戶下,例如:
用戶可以通過調用 sputnikdao-factory 合約的 create() 方法來創建新的DAO實例。
2. 工廠合約代碼解讀
2.1 創建 DAO
sputnikdao-factory 合約狀態主要包含:
create() 方法定義:
rust #[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('Failed to serialize'); self.factory_manager.create_contract( self.get_default_code_hash(), account_id, 'new', &args.0, 'on_create', &callback_args, ); }
create_contract() 方法實現了:
on_create() 函數實現:
rust #[private] pub fn on_create( &mut self, account_id: AccountId, attached_deposit: U128, predecessor_account_id: AccountId, ) -> bool { if near_sdk::is_promise_success() { self.daos.insert(&account_id); true } else { Promise::new(predecessor_account_id).transfer(attached_deposit.0); false } }
2.2 更新 DAO
工廠合約提供 update() 接口用於升級DAO合約:
rust 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, 'Must be updated by the factory owner or the DAO itself' ); assert!( self.daos.contains(&account_id), 'Must be contract created by factory' ); self.factory_manager .update_contract(account_id, code_hash, 'update'); }
3. 安全性分析
Sputnik DAO Factory合約的安全性主要體現在:
權限控制
錯誤處理
白名單校驗
默認安全配置
總的來說,Sputnik DAO Factory合約實現了較爲完善的安全機制,但仍需持續關注和改進。