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 魔法豆

Download history 53/week @ 2024-04-08 23/week @ 2024-04-15 54/week @ 2024-04-22 85/week @ 2024-04-29 143/week @ 2024-05-06 97/week @ 2024-05-13 149/week @ 2024-05-20 168/week @ 2024-05-27 88/week @ 2024-06-03 127/week @ 2024-06-10 72/week @ 2024-06-17 104/week @ 2024-06-24 281/week @ 2024-07-01 97/week @ 2024-07-08 70/week @ 2024-07-15 162/week @ 2024-07-22

每月 610 次下载
cw3-flex-multisig 中使用

Apache-2.0

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