diff --git a/service/src/ocall_bridge/bridge_api.rs b/service/src/ocall_bridge/bridge_api.rs index 2d098ae2cd..ed93d3b76a 100644 --- a/service/src/ocall_bridge/bridge_api.rs +++ b/service/src/ocall_bridge/bridge_api.rs @@ -200,7 +200,7 @@ pub trait MetricsBridge { /// Trait for all the OCalls related to sidechain operations #[cfg_attr(test, automock)] pub trait SidechainBridge { - fn propose_sidechain_blocks(&self, signed_blocks_encoded: Vec) -> OCallBridgeResult<()>; + fn propose_sidechain_blocks(&self, signed_blocks_encoded: &[u8]) -> OCallBridgeResult<()>; fn store_sidechain_blocks(&self, signed_blocks_encoded: Vec) -> OCallBridgeResult<()>; diff --git a/service/src/ocall_bridge/ffi/propose_sidechain_blocks.rs b/service/src/ocall_bridge/ffi/propose_sidechain_blocks.rs index 21ff07d0bb..79c201361a 100644 --- a/service/src/ocall_bridge/ffi/propose_sidechain_blocks.rs +++ b/service/src/ocall_bridge/ffi/propose_sidechain_blocks.rs @@ -37,8 +37,8 @@ fn propose_sidechain_blocks( signed_blocks_size: u32, sidechain_api: Arc, ) -> sgx_status_t { - let signed_blocks_vec: Vec = - unsafe { Vec::from(slice::from_raw_parts(signed_blocks_ptr, signed_blocks_size as usize)) }; + let signed_blocks_vec = + unsafe { slice::from_raw_parts(signed_blocks_ptr, signed_blocks_size as usize) }; match sidechain_api.propose_sidechain_blocks(signed_blocks_vec) { Ok(_) => sgx_status_t::SGX_SUCCESS, diff --git a/service/src/ocall_bridge/sidechain_ocall.rs b/service/src/ocall_bridge/sidechain_ocall.rs index fdc801fbe8..03cf5f44ac 100644 --- a/service/src/ocall_bridge/sidechain_ocall.rs +++ b/service/src/ocall_bridge/sidechain_ocall.rs @@ -67,21 +67,22 @@ where PeerBlockFetcher: FetchBlocksFromPeer, TokioHandle: GetTokioHandle, { - fn propose_sidechain_blocks(&self, signed_blocks_encoded: Vec) -> OCallBridgeResult<()> { + fn propose_sidechain_blocks(&self, signed_blocks_encoded: &[u8]) -> OCallBridgeResult<()> { // TODO: improve error handling, using a mut status is not good design? let mut status: OCallBridgeResult<()> = Ok(()); + let mut slice = signed_blocks_encoded; // handle blocks - let signed_blocks: Vec = - match Decode::decode(&mut signed_blocks_encoded.as_slice()) { - Ok(blocks) => blocks, - Err(_) => { - status = Err(OCallBridgeError::ProposeSidechainBlock( - "Could not decode signed blocks".to_string(), - )); - vec![] - }, - }; + + let signed_blocks: Vec = match Decode::decode(&mut slice) { + Ok(blocks) => blocks, + Err(_) => { + status = Err(OCallBridgeError::ProposeSidechainBlock( + "Could not decode signed blocks".to_string(), + )); + vec![] + }, + }; if !signed_blocks.is_empty() { info!( diff --git a/service/src/ocall_bridge/test/mocks/sidechain_bridge_mock.rs b/service/src/ocall_bridge/test/mocks/sidechain_bridge_mock.rs index 65a81c2cf2..274dd79d2c 100644 --- a/service/src/ocall_bridge/test/mocks/sidechain_bridge_mock.rs +++ b/service/src/ocall_bridge/test/mocks/sidechain_bridge_mock.rs @@ -31,7 +31,7 @@ impl SidechainBridgeMock { } impl SidechainBridge for SidechainBridgeMock { - fn propose_sidechain_blocks(&self, _signed_blocks_encoded: Vec) -> OCallBridgeResult<()> { + fn propose_sidechain_blocks(&self, _signed_blocks_encoded: &[u8]) -> OCallBridgeResult<()> { Ok(()) }