2 个稳定版本
1.2.2 | 2024年1月24日 |
---|---|
1.0.1 | 2023年6月22日 |
每月下载量 4,899
用于 12 个 12 个包 (8 直接)
11KB
123 行
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
函数时,新合约可以读取该数据,并检查这是否是我们能够迁移的预期合约。如果支持多个迁移路径,还可以包含额外的版本信息。
数据结构
必需
所有符合 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