47 个版本 (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.4.0 2020 年 12 月 22 日

#1182 in 神奇豆子

Download history 4/week @ 2024-06-01 1/week @ 2024-06-08 182/week @ 2024-06-29 376/week @ 2024-07-27

每月 553 次下载

Apache-2.0

245KB
5K SLoC

CW3 弹性多重签名

这基于 cw3-fixed-multisig,对 cw3 规范 进行了更强大的实现。它是一个由 cw4 (group) 合约支持的多重签名合约,该合约独立维护选民集。

这提供了两个主要优势

  • 您可以使用同一组创建两个具有不同投票阈值的不同的多重签名。因此,您可以有 50% 的投票和 67% 的投票,它们总是使用相同的选民集,但可以采取其他行动。
  • 待办事项:它允许动态多重签名组。由于组可以更改,我们可以将其中一个多重签名设置为组合约的管理员,并且

除了动态投票集之外,与原生 Cosmos SDK 多重签名的最大不同之处在于,它在链上聚合签名,具有可见的提案(如 Cosmos SDK 中的 x/gov),而不是要求签署者链下共享签名。

实例化

创建此类多重签名的第一步是使用所需成员集实例化cw4合同。目前,这仅由cw4-group支持,但我们将添加一个基于代币权重的群组合同(待办)。

如果您创建了一个cw4-group合同,并希望多重签名能够修改其群组,请通过多个交易执行以下操作

  • 以您的个人密钥作为管理员实例化cw4-group
  • 实例化一个指向群组的多重签名
  • 在群组合同上添加AddHook{multisig}
  • 在群组合同上执行UpdateAdmin{multisig}

这是创建此类循环依赖的当前做法,并依赖于外部驱动程序(在链上脚本此类自我部署合同难以实现)。(待办:更好地记录)。

在创建多重签名时,您必须设置通过投票所需权重以及最大/默认投票周期。(待办:允许更多阈值类型)

执行过程

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

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

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

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

运行此合同

您需要安装Rust 1.44.1+和wasm32-unknown-unknown目标。

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

cargotest

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

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

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

依赖项

~4–7.5MB
~153K SLoC