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 绑定,添加到合约全局维护的 Contract.proposals 映射中。

提案完整属性信息包括:

  • 描述(description)
  • 类型(kind)
  • 提案者(proposer)
  • 状态(status)
  • 发起时间(submission_time)
  • 投票状态(vote_counts, votes)

合约要求提案者在调用 add_proposal() 时质押一定数额 NEAR 代币作为保证金。该押金在提案正常结束时通过 internal_return_bonds() 退还。

2. 提案状态

Sputnik-DAO 中的提案可能经历以下状态:

  • InProgress(初始状态)
  • Approved
  • Rejected
  • Removed
  • Expired
  • Moved
  • Failed

提案状态变化由 act_proposal() 方法驱动。成员可对提案执行以下操作:

  • VoteApprove:表赞成
  • VoteReject:表反对
  • VoteRemove:认为无意义,需移除

内部会调用 policy.proposal_status() 进行计票,对满足阈值的提案变更状态。

  • Approved 状态提案将执行
  • Rejected 或 Removed 状态执行收尾操作
  • Removed 状态提案会从提案池移除,不退还押金
  • Rejected 状态提案保留在提案池,退还押金

3. 提案执行

状态为 Approved 的提案将通过 internal_execute_proposal() 执行决策内容。支持的提案类型包括:

  • ChangeConfig
  • ChangePolicy
  • AddMemberToRole
  • RemoveMemberFromRole
  • FunctionCall
  • UpgradeSelf
  • UpgradeRemote
  • Transfer
  • SetStakingContract
  • AddBounty
  • BountyDone
  • Vote
  • FactoryInfoUpdate
  • ChangePolicyAddOrUpdateRole
  • ChangePolicyRemoveRole
  • ChangePolicyUpdateDefaultVotePolicy
  • ChangePolicyUpdateParameters

下面介绍两种典型提案类型的处理流程:

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)的实现与配置。

ACT1.22%
BATCH-6.85%
TOKEN3.4%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 5
  • 分享
评论
0/400
SleepyValidatorvip
· 3小时前
近几天rust学爆了 好起来了
回复0
测试网学者vip
· 4小时前
又在卷dao标准化流程了
回复0
空投猎人007vip
· 4小时前
near的这个dao没意思 转手就卖
回复0
rekt_but_vibingvip
· 4小时前
提案太多了 就是投不过啊搞啥呢
回复0
StableGeniusDegenvip
· 5小时前
rust又来卷了 有点狠啊
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)