Trait sc_client_api::backend::StateBackend
source · [−]pub trait StateBackend<H>: Debug where
H: Hasher, {
type Error: Error;
type Transaction: Consolidate + Default + Send;
type TrieBackendStorage: TrieBackendStorage<H>;
Show 27 methods
fn storage(
&self,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, Self::Error>;
fn child_storage(
&self,
child_info: &ChildInfo,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, Self::Error>;
fn next_storage_key(
&self,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, Self::Error>;
fn next_child_storage_key(
&self,
child_info: &ChildInfo,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, Self::Error>;
fn apply_to_child_keys_while<F>(&self, child_info: &ChildInfo, f: F)
where
F: FnMut(&[u8]) -> bool;
fn for_key_values_with_prefix<F>(&self, prefix: &[u8], f: F)
where
F: FnMut(&[u8], &[u8]);
fn for_child_keys_with_prefix<F>(
&self,
child_info: &ChildInfo,
prefix: &[u8],
f: F
)
where
F: FnMut(&[u8]);
fn storage_root<'a>(
&self,
delta: impl Iterator<Item = (&'a [u8], Option<&'a [u8]>)>
) -> (<H as Hasher>::Out, Self::Transaction)
where
<H as Hasher>::Out: Ord;
fn child_storage_root<'a>(
&self,
child_info: &ChildInfo,
delta: impl Iterator<Item = (&'a [u8], Option<&'a [u8]>)>
) -> (<H as Hasher>::Out, bool, Self::Transaction)
where
<H as Hasher>::Out: Ord;
fn pairs(&self) -> Vec<(Vec<u8, Global>, Vec<u8, Global>), Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
;
fn register_overlay_stats(&mut self, _stats: &StateMachineStats);
fn usage_info(&self) -> UsageInfo;
fn storage_hash(
&self,
key: &[u8]
) -> Result<Option<<H as Hasher>::Out>, Self::Error> { ... }
fn child_storage_hash(
&self,
child_info: &ChildInfo,
key: &[u8]
) -> Result<Option<<H as Hasher>::Out>, Self::Error> { ... }
fn exists_storage(&self, key: &[u8]) -> Result<bool, Self::Error> { ... }
fn exists_child_storage(
&self,
child_info: &ChildInfo,
key: &[u8]
) -> Result<bool, Self::Error> { ... }
fn for_keys_with_prefix<F>(&self, prefix: &[u8], f: F)
where
F: FnMut(&[u8]),
{ ... }
fn keys(&self, prefix: &[u8]) -> Vec<Vec<u8, Global>, Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
{ ... }
fn child_keys(
&self,
child_info: &ChildInfo,
prefix: &[u8]
) -> Vec<Vec<u8, Global>, Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
{ ... }
fn as_trie_backend(
&mut self
) -> Option<&TrieBackend<Self::TrieBackendStorage, H>> { ... }
fn full_storage_root<'a>(
&self,
delta: impl Iterator<Item = (&'a [u8], Option<&'a [u8]>)>,
child_deltas: impl Iterator<Item = (&'a ChildInfo, impl Iterator<Item = (&'a [u8], Option<&'a [u8]>)>)>
) -> (<H as Hasher>::Out, Self::Transaction)
where
<H as Hasher>::Out: Ord,
<H as Hasher>::Out: Encode,
{ ... }
fn wipe(&self) -> Result<(), Self::Error> { ... }
fn commit(
&self,
<H as Hasher>::Out,
Self::Transaction,
Vec<(Vec<u8, Global>, Option<Vec<u8, Global>>), Global>,
Vec<(Vec<u8, Global>, Vec<(Vec<u8, Global>, Option<Vec<u8, Global>>), Global>), Global>
) -> Result<(), Self::Error> { ... }
fn read_write_count(&self) -> (u32, u32, u32, u32) { ... }
fn reset_read_write_count(&self) { ... }
fn get_whitelist(&self) -> Vec<TrackedStorageKey, Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
{ ... }
fn set_whitelist(&self, Vec<TrackedStorageKey, Global>) { ... }
}
Expand description
A state backend is used to read state data and can have changes committed to it.
The clone operation (if implemented) should be cheap.
Associated Types
type Transaction: Consolidate + Default + Send
type Transaction: Consolidate + Default + Send
Storage changes to be applied if committing
Type of trie backend storage.
Required methods
Get keyed storage or None if there is nothing associated.
Get keyed child storage or None if there is nothing associated.
Return the next key in storage in lexicographic order or None
if there is no value.
Return the next key in child storage in lexicographic order or None
if there is no value.
Retrieve all entries keys of child storage and call f
for each of those keys.
Aborts as soon as f
returns false.
Retrieve all entries keys and values of which start with the given prefix and
call f
for each of those keys.
Retrieve all child entries keys which start with the given prefix and
call f
for each of those keys.
Calculate the storage root, with given delta over what is already stored in the backend, and produce a “transaction” that can be used to commit. Does not include child storage updates.
Calculate the child storage root, with given delta over what is already stored in the backend, and produce a “transaction” that can be used to commit. The second argument is true if child storage root equals default storage root.
Get all key/value pairs into a Vec.
fn register_overlay_stats(&mut self, _stats: &StateMachineStats)
fn register_overlay_stats(&mut self, _stats: &StateMachineStats)
Register stats from overlay of state machine.
By default nothing is registered.
fn usage_info(&self) -> UsageInfo
fn usage_info(&self) -> UsageInfo
Query backend usage statistics (i/o, memory)
Not all implementations are expected to be able to do this. In the case when they don’t, empty statistics is returned.
Provided methods
Get keyed storage value hash or None if there is nothing associated.
Get child keyed storage value hash or None if there is nothing associated.
true if a key exists in storage.
true if a key exists in child storage.
Retrieve all entries keys which start with the given prefix and
call f
for each of those keys.
Get all keys with given prefix
Get all keys of child storage with given prefix
fn as_trie_backend(
&mut self
) -> Option<&TrieBackend<Self::TrieBackendStorage, H>>
fn as_trie_backend(
&mut self
) -> Option<&TrieBackend<Self::TrieBackendStorage, H>>
Try convert into trie backend.
Calculate the storage root, with given delta over what is already stored in the backend, and produce a “transaction” that can be used to commit. Does include child storage updates.
Commit given transaction to storage.
fn reset_read_write_count(&self)
fn reset_read_write_count(&self)
Get the read/write count of the db
Get the whitelist for tracking db reads/writes
fn set_whitelist(&self, Vec<TrackedStorageKey, Global>)
fn set_whitelist(&self, Vec<TrackedStorageKey, Global>)
Update the whitelist for tracking db reads/writes
Implementations on Foreign Types
sourceimpl<S, H> Backend<H> for TrieBackend<S, H> where
S: TrieBackendStorage<H>,
H: Hasher,
<H as Hasher>::Out: Ord,
<H as Hasher>::Out: Codec,
impl<S, H> Backend<H> for TrieBackend<S, H> where
S: TrieBackendStorage<H>,
H: Hasher,
<H as Hasher>::Out: Ord,
<H as Hasher>::Out: Codec,
type Error = String
type Transaction = <S as TrieBackendStorage<H>>::Overlay
type TrieBackendStorage = S
pub fn storage(
&self,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, <TrieBackend<S, H> as Backend<H>>::Error>
pub fn child_storage(
&self,
child_info: &ChildInfo,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, <TrieBackend<S, H> as Backend<H>>::Error>
pub fn next_storage_key(
&self,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, <TrieBackend<S, H> as Backend<H>>::Error>
pub fn next_child_storage_key(
&self,
child_info: &ChildInfo,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, <TrieBackend<S, H> as Backend<H>>::Error>
pub fn for_keys_with_prefix<F>(&self, prefix: &[u8], f: F) where
F: FnMut(&[u8]),
pub fn for_key_values_with_prefix<F>(&self, prefix: &[u8], f: F) where
F: FnMut(&[u8], &[u8]),
pub fn apply_to_child_keys_while<F>(&self, child_info: &ChildInfo, f: F) where
F: FnMut(&[u8]) -> bool,
pub fn for_child_keys_with_prefix<F>(
&self,
child_info: &ChildInfo,
prefix: &[u8],
f: F
) where
F: FnMut(&[u8]),
pub fn pairs(&self) -> Vec<(Vec<u8, Global>, Vec<u8, Global>), Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
A: Allocator,
pub fn keys(&self, prefix: &[u8]) -> Vec<Vec<u8, Global>, Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
A: Allocator,
pub fn storage_root<'a>(
&self,
delta: impl Iterator<Item = (&'a [u8], Option<&'a [u8]>)>
) -> (<H as Hasher>::Out, <TrieBackend<S, H> as Backend<H>>::Transaction) where
<H as Hasher>::Out: Ord,
pub fn child_storage_root<'a>(
&self,
child_info: &ChildInfo,
delta: impl Iterator<Item = (&'a [u8], Option<&'a [u8]>)>
) -> (<H as Hasher>::Out, bool, <TrieBackend<S, H> as Backend<H>>::Transaction) where
<H as Hasher>::Out: Ord,
pub fn as_trie_backend(
&mut self
) -> Option<&TrieBackend<<TrieBackend<S, H> as Backend<H>>::TrieBackendStorage, H>>
pub fn register_overlay_stats(&mut self, _stats: &StateMachineStats)
pub fn usage_info(&self) -> UsageInfo
pub fn wipe(&self) -> Result<(), <TrieBackend<S, H> as Backend<H>>::Error>
sourceimpl<'a, S, H> Backend<H> for ProvingBackend<'a, S, H> where
S: 'a + TrieBackendStorage<H>,
H: 'a + Hasher,
<H as Hasher>::Out: Ord,
<H as Hasher>::Out: Codec,
impl<'a, S, H> Backend<H> for ProvingBackend<'a, S, H> where
S: 'a + TrieBackendStorage<H>,
H: 'a + Hasher,
<H as Hasher>::Out: Ord,
<H as Hasher>::Out: Codec,
type Error = String
type Transaction = <S as TrieBackendStorage<H>>::Overlay
type TrieBackendStorage = S
pub fn storage(
&self,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, <ProvingBackend<'a, S, H> as Backend<H>>::Error>
pub fn child_storage(
&self,
child_info: &ChildInfo,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, <ProvingBackend<'a, S, H> as Backend<H>>::Error>
pub fn apply_to_child_keys_while<F>(&self, child_info: &ChildInfo, f: F) where
F: FnMut(&[u8]) -> bool,
pub fn next_storage_key(
&self,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, <ProvingBackend<'a, S, H> as Backend<H>>::Error>
pub fn next_child_storage_key(
&self,
child_info: &ChildInfo,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, <ProvingBackend<'a, S, H> as Backend<H>>::Error>
pub fn for_keys_with_prefix<F>(&self, prefix: &[u8], f: F) where
F: FnMut(&[u8]),
pub fn for_key_values_with_prefix<F>(&self, prefix: &[u8], f: F) where
F: FnMut(&[u8], &[u8]),
pub fn for_child_keys_with_prefix<F>(
&self,
child_info: &ChildInfo,
prefix: &[u8],
f: F
) where
F: FnMut(&[u8]),
pub fn pairs(&self) -> Vec<(Vec<u8, Global>, Vec<u8, Global>), Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
A: Allocator,
pub fn keys(&self, prefix: &[u8]) -> Vec<Vec<u8, Global>, Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
A: Allocator,
pub fn child_keys(
&self,
child_info: &ChildInfo,
prefix: &[u8]
) -> Vec<Vec<u8, Global>, Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
A: Allocator,
pub fn storage_root<'b>(
&self,
delta: impl Iterator<Item = (&'b [u8], Option<&'b [u8]>)>
) -> (<H as Hasher>::Out, <ProvingBackend<'a, S, H> as Backend<H>>::Transaction) where
<H as Hasher>::Out: Ord,
pub fn child_storage_root<'b>(
&self,
child_info: &ChildInfo,
delta: impl Iterator<Item = (&'b [u8], Option<&'b [u8]>)>
) -> (<H as Hasher>::Out, bool, <ProvingBackend<'a, S, H> as Backend<H>>::Transaction) where
<H as Hasher>::Out: Ord,
pub fn register_overlay_stats(&mut self, _stats: &StateMachineStats)
pub fn usage_info(&self) -> UsageInfo
sourceimpl<'a, T, H> Backend<H> for &'a T where
T: Backend<H>,
H: Hasher,
impl<'a, T, H> Backend<H> for &'a T where
T: Backend<H>,
H: Hasher,
type Error = <T as Backend<H>>::Error
type Transaction = <T as Backend<H>>::Transaction
type TrieBackendStorage = <T as Backend<H>>::TrieBackendStorage
pub fn storage(
&self,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, <&'a T as Backend<H>>::Error>
pub fn child_storage(
&self,
child_info: &ChildInfo,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, <&'a T as Backend<H>>::Error>
pub fn apply_to_child_keys_while<F>(&self, child_info: &ChildInfo, f: F) where
F: FnMut(&[u8]) -> bool,
pub fn next_storage_key(
&self,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, <&'a T as Backend<H>>::Error>
pub fn next_child_storage_key(
&self,
child_info: &ChildInfo,
key: &[u8]
) -> Result<Option<Vec<u8, Global>>, <&'a T as Backend<H>>::Error>
pub fn for_keys_with_prefix<F>(&self, prefix: &[u8], f: F) where
F: FnMut(&[u8]),
pub fn for_child_keys_with_prefix<F>(
&self,
child_info: &ChildInfo,
prefix: &[u8],
f: F
) where
F: FnMut(&[u8]),
pub fn storage_root<'b>(
&self,
delta: impl Iterator<Item = (&'b [u8], Option<&'b [u8]>)>
) -> (<H as Hasher>::Out, <&'a T as Backend<H>>::Transaction) where
<H as Hasher>::Out: Ord,
pub fn child_storage_root<'b>(
&self,
child_info: &ChildInfo,
delta: impl Iterator<Item = (&'b [u8], Option<&'b [u8]>)>
) -> (<H as Hasher>::Out, bool, <&'a T as Backend<H>>::Transaction) where
<H as Hasher>::Out: Ord,
pub fn pairs(&self) -> Vec<(Vec<u8, Global>, Vec<u8, Global>), Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
A: Allocator,