2 个稳定版本

1.2.2 2024年1月24日
1.0.1 2023年6月22日

魔法豆

Download history 948/week @ 2024-03-13 466/week @ 2024-03-20 615/week @ 2024-03-27 773/week @ 2024-04-03 641/week @ 2024-04-10 801/week @ 2024-04-17 1017/week @ 2024-04-24 784/week @ 2024-05-01 722/week @ 2024-05-08 666/week @ 2024-05-15 852/week @ 2024-05-22 1207/week @ 2024-05-29 1044/week @ 2024-06-05 1344/week @ 2024-06-12 1219/week @ 2024-06-19 988/week @ 2024-06-26

每月下载量 4,899
用于 1212 个包 (8 直接)

Apache-2.0

11KB
123

CW2 规范:合约信息

CW* 规范主要集中在合约的 公共接口 上。用于 ExecuteMsgQueryMsg 的 API。然而,当我们希望迁移或检查智能合约信息时,我们需要在状态上嵌入某种形式的智能合约信息。

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

ContractInfo 必须存储在 "contract_info" 键下,这对应于十六进制格式中的 "636F6E74726163745F696E666F"。由于状态已经明确定义,我们不需要支持任何“智能查询”。我们确实提供了一个辅助程序来构建一个“原始查询”,以读取任何 CW2 兼容合约的 ContractInfo。

您可以使用以下方式查询:

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

当调用 migrate 函数时,新合约可以读取该数据,并检查这是否是我们能够迁移的预期合约。如果支持多个迁移路径,还可以包含额外的版本信息。

数据结构

必需

所有符合 CW2 规范的合约都必须存储以下数据

  • 键: 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"
}

依赖项

~3.5–5.5MB
~117K SLoC