Sputnik DAO智能合約核心:提案機制深度解析

robot
摘要生成中

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):

  • 提案的文字描述(Description)
  • 提案的類型(kind)

提案信息作爲參數傳入 add_proposal() 方法,經過校驗處理後生成完整的提案(Proposal),並與唯一的 proposal_id 綁定,添加到合約全局維護的提案池中。

提案的完整屬性信息包括:

  • description:描述
  • kind:類型
  • proposer:提案者
  • status:狀態(默認爲 InProgress)
  • submission_time:提交時間
  • vote_counts:投票計數(初始爲空)
  • votes:投票詳情(初始爲空)

Sputnik-DAO 中存在提案押金(proposal_bond)的概念,提案者需在調用 add_proposal() 時質押一定數額的 NEAR 代幣作爲保證金。該押金在提案正常結束時會退還給提案者。

2. 提案狀態

Sputnik-DAO 中的提案可能經歷多種狀態,初始狀態爲 InProgress。狀態變化由 act_proposal() 方法驅動。

成員可調用 act_proposal() 對提案執行以下操作:

  • VoteApprove:贊成
  • VoteReject:反對
  • VoteRemove:移除

投票後,程序會調用 policy.proposal_status() 進行計票。滿足投票閾值的提案狀態將相應變更:

  • Approved:通過 internal_execute_proposal() 執行
  • Rejected/Removed:通過 internal_reject_proposal() 處理

Removed 狀態的提案會從提案池中移除且不退還押金,Rejected 狀態的提案會保留並退還押金。

3. 提案執行

Approved 狀態的提案會調用 internal_execute_proposal() 執行決策內容。Sputnik-DAO 支持多種提案類型,本文介紹兩種典型類型:

3.1 合約函數執行提案(FunctionCall)

FunctionCall 類型提案在創建時已傳入要執行的函數操作(actions)。internal_execute_proposal() 通過 Promise Batch Actions 的形式執行這些操作。

3.2 合約資金轉移提案(Transfer)

Transfer 類型提案用於將合約帳戶積累的代幣轉移到指定帳戶。internal_execute_proposal() 會調用 internal_payout() 函數實現不同類型代幣的轉帳操作。

4. 總結

本文介紹了 Sputnik DAO 合約的核心概念 - 提案(Proposal),包括提案的創建、狀態變化和執行過程。後續將基於提案進一步介紹 Sputnik-DAO 的治理模式(Policy)實現。

ACT-4.84%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 2
  • 分享
留言
0/400
Hash_Banditvip
· 21小時前
2020年时的协议附近挖矿……说实话,那是美好的时光
查看原文回復0
RuntimeErrorvip
· 21小時前
什么时候能用上新版本啊!
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)