1个不稳定版本

0.13.2 2022年4月17日

#4#cw3

Apache-2.0

68KB
1.5K SLoC

CW3固定多签

这是cw3规范的简单实现。[cw3规范](https://github.com/securitydao/cw-plus/blob/ac7e77d4997de767a92e07becfb52ee28003c99c/packages/cw3/README.md)。这是一个在实例化时创建的固定地址集合的多签。每个地址可以具有相同的权重(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)

依赖项

~4.5–6.5MB
~141K SLoC