diff --git a/core/src/env/srml/srml_only/impls.rs b/core/src/env/srml/srml_only/impls.rs index 1dba485e2c4..94a0450bd59 100644 --- a/core/src/env/srml/srml_only/impls.rs +++ b/core/src/env/srml/srml_only/impls.rs @@ -114,6 +114,32 @@ macro_rules! impl_getters_for_srml_env { } } +impl SrmlEnv +where + T: EnvTypes, +{ + fn call( + callee: ::AccountId, + gas: u64, + value: ::Balance, + input_data: &[u8], + ) -> u32 { + let callee = callee.encode(); + let value = value.encode(); + unsafe { + sys::ext_call( + callee.as_ptr() as u32, + callee.len() as u32, + gas, + value.as_ptr() as u32, + value.len() as u32, + input_data.as_ptr() as u32, + input_data.len() as u32, + ) + } + } +} + impl Env for SrmlEnv where T: EnvTypes, @@ -171,19 +197,7 @@ where value: ::Balance, input_data: &[u8], ) -> Result<(), CallError> { - let callee = callee.encode(); - let value = value.encode(); - let result = unsafe { - sys::ext_call( - callee.as_ptr() as u32, - callee.len() as u32, - gas, - value.as_ptr() as u32, - value.len() as u32, - input_data.as_ptr() as u32, - input_data.len() as u32, - ) - }; + let result = Self::call(callee, gas, value, input_data); if result != 0 { return Err(CallError) } @@ -196,19 +210,7 @@ where value: ::Balance, input_data: &[u8], ) -> Result { - let callee = callee.encode(); - let value = value.encode(); - let result = unsafe { - sys::ext_call( - callee.as_ptr() as u32, - callee.len() as u32, - gas, - value.as_ptr() as u32, - value.len() as u32, - input_data.as_ptr() as u32, - input_data.len() as u32, - ) - }; + let result = Self::call(callee, gas, value, input_data); if result != 0 { return Err(CallError) }