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
每月下载量 52,445
用于 451 个 包(276 个直接使用)
15KB
202 行
CW2 规范:合约信息
大多数 CW* 规范都集中在合约的 公共接口 上 —— 用于 ExecuteMsg
或 QueryMsg
的 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