# Rust智能合約養成日記(10-3):Sputnik DAO提案機制解析Sputnik-DAO 作爲 NEAR Protocol 的基礎設施,正推動 NEAR 生態向去中心化方向發展。目前該平台已促成多個 NEAR 項目的去中心化自治社區,並提供了完整靈活的社區決策治理解決方案。Sputnikdaov2 是用於 Sputnik-DAO 社區治理投票的智能合約。本文將介紹該合約的核心概念:提案(Proposal),後續文章將圍繞提案介紹相關的 DAO 社區治理模式(Policy)。## 1. 提案發起Sputnik-DAO 社區成員可以就項目治理或管理發表意見或提交提案。每個持股的社區成員都可以對提案進行審議和投票,從而影響項目未來走向。在合約層面,DAO 成員可調用 sputnikdaov2 合約的 add_proposal() 方法來發起新提案。調用時需提供提案的詳細信息(ProposalInput),包括:- 提案的文字描述(Description)- 提案的類型(kind)add_proposal() 方法會進行校驗和處理,生成一個完整的提案(Proposal),並與唯一的 proposal_id 綁定,添加到合約維護的提案池中。提案的完整屬性信息包括:提案者、狀態、發起時間、投票狀態等。新提案的狀態默認爲 InProgress。Sputnik-DAO 要求提案者質押一定數額的 NEAR 代幣作爲押金。該押金在提案正常結束時會退還給提案者。## 2. 提案狀態Sputnik-DAO 中的提案可能經歷多種狀態:InProgress、Approved、Rejected、Removed 等。提案狀態變化由 act_proposal() 方法驅動。DAO 成員可調用該方法對提案執行投票等操作:- VoteApprove:贊成 - VoteReject:反對- VoteRemove:認爲提案無意義,需移除內部會調用 policy.proposal_status() 進行計票。對於滿足投票閾值的提案,狀態會相應變更:- Approved:調用 internal_execute_proposal() 執行提案- Rejected/Removed:調用 internal_reject_proposal() 執行收尾操作Removed 狀態的提案會直接從提案池移除,不退還押金。Rejected 狀態的提案會保留在提案池中,並退還押金。## 3. 提案執行若提案狀態爲 Approved,內部會調用 internal_execute_proposal() 執行提案內容。Sputnik-DAO 支持多種提案類型,大多涉及 DAO 治理模式的配置更新。下面介紹兩種典型提案類型的處理流程:### 3.1 合約函數執行提案對於 FunctionCall 類型提案,內部會採用 Promise Batch Actions 的形式執行提案中指定的合約方法調用。### 3.2 合約資金轉移提案 對於 Transfer 類型提案,內部會調用 internal_payout() 函數,實現不同類型代幣向指定帳戶的轉帳操作。本文介紹了 Sputnik DAO 合約的核心概念——提案(Proposal),包括提案的創建、投票和執行流程。後續將進一步介紹 Sputnik-DAO 中治理模式(Policy)的實現與配置。
Sputnik DAO智能合約剖析:提案機制設計與實現
Rust智能合約養成日記(10-3):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 綁定,添加到合約維護的提案池中。
提案的完整屬性信息包括:提案者、狀態、發起時間、投票狀態等。新提案的狀態默認爲 InProgress。
Sputnik-DAO 要求提案者質押一定數額的 NEAR 代幣作爲押金。該押金在提案正常結束時會退還給提案者。
2. 提案狀態
Sputnik-DAO 中的提案可能經歷多種狀態:InProgress、Approved、Rejected、Removed 等。
提案狀態變化由 act_proposal() 方法驅動。DAO 成員可調用該方法對提案執行投票等操作:
內部會調用 policy.proposal_status() 進行計票。對於滿足投票閾值的提案,狀態會相應變更:
Removed 狀態的提案會直接從提案池移除,不退還押金。Rejected 狀態的提案會保留在提案池中,並退還押金。
3. 提案執行
若提案狀態爲 Approved,內部會調用 internal_execute_proposal() 執行提案內容。
Sputnik-DAO 支持多種提案類型,大多涉及 DAO 治理模式的配置更新。下面介紹兩種典型提案類型的處理流程:
3.1 合約函數執行提案
對於 FunctionCall 類型提案,內部會採用 Promise Batch Actions 的形式執行提案中指定的合約方法調用。
3.2 合約資金轉移提案
對於 Transfer 類型提案,內部會調用 internal_payout() 函數,實現不同類型代幣向指定帳戶的轉帳操作。
本文介紹了 Sputnik DAO 合約的核心概念——提案(Proposal),包括提案的創建、投票和執行流程。後續將進一步介紹 Sputnik-DAO 中治理模式(Policy)的實現與配置。