| Crates.io | prov-cosmwasm-vm |
| lib.rs | prov-cosmwasm-vm |
| version | 1.0.0-provbeta3 |
| created_at | 2022-02-23 17:39:04.313494+00 |
| updated_at | 2022-02-23 18:45:10.075842+00 |
| description | VM bindings to run cosmwams contracts |
| homepage | |
| repository | https://github.com/provenance-io/cosmwasm/tree/main/packages/vm |
| max_upload_size | |
| id | 537987 |
| size | 4,375,190 |
This is an abstraction layer around the wasmer VM to expose just what we need to run cosmwasm contracts in a high-level manner. This is intended both for efficient writing of unit tests, as well as a public API to run contracts in eg. go-cosmwasm. As such it includes all glue code needed for typical actions, like fs caching.
A VM can support one or more contract-VM interface versions. The interface version is communicated by the contract via a Wasm import. This is the current compatibility list:
| cosmwasm-vm | Supported interface versions | 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 to funds in WasmMsg::Instantiate and
WasmMsg::Execute.There are demo files in testdata/*.wasm. Those are compiled and optimized
versions of
contracts/hackatom
and
contracts/staking
run through rust-optimizer.
To rebuild the test contracts, go to the repo root and do
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
By default, this repository is built and tested with the singlepass backend. You
can enable the cranelift feature to override the default backend with
Cranelift
cd packages/vm
cargo test --features iterator
cargo test --features cranelift,iterator
Using Singlepass:
cd packages/vm
cargo bench --no-default-features
Using Cranelift:
cd packages/vm
cargo bench --no-default-features --features cranelift
module_size and module_size.sh
Memory profiling of compiled modules. module_size.sh executes module_size,
and uses valgrind's memory profiling tool (massif) to compute the amount of heap
memory used by a compiled module.
cd packages/vm
RUSTFLAGS="-g" cargo build --release --example module_size
./examples/module_size.sh ./testdata/hackatom.wasm
This package is part of the cosmwasm repository, licensed under the Apache License 2.0 (see NOTICE and LICENSE).