From 52ea5e814a7b3e5ed41f795552056bbe33dcb94a Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 10 Dec 2020 23:31:48 +0100 Subject: [PATCH] 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 ac3dc800e2..605193d437 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 bda9e1ecb4..3f2896bf90 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 fe166554c7..61ea77c80a 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 75af29e165..283288cd80 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 451cc67c0a..f6747d0b00 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 3a8c7ca2ea..75a3c705c7 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 078b1eaee0..1f39d8745e 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(()) } }