🎉 攢成長值,抽華爲Mate三折疊!廣場第 1️⃣ 2️⃣ 期夏季成長值抽獎大狂歡開啓!
總獎池超 $10,000+,華爲Mate三折疊手機、F1紅牛賽車模型、Gate限量週邊、熱門代幣等你來抽!
立即抽獎 👉 https://www.gate.com/activities/pointprize?now_period=12
如何快速賺成長值?
1️⃣ 進入【廣場】,點擊頭像旁標識進入【社區中心】
2️⃣ 完成發帖、評論、點讚、發言等日常任務,成長值拿不停
100%有獎,抽到賺到,大獎等你抱走,趕緊試試手氣!
截止於 8月9日 24:00 (UTC+8)
詳情: https://www.gate.com/announcements/article/46384
#成长值抽奖12期开启#
Sputnik DAO智能合約提案機制解析:從發起到執行全流程
Rust智能合約養成日記(11):Sputnik DAO提案機制剖析
Sputnik-DAO 作爲 NEAR Protocol 的基礎設施,正推動 NEAR 生態向去中心化方向發展。目前該平台已促成多個 NEAR 項目建立自治社區,並提供了完整靈活的社區決策治理方案。
Sputnikdaov2 是用於 Sputnik-DAO 社區治理投票的智能合約。本文將介紹該合約的核心概念:提案(Proposal),並在後續文章中圍繞提案講解相關的 DAO 社區治理模式(Policy)。
1. 提案發起
Sputnik-DAO 中每個成員都可以就項目治理管理發表意見或提交提案。持股成員可對提案進行審議投票。成員可通過投票或發起提案來影響項目未來走向。
在合約層面,成員可調用 sputnikdaov2 合約的 add_proposal() 方法發起新提案:
rust pub fn add_proposal(&mut self, proposal: ProposalInput) -> u64
提案者需提供提案詳細信息(ProposalInput):
add_proposal() 方法會進行校驗處理,生成帶完整初始信息的提案(Proposal),並與唯一的 proposal_id 綁定,添加到合約全局維護的 Contract.proposals 映射中。
提案完整屬性信息包括:
合約要求提案者在調用 add_proposal() 時質押一定數額 NEAR 代幣作爲保證金。該押金在提案正常結束時通過 internal_return_bonds() 退還。
2. 提案狀態
Sputnik-DAO 中的提案可能經歷以下狀態:
提案狀態變化由 act_proposal() 方法驅動。成員可對提案執行以下操作:
內部會調用 policy.proposal_status() 進行計票,對滿足閾值的提案變更狀態。
3. 提案執行
狀態爲 Approved 的提案將通過 internal_execute_proposal() 執行決策內容。支持的提案類型包括:
下面介紹兩種典型提案類型的處理流程:
3.1 合約函數執行提案
FunctionCall 類型提案在創建時傳入了要執行的函數操作(actions)。內部可包含多個 ActionCall 對象,指定合約方法名和參數。
Sputnik-DAO 採用 Promise Batch Actions 形式完成合約函數執行類型提案的執行。
3.2 合約資金轉移提案
Transfer 類型提案用於將合約帳戶積累的代幣轉移到指定 receiver_id。
internal_execute_proposal() 對 Transfer 類型提案的處理會調用 internal_payout() 函數,實現不同類型 Fungible Token 和 receiver_id 的轉帳操作。
4. 總結
本文介紹了 Sputnik DAO 合約的核心概念提案(Proposal),包括提案創建、投票執行及狀態變化規則。後續將基於提案詳細描述 Sputnik-DAO 治理模式(Policy)的實現與配置。