2 个版本
1.0.0-provbeta3 | 2022年2月23日 |
---|
在 #cosmwasm-contracts 中排名第 32
2MB
22K SLoC
CosmWasm VM
这是一个围绕 wasmer VM 的抽象层,仅暴露我们运行 cosmwasm 合约所需的内容。它旨在以高效的方式编写单元测试,同时也是公开 API,用于在 go-cosmwasm 等地方运行合约。因此,它包含典型操作所需的所有胶水代码,例如 fs 缓存。
兼容性
VM 可以支持一个或多个合约-VM 接口版本。接口版本由合约通过 Wasm 导入进行通信。这是当前的兼容性列表
cosmwasm-vm | 支持的接口版本 | cosmwasm-std |
---|---|---|
1.0 | interface_version_8 |
1.0 |
0.16 | interface_version_7 |
0.16 |
0.15 | interface_version_6 |
0.15 |
0.14 | interface_version_5 |
0.14 |
0.13 | prov_cosmwasm_vm_version_4 |
0.11-0.13 |
0.12 | prov_cosmwasm_vm_version_4 |
0.11-0.13 |
0.11 | prov_cosmwasm_vm_version_4 |
0.11-0.13 |
0.10 | prov_cosmwasm_vm_version_3 |
0.10 |
0.9 | prov_cosmwasm_vm_version_2 |
0.9 |
0.8 | prov_cosmwasm_vm_version_1 |
0.8 |
接口版本之间的变化
interface_version_5 -> interface_version_6
- 将
send
字段重命名为funds
在WasmMsg::Instantiate
和WasmMsg::Execute
中。 - 合并消息和子消息。
- 更改 IBC 承认的 JSON 表示(#975)。
设置
在 testdata/*.wasm
中有示例文件。这些是通过 rust-optimizer 编译和优化的 contracts/hackatom 和 contracts/staking 的版本。
要重新构建测试合约,请转到仓库根目录并执行
docker run --rm -v "$(pwd)":/code \
--mount type=volume,source="devcontract_cache_hackatom",target=/code/contracts/hackatom/target \
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
cosmwasm/rust-optimizer:0.12.5 ./contracts/hackatom \
&& cp artifacts/hackatom.wasm packages/vm/testdata/hackatom_1.0.wasm
docker run --rm -v "$(pwd)":/code \
--mount type=volume,source="devcontract_cache_ibc_reflect",target=/code/contracts/ibc-reflect/target \
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
cosmwasm/rust-optimizer:0.12.5 ./contracts/ibc-reflect \
&& cp artifacts/ibc_reflect.wasm packages/vm/testdata/ibc_reflect_1.0.wasm
docker run --rm -v "$(pwd)":/code \
--mount type=volume,source="devcontract_cache_floaty",target=/code/contracts/floaty/target \
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
cosmwasm/rust-optimizer:0.12.5 ./contracts/floaty \
&& cp artifacts/floaty.wasm packages/vm/testdata/floaty_1.0.wasm
测试
默认情况下,此仓库使用单遍后端进行构建和测试。您可以通过启用 cranelift
功能来使用 Cranelift 覆盖默认后端
cd packages/vm
cargo test --features iterator
cargo test --features cranelift,iterator
基准测试
使用 Singlepass
cd packages/vm
cargo bench --no-default-features
使用 Cranelift
cd packages/vm
cargo bench --no-default-features --features cranelift
工具
module_size
和 module_size.sh
编译模块的内存分析。 module_size.sh
执行 module_size
,并使用 valgrind 的内存分析工具 (massif) 来计算编译模块使用的堆内存量。
cd packages/vm
RUSTFLAGS="-g" cargo build --release --example module_size
./examples/module_size.sh ./testdata/hackatom.wasm
许可证
此软件包是 cosmwasm 仓库的一部分,遵循 Apache License 2.0 许可(见 NOTICE 和 LICENSE)。
依赖项
~9–22MB
~357K SLoC