治理模块
最后更新于
最后更新于
Canto 的链上治理系统利用 Cosmos SDK x/gov 模块。 在这个系统中,$CANTO 质押者可以对提案进行投票,投票权与他们的质押比例成正比。
该模块支持以下基本特性:
提案提交:用户通过押金提交治理提案。 达到最低存款后,提案进入投票
投票:参与者可以对达到 MinDeposit 的提案进行投票
继承和惩罚:如果委托人不自己投票,他们将继承其验证人的投票。
领取押金:如果提案被接受或提案从未进入投票期,则在提案上押金的用户可以收回押金。
每个账户都可以通过. 一旦提案被提交,它就由其唯一的 proposalID 标识。
提案包含一组 sdk.Msgs,如果提案通过,它们会自动执行。 消息由治理 ModuleAccount 本身执行。 像 x/upgrade 这样的模块,如果只允许治理执行某些消息,应该在各自的消息服务器中添加一个白名单,一旦达到法定人数,授予治理模块执行消息的权利。 治理模块使用 MsgServiceRouter 来检查这些消息是否正确构造并具有相应的执行路径,但不执行完整的有效性检查。
为了防止垃圾邮件,必须提交提案并以 MinDeposit 参数定义的代币存款。
提交提案时,必须附上保证金,保证金必须严格为正,但可以低于 MinDeposit。 提交者不需要自己支付全部押金。 新创建的提案存储在一个非活动提案队列中,并一直呆在那里,直到其存款超过 MinDeposit。 其他代币持有者可以通过发送存款交易来增加提案的存款。 如果提案在存款结束时间(不再接受存款的时间)之前未通过 MinDeposit,则提案将被销毁:提案将从状态中删除,存款将被销毁(参见 x/gov EndBlocker ). 当提案存款在存款结束时间之前超过 MinDeposit 阈值时(即使在提案提交期间),该提案将被移入活动提案队列,投票期将开始。
在提案最终确定(通过或拒绝)之前,押金由治理 ModuleAccount 保管并保管。
当提案最终确定时,存款中的代币将根据提案的最终计数退还或销毁:
如果提案被批准或拒绝但未被否决,每笔存款将自动退还给其各自的存款人(从治理 ModuleAccount 转移)。
当提案被超过 1/3 否决时,存款将从治理 ModuleAccount 中销毁,提案信息及其存款信息将从状态中删除。
所有退还或销毁的存款都将从该州移除。 销毁或退还押金时会发出事件。
参与者是有权对提案进行投票的用户。 在 Canto 上,参与者是保税的 $CANTO 持有者。 未绑定的 $CANTO 持有人和其他用户无权参与治理。 但是,他们可以提交和存放提案。
请注意,在以下情况下,某些参与者可能会被禁止在特定验证器下对提案进行投票:
在提案进入投票期后,参与者将 $CANTO 绑定或未绑定到所述验证器。
参与者在提案进入投票期后成为验证者。
这不会阻止参与者使用绑定到其他验证器的 $CANTO 进行投票。 例如,如果参与者在提案进入投票期之前将一些 $CANTO 绑定到验证人 A,并在提案进入投票期之后将其他 $CANTO 绑定到验证人 B,则只有验证人 B 下的投票将被禁止。
一旦提案达到 MinDeposit,它立即进入投票阶段。 我们将投票期定义为投票开始和投票结束之间的间隔。 投票期应始终短于解除绑定期,以防止重复投票。 Voting period 的初始值为 1 小时。
提案的选项集是指参与者在投票时可以选择的选项集。 初始选项集包括以下选项:
是
不
否决权
弃权
NoWithVeto 算作否,但也增加了否决票。 弃权选项允许选民表示他们不打算投票赞成或反对该提案,但接受投票结果
法定人数定义为为使结果有效而需要对提案施加的最小投票权百分比。 在发布时,法定人数设置为 40%。
阈值定义为赞成票(不包括弃权票)的最低比例,该提案将被接受。
最初,阈值设置为 50% 的赞成票,不包括弃权票。 如果超过所有选票的 1/3 是 NoWithVeto 票,则存在否决的可能性。 请注意,这两个值均源自 TallyParams 链上参数,该参数可通过治理进行修改。 这意味着提案被接受,前提是:
存在绑定代币。
已达到法定人数。
弃权票比例低于1/1。
NoWithVeto票的比例低于1/3,包括弃权票。
在投票期结束时,不包括弃权票的赞成票比例优于 1/2。
如果委托人不投票,它将继承其验证人的投票。
如果委托人在其验证人之前投票,则它不会继承验证人的投票。
如果委托人在其验证人之后投票,它将用自己的投票覆盖其验证人的投票。 如果提案是紧急的,那么在代表们有机会做出反应并推翻他们的验证者的投票之前,投票可能会结束。 这不是问题,因为提案需要超过 2/3 的总投票权才能在投票期结束前通过。 因为低至 1/3 + 1 的验证能力可能串通审查交易,所以已经假设超过此阈值的范围不串通。
目前,验证者不会因未投票而受到惩罚。
稍后,Canto 网络可能会引入只能对来自某些模块的 tx 进行签名的许可密钥。 对于 MVP,治理地址将是创建帐户时生成的主要验证器地址。 该地址对应于与负责签署共识消息的 Tendermint PrivKey 不同的 PrivKey。 因此,验证者不必使用敏感的 Tendermint PrivKey 签署治理交易。
如果提案是 SoftwareUpgradeProposal 类型,则节点需要将其软件升级到投票的新版本。 这个过程分为两个步骤:
在接受 SoftwareUpgradeProposal 后,验证者应该下载并安装新版本的软件,同时继续运行以前的版本。 一旦验证者下载并安装了升级,它将通过在其预提交中包含提案的 proposalID 开始向网络发出信号,表明它已准备好切换。(注意:确认我们想要它在预提交中?)
注意:每个预提交只有一个信号槽。 如果多个 SoftwareUpgradeProposals 在短时间内被接受,将形成一个管道,它们将按照被接受的顺序一个接一个地实施。
一旦一个块包含超过 2/3 的预提交,其中发出了共同的 SoftwareUpgradeProposal 信号,所有节点(包括验证节点、非验证全节点和轻节点)都应切换到新版本的软件。 可以在 中找到更多信息。