mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 20:27:58 +00:00
BlockId removal: refactor: Backend::state_at (#12488)
* Minor naming improved * BlockId removal refactor: Backend::state_at * formatting
This commit is contained in:
committed by
GitHub
parent
dcd56b1ffd
commit
532dd5ecc2
@@ -1963,10 +1963,11 @@ impl<Block: BlockT> sc_client_api::backend::Backend<Block> for Backend<Block> {
|
||||
operation: &mut Self::BlockImportOperation,
|
||||
block: BlockId<Block>,
|
||||
) -> ClientResult<()> {
|
||||
let hash = self.blockchain.expect_block_hash_from_id(&block)?;
|
||||
if block.is_pre_genesis() {
|
||||
operation.old_state = self.empty_state()?;
|
||||
} else {
|
||||
operation.old_state = self.state_at(block)?;
|
||||
operation.old_state = self.state_at(&hash)?;
|
||||
}
|
||||
|
||||
operation.commit_state = true;
|
||||
@@ -2302,15 +2303,8 @@ impl<Block: BlockT> sc_client_api::backend::Backend<Block> for Backend<Block> {
|
||||
&self.blockchain
|
||||
}
|
||||
|
||||
fn state_at(&self, block: BlockId<Block>) -> ClientResult<Self::State> {
|
||||
use sc_client_api::blockchain::HeaderBackend as BcHeaderBackend;
|
||||
|
||||
let is_genesis = match &block {
|
||||
BlockId::Number(n) if n.is_zero() => true,
|
||||
BlockId::Hash(h) if h == &self.blockchain.meta.read().genesis_hash => true,
|
||||
_ => false,
|
||||
};
|
||||
if is_genesis {
|
||||
fn state_at(&self, hash: &Block::Hash) -> ClientResult<Self::State> {
|
||||
if hash == &self.blockchain.meta.read().genesis_hash {
|
||||
if let Some(genesis_state) = &*self.genesis_state.read() {
|
||||
let root = genesis_state.root;
|
||||
let db_state = DbStateBuilder::<Block>::new(genesis_state.clone(), root)
|
||||
@@ -2322,14 +2316,7 @@ impl<Block: BlockT> sc_client_api::backend::Backend<Block> for Backend<Block> {
|
||||
}
|
||||
}
|
||||
|
||||
let hash = match block {
|
||||
BlockId::Hash(h) => h,
|
||||
BlockId::Number(n) => self.blockchain.hash(n)?.ok_or_else(|| {
|
||||
sp_blockchain::Error::UnknownBlock(format!("Unknown block number {}", n))
|
||||
})?,
|
||||
};
|
||||
|
||||
match self.blockchain.header_metadata(hash) {
|
||||
match self.blockchain.header_metadata(*hash) {
|
||||
Ok(ref hdr) => {
|
||||
let hint = || {
|
||||
sc_state_db::NodeDb::get(self.storage.as_ref(), hdr.state_root.as_ref())
|
||||
@@ -2337,7 +2324,7 @@ impl<Block: BlockT> sc_client_api::backend::Backend<Block> for Backend<Block> {
|
||||
.is_some()
|
||||
};
|
||||
if let Ok(()) =
|
||||
self.storage.state_db.pin(&hash, hdr.number.saturated_into::<u64>(), hint)
|
||||
self.storage.state_db.pin(hash, hdr.number.saturated_into::<u64>(), hint)
|
||||
{
|
||||
let root = hdr.state_root;
|
||||
let db_state = DbStateBuilder::<Block>::new(self.storage.clone(), root)
|
||||
@@ -2345,12 +2332,12 @@ impl<Block: BlockT> sc_client_api::backend::Backend<Block> for Backend<Block> {
|
||||
self.shared_trie_cache.as_ref().map(|c| c.local_cache()),
|
||||
)
|
||||
.build();
|
||||
let state = RefTrackingState::new(db_state, self.storage.clone(), Some(hash));
|
||||
Ok(RecordStatsState::new(state, Some(hash), self.state_usage.clone()))
|
||||
let state = RefTrackingState::new(db_state, self.storage.clone(), Some(*hash));
|
||||
Ok(RecordStatsState::new(state, Some(*hash), self.state_usage.clone()))
|
||||
} else {
|
||||
Err(sp_blockchain::Error::UnknownBlock(format!(
|
||||
"State already discarded for {:?}",
|
||||
block
|
||||
hash
|
||||
)))
|
||||
}
|
||||
},
|
||||
@@ -2588,7 +2575,7 @@ pub(crate) mod tests {
|
||||
|
||||
db.commit_operation(op).unwrap();
|
||||
|
||||
let state = db.state_at(BlockId::Number(0)).unwrap();
|
||||
let state = db.state_at(&hash).unwrap();
|
||||
|
||||
assert_eq!(state.storage(&[1, 3, 5]).unwrap(), Some(vec![2, 4, 6]));
|
||||
assert_eq!(state.storage(&[1, 2, 3]).unwrap(), Some(vec![9, 9, 9]));
|
||||
@@ -2623,7 +2610,8 @@ pub(crate) mod tests {
|
||||
|
||||
db.commit_operation(op).unwrap();
|
||||
|
||||
let state = db.state_at(BlockId::Number(1)).unwrap();
|
||||
let hash = db.blockchain().expect_block_hash_from_id(&BlockId::Number(1)).unwrap();
|
||||
let state = db.state_at(&hash).unwrap();
|
||||
|
||||
assert_eq!(state.storage(&[1, 3, 5]).unwrap(), None);
|
||||
assert_eq!(state.storage(&[1, 2, 3]).unwrap(), Some(vec![9, 9, 9]));
|
||||
@@ -3139,11 +3127,7 @@ pub(crate) mod tests {
|
||||
hash
|
||||
};
|
||||
|
||||
let block0_hash = backend
|
||||
.state_at(BlockId::Hash(hash0))
|
||||
.unwrap()
|
||||
.storage_hash(&b"test"[..])
|
||||
.unwrap();
|
||||
let block0_hash = backend.state_at(&hash0).unwrap().storage_hash(&b"test"[..]).unwrap();
|
||||
|
||||
let hash1 = {
|
||||
let mut op = backend.begin_operation().unwrap();
|
||||
@@ -3182,11 +3166,7 @@ pub(crate) mod tests {
|
||||
backend.commit_operation(op).unwrap();
|
||||
}
|
||||
|
||||
let block1_hash = backend
|
||||
.state_at(BlockId::Hash(hash1))
|
||||
.unwrap()
|
||||
.storage_hash(&b"test"[..])
|
||||
.unwrap();
|
||||
let block1_hash = backend.state_at(&hash1).unwrap().storage_hash(&b"test"[..]).unwrap();
|
||||
|
||||
assert_ne!(block0_hash, block1_hash);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user