From 0fa049b0c71a3e4e1de05f518c7c8849aa56641d Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Wed, 16 May 2018 16:56:24 +0200 Subject: [PATCH] Store trie nodes in DB (#157) * move responsibility of storage_root calculation to state backend * have `storage_root` produce a memoizable transaction * store trie nodes in kvdb * fix up test fallout * remove stray newline * Fix comment * test for setting and checking state data * fiddle with dependencies * all parity deps on same commit hash * fix network protocol registration --- polkadot/api/src/lib.rs | 55 +++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/polkadot/api/src/lib.rs b/polkadot/api/src/lib.rs index 731c19a496..666893585d 100644 --- a/polkadot/api/src/lib.rs +++ b/polkadot/api/src/lib.rs @@ -168,10 +168,7 @@ macro_rules! with_runtime { $client.state_at(parent).map_err(Error::from).and_then(|state| { let mut changes = Default::default(); - let mut ext = state_machine::Ext { - overlay: &mut changes, - backend: &state, - }; + let mut ext = state_machine::Ext::new(&mut changes, &state); ::substrate_executor::with_native_environment(&mut ext, || { ::runtime::Executive::initialise_block(&header); @@ -278,51 +275,48 @@ pub struct ClientBlockBuilder { impl ClientBlockBuilder where S::Error: Into { - // executes a extrinsic, inherent or otherwise, without appending to the list + // initialises a block ready to allow extrinsics to be applied. fn initialise_block(&mut self) -> Result<()> { - let mut ext = state_machine::Ext { - overlay: &mut self.changes, - backend: &self.state, + let result = { + let mut ext = state_machine::Ext::new(&mut self.changes, &self.state); + let h = self.header.clone(); + + ::substrate_executor::with_native_environment( + &mut ext, + || runtime::Executive::initialise_block(&h), + ).map_err(Into::into) }; - let h = self.header.clone(); - - let result = ::substrate_executor::with_native_environment( - &mut ext, - || runtime::Executive::initialise_block(&h), - ).map_err(Into::into); - match result { Ok(_) => { - ext.overlay.commit_prospective(); + self.changes.commit_prospective(); Ok(()) } Err(e) => { - ext.overlay.discard_prospective(); + self.changes.discard_prospective(); Err(e) } } } - // executes a extrinsic, inherent or otherwise, without appending to the list + // executes a extrinsic, inherent or otherwise, without appending to the list. fn apply_extrinsic(&mut self, extrinsic: UncheckedExtrinsic) -> Result<()> { - let mut ext = state_machine::Ext { - overlay: &mut self.changes, - backend: &self.state, - }; + let result = { + let mut ext = state_machine::Ext::new(&mut self.changes, &self.state); - let result = ::substrate_executor::with_native_environment( - &mut ext, - move || runtime::Executive::apply_extrinsic(extrinsic), - ).map_err(Into::into); + ::substrate_executor::with_native_environment( + &mut ext, + move || runtime::Executive::apply_extrinsic(extrinsic), + ).map_err(Into::into) + }; match result { Ok(_) => { - ext.overlay.commit_prospective(); + self.changes.commit_prospective(); Ok(()) } Err(e) => { - ext.overlay.discard_prospective(); + self.changes.discard_prospective(); Err(e) } } @@ -344,10 +338,7 @@ impl BlockBuilder for ClientBlockBuilder } fn bake(mut self) -> Block { - let mut ext = state_machine::Ext { - overlay: &mut self.changes, - backend: &self.state, - }; + let mut ext = state_machine::Ext::new(&mut self.changes, &self.state); let final_header = ::substrate_executor::with_native_environment( &mut ext,