5 个版本 (稳定)
3.0.0 | 2024 年 7 月 11 日 |
---|---|
2.0.0 | 2024 年 5 月 1 日 |
2.0.0-rc | 2024 年 4 月 25 日 |
1.4.0 |
|
1.2.2 | 2024 年 1 月 24 日 |
#8 in #multisig
1,840 每月下载量
用于 2 个 crate(通过 abstract-cw-plus-interfac…)
255KB
5K SLoC
CW3 弹性多重签名
这基于 cw3-fixed-multisig,对 cw3 规范 进行了更强大的实现。这是一个由 cw4(组) 合同支持的多重签名合约,该合约独立维护投票者集。
这提供了 2 个主要优势
- 您可以使用同一组支持的两个不同的多重签名,具有不同的投票阈值。因此,您可以拥有 50% 的投票权和 67% 的投票权,这两个投票权始终使用相同的投票者集,但可以采取其他行动。
- 待办事项:它允许动态多重签名组。由于组可以更改,我们可以将其中一个多重签名设为组合同的管理员,并且
除了动态投票集之外,与原生 Cosmos SDK 多重签名的主要区别在于,它将在链上聚合签名,并具有可见的提案(如 Cosmos SDK 中的 x/gov
),而不是要求签署者链下共享签名。
实例化
创建这种多重签名的第一步是实例化一个具有所需成员集的cw4合约。目前,这仅由cw4-group支持,但我们将添加一个基于代币权重的群组合约(待办事项)。
如果您创建了cw4-group
合约并希望多重签名能够修改其自己的群组,请通过多个交易执行以下操作
- 使用您的个人密钥作为管理员实例化cw4-group
- 实例化一个指向群组的多重签名
- 在群组合约上添加
AddHook{multisig}
- 在群组合约上执行
UpdateAdmin{multisig}
这是创建此类循环依赖的当前做法,依赖于外部驱动程序(在链上脚本这样的自部署合约非常困难甚至不可能)。(待办事项:更好地记录)。
在创建多重签名时,您必须设置通过投票所需的权重以及最大/默认投票周期。(待办事项:允许更多阈值类型)
执行过程
首先,注册的投票者必须提交一个提案。这也包括提案人的第一次“是”投票。提案人可以设置投票过程的过期时间,或者默认为创建合约时提供的限制(因此提案可以在几天后关闭)。
在提案过期之前,任何具有非零权重的投票者都可以添加他们的投票。只有“是”票被计入。如果在提案到期日前提交了足够的“是”票,则状态设置为“通过”。
一旦提案被“通过”,任何人都可以提交一个“执行”消息。这将触发提案发送所有存储的消息并更新其状态为“已执行”,因此它不能再次运行。(注意:如果执行失败——出于任何原因——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。
依赖项
~5–17MB
~204K SLoC