diff --git a/substrate/primitives/consensus/common/src/block_import.rs b/substrate/primitives/consensus/common/src/block_import.rs index 952a044e9b..dabe6331e8 100644 --- a/substrate/primitives/consensus/common/src/block_import.rs +++ b/substrate/primitives/consensus/common/src/block_import.rs @@ -228,15 +228,14 @@ impl BlockImportParams { /// Take interemdiate by given key, and remove it from the processing list. pub fn take_intermediate(&mut self, key: &[u8]) -> Result, Error> { - if self.intermediates.contains_key(key) { - self.intermediates.remove(key) - .ok_or(Error::NoIntermediate) - .and_then(|value| { - value.downcast::() - .map_err(|_| Error::InvalidIntermediate) - }) - } else { - Err(Error::NoIntermediate) + let (k, v) = self.intermediates.remove_entry(key).ok_or(Error::NoIntermediate)?; + + match v.downcast::() { + Ok(v) => Ok(v), + Err(v) => { + self.intermediates.insert(k, v); + Err(Error::InvalidIntermediate) + }, } }