Trait sc_client_api::backend::Backend
source · pub trait Backend<Block: BlockT>: AuxStore + Send + Sync {
type BlockImportOperation: BlockImportOperation<Block, State = Self::State>;
type Blockchain: BlockchainBackend<Block>;
type State: StateBackend<HashFor<Block>> + Send + AsTrieBackend<HashFor<Block>, TrieBackendStorage = <Self::State as StateBackend<HashFor<Block>>>::TrieBackendStorage>;
type OffchainStorage: OffchainStorage;
Show 18 methods
// Required methods
fn begin_operation(&self) -> Result<Self::BlockImportOperation>;
fn begin_state_operation(
&self,
operation: &mut Self::BlockImportOperation,
block: Block::Hash
) -> Result<()>;
fn commit_operation(
&self,
transaction: Self::BlockImportOperation
) -> Result<()>;
fn finalize_block(
&self,
hash: Block::Hash,
justification: Option<Justification>
) -> Result<()>;
fn append_justification(
&self,
hash: Block::Hash,
justification: Justification
) -> Result<()>;
fn blockchain(&self) -> &Self::Blockchain;
fn usage_info(&self) -> Option<UsageInfo>;
fn offchain_storage(&self) -> Option<Self::OffchainStorage>;
fn pin_block(&self, hash: Block::Hash) -> Result<()>;
fn unpin_block(&self, hash: Block::Hash);
fn state_at(&self, hash: Block::Hash) -> Result<Self::State>;
fn revert(
&self,
n: NumberFor<Block>,
revert_finalized: bool
) -> Result<(NumberFor<Block>, HashSet<Block::Hash>)>;
fn remove_leaf_block(&self, hash: Block::Hash) -> Result<()>;
fn get_import_lock(&self) -> &RwLock<()>;
fn requires_full_sync(&self) -> bool;
// Provided methods
fn have_state_at(&self, hash: Block::Hash, _number: NumberFor<Block>) -> bool { ... }
fn insert_aux<'a, 'b: 'a, 'c: 'a, I: IntoIterator<Item = &'a (&'c [u8], &'c [u8])>, D: IntoIterator<Item = &'a &'b [u8]>>(
&self,
insert: I,
delete: D
) -> Result<()> { ... }
fn get_aux(&self, key: &[u8]) -> Result<Option<Vec<u8>>> { ... }
}
Expand description
Client backend.
Manages the data layer.
State Pruning
While an object from state_at
is alive, the state
should not be pruned. The backend should internally reference-count
its state objects.
The same applies for live BlockImportOperation
s: while an import operation building on a
parent P
is alive, the state for P
should not be pruned.
Block Pruning
Users can pin blocks in memory by calling pin_block
. When
a block would be pruned, its value is kept in an in-memory cache
until it is unpinned via unpin_block
.
While a block is pinned, its state is also preserved.
The backend should internally reference count the number of pin / unpin calls.
Required Associated Types§
sourcetype BlockImportOperation: BlockImportOperation<Block, State = Self::State>
type BlockImportOperation: BlockImportOperation<Block, State = Self::State>
Associated block insertion operation type.
sourcetype Blockchain: BlockchainBackend<Block>
type Blockchain: BlockchainBackend<Block>
Associated blockchain backend type.
sourcetype State: StateBackend<HashFor<Block>> + Send + AsTrieBackend<HashFor<Block>, TrieBackendStorage = <Self::State as StateBackend<HashFor<Block>>>::TrieBackendStorage>
type State: StateBackend<HashFor<Block>> + Send + AsTrieBackend<HashFor<Block>, TrieBackendStorage = <Self::State as StateBackend<HashFor<Block>>>::TrieBackendStorage>
Associated state backend type.
sourcetype OffchainStorage: OffchainStorage
type OffchainStorage: OffchainStorage
Offchain workers local storage.
Required Methods§
sourcefn begin_operation(&self) -> Result<Self::BlockImportOperation>
fn begin_operation(&self) -> Result<Self::BlockImportOperation>
Begin a new block insertion transaction with given parent block id.
When constructing the genesis, this is called with all-zero hash.
sourcefn begin_state_operation(
&self,
operation: &mut Self::BlockImportOperation,
block: Block::Hash
) -> Result<()>
fn begin_state_operation( &self, operation: &mut Self::BlockImportOperation, block: Block::Hash ) -> Result<()>
Note an operation to contain state transition.
sourcefn commit_operation(&self, transaction: Self::BlockImportOperation) -> Result<()>
fn commit_operation(&self, transaction: Self::BlockImportOperation) -> Result<()>
Commit block insertion.
sourcefn finalize_block(
&self,
hash: Block::Hash,
justification: Option<Justification>
) -> Result<()>
fn finalize_block( &self, hash: Block::Hash, justification: Option<Justification> ) -> Result<()>
Finalize block with given hash
.
This should only be called if the parent of the given block has been finalized.
sourcefn append_justification(
&self,
hash: Block::Hash,
justification: Justification
) -> Result<()>
fn append_justification( &self, hash: Block::Hash, justification: Justification ) -> Result<()>
Append justification to the block with the given hash
.
This should only be called for blocks that are already finalized.
sourcefn blockchain(&self) -> &Self::Blockchain
fn blockchain(&self) -> &Self::Blockchain
Returns reference to blockchain backend.
sourcefn usage_info(&self) -> Option<UsageInfo>
fn usage_info(&self) -> Option<UsageInfo>
Returns current usage statistics.
sourcefn offchain_storage(&self) -> Option<Self::OffchainStorage>
fn offchain_storage(&self) -> Option<Self::OffchainStorage>
Returns a handle to offchain storage.
sourcefn pin_block(&self, hash: Block::Hash) -> Result<()>
fn pin_block(&self, hash: Block::Hash) -> Result<()>
Pin the block to keep body, justification and state available after pruning.
Number of pins are reference counted. Users need to make sure to perform
one call to Self::unpin_block
per call to Self::pin_block
.
sourcefn unpin_block(&self, hash: Block::Hash)
fn unpin_block(&self, hash: Block::Hash)
Unpin the block to allow pruning.
sourcefn state_at(&self, hash: Block::Hash) -> Result<Self::State>
fn state_at(&self, hash: Block::Hash) -> Result<Self::State>
Returns state backend with post-state of given block.
sourcefn revert(
&self,
n: NumberFor<Block>,
revert_finalized: bool
) -> Result<(NumberFor<Block>, HashSet<Block::Hash>)>
fn revert( &self, n: NumberFor<Block>, revert_finalized: bool ) -> Result<(NumberFor<Block>, HashSet<Block::Hash>)>
Attempts to revert the chain by n
blocks. If revert_finalized
is set it will attempt to
revert past any finalized block, this is unsafe and can potentially leave the node in an
inconsistent state. All blocks higher than the best block are also reverted and not counting
towards n
.
Returns the number of blocks that were successfully reverted and the list of finalized blocks that has been reverted.
sourcefn remove_leaf_block(&self, hash: Block::Hash) -> Result<()>
fn remove_leaf_block(&self, hash: Block::Hash) -> Result<()>
Discard non-best, unfinalized leaf block.
sourcefn get_import_lock(&self) -> &RwLock<()>
fn get_import_lock(&self) -> &RwLock<()>
Gain access to the import lock around this backend.
Note Backend isn’t expected to acquire the lock by itself ever. Rather the using components should acquire and hold the lock whenever they do something that the import of a block would interfere with, e.g. importing a new block or calculating the best head.
sourcefn requires_full_sync(&self) -> bool
fn requires_full_sync(&self) -> bool
Tells whether the backend requires full-sync mode.
Provided Methods§
sourcefn have_state_at(&self, hash: Block::Hash, _number: NumberFor<Block>) -> bool
fn have_state_at(&self, hash: Block::Hash, _number: NumberFor<Block>) -> bool
Returns true if state for given block is available.
sourcefn insert_aux<'a, 'b: 'a, 'c: 'a, I: IntoIterator<Item = &'a (&'c [u8], &'c [u8])>, D: IntoIterator<Item = &'a &'b [u8]>>(
&self,
insert: I,
delete: D
) -> Result<()>
fn insert_aux<'a, 'b: 'a, 'c: 'a, I: IntoIterator<Item = &'a (&'c [u8], &'c [u8])>, D: IntoIterator<Item = &'a &'b [u8]>>( &self, insert: I, delete: D ) -> Result<()>
Insert auxiliary data into key-value store.