set aux in block import

This commit is contained in:
Robert Habermeier
2018-10-17 13:05:30 -07:00
parent c64ff78776
commit 3f2a7f3cba
4 changed files with 48 additions and 6 deletions
@@ -45,6 +45,7 @@ pub struct ImportOperation<Block: BlockT, S, F> {
header: Option<Block::Header>,
authorities: Option<Vec<AuthorityId>>,
leaf_state: NewBlockState,
aux_ops: Vec<(Vec<u8>, Option<Vec<u8>>)>,
_phantom: ::std::marker::PhantomData<(S, F)>,
}
@@ -86,6 +87,7 @@ impl<S, F, Block, H> ClientBackend<Block, H> for Backend<S, F> where
header: None,
authorities: None,
leaf_state: NewBlockState::Normal,
aux_ops: Vec::new(),
_phantom: Default::default(),
})
}
@@ -96,6 +98,7 @@ impl<S, F, Block, H> ClientBackend<Block, H> for Backend<S, F> where
header,
operation.authorities,
operation.leaf_state,
operation.aux_ops,
)
}
@@ -193,6 +196,13 @@ where
// we're not storing anything locally => ignore changes
Ok(())
}
fn set_aux<I>(&mut self, ops: I) -> ClientResult<()>
where I: IntoIterator<Item=(Vec<u8>, Option<Vec<u8>>)>
{
self.aux_ops = ops.into_iter().collect();
Ok(())
}
}
impl<Block, S, F, H> StateBackend<H> for OnDemandState<Block, S, F>
@@ -35,11 +35,15 @@ use light::fetcher::{Fetcher, RemoteHeaderRequest};
/// Light client blockchain storage.
pub trait Storage<Block: BlockT>: BlockchainHeaderBackend<Block> {
/// Store new header. Should refuse to revert any finalized blocks.
///
/// Takes new authorities, the leaf state of the new block, and
/// any auxiliary storage updates to place in the same operation.
fn import_header(
&self,
header: Block::Header,
authorities: Option<Vec<AuthorityId>>,
state: NewBlockState,
aux_ops: Vec<(Vec<u8>, Option<Vec<u8>>)>,
) -> ClientResult<()>;
/// Mark historic header as finalized.