1 个不稳定版本

0.13.2 2022年4月14日

#cw3中排名第5

Apache-2.0

68KB
1.5K SLoC

CW3固定多签

这是cw3规范的一个简单实现。cw3规范。这是一个在实例化时创建的具有固定地址集的多签。每个地址可以具有相同的权重(K of N),或者其中一些可能具有额外的投票权。这和原生Cosmos SDK多签非常相似,只是我们不是在链下聚合签名并提交最终结果,而是在链上聚合批准。

它可以直接使用,可能是cw3(因为它是最简单的)最安全的实现,但我们还将添加更复杂的案例,例如更新多签集、同一组具有不同权限的不同投票规则,甚至允许代币加权投票。所有这些都将通过相同的客户端接口实现。

实例化

要创建多签,您必须传递一组带有每个地址权重的HumanAddr,以及通过提案所需的最小权重。要创建2个3的多签,请传递3个权重为1的投票者和一个required_weight为2。

注意,0 是一个允许的权重。这不会赋予任何投票权,但允许该密钥提交可以被投票者后来批准的提案。不在投票者集中的任何地址都不能提交提案。

执行过程

首先,一名注册投票者必须提交一个提案。这也包括提案人对此提案的第一个“是”投票。提案人可以为投票过程设置一个过期时间,或者默认为创建合同时提供的限制(因此提案可以在几天后关闭)。

在提案过期之前,任何具有非零权重的投票者都可以添加他们的投票。只计算“是”票。如果在提案过期日期之前提交了足够的“是”票,则状态将被设置为“通过”。

一旦提案被“通过”,任何人都可以提交一个“执行”消息。这将触发提案发送所有存储的消息,并将其状态更新为“已执行”,因此不能再运行。 (注意:如果由于任何原因(例如gas不足、资金不足等)执行失败,状态更新将被回滚,它将保持“已通过”状态,您可以再次尝试。)

一旦提案过期且未通过,任何人都可以提交一个“关闭”消息来标记其已关闭。这只会清理UI/数据库,没有其他影响。

运行此合约

您需要安装Rust 1.44.1+,并带有wasm32-unknown-unknown目标的版本。

您可以通过以下方式运行单元测试:

cargotest

当您对内容满意后,您可以通过以下方式将其编译为wasm:

RUSTFLAGS='-C link-arg=-s' cargo wasm
cp ../../target/wasm32-unknown-unknown/release/cw3_fixed_multisig.wasm .
ls -l cw3_fixed_multisig.wasm
sha256sum cw3_fixed_multisig.wasm

或者,对于生产就绪(优化)的构建,请在仓库根目录中运行构建命令: https://github.com/CosmWasm/cw-plus#compiling

依赖项

~3.5–5.5MB
~119K SLoC