📢 Gate 廣場大使招募開啓!🔥
加入 Gate 大使,不只是創作,更是一段精彩旅程!💡
成爲廣場大使,你將享有:
🎁 專屬福利,展現獨特價值
💰 廣場任務提醒,邊發帖邊賺錢
🎨 限量週邊,成爲 Gate 官方代言人
⭐ VIP5 + 廣場黃V,輕鬆脫穎而出
🚀 加入我們,成爲:
社區意見領袖
Web3 創意先鋒
優質內容傳播者
🎉 點擊報名,開啓你的大使之旅:https://www.gate.com/questionnaire/4937
📖 活動詳情:https://www.gate.com/announcements/article/38592
Sputnik DAO智能合約解析:提案機制詳解
Rust智能合約養成日記(11):Sputnik DAO提案機制解析
Sputnik-DAO作爲NEAR Protocol的基礎設施,正推動NEAR生態向去中心化方向發展。目前該平台已促成多個NEAR項目建立去中心化自治社區,並提供了靈活高效的社區決策治理方案。
Sputnikdaov2是用於Sputnik-DAO社區治理投票的智能合約。本文將介紹該合約的核心概念:提案(Proposal),並在後續文章中圍繞提案介紹相關的DAO社區治理模式(Policy)。
1. 提案發起
Sputnik-DAO中每位成員都可就項目治理管理發表意見或提交提案。持股成員可對提案進行審議投票。成員可通過投票或發起提案來影響項目走向。
在合約層面,DAO成員可調用sputnikdaov2合約的add_proposal()方法發起新提案。提案者需提供提案的詳細信息(ProposalInput):
提案信息將作爲參數傳入add_proposal()方法,經過校驗處理後生成一個完整的提案(Proposal),並與唯一的proposal_id綁定,添加到合約全局維護的Contract.proposals映射中。
完整的提案屬性信息包括:
需要注意的是,Sputnik-DAO存在提案押金(proposal_bond)的概念。合約要求提案者在調用add_proposal()時質押一定數額的NEAR代幣作爲保證金。該押金將在提案正常結束時退還給提案人。
2. 提案狀態
Sputnik-DAO中的提案可能經歷多種狀態,初始狀態爲InProgress。提案狀態變化由act_proposal()方法驅動。
DAO成員可調用act_proposal()對提案執行如下操作:
投票後,程序會調用policy.proposal_status()進行計票。對於滿足投票閾值的提案,狀態將相應變更:
Rejected和Removed狀態的區別在於,Removed狀態的提案將從提案池中移除,並不退還押金。Rejected狀態的提案會保留在池中,並退還押金。
3. 提案執行
若提案狀態爲Approved,act_proposal()將調用internal_execute_proposal()執行提案內容。
Sputnik-DAO支持多種提案類型,本節將介紹兩種典型類型的處理流程:
3.1 合約函數執行提案(FunctionCall)
FunctionCall類型提案在添加時已傳入具體要執行的函數操作(actions)。每個action可指定合約方法名及參數。Sputnik-DAO採用Promise Batch Actions的形式完成此類提案的執行。
3.2 合約資金轉移提案(Transfer)
Transfer類型提案用於將合約帳戶積累的代幣轉移到指定帳戶。internal_execute_proposal()會調用internal_payout()函數,實現對不同類型Fungible Token和接收帳戶的轉帳操作。
4. 總結
本文介紹了Sputnik DAO合約的核心概念——提案(Proposal),說明了如何創建、投票和執行提案,以及提案狀態的變化規則。後續將基於提案對Sputnik-DAO的治理模式(Policy)展開更詳細的描述。