From deec3ddad5f0f94cbbc6f9f2513c389128ebe381 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Mon, 14 Dec 2020 01:32:32 +0100 Subject: [PATCH 1/6] Avoid dependency on Wasmer's Bytes to Pages conversion --- packages/vm/src/wasm_backend/store.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/vm/src/wasm_backend/store.rs b/packages/vm/src/wasm_backend/store.rs index 9db5e12094..a69b4e647e 100644 --- a/packages/vm/src/wasm_backend/store.rs +++ b/packages/vm/src/wasm_backend/store.rs @@ -1,17 +1,24 @@ +use std::convert::TryInto; #[cfg(feature = "cranelift")] use wasmer::Cranelift; #[cfg(not(feature = "cranelift"))] use wasmer::Singlepass; use wasmer::{ - Bytes, Engine, Pages, Store, Target, + Engine, Pages, Store, Target, Tunables as ReferenceTunables, /* See https://github.com/wasmerio/wasmer/issues/1872 */ - JIT, + JIT, WASM_PAGE_SIZE, }; use crate::size::Size; use super::limiting_tunables::LimitingTunables; +/// WebAssembly linear memory objects have sizes measured in pages. Each page +/// is 65536 (2^16) bytes. In WebAssembly version 1, a linear memory can have at +/// most 65536 pages, for a total of 2^32 bytes (4 gibibytes). +/// https://github.com/WebAssembly/memory64/blob/master/proposals/memory64/Overview.md +const MAX_WASM_MEMORY: usize = 4 * 1024 * 1024 * 1024; + /// Created a store with the default compiler and the given memory limit (in bytes) /// If memory_limit is None, no limit is applied. pub fn make_store(memory_limit: Option) -> Store { @@ -42,9 +49,13 @@ pub fn make_store_headless(memory_limit: Option) -> Store { fn make_store_with_engine(engine: &dyn Engine, memory_limit: Option) -> Store { match memory_limit { Some(limit) => { - let pages = Pages::from(Bytes(limit.0)); + let capped = std::cmp::max(limit.0, MAX_WASM_MEMORY); + // round down to ensure the limit is less than or equal to the config + let pages: u32 = (capped / WASM_PAGE_SIZE) + .try_into() + .expect("Value must be <= 4 GiB/64KiB, i.e. fit in uint32. This is a bug."); let base = ReferenceTunables::for_target(&Target::default()); - let tunables = LimitingTunables::new(base, pages); + let tunables = LimitingTunables::new(base, Pages(pages)); Store::new_with_tunables(engine, tunables) } None => Store::new(engine), From d3e09f292c56f5161230191d5227a291bc16a549 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Mon, 14 Dec 2020 00:12:42 +0100 Subject: [PATCH 2/6] Update contracts build instructions --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1bf22e9c3b..6c675ba2a3 100644 --- a/README.md +++ b/README.md @@ -319,13 +319,19 @@ cargo fmt \ **Contracts** -Step 1 (fast checks) +Step 1 (fast checks, rebuilds lock files) + +```sh +for contract_dir in contracts/*/; do (cd "$contract_dir" && cargo check --tests) || break; done +``` + +Step 2 (medium fast checks) ```sh for contract_dir in contracts/*/; do (cd "$contract_dir" && cargo fmt && cargo check --tests && cargo wasm-debug && cargo unit-test && cargo clippy -- -D warnings && cargo schema) || break; done ``` -Step 2 (slower checks) +Step 3 (slower checks) ```sh for contract_dir in contracts/*/; do (cd "$contract_dir" && cargo wasm && cargo integration-test) || break; done From a2121387f8822d5b81171f32185cb43602c22bd8 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Mon, 14 Dec 2020 01:41:38 +0100 Subject: [PATCH 3/6] Update Wasmer to 3709c9d8264 (latest master) --- Cargo.lock | 23 ++++++++++++----------- contracts/burner/Cargo.lock | 23 ++++++++++++----------- contracts/hackatom/Cargo.lock | 23 ++++++++++++----------- contracts/queue/Cargo.lock | 23 ++++++++++++----------- contracts/reflect/Cargo.lock | 23 ++++++++++++----------- contracts/staking/Cargo.lock | 23 ++++++++++++----------- packages/vm/Cargo.toml | 4 ++-- 7 files changed, 74 insertions(+), 68 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ac3dc800e2..02d52c9e3d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1357,7 +1357,7 @@ checksum = "7e7811dd7f9398f14cc76efd356f98f03aa30419dea46aa810d71e819fc97158" [[package]] name = "wasmer" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cfg-if 0.1.10", "indexmap", @@ -1379,7 +1379,7 @@ dependencies = [ [[package]] name = "wasmer-compiler" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "enumset", "raw-cpuid", @@ -1396,7 +1396,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-cranelift" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cranelift-codegen", "cranelift-frontend", @@ -1414,7 +1414,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-singlepass" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "byteorder", "dynasm", @@ -1432,7 +1432,7 @@ dependencies = [ [[package]] name = "wasmer-derive" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "proc-macro-error", "proc-macro2", @@ -1443,7 +1443,7 @@ dependencies = [ [[package]] name = "wasmer-engine" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "backtrace", "bincode", @@ -1462,7 +1462,7 @@ dependencies = [ [[package]] name = "wasmer-engine-jit" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "bincode", "cfg-if 0.1.10", @@ -1479,7 +1479,7 @@ dependencies = [ [[package]] name = "wasmer-engine-native" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "bincode", "cfg-if 0.1.10", @@ -1499,7 +1499,7 @@ dependencies = [ [[package]] name = "wasmer-object" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "object 0.22.0", "thiserror", @@ -1510,16 +1510,17 @@ dependencies = [ [[package]] name = "wasmer-types" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cranelift-entity", "serde", + "thiserror", ] [[package]] name = "wasmer-vm" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "backtrace", "cc", diff --git a/contracts/burner/Cargo.lock b/contracts/burner/Cargo.lock index bda9e1ecb4..cdd1f6d49c 100644 --- a/contracts/burner/Cargo.lock +++ b/contracts/burner/Cargo.lock @@ -1032,7 +1032,7 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasmer" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cfg-if 0.1.10", "indexmap", @@ -1054,7 +1054,7 @@ dependencies = [ [[package]] name = "wasmer-compiler" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "enumset", "raw-cpuid", @@ -1071,7 +1071,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-cranelift" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cranelift-codegen", "cranelift-frontend", @@ -1089,7 +1089,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-singlepass" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "byteorder", "dynasm", @@ -1107,7 +1107,7 @@ dependencies = [ [[package]] name = "wasmer-derive" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "proc-macro-error", "proc-macro2", @@ -1118,7 +1118,7 @@ dependencies = [ [[package]] name = "wasmer-engine" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "backtrace", "bincode", @@ -1137,7 +1137,7 @@ dependencies = [ [[package]] name = "wasmer-engine-jit" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "bincode", "cfg-if 0.1.10", @@ -1154,7 +1154,7 @@ dependencies = [ [[package]] name = "wasmer-engine-native" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "bincode", "cfg-if 0.1.10", @@ -1174,7 +1174,7 @@ dependencies = [ [[package]] name = "wasmer-object" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "object", "thiserror", @@ -1185,16 +1185,17 @@ dependencies = [ [[package]] name = "wasmer-types" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cranelift-entity", "serde", + "thiserror", ] [[package]] name = "wasmer-vm" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "backtrace", "cc", diff --git a/contracts/hackatom/Cargo.lock b/contracts/hackatom/Cargo.lock index fe166554c7..6632697eb3 100644 --- a/contracts/hackatom/Cargo.lock +++ b/contracts/hackatom/Cargo.lock @@ -1043,7 +1043,7 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasmer" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cfg-if 0.1.10", "indexmap", @@ -1065,7 +1065,7 @@ dependencies = [ [[package]] name = "wasmer-compiler" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "enumset", "raw-cpuid", @@ -1082,7 +1082,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-cranelift" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cranelift-codegen", "cranelift-frontend", @@ -1100,7 +1100,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-singlepass" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "byteorder", "dynasm", @@ -1118,7 +1118,7 @@ dependencies = [ [[package]] name = "wasmer-derive" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "proc-macro-error", "proc-macro2", @@ -1129,7 +1129,7 @@ dependencies = [ [[package]] name = "wasmer-engine" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "backtrace", "bincode", @@ -1148,7 +1148,7 @@ dependencies = [ [[package]] name = "wasmer-engine-jit" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "bincode", "cfg-if 0.1.10", @@ -1165,7 +1165,7 @@ dependencies = [ [[package]] name = "wasmer-engine-native" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "bincode", "cfg-if 0.1.10", @@ -1185,7 +1185,7 @@ dependencies = [ [[package]] name = "wasmer-object" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "object", "thiserror", @@ -1196,16 +1196,17 @@ dependencies = [ [[package]] name = "wasmer-types" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cranelift-entity", "serde", + "thiserror", ] [[package]] name = "wasmer-vm" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "backtrace", "cc", diff --git a/contracts/queue/Cargo.lock b/contracts/queue/Cargo.lock index 75af29e165..93ea23d985 100644 --- a/contracts/queue/Cargo.lock +++ b/contracts/queue/Cargo.lock @@ -1032,7 +1032,7 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasmer" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cfg-if 0.1.10", "indexmap", @@ -1054,7 +1054,7 @@ dependencies = [ [[package]] name = "wasmer-compiler" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "enumset", "raw-cpuid", @@ -1071,7 +1071,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-cranelift" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cranelift-codegen", "cranelift-frontend", @@ -1089,7 +1089,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-singlepass" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "byteorder", "dynasm", @@ -1107,7 +1107,7 @@ dependencies = [ [[package]] name = "wasmer-derive" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "proc-macro-error", "proc-macro2", @@ -1118,7 +1118,7 @@ dependencies = [ [[package]] name = "wasmer-engine" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "backtrace", "bincode", @@ -1137,7 +1137,7 @@ dependencies = [ [[package]] name = "wasmer-engine-jit" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "bincode", "cfg-if 0.1.10", @@ -1154,7 +1154,7 @@ dependencies = [ [[package]] name = "wasmer-engine-native" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "bincode", "cfg-if 0.1.10", @@ -1174,7 +1174,7 @@ dependencies = [ [[package]] name = "wasmer-object" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "object", "thiserror", @@ -1185,16 +1185,17 @@ dependencies = [ [[package]] name = "wasmer-types" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cranelift-entity", "serde", + "thiserror", ] [[package]] name = "wasmer-vm" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "backtrace", "cc", diff --git a/contracts/reflect/Cargo.lock b/contracts/reflect/Cargo.lock index 451cc67c0a..56ba5b2f06 100644 --- a/contracts/reflect/Cargo.lock +++ b/contracts/reflect/Cargo.lock @@ -1042,7 +1042,7 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasmer" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cfg-if 0.1.10", "indexmap", @@ -1064,7 +1064,7 @@ dependencies = [ [[package]] name = "wasmer-compiler" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "enumset", "raw-cpuid", @@ -1081,7 +1081,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-cranelift" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cranelift-codegen", "cranelift-frontend", @@ -1099,7 +1099,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-singlepass" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "byteorder", "dynasm", @@ -1117,7 +1117,7 @@ dependencies = [ [[package]] name = "wasmer-derive" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "proc-macro-error", "proc-macro2", @@ -1128,7 +1128,7 @@ dependencies = [ [[package]] name = "wasmer-engine" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "backtrace", "bincode", @@ -1147,7 +1147,7 @@ dependencies = [ [[package]] name = "wasmer-engine-jit" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "bincode", "cfg-if 0.1.10", @@ -1164,7 +1164,7 @@ dependencies = [ [[package]] name = "wasmer-engine-native" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "bincode", "cfg-if 0.1.10", @@ -1184,7 +1184,7 @@ dependencies = [ [[package]] name = "wasmer-object" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "object", "thiserror", @@ -1195,16 +1195,17 @@ dependencies = [ [[package]] name = "wasmer-types" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cranelift-entity", "serde", + "thiserror", ] [[package]] name = "wasmer-vm" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "backtrace", "cc", diff --git a/contracts/staking/Cargo.lock b/contracts/staking/Cargo.lock index 3a8c7ca2ea..191e768e02 100644 --- a/contracts/staking/Cargo.lock +++ b/contracts/staking/Cargo.lock @@ -1069,7 +1069,7 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasmer" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cfg-if 0.1.10", "indexmap", @@ -1091,7 +1091,7 @@ dependencies = [ [[package]] name = "wasmer-compiler" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "enumset", "raw-cpuid", @@ -1108,7 +1108,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-cranelift" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cranelift-codegen", "cranelift-frontend", @@ -1126,7 +1126,7 @@ dependencies = [ [[package]] name = "wasmer-compiler-singlepass" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "byteorder", "dynasm", @@ -1144,7 +1144,7 @@ dependencies = [ [[package]] name = "wasmer-derive" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "proc-macro-error", "proc-macro2", @@ -1155,7 +1155,7 @@ dependencies = [ [[package]] name = "wasmer-engine" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "backtrace", "bincode", @@ -1174,7 +1174,7 @@ dependencies = [ [[package]] name = "wasmer-engine-jit" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "bincode", "cfg-if 0.1.10", @@ -1191,7 +1191,7 @@ dependencies = [ [[package]] name = "wasmer-engine-native" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "bincode", "cfg-if 0.1.10", @@ -1211,7 +1211,7 @@ dependencies = [ [[package]] name = "wasmer-object" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "object", "thiserror", @@ -1222,16 +1222,17 @@ dependencies = [ [[package]] name = "wasmer-types" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "cranelift-entity", "serde", + "thiserror", ] [[package]] name = "wasmer-vm" version = "1.0.0-beta1" -source = "git+https://github.com/wasmerio/wasmer?rev=df3a21160a9a#df3a21160a9a9353db5913b521b66e9724ab8fef" +source = "git+https://github.com/wasmerio/wasmer?rev=3709c9d8264#3709c9d826447d334ad12005609dbb94270fa8ac" dependencies = [ "backtrace", "cc", diff --git a/packages/vm/Cargo.toml b/packages/vm/Cargo.toml index 078b1eaee0..ace8ab53a5 100644 --- a/packages/vm/Cargo.toml +++ b/packages/vm/Cargo.toml @@ -42,8 +42,8 @@ serde = { version = "1.0.103", default-features = false, features = ["derive", " serde_json = "1.0" sha2 = "0.9.1" thiserror = "1.0" -wasmer = { git = "https://github.com/wasmerio/wasmer", rev = "df3a21160a9a", default-features = false, features = ["jit", "singlepass"] } -wasmer-engine = { git = "https://github.com/wasmerio/wasmer", rev = "df3a21160a9a" } +wasmer = { git = "https://github.com/wasmerio/wasmer", rev = "3709c9d8264", default-features = false, features = ["jit", "singlepass"] } +wasmer-engine = { git = "https://github.com/wasmerio/wasmer", rev = "3709c9d8264" } # Wasmer local (used for quick local debugging or patching) # wasmer = { path = "../../../wasmer/lib/api", default-features = false, features = ["jit", "singlepass"] } From b694fb1d598b82a360b46e95ce9bf8ada79832ff Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Mon, 14 Dec 2020 01:56:24 +0100 Subject: [PATCH 4/6] Benchmark branch update-wasmer --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8003775578..79b5a01cd2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -26,7 +26,7 @@ workflows: - master # 👇 Add your branch here if benchmarking matters to your work - benchmarking - - upgrade-to-wasmer-reborn + - update-wasmer deploy: jobs: - build_and_upload_devcontracts: From 1f086082f9f36f0257ad73666fe90934e50d9e2e Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Mon, 14 Dec 2020 01:57:30 +0100 Subject: [PATCH 5/6] Add branch module-helpers to benchmarking --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 79b5a01cd2..f4232334f5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -27,6 +27,7 @@ workflows: # 👇 Add your branch here if benchmarking matters to your work - benchmarking - update-wasmer + - module-helpers deploy: jobs: - build_and_upload_devcontracts: From 5e3d21225ae1b273ec3ff39cd08dc2d4ada7b62a Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 10 Dec 2020 23:31:48 +0100 Subject: [PATCH 6/6] Use serialize_to_file/deserialize_from_file from Wasmer --- Cargo.lock | 1 - contracts/burner/Cargo.lock | 1 - contracts/hackatom/Cargo.lock | 1 - contracts/queue/Cargo.lock | 1 - contracts/reflect/Cargo.lock | 1 - contracts/staking/Cargo.lock | 1 - packages/vm/Cargo.toml | 1 - packages/vm/src/modules/file_system_cache.rs | 57 ++++++++------------ 8 files changed, 22 insertions(+), 42 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 02d52c9e3d..06dc7425b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -201,7 +201,6 @@ dependencies = [ "cosmwasm-std", "criterion", "hex", - "memmap", "parity-wasm", "schemars", "serde", diff --git a/contracts/burner/Cargo.lock b/contracts/burner/Cargo.lock index cdd1f6d49c..27e75283bf 100644 --- a/contracts/burner/Cargo.lock +++ b/contracts/burner/Cargo.lock @@ -139,7 +139,6 @@ dependencies = [ "clru", "cosmwasm-std", "hex", - "memmap", "parity-wasm", "schemars", "serde", diff --git a/contracts/hackatom/Cargo.lock b/contracts/hackatom/Cargo.lock index 6632697eb3..1326a0defa 100644 --- a/contracts/hackatom/Cargo.lock +++ b/contracts/hackatom/Cargo.lock @@ -136,7 +136,6 @@ dependencies = [ "clru", "cosmwasm-std", "hex", - "memmap", "parity-wasm", "schemars", "serde", diff --git a/contracts/queue/Cargo.lock b/contracts/queue/Cargo.lock index 93ea23d985..52216c4690 100644 --- a/contracts/queue/Cargo.lock +++ b/contracts/queue/Cargo.lock @@ -128,7 +128,6 @@ dependencies = [ "clru", "cosmwasm-std", "hex", - "memmap", "parity-wasm", "schemars", "serde", diff --git a/contracts/reflect/Cargo.lock b/contracts/reflect/Cargo.lock index 56ba5b2f06..ac69ce1c1a 100644 --- a/contracts/reflect/Cargo.lock +++ b/contracts/reflect/Cargo.lock @@ -136,7 +136,6 @@ dependencies = [ "clru", "cosmwasm-std", "hex", - "memmap", "parity-wasm", "schemars", "serde", diff --git a/contracts/staking/Cargo.lock b/contracts/staking/Cargo.lock index 191e768e02..a622dddf8d 100644 --- a/contracts/staking/Cargo.lock +++ b/contracts/staking/Cargo.lock @@ -136,7 +136,6 @@ dependencies = [ "clru", "cosmwasm-std", "hex", - "memmap", "parity-wasm", "schemars", "serde", diff --git a/packages/vm/Cargo.toml b/packages/vm/Cargo.toml index ace8ab53a5..0beb0f73e0 100644 --- a/packages/vm/Cargo.toml +++ b/packages/vm/Cargo.toml @@ -35,7 +35,6 @@ clru = "0.2.0" # Uses the path when built locally; uses the given version from crates.io when published cosmwasm-std = { path = "../std", version = "0.12.1" } hex = "0.4" -memmap = "0.7" parity-wasm = "0.42" schemars = "0.7" serde = { version = "1.0.103", default-features = false, features = ["derive", "alloc"] } diff --git a/packages/vm/src/modules/file_system_cache.rs b/packages/vm/src/modules/file_system_cache.rs index 3a33808df8..e4185bd91b 100644 --- a/packages/vm/src/modules/file_system_cache.rs +++ b/packages/vm/src/modules/file_system_cache.rs @@ -1,14 +1,8 @@ -// copied from https://github.com/wasmerio/wasmer/blob/0.8.0/lib/runtime/src/cache.rs -// with some minor modifications +use std::fs; +use std::io; +use std::path::PathBuf; -use memmap::Mmap; -use std::{ - fs::{self, File}, - io::{self, ErrorKind, Write}, - path::PathBuf, -}; - -use wasmer::Module; +use wasmer::{DeserializeError, Module}; use crate::checksum::Checksum; use crate::errors::{VmError, VmResult}; @@ -76,40 +70,33 @@ impl FileSystemCache { .join(MODULE_SERIALIZATION_VERSION) .join(filename); - let file = match File::open(file_path) { - Ok(file) => file, - Err(err) => match err.kind() { - ErrorKind::NotFound => return Ok(None), - _ => { - return Err(VmError::cache_err(format!( - "Error opening module file: {}", - err - ))) - } - }, - }; - - let mmap = unsafe { Mmap::map(&file) } - .map_err(|e| VmError::cache_err(format!("Mmap error: {}", e)))?; - let store = make_store_headless(Some(memory_limit)); - let module = unsafe { Module::deserialize(&store, &mmap[..]) }?; - Ok(Some(module)) + let result = unsafe { Module::deserialize_from_file(&store, &file_path) }; + match result { + Ok(module) => Ok(Some(module)), + Err(DeserializeError::Io(err)) => match err.kind() { + io::ErrorKind::NotFound => Ok(None), + _ => Err(VmError::cache_err(format!( + "Error opening module file: {}", + err + ))), + }, + Err(err) => Err(VmError::cache_err(format!( + "Error deserializing module: {}", + err + ))), + } } pub fn store(&mut self, checksum: &Checksum, module: &Module) -> VmResult<()> { let modules_dir = self.path.clone().join(MODULE_SERIALIZATION_VERSION); fs::create_dir_all(&modules_dir) .map_err(|e| VmError::cache_err(format!("Error creating direcory: {}", e)))?; - - let buffer = module.serialize()?; - let filename = checksum.to_hex(); - let mut file = File::create(modules_dir.join(filename)) - .map_err(|e| VmError::cache_err(format!("Error creating module file: {}", e)))?; - file.write_all(&buffer) + let path = modules_dir.join(filename); + module + .serialize_to_file(path) .map_err(|e| VmError::cache_err(format!("Error writing module to disk: {}", e)))?; - Ok(()) } }