51 个版本 (6 个稳定版)
2.0.0 | 2024 年 3 月 26 日 |
---|---|
1.1.2 | 2023 年 11 月 23 日 |
1.1.0 | 2023 年 6 月 20 日 |
1.0.1 | 2022 年 12 月 19 日 |
0.3.1 | 2020 年 10 月 16 日 |
#883 in 魔法豆
每月 610 次下载
在 cw3-flex-multisig 中使用
130KB
2.5K SLoC
CW3 固定多签
这是 cw3 规范的简单实现。它是在实例化时创建具有固定地址集的多签。每个地址可以具有相同的权重(K/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–7.5MB
~152K SLoC