2 个版本

1.0.0-provbeta32022年2月23日

#cosmwasm-contracts 中排名第 32

Apache-2.0

2MB
22K SLoC

CosmWasm VM

cosmwasm-vm on crates.io

这是一个围绕 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 字段重命名为 fundsWasmMsg::InstantiateWasmMsg::Execute 中。
  • 合并消息和子消息。
  • 更改 IBC 承认的 JSON 表示(#975)。

设置

testdata/*.wasm 中有示例文件。这些是通过 rust-optimizer 编译和优化的 contracts/hackatomcontracts/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_sizemodule_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 许可(见 NOTICELICENSE)。

依赖项

~9–22MB
~357K SLoC