33 个版本 (14 个稳定版)
5.0.0 | 2024 年 3 月 11 日 |
---|---|
5.0.0-rc.2 | 2024 年 2 月 28 日 |
5.0.0-rc | 2023 年 11 月 30 日 |
4.3.0 | 2023 年 8 月 24 日 |
3.0.0-rc2 | 2020 年 10 月 22 日 |
#758 在 神奇豆子
每月 5,519 次下载
在 69 个包(32 个直接) 中使用
190KB
4K SLoC
ink! 元数据
ink! 元数据用于以平台无关的方式描述合约属性。要了解更多信息,请参阅 ink! 文档中的部分。
注意:元数据版本独立于 ink! 版本!此处描述的元数据版本 3 也适用于 ink! v4。
元数据 JSON 模式
ink! 元数据分为两个主要部分。外部元数据和 ink! 元数据(MetadataVersioned
)。
我们不会在这里详细介绍这两者之间的区别,但如果你对此感兴趣,可以在 ink! 文档门户中阅读有关信息。
为了验证合约的元数据是否符合外部工具期望的格式,我们创建了一套 JSON 模式。这些模式描述了元数据的属性,使我们能够验证合约的元数据是否正确。
为了验证元数据,我们将使用jsonschema
,但也可以使用在线验证器https://www.jsonschemavalidator.net/。
首先,让我们安装jsonschema
cargo install jsonschema
接下来,我们将构建我们的合约元数据
# At the top level of the ink! repo
cargo contract build --manifest-path ./integration-tests/flipper/Cargo.toml
生成的元数据将位于:$PATH_TO_INK_REPO/integration-tests/flipper/target/ink/flipper.json
。
现在,为了验证我们的元数据,我们需要这些模式。这些模式可以在以下文件夹中找到:outer-schema.json
和ink-v3-schema.json
。
然后我们可以用它来验证我们的元数据与我们的模式
jsonschema outer-schema.json --instance $PATH_TO_INK_REPO/integration-tests/flipper/target/ink/flipper.json
如果flipper.json
符合我们的模式,我们应该看到以下内容
flipper.json - VALID
否则,我们将看到
flipper.json - INVALID. Errors: ...
以及错误列表。
我们还可以为ink!版本化的元数据做类似的事情。
jq '. | {V3}' $PATH_TO_INK_REPO/integration-tests/flipper/target/ink/flipper.json > ink-v3-metadata.json
jsonschema ink-v3-schema.json --instance ink-v3-metadata.json
元数据模式生成
目前,这些模式是通过一组在scale-info
、ink
和cargo-contract
中拼凑的分支生成的。
- 拉取三个仓库
- 检查所有仓库的
hc-derive-jsonschema
分支 - 更改
scale-info
和ink
的本地路径以匹配您的本地文件夹结构
现在,在您修改后的cargo-contract
版本中运行以下命令
cargo run -- contract build --manifest-path $PATH_TO_INK_REPO/integration-tests/flipper/Cargo.toml > schema.json
在src/cmd/metadata.rs
中,您可以根据传递给schemars::schema_for
宏的结构更改正在打印的模式(这在execute
函数中被调用)。
let schema = schemars::schema_for!(ContractMetadata);
println!("{}", serde_json::to_string_pretty(&schema).unwrap());
OR
let schema = schemars::schema_for!(ink_metadata::MetadataVersioned);
println!("{}", serde_json::to_string_pretty(&schema).unwrap());
依赖关系
~2.6–4MB
~81K SLoC