From 058ab5f9100e586db4104d2c3bf5aaf48e6a2b2b Mon Sep 17 00:00:00 2001 From: Gav Date: Wed, 11 Jul 2018 18:05:55 +0200 Subject: [PATCH 1/3] Improve Wasm extern errors --- .../release/demo_runtime.compact.wasm | Bin 433483 -> 429035 bytes .../release/demo_runtime.wasm | Bin 465475 -> 465351 bytes .../release/polkadot_runtime.compact.wasm | Bin 474067 -> 468390 bytes .../release/polkadot_runtime.wasm | Bin 514126 -> 514001 bytes substrate/executor/src/sandbox.rs | 48 ++++---- substrate/executor/src/wasm_executor.rs | 110 +++++++++--------- substrate/executor/src/wasm_utils.rs | 8 +- .../release/runtime_test.compact.wasm | Bin 16780 -> 16335 bytes .../release/runtime_test.wasm | Bin 16905 -> 16889 bytes .../substrate_test_runtime.compact.wasm | Bin 21791 -> 21415 bytes .../release/substrate_test_runtime.wasm | Bin 23717 -> 23716 bytes 11 files changed, 84 insertions(+), 82 deletions(-) diff --git a/demo/runtime/wasm/target/wasm32-unknown-unknown/release/demo_runtime.compact.wasm b/demo/runtime/wasm/target/wasm32-unknown-unknown/release/demo_runtime.compact.wasm index 0ab058e8ed7328f8a792920912ee0a3b10ce9091..aacb4cc50f56fc14676eade39ead8a9dee8a63d4 100644 GIT binary patch delta 38508 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 delta 41943 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 diff --git a/demo/runtime/wasm/target/wasm32-unknown-unknown/release/demo_runtime.wasm b/demo/runtime/wasm/target/wasm32-unknown-unknown/release/demo_runtime.wasm index 8887b0a3ab25d7ddd57c78886df6eae9433526b9..c673dc860153374be0d7aa4b64f69d3a85f6fa51 100755 GIT binary patch delta 28125 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 delta 28242 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 PP=*DqX3sD>+2Z~mN?BbL delta 43481 zcmeHwcVHAn|M$(73y=gtFKHJ@ARvU>+p8+&fTanFAlMCicY6>BNlXEKEC-5R1VtRg zM+7T&6m{*QSa@uJSn#p&*dD}&z3cm#Eq9mX5vgxcoAF;YbTZdo~ceZNhw)O5+pP_=!{piO-jjuA3c z9d*vCm4`HS*_3xiMTR#w9d*u{Hs0E_{DMhb27uew^xu?y@!Ad&AJ=@KMmTW z!J{l;9b&5M`5ekkes5@c2fG~@hS4ldt5xpLbZ1BI6y zc}*)%ePc?uJ2KUmagV;V^6XvXxE0TAdV1G%Pj@ExR`4#KNxm!Db?X+oJDZH73$n@V zOtm^{-_If2^(}qKOp>Vudw)1Rp&z-I+(dKpNh#T&d-BQpPUHps)iN?FtK&@r$LBg+ z9l|%!f?=en<9o)V5PnY|JB*AW9bYiigz&E~=$BOxZ%2b#E|V;!23hFYSCc{d&jFH` zo4K-rPEyF840TUxq#ylbGRdW9Pb4{X+kDcIo;{u%k-2FZ{bM{ivYon4blC(ly3Ga? zNdYaMNCszUuy#I?=*1Jss0?*L5(RF%_cbG&e|>ID$ZL()lT54HPSV?No9zG%H=1Muv6duyl%NlL6#KS{EUu z^wHzV$r;M>^|MbP9|^2Rt0aTadRZk|(Y)a-di89wt|wcZ4=xtWsejbC!CObFn?+}A(`gIw3ukbi>ahu2!;KD&+#BQNTA z)Is%TbVxNDO*=M_kD8Zx^eK&`TZ@Lr>F+m@BB8_9Eugr=CDSD}7{`nHz<-dndDf+>8=YGkXtj=T-JPo z`_ZY($Pqe!F&WKes5zGY`%)sesL=7s@=SAsMPH%kFDKhf)x6bU4x|1n$+0b<(REjm z?sWH+q+7-cWmOv$x3yK#bcz^F+Fr+_dw@;1Bp`Vf)$RGNHD9PGjKWO z3o;yUUuIrFv7U727sjB!Pb)g?%Vy{={Sq&2r}uqHl(b=Y-3M;EovzwPMy8d1y3c5v z|5dZnQ@X>A!ky~#B50J&EmZ99y;}F(yw4oUbuJOBo|-KZ5I2BO783& zE!E=OugO9{`uS@z5Eo3x6kKY)v7dU;+rI%r`HsGsR@CcTG9E<+`5V6_(NypB%Wn7@LX&^@1f(qC*?

l*Hi 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 diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm index 4430bf8545f650ea9ea4f02c94f95e6814af6054..dfc9b4c24e5a75524d6ed770ba418e0cf2d8202b 100755 GIT binary patch delta 26926 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 delta 26951 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 Result<(), DummyUserError>; + fn write_memory(&mut self, ptr: u32, data: &[u8]) -> Result<(), UserError>; /// Read `len` bytes from the supervisor memory. /// /// # Errors /// /// Returns `Err` if `ptr + len` is out of bounds. - fn read_memory(&self, ptr: u32, len: u32) -> Result, DummyUserError>; + fn read_memory(&self, ptr: u32, len: u32) -> Result, UserError>; } /// Implementation of [`Externals`] that allows execution of guest module with @@ -182,7 +182,7 @@ pub struct GuestExternals<'a, FE: SandboxCapabilities + Externals + 'a> { } fn trap() -> Trap { - TrapKind::Host(Box::new(DummyUserError)).into() + TrapKind::Host(Box::new(UserError("Sandbox error"))).into() } fn deserialize_result(serialized_result: &[u8]) -> Result, Trap> { @@ -338,8 +338,8 @@ impl SandboxInstance { fn decode_environment_definition( raw_env_def: &[u8], memories: &[Option], -) -> Result<(Imports, GuestToSupervisorFunctionMapping), DummyUserError> { - let env_def = sandbox_primitives::EnvironmentDefinition::decode(&mut &raw_env_def[..]).ok_or_else(|| DummyUserError)?; +) -> Result<(Imports, GuestToSupervisorFunctionMapping), UserError> { + let env_def = sandbox_primitives::EnvironmentDefinition::decode(&mut &raw_env_def[..]).ok_or_else(|| UserError("Sandbox error"))?; let mut func_map = HashMap::new(); let mut memories_map = HashMap::new(); @@ -359,8 +359,8 @@ fn decode_environment_definition( let memory_ref = memories .get(memory_idx as usize) .cloned() - .ok_or_else(|| DummyUserError)? - .ok_or_else(|| DummyUserError)?; + .ok_or_else(|| UserError("Sandbox error"))? + .ok_or_else(|| UserError("Sandbox error"))?; memories_map.insert((module, field), memory_ref); } } @@ -395,12 +395,12 @@ pub fn instantiate( wasm: &[u8], raw_env_def: &[u8], state: u32, -) -> Result { +) -> Result { let (imports, guest_to_supervisor_mapping) = decode_environment_definition(raw_env_def, &supervisor_externals.store().memories)?; - let module = Module::from_buffer(wasm).map_err(|_| DummyUserError)?; - let instance = ModuleInstance::new(&module, &imports).map_err(|_| DummyUserError)?; + let module = Module::from_buffer(wasm).map_err(|_| UserError("Sandbox error"))?; + let instance = ModuleInstance::new(&module, &imports).map_err(|_| UserError("Sandbox error"))?; let sandbox_instance = Rc::new(SandboxInstance { // In general, it's not a very good idea to use `.not_started_instance()` for anything @@ -418,7 +418,7 @@ pub fn instantiate( |guest_externals| { instance .run_start(guest_externals) - .map_err(|_| DummyUserError) + .map_err(|_| UserError("Sandbox error")) }, )?; @@ -451,14 +451,14 @@ impl Store { /// /// Returns `Err` if the memory couldn't be created. /// Typically happens if `initial` is more than `maximum`. - pub fn new_memory(&mut self, initial: u32, maximum: u32) -> Result { + pub fn new_memory(&mut self, initial: u32, maximum: u32) -> Result { let maximum = match maximum { sandbox_primitives::MEM_UNLIMITED => None, specified_limit => Some(Pages(specified_limit as usize)), }; let mem = - MemoryInstance::alloc(Pages(initial as usize), maximum).map_err(|_| DummyUserError)?; + MemoryInstance::alloc(Pages(initial as usize), maximum).map_err(|_| UserError("Sandbox error"))?; let mem_idx = self.memories.len(); self.memories.push(Some(mem)); Ok(mem_idx as u32) @@ -470,12 +470,12 @@ impl Store { /// /// Returns `Err` If `instance_idx` isn't a valid index of an instance or /// instance is already torndown. - pub fn instance(&self, instance_idx: u32) -> Result, DummyUserError> { + pub fn instance(&self, instance_idx: u32) -> Result, UserError> { self.instances .get(instance_idx as usize) .cloned() - .ok_or_else(|| DummyUserError)? - .ok_or_else(|| DummyUserError) + .ok_or_else(|| UserError("Sandbox error"))? + .ok_or_else(|| UserError("Sandbox error")) } /// Returns reference to a memory instance by `memory_idx`. @@ -484,12 +484,12 @@ impl Store { /// /// Returns `Err` If `memory_idx` isn't a valid index of an memory or /// memory is already torndown. - pub fn memory(&self, memory_idx: u32) -> Result { + pub fn memory(&self, memory_idx: u32) -> Result { self.memories .get(memory_idx as usize) .cloned() - .ok_or_else(|| DummyUserError)? - .ok_or_else(|| DummyUserError) + .ok_or_else(|| UserError("Sandbox error"))? + .ok_or_else(|| UserError("Sandbox error")) } /// Teardown the memory at the specified index. @@ -497,18 +497,18 @@ impl Store { /// # Errors /// /// Returns `Err` if `memory_idx` isn't a valid index of an memory. - pub fn memory_teardown(&mut self, memory_idx: u32) -> Result<(), DummyUserError> { + pub fn memory_teardown(&mut self, memory_idx: u32) -> Result<(), UserError> { if memory_idx as usize >= self.memories.len() { - return Err(DummyUserError); + return Err(UserError("Sandbox error")); } self.memories[memory_idx as usize] = None; Ok(()) } /// Teardown the instance at the specified index. - pub fn instance_teardown(&mut self, instance_idx: u32) -> Result<(), DummyUserError> { + pub fn instance_teardown(&mut self, instance_idx: u32) -> Result<(), UserError> { if instance_idx as usize >= self.instances.len() { - return Err(DummyUserError); + return Err(UserError("Sandbox error")); } self.instances[instance_idx as usize] = None; Ok(()) diff --git a/substrate/executor/src/wasm_executor.rs b/substrate/executor/src/wasm_executor.rs index f48a3a93bc042..96633353910d3 100644 --- a/substrate/executor/src/wasm_executor.rs +++ b/substrate/executor/src/wasm_executor.rs @@ -25,7 +25,7 @@ use wasmi::RuntimeValue::{I32, I64}; use wasmi::memory_units::{Pages, Bytes}; use state_machine::{Externalities, CodeExecutor}; use error::{Error, ErrorKind, Result}; -use wasm_utils::{DummyUserError}; +use wasm_utils::UserError; use primitives::{blake2_256, twox_128, twox_256}; use primitives::hexdisplay::HexDisplay; use primitives::sandbox as sandbox_primitives; @@ -98,35 +98,35 @@ impl<'e, E: Externalities> sandbox::SandboxCapabilities for FunctionExecutor<'e, fn deallocate(&mut self, ptr: u32) { self.heap.deallocate(ptr) } - fn write_memory(&mut self, ptr: u32, data: &[u8]) -> ::std::result::Result<(), DummyUserError> { - self.memory.set(ptr, data).map_err(|_| DummyUserError) + fn write_memory(&mut self, ptr: u32, data: &[u8]) -> ::std::result::Result<(), UserError> { + self.memory.set(ptr, data).map_err(|_| UserError("Invalid attempt to write_memory")) } - fn read_memory(&self, ptr: u32, len: u32) -> ::std::result::Result, DummyUserError> { - self.memory.get(ptr, len as usize).map_err(|_| DummyUserError) + fn read_memory(&self, ptr: u32, len: u32) -> ::std::result::Result, UserError> { + self.memory.get(ptr, len as usize).map_err(|_| UserError("Invalid attempt to write_memory")) } } trait WritePrimitive { - fn write_primitive(&self, offset: u32, t: T) -> ::std::result::Result<(), DummyUserError>; + fn write_primitive(&self, offset: u32, t: T) -> ::std::result::Result<(), UserError>; } impl WritePrimitive for MemoryInstance { - fn write_primitive(&self, offset: u32, t: u32) -> ::std::result::Result<(), DummyUserError> { + fn write_primitive(&self, offset: u32, t: u32) -> ::std::result::Result<(), UserError> { use byteorder::{LittleEndian, ByteOrder}; let mut r = [0u8; 4]; LittleEndian::write_u32(&mut r, t); - self.set(offset, &r).map_err(|_| DummyUserError) + self.set(offset, &r).map_err(|_| UserError("Invalid attempt to write_primitive")) } } trait ReadPrimitive { - fn read_primitive(&self, offset: u32) -> ::std::result::Result; + fn read_primitive(&self, offset: u32) -> ::std::result::Result; } impl ReadPrimitive for MemoryInstance { - fn read_primitive(&self, offset: u32) -> ::std::result::Result { + fn read_primitive(&self, offset: u32) -> ::std::result::Result { use byteorder::{LittleEndian, ByteOrder}; - Ok(LittleEndian::read_u32(&self.get(offset, 4).map_err(|_| DummyUserError)?)) + Ok(LittleEndian::read_u32(&self.get(offset, 4).map_err(|_| UserError("Invalid attempt to read_primitive"))?)) } } @@ -168,8 +168,8 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, Ok(()) }, ext_memcmp(s1: *const u8, s2: *const u8, n: usize) -> i32 => { - let sl1 = this.memory.get(s1, n as usize).map_err(|_| DummyUserError)?; - let sl2 = this.memory.get(s2, n as usize).map_err(|_| DummyUserError)?; + let sl1 = this.memory.get(s1, n as usize).map_err(|_| UserError("Invalid attempt to read from memory in first arg of ext_memcmp"))?; + let sl2 = this.memory.get(s2, n as usize).map_err(|_| UserError("Invalid attempt to read from memory in second arg of ext_memcmp"))?; Ok(match sl1.cmp(&sl2) { Ordering::Greater => 1, Ordering::Less => -1, @@ -178,20 +178,20 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, }, ext_memcpy(dest: *mut u8, src: *const u8, count: usize) -> *mut u8 => { this.memory.copy_nonoverlapping(src as usize, dest as usize, count as usize) - .map_err(|_| DummyUserError)?; + .map_err(|_| UserError("Invalid attempt to copy_nonoverlapping in ext_memcpy"))?; trace!(target: "runtime-io", "memcpy {} from {}, {} bytes", dest, src, count); Ok(dest) }, ext_memmove(dest: *mut u8, src: *const u8, count: usize) -> *mut u8 => { this.memory.copy(src as usize, dest as usize, count as usize) - .map_err(|_| DummyUserError)?; + .map_err(|_| UserError("Invalid attempt to copy in ext_memmove"))?; trace!(target: "runtime-io", "memmove {} from {}, {} bytes", dest, src, count); Ok(dest) }, ext_memset(dest: *mut u8, val: u32, count: usize) -> *mut u8 => { - this.memory.clear(dest as usize, val as u8, count as usize) - .map_err(|_| DummyUserError)?; trace!(target: "runtime-io", "memset {} with {}, {} bytes", dest, val, count); + this.memory.clear(dest as usize, val as u8, count as usize) + .map_err(|_| UserError("Invalid attempt to clear in ext_memset"))?; Ok(dest) }, ext_malloc(size: usize) -> *mut u8 => { @@ -205,8 +205,8 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, Ok(()) }, ext_set_storage(key_data: *const u8, key_len: u32, value_data: *const u8, value_len: u32) => { - let key = this.memory.get(key_data, key_len as usize).map_err(|_| DummyUserError)?; - let value = this.memory.get(value_data, value_len as usize).map_err(|_| DummyUserError)?; + let key = this.memory.get(key_data, key_len as usize).map_err(|_| UserError("Invalid attempt to determine key in ext_set_storage"))?; + let value = this.memory.get(value_data, value_len as usize).map_err(|_| UserError("Invalid attempt to determine value in ext_set_storage"))?; if let Some(preimage) = this.hash_lookup.get(&key) { trace!(target: "wasm-trace", "*** Setting storage: %{} -> {} [k={}]", ascii_format(&preimage), HexDisplay::from(&value), HexDisplay::from(&key)); } else { @@ -216,7 +216,7 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, Ok(()) }, ext_clear_storage(key_data: *const u8, key_len: u32) => { - let key = this.memory.get(key_data, key_len as usize).map_err(|_| DummyUserError)?; + let key = this.memory.get(key_data, key_len as usize).map_err(|_| UserError("Invalid attempt to determine key in ext_clear_storage"))?; if let Some(preimage) = this.hash_lookup.get(&key) { trace!(target: "wasm-trace", "*** Clearing storage: %{} [k={}]", ascii_format(&preimage), HexDisplay::from(&key)); } else { @@ -226,13 +226,13 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, Ok(()) }, ext_clear_prefix(prefix_data: *const u8, prefix_len: u32) => { - let prefix = this.memory.get(prefix_data, prefix_len as usize).map_err(|_| DummyUserError)?; + let prefix = this.memory.get(prefix_data, prefix_len as usize).map_err(|_| UserError("Invalid attempt to determine prefix in ext_clear_prefix"))?; this.ext.clear_prefix(&prefix); Ok(()) }, // return 0 and place u32::max_value() into written_out if no value exists for the key. ext_get_allocated_storage(key_data: *const u8, key_len: u32, written_out: *mut u32) -> *mut u8 => { - let key = this.memory.get(key_data, key_len as usize).map_err(|_| DummyUserError)?; + let key = this.memory.get(key_data, key_len as usize).map_err(|_| UserError("Invalid attempt to determine key in ext_get_allocated_storage"))?; let maybe_value = this.ext.storage(&key); if let Some(preimage) = this.hash_lookup.get(&key) { @@ -243,17 +243,19 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, if let Some(value) = maybe_value { let offset = this.heap.allocate(value.len() as u32) as u32; - this.memory.set(offset, &value).map_err(|_| DummyUserError)?; - this.memory.write_primitive(written_out, value.len() as u32)?; + this.memory.set(offset, &value).map_err(|_| UserError("Invalid attempt to set memory in ext_get_allocated_storage"))?; + this.memory.write_primitive(written_out, value.len() as u32) + .map_err(|_| UserError("Invalid attempt to write written_out in ext_get_allocated_storage"))?; Ok(offset) } else { - this.memory.write_primitive(written_out, u32::max_value())?; + this.memory.write_primitive(written_out, u32::max_value()) + .map_err(|_| UserError("Invalid attempt to write failed written_out in ext_get_allocated_storage"))?; Ok(0) } }, // return u32::max_value() if no value exists for the key. ext_get_storage_into(key_data: *const u8, key_len: u32, value_data: *mut u8, value_len: u32, value_offset: u32) -> u32 => { - let key = this.memory.get(key_data, key_len as usize).map_err(|_| DummyUserError)?; + let key = this.memory.get(key_data, key_len as usize).map_err(|_| UserError("Invalid attempt to get key in ext_get_storage_into"))?; let maybe_value = this.ext.storage(&key); if let Some(preimage) = this.hash_lookup.get(&key) { trace!(target: "wasm-trace", " Getting storage: %{} == {} [k={}]", ascii_format(&preimage), if let Some(ref b) = maybe_value { format!("{}", HexDisplay::from(b)) } else { "".to_owned() }, HexDisplay::from(&key)); @@ -263,7 +265,7 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, if let Some(value) = maybe_value { let value = &value[value_offset as usize..]; let written = ::std::cmp::min(value_len as usize, value.len()); - this.memory.set(value_data, &value[..written]).map_err(|_| DummyUserError)?; + this.memory.set(value_data, &value[..written]).map_err(|_| UserError("Invalid attempt to set value in ext_get_storage_into"))?; Ok(written as u32) } else { Ok(u32::max_value()) @@ -271,22 +273,22 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, }, ext_storage_root(result: *mut u8) => { let r = this.ext.storage_root(); - this.memory.set(result, &r[..]).map_err(|_| DummyUserError)?; + this.memory.set(result, &r[..]).map_err(|_| UserError("Invalid attempt to set memory in ext_storage_root"))?; Ok(()) }, ext_enumerated_trie_root(values_data: *const u8, lens_data: *const u32, lens_len: u32, result: *mut u8) => { let values = (0..lens_len) .map(|i| this.memory.read_primitive(lens_data + i * 4)) - .collect::<::std::result::Result, DummyUserError>>()? + .collect::<::std::result::Result, UserError>>()? .into_iter() .scan(0u32, |acc, v| { let o = *acc; *acc += v; Some((o, v)) }) .map(|(offset, len)| this.memory.get(values_data + offset, len as usize) - .map_err(|_| DummyUserError) + .map_err(|_| UserError("Invalid attempt to get memory in ext_enumerated_trie_root")) ) - .collect::<::std::result::Result, DummyUserError>>()?; + .collect::<::std::result::Result, UserError>>()?; let r = ordered_trie_root(values.into_iter()); - this.memory.set(result, &r[..]).map_err(|_| DummyUserError)?; + this.memory.set(result, &r[..]).map_err(|_| UserError("Invalid attempt to set memory in ext_enumerated_trie_root"))?; Ok(()) }, ext_chain_id() -> u64 => { @@ -299,7 +301,7 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, this.hash_lookup.insert(hashed.to_vec(), vec![]); hashed } else { - let key = this.memory.get(data, len as usize).map_err(|_| DummyUserError)?; + let key = this.memory.get(data, len as usize).map_err(|_| UserError("Invalid attempt to get key in ext_twox_128"))?; let hashed_key = twox_128(&key); if let Ok(skey) = ::std::str::from_utf8(&key) { trace!(target: "xxhash", "XXhash: {} -> {}", skey, HexDisplay::from(&hashed_key)); @@ -310,33 +312,33 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, hashed_key }; - this.memory.set(out, &result).map_err(|_| DummyUserError)?; + this.memory.set(out, &result).map_err(|_| UserError("Invalid attempt to set result in ext_twox_128"))?; Ok(()) }, ext_twox_256(data: *const u8, len: u32, out: *mut u8) => { let result = if len == 0 { twox_256(&[0u8; 0]) } else { - twox_256(&this.memory.get(data, len as usize).map_err(|_| DummyUserError)?) + twox_256(&this.memory.get(data, len as usize).map_err(|_| UserError("Invalid attempt to get data in ext_twox_256"))?) }; - this.memory.set(out, &result).map_err(|_| DummyUserError)?; + this.memory.set(out, &result).map_err(|_| UserError("Invalid attempt to set result in ext_twox_256"))?; Ok(()) }, ext_blake2_256(data: *const u8, len: u32, out: *mut u8) => { let result = if len == 0 { blake2_256(&[0u8; 0]) } else { - blake2_256(&this.memory.get(data, len as usize).map_err(|_| DummyUserError)?) + blake2_256(&this.memory.get(data, len as usize).map_err(|_| UserError("Invalid attempt to get data in ext_blake2_256"))?) }; - this.memory.set(out, &result).map_err(|_| DummyUserError)?; + this.memory.set(out, &result).map_err(|_| UserError("Invalid attempt to set result in ext_blake2_256"))?; Ok(()) }, ext_ed25519_verify(msg_data: *const u8, msg_len: u32, sig_data: *const u8, pubkey_data: *const u8) -> u32 => { let mut sig = [0u8; 64]; - this.memory.get_into(sig_data, &mut sig[..]).map_err(|_| DummyUserError)?; + this.memory.get_into(sig_data, &mut sig[..]).map_err(|_| UserError("Invalid attempt to get signature in ext_ed25519_verify"))?; let mut pubkey = [0u8; 32]; - this.memory.get_into(pubkey_data, &mut pubkey[..]).map_err(|_| DummyUserError)?; - let msg = this.memory.get(msg_data, msg_len as usize).map_err(|_| DummyUserError)?; + this.memory.get_into(pubkey_data, &mut pubkey[..]).map_err(|_| UserError("Invalid attempt to get pubkey in ext_ed25519_verify"))?; + let msg = this.memory.get(msg_data, msg_len as usize).map_err(|_| UserError("Invalid attempt to get message in ext_ed25519_verify"))?; Ok(if ::ed25519::verify(&sig, &msg, &pubkey) { 0 @@ -345,15 +347,15 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, }) }, ext_sandbox_instantiate(dispatch_thunk_idx: usize, wasm_ptr: *const u8, wasm_len: usize, imports_ptr: *const u8, imports_len: usize, state: usize) -> u32 => { - let wasm = this.memory.get(wasm_ptr, wasm_len as usize).map_err(|_| DummyUserError)?; - let raw_env_def = this.memory.get(imports_ptr, imports_len as usize).map_err(|_| DummyUserError)?; + let wasm = this.memory.get(wasm_ptr, wasm_len as usize).map_err(|_| UserError("Sandbox error"))?; + let raw_env_def = this.memory.get(imports_ptr, imports_len as usize).map_err(|_| UserError("Sandbox error"))?; // Extract a dispatch thunk from instance's table by the specified index. let dispatch_thunk = { - let table = this.table.as_ref().ok_or_else(|| DummyUserError)?; + let table = this.table.as_ref().ok_or_else(|| UserError("Sandbox error"))?; table.get(dispatch_thunk_idx) - .map_err(|_| DummyUserError)? - .ok_or_else(|| DummyUserError)? + .map_err(|_| UserError("Sandbox error"))? + .ok_or_else(|| UserError("Sandbox error"))? .clone() }; @@ -368,10 +370,10 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, ext_sandbox_invoke(instance_idx: u32, export_ptr: *const u8, export_len: usize, state: usize) -> u32 => { trace!(target: "runtime-sandbox", "invoke, instance_idx={}", instance_idx); let export = this.memory.get(export_ptr, export_len as usize) - .map_err(|_| DummyUserError) + .map_err(|_| UserError("Sandbox error")) .and_then(|b| String::from_utf8(b) - .map_err(|_| DummyUserError) + .map_err(|_| UserError("Sandbox error")) )?; let instance = this.sandbox_store.instance(instance_idx)?; @@ -388,17 +390,17 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, trace!(target: "runtime-sandbox", "invoke, instance_idx={}", instance_idx); let export = this.memory.get(export_ptr, export_len as usize) - .map_err(|_| DummyUserError) + .map_err(|_| UserError("Sandbox error")) .and_then(|b| String::from_utf8(b) - .map_err(|_| DummyUserError) + .map_err(|_| UserError("Sandbox error")) )?; // Deserialize arguments and convert them into wasmi types. let serialized_args = this.memory.get(args_ptr, args_len as usize) - .map_err(|_| DummyUserError)?; + .map_err(|_| UserError("Sandbox error"))?; let args = Vec::::decode(&mut &serialized_args[..]) - .ok_or_else(|| DummyUserError)? + .ok_or_else(|| UserError("Sandbox error"))? .into_iter() .map(Into::into) .collect::>(); @@ -412,11 +414,11 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, // Serialize return value and write it back into the memory. sandbox_primitives::ReturnValue::Value(val.into()).using_encoded(|val| { if val.len() > return_val_len as usize { - Err(DummyUserError)?; + Err(UserError("Sandbox error"))?; } this.memory .set(return_val_ptr, val) - .map_err(|_| DummyUserError)?; + .map_err(|_| UserError("Sandbox error"))?; Ok(sandbox_primitives::ERR_OK) }) } diff --git a/substrate/executor/src/wasm_utils.rs b/substrate/executor/src/wasm_utils.rs index 8bd9f98feb375..5459266ba46c0 100644 --- a/substrate/executor/src/wasm_utils.rs +++ b/substrate/executor/src/wasm_utils.rs @@ -21,13 +21,13 @@ use wasmi::nan_preserving_float::{F32, F64}; use std::fmt; #[derive(Debug)] -pub struct DummyUserError; -impl fmt::Display for DummyUserError { +pub struct UserError(pub &'static str); +impl fmt::Display for UserError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "DummyUserError") + write!(f, "UserError: {}", self.0) } } -impl HostError for DummyUserError { +impl HostError for UserError { } pub trait ConvertibleToWasm { const VALUE_TYPE: ValueType; type NativeType; fn to_runtime_value(self) -> RuntimeValue; } diff --git a/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm b/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm index c098995d4274051069fb9fbd616145487726a897..3c6b428a74641d1c7b940a014560fef91c12554b 100644 GIT binary patch delta 2958 zcmcH*TWlOx_1@jJz4m(7>&A9mC)sSA*l`|?=XvMRt;r-%75YH|6VxI)x-)afJNE9( zYIfESqOz&rvmb2-RR#&#ssX7INRbu+g-WdiMM6TV#20)b@ew|YKu8D)&WzXg#so$E zU{*Wlo^#K==Y8h9{7w8(_uf=yaU33$yx=Jn3Wf1;oEyR|oX-zsF`676#a(RNi}lP+ za&aoiE__YC?7gV%zBHd?>Aj`aFZn4mFcM%siug`T6Kb~&3sqa|94ifgY z=%XeL*V{-rImpu2&D^35qz*;YYA}pOix?TWFjB2ZWO4rd*uP)6JcP=VsE|j-{Zjc9 zDtw5unJ)fDrklB*{Hn;vZ7gMaKh8dt!+X8Ijd0`mPP{NB;a7UkPbnDh#jj1Tj=niT zGP!ET*o*%-eI4J8=Vs>dz4*zQW&B=mb4Ja;(Yv#+WXaz#&UMctqr5qvxqyuC6pcbT zW85toLm+6cSjDHRxIARMQ#3}(8MqIT41!oZS(!W0=j|1ZY&Dy5{WRXFXlLFp5`3y=f&z24ly zUoxe>Nno0R%3?gZ^xDkZC1cpgmgVY@k>4=hDH#PLSC)J4E=>>PpY%Su_BzJD>$%($ zc=4rdb|?)6IE>qz&s{*(obhG}4r{QO-KgSfrmXdzKm9cvzr}y`P}t8)MkW>J#x3E* zA^8s_0|WV0p%ee?%(G*KU*^HLck+e%y|VZN9RF5&Bfn0!R&E9%i*L)?RKv4uSg*7j zp3PR8fpaZv$M4F&$M@rx$<@rahT~t5N_TG<9X=n!dJ?b?vIq?UoC16aU=85Y02eSq zqX2&c_!WQ${LcY>8t}{rLSq2O`)~o)m50!iJ9F>{#*+=t-}LG-A%d)<`+o8Z7jDDWM#d@921f9~AG{ z5eB7Ocr4j_uyDs`<2!g37vt~4yA;0%?}_*gwbCs=Q%l9`dPujS%57c$BHg~l?AqGZ zsj&DIp0De-Z`+Na-3i%?FY0<-;0Y&ijCW1xy(xeO;x>Y9 zI3*K>$gab=nkaWI-gX|-AEiUc+AQ2+iAY6rWrw$IQB^hSh$n`dtZBD)r}AM3nqv?& zr$51MR#y-e+op~q+N$bWbY?QW#$xN9Z+84`&v#BXYweEJjzWkKv|X?1Mcx)`>w3T4 z>H6Aki#fMwqrH)L$?D+j(wW0M4?qpp5pIeOi36H1Sa*rZX!!i3*}tccipNE=CD6=J!Prf58o1(~U5ZanhX zI-EO}Qx;{St0^2W2o@EkidGMb6OD7Ck;7k*&vXeyTWyMlm zW;;x@HAb}aa&5o|)Zf*0!%yr_I!FW=XnIZ(15FS(j>@VkNKCWHg=_mVf>zY^0;piN z(_(gHy3}j1`Euo)MMsi^fsGgdIQf zn#??`EQkeo20~3EyKYAHj=u?4sIJXaTc%8wsc1X)#r{)UYBFAZX8HJZH8@Pcu(k5wY{fln zwBpmrN_b$f5`_o#Vmr+4Ko{!!Cyk%0Ij%@F%@!O>rI6pNk37TtEt9sPqk^e*i6w?O zk|QfJJ;xD6eqo^B9o%&ok@!!mr@OVa^uypdW<7wW>vnu-b9F_LTnMfvYN8{6D&*$D z>3y$0MEgV&&$mrGfXF8u1=8M@TwW4wN>odc6y?81OZD0RHCk$9utw~_hmQ`}_*p*+ ZYF|!NhGrFj5Se!!K~V{lTn&1m_8+Bfj@$qM delta 3381 zcmb_fU2Ggz6`s3Z|HNxM>)3IeA3Gao2vJ3C3CSSgsdv)}K22K^}8H#LXu zW=m5i(JwozQ+ffm-kQGAH~(s1Uw?|O7t+ImDXz{Ht3st{-WfCd$_p@=zFI+*LV2Nc zfAI?_`yswS{)SMI%a&K?3RS^;d({S{R1H{TsK2g?PxUmyhm z;&JuBzKO2vPe;wZN?$JZv+NrOjG23*L=a$i@v12-3h$4e%BcaMP71%x{(3+}_p{lV zSukvA=5$vYJtB?Fp7b|orhwf#s&2`4#93zDVQ1~4fMHs)^dH(QU3S(W9z%)}RtJ&%Kn^T=Ja{&Bvw9;=5 zT{YhwGfQT%e6;hY`P~EPz0N;Qd>x@bcCy+jl)WT zI7l|K&#Okiz(3jB>Tl44>?`C%;Z}e44w+4F59AB^4;mDNahToh69g{50BZ{{UV!lu zj7N|l?11riKp%&(C;wUC?*@7o>>q~lKzBR>^V!Gn`I$xd3L}Gi>Oly~uJjdtJS4m| zSqy1|p*JR<$zIW(CBtkzu^X)6Hkt#a?z|DLvBBO#izP!l`2tMrRuaW@h3&|`r|r8m zT;}ZU=q`T}g<8;e!5`uuX0e<9evN}=&2_2g$*!)0`PSa?{B(z{1fksyuLWW1?Ryo0J%*M?pw)I-Nz9$v zjDtpy1Z%8St91)$t+u?;WZq?3Z-aLs7_^lSTbta-<8kAl;$^m0yVRZWh!Ga@buiyh zu^}>_QN>HK;SS2-+74gd-)7d>VW!#XPVuGk9N=FHwS$91S(;_zZ;RYaVoCPms0qf{;0Ko{t)yy>?lae8vTHE7Z$%3w8?75I-t} zZWO{h0B|@TCJ{gUGkJZ13lu=W%2 zS-57?7QCLk63I&HXgXGW*Kl+qii)*#{)vuJ`7uH0+HM3n3N;x(%?vET)2=Coi*?1Z WPJj5X!7%Q6rS0&9Xqx+8{$}@EzTx&N-COqe`j~&#O?^WYQe{GAX75R?-akO+rX>Hz@~2gZ&YCA1^$e)GNg z=IOnWzW4G4_|Hpl{Sod!f-TVbu_eUg@k9cK!mt6O(J&9eU?c{YAzr7axszyWunvvT7ip zCA*RK^NUMeuJ7QAY5`-Yd+xcaVJLR_tkw4k~q9dpH3fvSLo&RI9#XK(^K%XU^8uT?CRM47kTt2 zgrVjA0E-LbTo&Lrk~l7M_(~FoC4g6x65K06F^aDyai7Ssd;oEPz3uhPo}r#LNMc^% zyQ+`q?-~1njU)nq-44xTkON;P^IaBUYzll$XGdlD8?BFKSfMMUg`OJjQbT-4y*a8y zm2SuX4$%G56QS2dag45v9b@%xNa;?uKaKsx$amw#4iU0n!43LDHW<7lAa0Ts{3b)0 z;akDwi9a}@*Aii+L%Gqx1Nxfa5qM<^yzaI08Qm9?e~X@Y~>5 zIS=Uv`-TVC1g0%YAv`iKL5UNK!Hs>-L7GvY-Ol~7fVpmNpWal5w!=RQ7_zXSouPW> zM1TC#D0|BD(fDStqP+*{QRD6C966hNc(LixzYRN8t5zJg&$Vh*$IG2sbPqRM6ru0o zCXJbgxC;?#nwjO*2-se?*?y3*&v^jC3{#9xGMr&}jNt?XAja?;#vfvMNB<0q4>Qj7 z0npDd(ZdP0&)g&4$r)lF6ZY4t^@VDEj_0lgznEV@QB{zv%AVpI6`vra&~^I-Q8jJf za23bVEXyXYMhnw7MWXA9jEF1is^%lNLi71oMAtVBOZ8ReC&f^S5&W2s@uDf4HoK|o zs^TGwCB0R!p0a$$vmAqXhCwvPbxKoP9&<^Xl&kfg&39TqcenH99mZGa?2!{x;73Z@ z|GmG{>TDDkyPc2jWqgzQevfGF^1W@*$MHnUJn7r6uOZuZRJURgos_2OV_3gW_bgNM zT-`NHgUHA%<*8L9L#C;-Ji)?AgzOEbqidFUrNl{FmQS9HxG$f}sSS(?3jvJ^Ul L1s3W1#V7v*CMjnO delta 1406 zcmZuxUuauZ7(eISq)D3GcP zA89|kxYFm^KAyum$gh<~5YTCpJ2q}a`r2i)QMDFVz|2n1U0N|)=axZ{e#9L~&-&Y@ zRd*l=@emLg4y4CVpE)&kVsO2Z@dIH5goA)=d%trp_+Zyt3Q7@pnZ7%sz;*A3kvxQ5 z8jBZ08!-*}L`1suiFgTKr*FhlaFgDQXW-Y~-MEfe>hU9&x%BfK=kLHvs51tLw2<o{$p>aUo=Sf&VA|PE}gvUfE z1j!Aa1O&wT0}TPP$rFy12_5H936(@Ng+L0D&LjL@fzNshuAlk^PeQC@KmaLF=2?5O zS3^V(1@g#8r9>ieht~jL?R@hDWWl$5q0a^w%Yg6bd_sbM&^HrFHi?^w;^dAR9#BKF ztLA4|E)qEsSerabjbtn+_vibnK+9x0@@;GMNG zZ|G`NLsRTiKVT>^{LtGP`vpaJhrxzIfKZ?xr`O_Mlnk)RW<);;&XXHa5+*(&U3+FV)dOvO{ckPF4P*?s`E^?X|`(ZRr;f9_(5;cwDt|$ zruVc{=!&0C=98W7K>wn@!2ke5?6k=N(9=(`yD5fq3?FAW0Radx{GRcX4FAN6@ zA7=T33?JOZ33g8YPrO&t#~u&~4AyH6_Ojos? z<}fxTSvO=?wN$f8r)Pc>3>6!a<2t5N#fGa%^km@`!NroDH%-f~nwnYFW$*Jsh!Z3` zm(R(rtIL|K*_K9sF6zTlPPc4qD|Qv@IA`H0I{AjioY(SW-cRMvah6&di+YPP;p^&dj#m z5M1PeXfV+*iSffwSECOcUkm+?J(`vDUbmF&Kl% z^%#vKeN3J+7@6a_gWN%5DY?G>!_A*$WQM}|S)*rmTQ=V-b4 z;l0VG;Vs<9+2+LXYZ*%W{nkP!`+2i(L}p<*yz|5Wcd<8lRi35RUFyDsS1xcb^(OBt zCtAo!`t^+Jw$Gcts)(igo%$^BCO;I%J0RfXOZ|EFM)K(XO#{DW_Ct8A(FO60F~2vX z{UO`B`4e4EPwYsR4y>aTy%Wb;$d6+;+M0aIq@r}>GgOppTa*?hsL-NJo_*+Bux}nY zc$KBmQp({&eUx(K(6JUWp1gJFG-%LdAHLWDCvU!Zgj;*9n`4agJ=w35%aeZ%#3YKV zIP~KB7~LkLQ&RHsQJrO)UmZQkCg#*Qx40&GWlC>c>0+4e48ts~VVFKxC*jAz?;H5u zwF*Dc#?Qh1J*)6}*i*a50pGU@e-8GPX9M6M+6w;*ZJg=tE_?pmpy$tYaPM?8-}QI; zxI)g3HTy zvV9b&hH%v^k;UFzdfv7VgCOo(M-jVBaJX#Kzn((G5fN$#nmJEG&#ezk6>+&7*t#C# z1;Ai)5-&VS?Beuj-k6xs_4F9W)Gb{FXJ z+SU4CPgsj$GYBdh?t-ncLPtayJF<%u!Im7wx@TQVW04upH*5Za=Q~3OqM8-OA(bGk z`LS04DFR(5eyu_%>X>op!5OFy4!YQ~1%-$OQFR3eX~X(0b31UTz)`v3+1M&WJjAD% z8I?VoMyFUjl2ui93W_4xl63D=%gUsgp=qh96L}ov|ATay^AwO#cF0|e9*7-RL8|DA zP)h<5aRc2)b%TPszpIkwY-6Vz67s-qI|#v%D)v2l4vM$E1qRLKHC~gkEV+cpuDofq zb=9pv)JKA_g5#Kk^u9w?(6CS-lIq%^uHuTD$NoXwSYb9(`;u*8OS2tEK#qb%N!_xy zeLn_DCk(1keP*?cQC* zp2tX4#YTZ>mb`Ue%Oa@8UI4{S7OTXLO&5D*LJdUh+TaZ@%7Tg<$=QaABRg?^)my3a zhrI|qqwlq1;jyd8n&ZkU#z^K14|YTCNASY-EUv|+0OnT1BhikW=XEx14m&ptDyEkfa)}f)B)bl>q1qIp7WN*e@n@ia>k(+I>q%~UBRF2Nh@fhgMKG^A zqFCTZ2XM7ouA4A!TRM&PyPm%)(fgjhJtCSw#XymNW6>+D&ohdTD@@Vf%eduBX#1WaZk}5j1mYp4$Ks94gL}+rwE8( KRdggI+RER)!0)pF delta 2724 zcmb_d-ESP#6`via{@C^6bqsbX4RPp_@a6G*e>iQ(BpKt7fFj4@0ZR;b?!9A=y*o3^ z%-UWdu_+G~m8w={Botn#R6rnJXjvL~0||JjM1>G9{ST^&R;qZ50Eu&Fc4PA;q_z*c z_sqHXoO93boZq>xyi)nYYn4A;ALFmq`=5`Eu=UxgYy30y{OzeH`QOz0TBFM!y;ij+ z?5lN~v$@8&-CM46^SsUJyvU#CPuth>za4(-_Ae%Mj;ZIj?D4HTYV(si&&}8ELt8et z$X&_*IJ3fH{A=dlmAjv>+e+gYSF=a$N@E7rr>pitp&0Ho8lZirn)9v2rJtTmD&@&f*|L7>&iwi>rkRV$QxBDze=fXUEirkQD?k~UuQE_-15iqr zfI{gqf8zd6z`nnH`n3wnmbsieQ)e!ZpLwX%EaoqrSqBXIm9xJZft?qBz06O%HO6!H zmGRn#`Liou<{zJ5>Q6qnTA9vhn#CvyvhD&CIWB+Uyplh5VUfQ&n*Z*?Qjd&sT$AIt zYd_++I;<=3Lk-- zyV0I2$!2YeeZi)iW>JDR=wzKK;v@(&ca!eb8^wOP=O$5<-89WKxJ6Miw3#~0RFue? zCRy$dO#;8$=(vwQtXgjK;#w26S`ik61ns&zJqpq)+I@s#wzbwg+iZ4Zv1vCSSZlJM zBo)U|M%^HkO}E)GJU9Y>xD}UUrHhi+^nG^NQ71)qwpm_$UPO0eZq z&v0f&p%6Ik-aMXk(#(ybUi+5+Ll`RSi0Hm%NLV3;=gdwQ?mfB@gl;F?4MH+^7P67W zwBw~&!q7}QVHUJ|0Ba|+5OzB1+^q~AZ4ADUYbj+ggtOZb7 zbiy}c3BoX#AY2}VWhQzV8Djdfhz*21Oc0=AD$Y*|(A)8CV*?ialqsOekBqi^MQhxC z$WJIedLJt|juL9cC=Bp6FiI;V@M`%YB%uQoKBc;^JM+TuwBoljYdK2VD9dP~#E7t4 zSV&T-V)_^=WB9UjOdOuy_in{K7RUt$V1hm5S(p$>BLuNy-LunTLJ zEQ=!2OjA~=<>^jS9!A%rI18dsQs`bxapw9cXaU23Zpa6yWl`28QzHs-?py;KO)Dib((Vbuxgdpvic2vh!L5jVL$`>pn+R#Ts5-~TV2Y%0g%dT@$u=XH z!U0Y1Y6Kw&s1>Bt^%SF>2u;}d zdAQT|KpM=T6_joc<#WLX4E^&NZU49Z2|NL2Kz52~SQ5gjVko|J)c1&U4-8p~J3z`J zi+j6}gjvqY{P(M~P&sE0Xc?vfK3LTK{0bI+FEegLhDMZpOTwy7E$k7`x$hg1pc?;E zq#GPGMA=hC9ZA&FG*1(qg*}#2S(m~5KS=wv64mv6+8;c08M+ScMMLtnH{yI@1l+g$ zBx<_>kPqOcs-@{Z(J*kspr+~wmm#z)GbAVUw3|W=Wh4Ld>TNwZ?NQ0JJdYyLB(kiE z&f*k`<5t&&C#*zVyvYy313f0KGj|6@;IO&UP8>%`W(;0Vt7tF;Po;6Wd@m&>L)+Ai z61N;G9iTi+5@J%_Qx$|2MRDZE!MkRBo59~I_BQQOQeb$2No;l0ApigX diff --git a/substrate/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.wasm b/substrate/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.wasm index dc9dffdade8135ede20c1573be02836e60b564e5..d2fee52bcda7533157d17e756ab7cab131bca477 100755 GIT binary patch delta 793 zcmZ9IO-NKx6oBu&{*2=&z5z#Ogk%bh(j4E<-1px2Q$8EZA!>9)oh*p?1*eECiww%4 zML#oc;y|=4u-b+6Fc2a_?T11_uvRUCsAcFP%+TmwXN;l6<(%`qbH4L94`=bzES{FF zfUyY=S@#jKp;0JVZ7}kH>|YHlgUY#X+M#xd~l?r zo|Dmz(L6DC?7xY5{^-Cs_wVe~cs1O4Pg&)Es3PPh##@qd7a5k+t|FBnH#Uk>25Lb+ zc|#j(z(y$p&1lVRFdpEXMuk6Jzj-PK_Q7tyom+kWaE`RXqJOz?!Aq1f%9!3=&KKDJ zUtrr_0L$G!n8{o?^bzypaQT~_N-qD@6V8!W>|EwrV6lidzCIct)@K%ijC7gpJve(e ztHu%+#?D2~kBp5s^Aw(j6maylVq^yULKwb8<(Ss} E7of-VWB>pF delta 781 zcmZ9IUr19?7{Jdx{+V-=?x4jKk`)@IZO)zRy}MJ(BeNV4I<0AcUheMQz!i~Yfj#8t zC7Ug%4?>?JuwD}mE_^Do|70LoPdyYxFF{!^QCM_Nn=yJgeBbxG-}n12-|T{PYeAX| z+VOObDfXz1N0^Y`!mzYxS!*-OR(&&mol*G z?i2HLlM~~a9Q1kWnlAhu@X50oK8PH2CMN`By_T;Q`MoTFXRp}$#&ZsT%EEAM9DmEg zT+BApk2FF#U*>PFWnXu6NK%IRo1-#boPzQ8Gs3XizKEYq!Fs}i9GgiyW$p&A~0`NRBO z;q~?s-e2Tl-rrQh&+=T%IXU;2@bf$uo@MUg_xtCcEOO+u9UnPyjJ+IufH$-y6f+e{ z7%Cx#7SiBGJSZpiR;5j~5_&)qn8stJV{CLsjq(E*pKC4-h?gsh+vAc2tD^9MI??F#?^ From c28542ca375a1be67bf18da49c60393fec9db93d Mon Sep 17 00:00:00 2001 From: Gav Date: Wed, 11 Jul 2018 18:07:10 +0200 Subject: [PATCH 2/3] Increase heap size --- substrate/executor/src/wasm_executor.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/substrate/executor/src/wasm_executor.rs b/substrate/executor/src/wasm_executor.rs index 96633353910d3..4189ef98e1fef 100644 --- a/substrate/executor/src/wasm_executor.rs +++ b/substrate/executor/src/wasm_executor.rs @@ -45,7 +45,7 @@ impl Heap { /// This could mean that wasm binary specifies memory /// limit and we are trying to allocate beyond that limit. fn new(memory: &MemoryRef) -> Result { - const HEAP_SIZE_IN_PAGES: usize = 8; + const HEAP_SIZE_IN_PAGES: usize = 32; let prev_page_count = memory .grow(Pages(HEAP_SIZE_IN_PAGES)) From d17f8691b5df3dac7c0c65ff632f2fbeaa8e0234 Mon Sep 17 00:00:00 2001 From: Gav Date: Wed, 11 Jul 2018 21:09:47 +0200 Subject: [PATCH 3/3] Update heap size further --- substrate/executor/src/wasm_executor.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/substrate/executor/src/wasm_executor.rs b/substrate/executor/src/wasm_executor.rs index 4189ef98e1fef..891f6724566fd 100644 --- a/substrate/executor/src/wasm_executor.rs +++ b/substrate/executor/src/wasm_executor.rs @@ -45,7 +45,7 @@ impl Heap { /// This could mean that wasm binary specifies memory /// limit and we are trying to allocate beyond that limit. fn new(memory: &MemoryRef) -> Result { - const HEAP_SIZE_IN_PAGES: usize = 32; + const HEAP_SIZE_IN_PAGES: usize = 1024; let prev_page_count = memory .grow(Pages(HEAP_SIZE_IN_PAGES))