57 个版本 (6 个稳定版)

2.0.0 2024年3月15日
1.1.2 2023年11月23日
1.1.0 2023年6月19日
1.0.1 2022年12月19日
0.3.2 2020年10月28日

#7 in #migrate

Download history 14033/week @ 2024-04-29 11376/week @ 2024-05-06 12282/week @ 2024-05-13 13275/week @ 2024-05-20 12481/week @ 2024-05-27 13646/week @ 2024-06-03 14079/week @ 2024-06-10 13359/week @ 2024-06-17 12043/week @ 2024-06-24 9379/week @ 2024-07-01 10076/week @ 2024-07-08 13428/week @ 2024-07-15 12575/week @ 2024-07-22 12195/week @ 2024-07-29 10776/week @ 2024-08-05 15501/week @ 2024-08-12

每月下载量 52,445
用于 451 包(276 个直接使用)

Apache-2.0

15KB
202

CW2 规范:合约信息

大多数 CW* 规范都集中在合约的 公共接口 上 —— 用于 ExecuteMsgQueryMsg 的 API。然而,当我们想要迁移或检查智能合约信息时,我们需要一些形式的智能合约信息嵌入在状态中。

这就是 CW2 的作用。它指定了一个特殊的项,需要在所有 instantiate 合约上存储到磁盘。

ContractInfo 必须存储在 "contract_info" 键下,这在十六进制格式中转换为 "636F6E74726163745F696E666F"。由于状态是良好定义的,我们不需要支持任何“智能查询”。我们提供了一个辅助工具来构造“原始查询”,以读取任何 CW2 合规合约的 ContractInfo。

您可以使用以下方式查询

wasmd query wasm contract-state raw [contract_addr] 636F6E74726163745F696E666F --node $RPC

当调用 migrate 函数时,新的合约可以读取这些数据,并查看这是否是我们可以从其迁移的预期合约。还可以包含额外的版本信息,如果我们支持多个迁移路径。此包提供了一个 ensure_from_older_version 辅助工具来处理此问题。

数据结构

必需的

所有 CW2 合规合约必须存储以下数据

  • 键:b"contract_info"(即不使用 长度前缀编码
  • 数据:JSON 序列化的 ContractVersion
pub struct ContractVersion {
    /// contract is a globally unique identifier for the contract.
    /// it should build off standard namespacing for whichever language it is in,
    /// and prefix it with the registry we use.
    /// For rust we prefix with `crates.io:`, to give us eg. `crates.io:cw20-base`
    pub contract: String,
    /// version is any string that this implementation knows. It may be simple counter "1", "2".
    /// or semantic version on release tags "v0.7.0", or some custom feature flag list.
    /// the only code that needs to understand the version parsing is code that knows how to
    /// migrate from the given contract (and is tied to it's implementation somehow)
    pub version: String,
}

因此,一个序列化示例可能看起来像

{
  "contract": "crates.io:cw20-base",
  "version": "v0.1.0"
}

依赖项

~4–7.5MB
~150K SLoC