mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 17:01:09 +00:00
Merge branch 'rh-grandpa-dynamic2' of github.com:paritytech/substrate
This commit is contained in:
@@ -274,6 +274,18 @@ pub struct BlockImportOperation<Block: BlockT, H: Hasher> {
|
||||
updates: MemoryDB<H>,
|
||||
changes_trie_updates: MemoryDB<H>,
|
||||
pending_block: Option<PendingBlock<Block>>,
|
||||
aux_ops: Vec<(Vec<u8>, Option<Vec<u8>>)>,
|
||||
}
|
||||
|
||||
impl<Block: BlockT, H: Hasher> BlockImportOperation<Block, H> {
|
||||
fn apply_aux(&mut self, transaction: &mut DBTransaction) {
|
||||
for (key, maybe_val) in self.aux_ops.drain(..) {
|
||||
match maybe_val {
|
||||
Some(val) => transaction.put_vec(columns::AUX, &key, val),
|
||||
None => transaction.delete(columns::AUX, &key),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<Block> client::backend::BlockImportOperation<Block, Blake2Hasher>
|
||||
@@ -345,6 +357,13 @@ where Block: BlockT<Hash=H256>,
|
||||
self.changes_trie_updates = update;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn set_aux<I>(&mut self, ops: I) -> Result<(), client::error::Error>
|
||||
where I: IntoIterator<Item=(Vec<u8>, Option<Vec<u8>>)>
|
||||
{
|
||||
self.aux_ops = ops.into_iter().collect();
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
struct StorageDb<Block: BlockT> {
|
||||
@@ -636,6 +655,7 @@ impl<Block> client::backend::Backend<Block, Blake2Hasher> for Backend<Block> whe
|
||||
old_state: state,
|
||||
updates: MemoryDB::default(),
|
||||
changes_trie_updates: MemoryDB::default(),
|
||||
aux_ops: Vec::new(),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -643,6 +663,7 @@ impl<Block> client::backend::Backend<Block, Blake2Hasher> for Backend<Block> whe
|
||||
-> Result<(), client::error::Error>
|
||||
{
|
||||
let mut transaction = DBTransaction::new();
|
||||
operation.apply_aux(&mut transaction);
|
||||
|
||||
if let Some(pending_block) = operation.pending_block {
|
||||
let hash = pending_block.header.hash();
|
||||
|
||||
@@ -43,6 +43,7 @@ pub(crate) mod columns {
|
||||
pub const HEADER: Option<u32> = Some(2);
|
||||
pub const CACHE: Option<u32> = Some(3);
|
||||
pub const CHT: Option<u32> = Some(4);
|
||||
pub const AUX: Option<u32> = Some(5);
|
||||
}
|
||||
|
||||
/// Prefix for headers CHT.
|
||||
@@ -285,6 +286,7 @@ impl<Block> LightBlockchainStorage<Block> for LightStorage<Block>
|
||||
header: Block::Header,
|
||||
authorities: Option<Vec<AuthorityId>>,
|
||||
leaf_state: NewBlockState,
|
||||
aux_ops: Vec<(Vec<u8>, Option<Vec<u8>>)>,
|
||||
) -> ClientResult<()> {
|
||||
let mut transaction = DBTransaction::new();
|
||||
|
||||
@@ -300,6 +302,13 @@ impl<Block> LightBlockchainStorage<Block> for LightStorage<Block>
|
||||
::utils::number_and_hash_to_lookup_key(number, hash)
|
||||
};
|
||||
|
||||
for (key, maybe_val) in aux_ops {
|
||||
match maybe_val {
|
||||
Some(val) => transaction.put_vec(columns::AUX, &key, val),
|
||||
None => transaction.delete(columns::AUX, &key),
|
||||
}
|
||||
}
|
||||
|
||||
if leaf_state.is_best() {
|
||||
// handle reorg.
|
||||
{
|
||||
@@ -471,16 +480,17 @@ pub(crate) mod tests {
|
||||
}
|
||||
}
|
||||
|
||||
fn header_with_changes_trie(parent: &Hash, number: u64) -> Header {
|
||||
let mut header = default_header(parent, number);
|
||||
header.digest.logs.push(DigestItem::ChangesTrieRoot([(number % 256) as u8; 32].into()));
|
||||
header
|
||||
}
|
||||
|
||||
fn header_with_extrinsics_root(parent: &Hash, number: u64, extrinsics_root: Hash) -> Header {
|
||||
let mut header = default_header(parent, number);
|
||||
header.extrinsics_root = extrinsics_root;
|
||||
header
|
||||
pub fn insert_block_with_extrinsics_root(
|
||||
db: &LightStorage<Block>,
|
||||
parent: &Hash,
|
||||
number: u64,
|
||||
authorities: Option<Vec<AuthorityId>>,
|
||||
extrinsics_root: Hash,
|
||||
) -> Hash {
|
||||
let header = prepare_header(parent, number, extrinsics_root);
|
||||
let hash = header.hash();
|
||||
db.import_header(header, authorities, NewBlockState::Best, Vec::new()).unwrap();
|
||||
hash
|
||||
}
|
||||
|
||||
pub fn insert_block<F: Fn() -> Header>(
|
||||
@@ -490,7 +500,7 @@ pub(crate) mod tests {
|
||||
) -> Hash {
|
||||
let header = header();
|
||||
let hash = header.hash();
|
||||
db.import_header(header, authorities, NewBlockState::Best).unwrap();
|
||||
db.import_header(header, authorities, NewBlockState::Best, Vec::new()).unwrap();
|
||||
hash
|
||||
}
|
||||
|
||||
@@ -501,7 +511,7 @@ pub(crate) mod tests {
|
||||
) -> Hash {
|
||||
let header = header();
|
||||
let hash = header.hash();
|
||||
db.import_header(header, authorities, NewBlockState::Final).unwrap();
|
||||
db.import_header(header, authorities, NewBlockState::Final, Vec::new()).unwrap();
|
||||
hash
|
||||
}
|
||||
|
||||
@@ -512,7 +522,7 @@ pub(crate) mod tests {
|
||||
) -> Hash {
|
||||
let header = header();
|
||||
let hash = header.hash();
|
||||
db.import_header(header, authorities, NewBlockState::Normal).unwrap();
|
||||
db.import_header(header, authorities, NewBlockState::Normal, Vec::new()).unwrap();
|
||||
hash
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user