157个版本 (51个稳定版)
2.1.3 | 2024年8月8日 |
---|---|
2.1.1 | 2024年7月30日 |
2.1.0-rc.1 | 2024年6月25日 |
2.0.6 | 2024年8月8日 |
0.5.1 | 2019年11月29日 |
#859 in 神奇豆
3,998 每月下载量
用于 21 个crate(20个直接使用)
4.5MB
45K SLoC
CosmWasm VM
这是围绕wasmer VM的一个抽象层,以高级方式运行cosmwasm合约。这不仅是为了高效编写单元测试,也是为了提供一个公开的API来运行合约,例如在wasmvm中。因此,它包括执行典型操作所需的所有粘合代码,如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 | cosmwasm_vm_version_4 |
0.11-0.13 |
0.12 | cosmwasm_vm_version_4 |
0.11-0.13 |
0.11 | cosmwasm_vm_version_4 |
0.11-0.13 |
0.10 | cosmwasm_vm_version_3 |
0.10 |
0.9 | cosmwasm_vm_version_2 |
0.9 |
0.8 | cosmwasm_vm_version_1 |
0.8 |
接口版本之间的变化
interface_version_5 -> interface_version_6
- 将
send
字段重命名为funds
在WasmMsg:: Instantiate
和WasmMsg:: Execute
中。 - 合并消息和子消息。
- 更改IBC确认的JSON表示(#975)。
设置
在 testdata/*.wasm
中有演示文件。这些是通过 contracts/* 并通过 cosmwasm/optimizer 编译和优化的版本。
要重新构建测试合约,请进入存储库根目录并执行
docker run --rm -v "$(pwd)":/code \
--mount type=volume,source="devcontract_cache_cyberpunk",target=/target \
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
cosmwasm/optimizer:0.15.0 ./contracts/cyberpunk \
&& cp artifacts/cyberpunk.wasm packages/vm/testdata/cyberpunk.wasm
docker run --rm -v "$(pwd)":/code \
--mount type=volume,source="devcontract_cache_hackatom",target=/target \
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
cosmwasm/optimizer:0.15.0 ./contracts/hackatom \
&& cp artifacts/hackatom.wasm packages/vm/testdata/hackatom_1.2.wasm
docker run --rm -v "$(pwd)":/code \
--mount type=volume,source="devcontract_cache_ibc_reflect",target=/target \
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
cosmwasm/optimizer:0.15.0 ./contracts/ibc-reflect \
&& cp artifacts/ibc_reflect.wasm packages/vm/testdata/ibc_reflect_1.2.wasm
docker run --rm -v "$(pwd)":/code \
--mount type=volume,source="devcontract_cache_empty",target=/target \
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
cosmwasm/optimizer:0.15.0 ./contracts/empty \
&& cp artifacts/empty.wasm packages/vm/testdata/empty.wasm
docker run --rm -v "$(pwd)":/code \
--mount type=volume,source="devcontract_cache_ibc_callback",target=/target \
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
cosmwasm/optimizer:0.15.0 ./contracts/ibc-callbacks \
&& cp artifacts/ibc_callbacks.wasm packages/vm/testdata/ibc_callbacks.wasm
为 https://github.com/CosmWasm/cosmwasm/issues/1727 中的 cyberpunk_rust170.wasm
,构建方式如下(无法重现)
cd contracts/cyberpunk
rm -r target
RUSTFLAGS='-C link-arg=-s' cargo build --release --lib --target wasm32-unknown-unknown --locked
cp target/wasm32-unknown-unknown/release/cyberpunk.wasm ../../packages/vm/testdata/cyberpunk_rust170.wasm
floaty_2.0.wasm
使用 Rust 夜间版本构建如下(无法重现)
cd contracts/floaty
RUSTFLAGS="-C link-arg=-s -C target-feature=+nontrapping-fptoint" cargo wasm
cp target/wasm32-unknown-unknown/release/floaty.wasm ../../packages/vm/testdata/floaty_2.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)。
依赖项
~24–37MB
~676K SLoC