#proposal #dao #module #voting #choice #vote #multiple

dao-proposal-multiple

一个用于多选(a 或 b 或 c 或 ...)投票的 DAO DAO 提案模块

5 个稳定版本

2.4.2 2024 年 7 月 22 日
2.4.0 2024 年 7 月 21 日
2.3.0 2023 年 10 月 18 日
2.2.0 2023 年 7 月 9 日
0.0.0 2023 年 7 月 3 日

#5#dao

Download history 3/week @ 2024-06-28 546/week @ 2024-07-19 122/week @ 2024-07-26 172/week @ 2024-08-02 260/week @ 2024-08-09

1,100 每月下载量

BSD-3-Clause

550KB
13K SLoC

dao-proposal-multiple

dao-proposal-multiple on crates.io docs.rs

这是一个 DAO DAO 提案模块,允许用户从 MultipleChoiceOption 数组中选择他们的投票选项。每个选项都可以关联一些消息,在提案通过并执行时由核心模块执行。

只要提案没有过期,就可以投下选票。在提案不再被评估的情况下(例如,达到法定人数并被拒绝),这允许投票者表达他们的观点,即使这对最终提案的状态没有影响。

您可以在我们的维基百科中了解更多关于此模块的信息。

不期望的行为

此合约的不期望行为已在 testing/adversarial_tests.rs 下进行测试。

一般来说,它应该涵盖

  • 执行未通过的提案
  • 多次执行提案
  • 为了财务利益进行社会工程提案
  • 说服提案模块花费他人的津贴

提案押金

此模块的提案押金由 dao-pre-propose-multiple 合约处理。

钩子

此模块支持投票和提案状态变化的钩子。可以通过 AddVoteHookAddProposalHook 方法注册合约以接收这些钩子。注册后,合约将在投票投下和提案状态改变时(例如,提案通过时)接收消息。

这些钩子消息的格式可以在位于 packages/proposal-hookspackages/vote-hooksproposal-hooksvote-hooks 软件包中找到。

为了防止无效的钩子接收器锁定提案模块,如果它们在处理钩子时出错,则接收器将从钩子列表中移除。

重新投票

提案可以配置为允许重新投票。在这种情况下,只要提案仍然开放,用户就可以更改他们的投票。对当前已投票选项的重新投票将返回错误。

否决

提案可以配置可选的 VetoConfig - 一个描述否决流程的配置。

否决配置时间锁定周期允许一个当事人(例如监督委员会DAO)通过在给定的时间锁定周期内(和可能在其通过之前)对提案进行一次否决来对主DAO负责。

时间锁定周期内不允许DAO成员采取任何行动。

时间锁定期结束后,提案可以正常执行。

VetoConfig 包含以下字段

timelock_duration

时间锁定周期(cw_utils::Duration)描述了时间锁定的周期,以块或秒为单位。

将延迟周期添加到提案的到期时间,以获取时间锁定的到期时间(Expiration),用于新提案状态的 VetoTimelock { expiration: Expiration })。

如果否决者的地址是另一个DAO,则应基于否决者DAO的投票周期仔细考虑此周期。

vetoer

否决者(String)是允许否决处于 VetoTimelock 状态的提案的账户地址。

可以通过常规提案配置更新来更新否决者地址。

如果您希望 vetoer 角色由多个组织或个人共享,可以使用 cw1-whitelist 合同地址来允许多个账户否决提案。

early_execute

提前执行(bool)是一个标志,用于指示否决者是否可以在时间锁定周期结束之前执行提案。为了使这成为可能,提案仍然需要通过并处于 VetoTimelock 状态。这可能会防止否决流程持续延长治理过程。

veto_before_passed

否决通过之前(bool)是一个标志,用于指示否决者是否可以在提案通过之前对其进行否决。即使在提案被否决之后,投票也可以投到指定的提案到期时间。

依赖关系

~10MB
~206K SLoC