pub type Client = Client<Backend, Executor, Block, RuntimeApi>;
Expand description
Test client type with LocalExecutor
and generic Backend.
Aliased Type§
struct Client { /* private fields */ }
Implementations
Source§impl<B, E, Block, RA> Client<B, E, Block, RA>
impl<B, E, Block, RA> Client<B, E, Block, RA>
Sourcepub fn new<G>(
backend: Arc<B>,
executor: E,
spawn_handle: Box<dyn SpawnNamed>,
genesis_block_builder: G,
fork_blocks: Option<Vec<(<<Block as Block>::Header as Header>::Number, <Block as Block>::Hash)>>,
bad_blocks: Option<HashSet<<Block as Block>::Hash>>,
prometheus_registry: Option<Registry>,
telemetry: Option<TelemetryHandle>,
config: ClientConfig<Block>,
) -> Result<Client<B, E, Block, RA>, Error>where
G: BuildGenesisBlock<Block, BlockImportOperation = <B as Backend<Block>>::BlockImportOperation>,
E: Clone,
B: 'static,
pub fn new<G>(
backend: Arc<B>,
executor: E,
spawn_handle: Box<dyn SpawnNamed>,
genesis_block_builder: G,
fork_blocks: Option<Vec<(<<Block as Block>::Header as Header>::Number, <Block as Block>::Hash)>>,
bad_blocks: Option<HashSet<<Block as Block>::Hash>>,
prometheus_registry: Option<Registry>,
telemetry: Option<TelemetryHandle>,
config: ClientConfig<Block>,
) -> Result<Client<B, E, Block, RA>, Error>where
G: BuildGenesisBlock<Block, BlockImportOperation = <B as Backend<Block>>::BlockImportOperation>,
E: Clone,
B: 'static,
Creates new Substrate Client with given blockchain and code executor.
Sourcepub fn import_notification_sinks(
&self,
) -> &Mutex<RawMutex, Vec<TracingUnboundedSender<BlockImportNotification<Block>>>>
pub fn import_notification_sinks( &self, ) -> &Mutex<RawMutex, Vec<TracingUnboundedSender<BlockImportNotification<Block>>>>
returns a reference to the block import notification sinks useful for test environments.
Sourcepub fn finality_notification_sinks(
&self,
) -> &Mutex<RawMutex, Vec<TracingUnboundedSender<FinalityNotification<Block>>>>
pub fn finality_notification_sinks( &self, ) -> &Mutex<RawMutex, Vec<TracingUnboundedSender<FinalityNotification<Block>>>>
returns a reference to the finality notification sinks useful for test environments.
Sourcepub fn state_at(
&self,
hash: <Block as Block>::Hash,
) -> Result<<B as Backend<Block>>::State, Error>
pub fn state_at( &self, hash: <Block as Block>::Hash, ) -> Result<<B as Backend<Block>>::State, Error>
Get a reference to the state at a given block.
Sourcepub fn code_at(&self, hash: <Block as Block>::Hash) -> Result<Vec<u8>, Error>
pub fn code_at(&self, hash: <Block as Block>::Hash) -> Result<Vec<u8>, Error>
Get the code at a given block.
This takes any potential substitutes into account, but ignores overrides.
Sourcepub fn runtime_version_at(
&self,
hash: <Block as Block>::Hash,
) -> Result<RuntimeVersion, Error>
pub fn runtime_version_at( &self, hash: <Block as Block>::Hash, ) -> Result<RuntimeVersion, Error>
Get the RuntimeVersion at a given block.
Sourcepub fn revert(
&self,
n: <<Block as Block>::Header as Header>::Number,
) -> Result<<<Block as Block>::Header as Header>::Number, Error>
pub fn revert( &self, n: <<Block as Block>::Header as Header>::Number, ) -> Result<<<Block as Block>::Header as Header>::Number, Error>
Attempts to revert the chain by n
blocks guaranteeing that no block is
reverted past the last finalized block. Returns the number of blocks
that were successfully reverted.
Sourcepub fn unsafe_revert(
&mut self,
n: <<Block as Block>::Header as Header>::Number,
blacklist: bool,
) -> Result<<<Block as Block>::Header as Header>::Number, Error>
pub fn unsafe_revert( &mut self, n: <<Block as Block>::Header as Header>::Number, blacklist: bool, ) -> Result<<<Block as Block>::Header as Header>::Number, Error>
Attempts to revert the chain by n
blocks disregarding finality. This method will revert
any finalized blocks as requested and can potentially leave the node in an inconsistent
state. Other modules in the system that persist data and that rely on finality
(e.g. consensus parts) will be unaffected by the revert. Use this method with caution and
making sure that no other data needs to be reverted for consistency aside from the block
data. If blacklist
is set to true, will also blacklist reverted blocks from finalizing
again. The blacklist is reset upon client restart.
Returns the number of blocks that were successfully reverted.
Sourcepub fn chain_info(&self) -> Info<Block>
pub fn chain_info(&self) -> Info<Block>
Get blockchain info.
Sourcepub fn block_status(
&self,
hash: <Block as Block>::Hash,
) -> Result<BlockStatus, Error>
pub fn block_status( &self, hash: <Block as Block>::Hash, ) -> Result<BlockStatus, Error>
Get block status.
Sourcepub fn header(
&self,
hash: <Block as Block>::Hash,
) -> Result<Option<<Block as Block>::Header>, Error>
pub fn header( &self, hash: <Block as Block>::Hash, ) -> Result<Option<<Block as Block>::Header>, Error>
Get block header by id.
Trait Implementations§
Source§impl InitBlockBuilder for Client
impl InitBlockBuilder for Client
Source§fn init_block_builder(
&self,
validation_data: Option<PersistedValidationData<PHash, PBlockNumber>>,
relay_sproof_builder: RelayStateSproofBuilder,
) -> BlockBuilderAndSupportData<'_>
fn init_block_builder( &self, validation_data: Option<PersistedValidationData<PHash, PBlockNumber>>, relay_sproof_builder: RelayStateSproofBuilder, ) -> BlockBuilderAndSupportData<'_>
Source§fn init_block_builder_at(
&self,
at: Hash,
validation_data: Option<PersistedValidationData<PHash, PBlockNumber>>,
relay_sproof_builder: RelayStateSproofBuilder,
) -> BlockBuilderAndSupportData<'_>
fn init_block_builder_at( &self, at: Hash, validation_data: Option<PersistedValidationData<PHash, PBlockNumber>>, relay_sproof_builder: RelayStateSproofBuilder, ) -> BlockBuilderAndSupportData<'_>
Source§fn init_block_builder_with_timestamp(
&self,
at: Hash,
validation_data: Option<PersistedValidationData<PHash, PBlockNumber>>,
relay_sproof_builder: RelayStateSproofBuilder,
timestamp: u64,
) -> BlockBuilderAndSupportData<'_>
fn init_block_builder_with_timestamp( &self, at: Hash, validation_data: Option<PersistedValidationData<PHash, PBlockNumber>>, relay_sproof_builder: RelayStateSproofBuilder, timestamp: u64, ) -> BlockBuilderAndSupportData<'_>
Source§impl<B, E, Block, RA> AuxStore for Client<B, E, Block, RA>where
B: Backend<Block>,
E: CallExecutor<Block>,
Block: Block,
Client<B, E, Block, RA>: ProvideRuntimeApi<Block>,
<Client<B, E, Block, RA> as ProvideRuntimeApi<Block>>::Api: Core<Block>,
impl<B, E, Block, RA> AuxStore for Client<B, E, Block, RA>where
B: Backend<Block>,
E: CallExecutor<Block>,
Block: Block,
Client<B, E, Block, RA>: ProvideRuntimeApi<Block>,
<Client<B, E, Block, RA> as ProvideRuntimeApi<Block>>::Api: Core<Block>,
Source§fn insert_aux<'a, 'b, 'c, I, D>(
&self,
insert: I,
delete: D,
) -> Result<(), Error>where
'b: 'a,
'c: 'a,
I: IntoIterator<Item = &'a (&'c [u8], &'c [u8])>,
D: IntoIterator<Item = &'a &'b [u8]>,
fn insert_aux<'a, 'b, 'c, I, D>(
&self,
insert: I,
delete: D,
) -> Result<(), Error>where
'b: 'a,
'c: 'a,
I: IntoIterator<Item = &'a (&'c [u8], &'c [u8])>,
D: IntoIterator<Item = &'a &'b [u8]>,
Insert auxiliary data into key-value store.
Source§impl<B, E, Block, RA> BlockBackend<Block> for Client<B, E, Block, RA>
impl<B, E, Block, RA> BlockBackend<Block> for Client<B, E, Block, RA>
Source§fn block_body(
&self,
hash: <Block as Block>::Hash,
) -> Result<Option<Vec<<Block as Block>::Extrinsic>>, Error>
fn block_body( &self, hash: <Block as Block>::Hash, ) -> Result<Option<Vec<<Block as Block>::Extrinsic>>, Error>
None
if the body is not stored.Source§fn block(
&self,
hash: <Block as Block>::Hash,
) -> Result<Option<SignedBlock<Block>>, Error>
fn block( &self, hash: <Block as Block>::Hash, ) -> Result<Option<SignedBlock<Block>>, Error>
Source§fn block_status(
&self,
hash: <Block as Block>::Hash,
) -> Result<BlockStatus, Error>
fn block_status( &self, hash: <Block as Block>::Hash, ) -> Result<BlockStatus, Error>
Source§fn justifications(
&self,
hash: <Block as Block>::Hash,
) -> Result<Option<Justifications>, Error>
fn justifications( &self, hash: <Block as Block>::Hash, ) -> Result<Option<Justifications>, Error>
Source§fn block_hash(
&self,
number: <<Block as Block>::Header as Header>::Number,
) -> Result<Option<<Block as Block>::Hash>, Error>
fn block_hash( &self, number: <<Block as Block>::Header as Header>::Number, ) -> Result<Option<<Block as Block>::Hash>, Error>
Source§fn indexed_transaction(
&self,
hash: <Block as Block>::Hash,
) -> Result<Option<Vec<u8>>, Error>
fn indexed_transaction( &self, hash: <Block as Block>::Hash, ) -> Result<Option<Vec<u8>>, Error>
Source§fn has_indexed_transaction(
&self,
hash: <Block as Block>::Hash,
) -> Result<bool, Error>
fn has_indexed_transaction( &self, hash: <Block as Block>::Hash, ) -> Result<bool, Error>
Source§fn block_indexed_body(
&self,
hash: <Block as Block>::Hash,
) -> Result<Option<Vec<Vec<u8>>>, Error>
fn block_indexed_body( &self, hash: <Block as Block>::Hash, ) -> Result<Option<Vec<Vec<u8>>>, Error>
Source§fn requires_full_sync(&self) -> bool
fn requires_full_sync(&self) -> bool
Source§impl<B, E, Block, RA> BlockIdTo<Block> for Client<B, E, Block, RA>
impl<B, E, Block, RA> BlockIdTo<Block> for Client<B, E, Block, RA>
Source§impl<B, E, Block, RA> BlockImport<Block> for Client<B, E, Block, RA>where
B: Backend<Block>,
E: CallExecutor<Block> + Send + Sync,
Block: Block,
Client<B, E, Block, RA>: ProvideRuntimeApi<Block>,
<Client<B, E, Block, RA> as ProvideRuntimeApi<Block>>::Api: Core<Block> + ApiExt<Block>,
RA: Sync + Send,
impl<B, E, Block, RA> BlockImport<Block> for Client<B, E, Block, RA>where
B: Backend<Block>,
E: CallExecutor<Block> + Send + Sync,
Block: Block,
Client<B, E, Block, RA>: ProvideRuntimeApi<Block>,
<Client<B, E, Block, RA> as ProvideRuntimeApi<Block>>::Api: Core<Block> + ApiExt<Block>,
RA: Sync + Send,
Source§fn check_block<'life0, 'async_trait>(
&'life0 self,
block: BlockCheckParams<Block>,
) -> Pin<Box<dyn Future<Output = Result<ImportResult, <Client<B, E, Block, RA> as BlockImport<Block>>::Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
Client<B, E, Block, RA>: 'async_trait,
fn check_block<'life0, 'async_trait>(
&'life0 self,
block: BlockCheckParams<Block>,
) -> Pin<Box<dyn Future<Output = Result<ImportResult, <Client<B, E, Block, RA> as BlockImport<Block>>::Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
Client<B, E, Block, RA>: 'async_trait,
Source§fn import_block<'life0, 'async_trait>(
&'life0 self,
import_block: BlockImportParams<Block>,
) -> Pin<Box<dyn Future<Output = Result<ImportResult, <Client<B, E, Block, RA> as BlockImport<Block>>::Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
Client<B, E, Block, RA>: 'async_trait,
fn import_block<'life0, 'async_trait>(
&'life0 self,
import_block: BlockImportParams<Block>,
) -> Pin<Box<dyn Future<Output = Result<ImportResult, <Client<B, E, Block, RA> as BlockImport<Block>>::Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
Client<B, E, Block, RA>: 'async_trait,
Source§impl<B, E, Block, RA> BlockchainEvents<Block> for Client<B, E, Block, RA>where
E: CallExecutor<Block>,
Block: Block,
impl<B, E, Block, RA> BlockchainEvents<Block> for Client<B, E, Block, RA>where
E: CallExecutor<Block>,
Block: Block,
Source§fn import_notification_stream(
&self,
) -> TracingUnboundedReceiver<BlockImportNotification<Block>>
fn import_notification_stream( &self, ) -> TracingUnboundedReceiver<BlockImportNotification<Block>>
Get block import event stream.
Source§fn storage_changes_notification_stream(
&self,
filter_keys: Option<&[StorageKey]>,
child_filter_keys: Option<&[(StorageKey, Option<Vec<StorageKey>>)]>,
) -> Result<StorageEventStream<<Block as Block>::Hash>, Error>
fn storage_changes_notification_stream( &self, filter_keys: Option<&[StorageKey]>, child_filter_keys: Option<&[(StorageKey, Option<Vec<StorageKey>>)]>, ) -> Result<StorageEventStream<<Block as Block>::Hash>, Error>
Get storage changes event stream.
Source§fn every_import_notification_stream(
&self,
) -> TracingUnboundedReceiver<BlockImportNotification<Block>>
fn every_import_notification_stream( &self, ) -> TracingUnboundedReceiver<BlockImportNotification<Block>>
Source§fn finality_notification_stream(
&self,
) -> TracingUnboundedReceiver<FinalityNotification<Block>>
fn finality_notification_stream( &self, ) -> TracingUnboundedReceiver<FinalityNotification<Block>>
Source§impl<B, E, Block, RA> CallApiAt<Block> for Client<B, E, Block, RA>
impl<B, E, Block, RA> CallApiAt<Block> for Client<B, E, Block, RA>
Source§type StateBackend = <B as Backend<Block>>::State
type StateBackend = <B as Backend<Block>>::State
Source§fn call_api_at(
&self,
params: CallApiAtParams<'_, Block>,
) -> Result<Vec<u8>, ApiError>
fn call_api_at( &self, params: CallApiAtParams<'_, Block>, ) -> Result<Vec<u8>, ApiError>
Source§fn runtime_version_at(
&self,
hash: <Block as Block>::Hash,
) -> Result<RuntimeVersion, ApiError>
fn runtime_version_at( &self, hash: <Block as Block>::Hash, ) -> Result<RuntimeVersion, ApiError>
Source§fn state_at(
&self,
at: <Block as Block>::Hash,
) -> Result<<Client<B, E, Block, RA> as CallApiAt<Block>>::StateBackend, ApiError>
fn state_at( &self, at: <Block as Block>::Hash, ) -> Result<<Client<B, E, Block, RA> as CallApiAt<Block>>::StateBackend, ApiError>
at
the given block.Source§fn initialize_extensions(
&self,
at: <Block as Block>::Hash,
extensions: &mut Extensions,
) -> Result<(), ApiError>
fn initialize_extensions( &self, at: <Block as Block>::Hash, extensions: &mut Extensions, ) -> Result<(), ApiError>
extensions
for the given block at
by using the global extensions factory.Source§impl<BE, E, B, RA> Chain<B> for Client<BE, E, B, RA>
impl<BE, E, B, RA> Chain<B> for Client<BE, E, B, RA>
Source§fn block_status(
&self,
hash: <B as Block>::Hash,
) -> Result<BlockStatus, Box<dyn Error + Send>>
fn block_status( &self, hash: <B as Block>::Hash, ) -> Result<BlockStatus, Box<dyn Error + Send>>
Block::Hash
.Source§impl<B, E, RA, Block> ClientBlockImportExt<Block> for Client<B, E, Block, RA>
impl<B, E, RA, Block> ClientBlockImportExt<Block> for Client<B, E, Block, RA>
Source§fn import<'life0, 'async_trait>(
&'life0 self,
origin: BlockOrigin,
block: Block,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
Client<B, E, Block, RA>: 'async_trait,
fn import<'life0, 'async_trait>(
&'life0 self,
origin: BlockOrigin,
block: Block,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
Client<B, E, Block, RA>: 'async_trait,
Source§fn import_as_best<'life0, 'async_trait>(
&'life0 self,
origin: BlockOrigin,
block: Block,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
Client<B, E, Block, RA>: 'async_trait,
fn import_as_best<'life0, 'async_trait>(
&'life0 self,
origin: BlockOrigin,
block: Block,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
Client<B, E, Block, RA>: 'async_trait,
Source§fn import_as_final<'life0, 'async_trait>(
&'life0 self,
origin: BlockOrigin,
block: Block,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
Client<B, E, Block, RA>: 'async_trait,
fn import_as_final<'life0, 'async_trait>(
&'life0 self,
origin: BlockOrigin,
block: Block,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
Client<B, E, Block, RA>: 'async_trait,
Source§fn import_justified<'life0, 'async_trait>(
&'life0 self,
origin: BlockOrigin,
block: Block,
justifications: Justifications,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
Client<B, E, Block, RA>: 'async_trait,
fn import_justified<'life0, 'async_trait>(
&'life0 self,
origin: BlockOrigin,
block: Block,
justifications: Justifications,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
Client<B, E, Block, RA>: 'async_trait,
Source§impl<B, E, RA, Block> ClientExt<Block> for Client<B, E, Block, RA>where
B: Backend<Block>,
E: CallExecutor<Block> + RuntimeVersionOf + 'static,
Client<B, E, Block, RA>: BlockImport<Block, Error = Error>,
Block: Block,
impl<B, E, RA, Block> ClientExt<Block> for Client<B, E, Block, RA>where
B: Backend<Block>,
E: CallExecutor<Block> + RuntimeVersionOf + 'static,
Client<B, E, Block, RA>: BlockImport<Block, Error = Error>,
Block: Block,
Source§impl<B, E, Block, RA> ExecutorProvider<Block> for Client<B, E, Block, RA>
impl<B, E, Block, RA> ExecutorProvider<Block> for Client<B, E, Block, RA>
Source§fn executor(
&self,
) -> &<Client<B, E, Block, RA> as ExecutorProvider<Block>>::Executor
fn executor( &self, ) -> &<Client<B, E, Block, RA> as ExecutorProvider<Block>>::Executor
Source§fn execution_extensions(&self) -> &ExecutionExtensions<Block>
fn execution_extensions(&self) -> &ExecutionExtensions<Block>
Source§impl<B, E, Block, RA> Finalizer<Block, B> for Client<B, E, Block, RA>
impl<B, E, Block, RA> Finalizer<Block, B> for Client<B, E, Block, RA>
Source§impl<B, E, Block, RA> HeaderBackend<Block> for Client<B, E, Block, RA>
impl<B, E, Block, RA> HeaderBackend<Block> for Client<B, E, Block, RA>
Source§fn header(
&self,
hash: <Block as Block>::Hash,
) -> Result<Option<<Block as Block>::Header>, Error>
fn header( &self, hash: <Block as Block>::Hash, ) -> Result<Option<<Block as Block>::Header>, Error>
None
if block is not found.Source§fn status(&self, hash: <Block as Block>::Hash) -> Result<BlockStatus, Error>
fn status(&self, hash: <Block as Block>::Hash) -> Result<BlockStatus, Error>
Source§fn number(
&self,
hash: <Block as Block>::Hash,
) -> Result<Option<<<Block as Block>::Header as Header>::Number>, Error>
fn number( &self, hash: <Block as Block>::Hash, ) -> Result<Option<<<Block as Block>::Header as Header>::Number>, Error>
None
if the header is not in the chain.Source§fn hash(
&self,
number: <<Block as Block>::Header as Header>::Number,
) -> Result<Option<<Block as Block>::Hash>, Error>
fn hash( &self, number: <<Block as Block>::Header as Header>::Number, ) -> Result<Option<<Block as Block>::Hash>, Error>
None
if the header is not in the chain.Source§fn block_hash_from_id(
&self,
id: &BlockId<Block>,
) -> Result<Option<<Block as Block>::Hash>, Error>
fn block_hash_from_id( &self, id: &BlockId<Block>, ) -> Result<Option<<Block as Block>::Hash>, Error>
Source§fn block_number_from_id(
&self,
id: &BlockId<Block>,
) -> Result<Option<<<Block as Block>::Header as Header>::Number>, Error>
fn block_number_from_id( &self, id: &BlockId<Block>, ) -> Result<Option<<<Block as Block>::Header as Header>::Number>, Error>
Source§fn expect_header(
&self,
hash: <Block as Block>::Hash,
) -> Result<<Block as Block>::Header, Error>
fn expect_header( &self, hash: <Block as Block>::Hash, ) -> Result<<Block as Block>::Header, Error>
UnknownBlock
error if block is not found.Source§impl<B, E, Block, RA> HeaderMetadata<Block> for Client<B, E, Block, RA>
impl<B, E, Block, RA> HeaderMetadata<Block> for Client<B, E, Block, RA>
fn header_metadata( &self, hash: <Block as Block>::Hash, ) -> Result<CachedHeaderMetadata<Block>, <Client<B, E, Block, RA> as HeaderMetadata<Block>>::Error>
fn insert_header_metadata( &self, hash: <Block as Block>::Hash, metadata: CachedHeaderMetadata<Block>, )
fn remove_header_metadata(&self, hash: <Block as Block>::Hash)
Source§impl<BE, E, B, RA> IndexedBody<B> for Client<BE, E, B, RA>
impl<BE, E, B, RA> IndexedBody<B> for Client<BE, E, B, RA>
Source§impl<B, E, Block, RA> LockImportRun<Block, B> for Client<B, E, Block, RA>
impl<B, E, Block, RA> LockImportRun<Block, B> for Client<B, E, Block, RA>
Source§fn lock_import_and_run<R, Err, F>(&self, f: F) -> Result<R, Err>
fn lock_import_and_run<R, Err, F>(&self, f: F) -> Result<R, Err>
Source§impl<B, E, Block, RA> PreCommitActions<Block> for Client<B, E, Block, RA>where
Block: Block,
impl<B, E, Block, RA> PreCommitActions<Block> for Client<B, E, Block, RA>where
Block: Block,
Source§impl<B, E, Block, RA> ProofProvider<Block> for Client<B, E, Block, RA>
impl<B, E, Block, RA> ProofProvider<Block> for Client<B, E, Block, RA>
Source§fn read_proof(
&self,
hash: <Block as Block>::Hash,
keys: &mut dyn Iterator<Item = &[u8]>,
) -> Result<StorageProof, Error>
fn read_proof( &self, hash: <Block as Block>::Hash, keys: &mut dyn Iterator<Item = &[u8]>, ) -> Result<StorageProof, Error>
Source§fn read_child_proof(
&self,
hash: <Block as Block>::Hash,
child_info: &ChildInfo,
keys: &mut dyn Iterator<Item = &[u8]>,
) -> Result<StorageProof, Error>
fn read_child_proof( &self, hash: <Block as Block>::Hash, child_info: &ChildInfo, keys: &mut dyn Iterator<Item = &[u8]>, ) -> Result<StorageProof, Error>
Source§fn execution_proof(
&self,
hash: <Block as Block>::Hash,
method: &str,
call_data: &[u8],
) -> Result<(Vec<u8>, StorageProof), Error>
fn execution_proof( &self, hash: <Block as Block>::Hash, method: &str, call_data: &[u8], ) -> Result<(Vec<u8>, StorageProof), Error>
Source§fn read_proof_collection(
&self,
hash: <Block as Block>::Hash,
start_key: &[Vec<u8>],
size_limit: usize,
) -> Result<(CompactProof, u32), Error>
fn read_proof_collection( &self, hash: <Block as Block>::Hash, start_key: &[Vec<u8>], size_limit: usize, ) -> Result<(CompactProof, u32), Error>
Hash
iterate over all storage values starting at start_keys
.
Last start_keys
element contains last accessed key value.
With multiple start_keys
, first start_keys
element is
the current storage key of of the last accessed child trie.
at last level the value to start at exclusively.
Proofs is build until size limit is reached and always include at
least one key following start_keys
.
Returns combined proof and the numbers of collected keys.Source§fn storage_collection(
&self,
hash: <Block as Block>::Hash,
start_key: &[Vec<u8>],
size_limit: usize,
) -> Result<Vec<(KeyValueStorageLevel, bool)>, Error>
fn storage_collection( &self, hash: <Block as Block>::Hash, start_key: &[Vec<u8>], size_limit: usize, ) -> Result<Vec<(KeyValueStorageLevel, bool)>, Error>
Hash
iterate over all storage values starting at start_key
.
Returns collected keys and values.
Returns the collected keys values content of the top trie followed by the
collected keys values of child tries.
Only child tries with their root part of the collected content or
related to start_key
are attached.
For each collected state a boolean indicates if state reach
end.Source§fn verify_range_proof(
&self,
root: <Block as Block>::Hash,
proof: CompactProof,
start_key: &[Vec<u8>],
) -> Result<(KeyValueStates, usize), Error>
fn verify_range_proof( &self, root: <Block as Block>::Hash, proof: CompactProof, start_key: &[Vec<u8>], ) -> Result<(KeyValueStates, usize), Error>
Source§impl<B, E, Block, RA> ProvideRuntimeApi<Block> for Client<B, E, Block, RA>where
B: Backend<Block>,
E: CallExecutor<Block, Backend = B> + Send + Sync,
Block: Block,
RA: ConstructRuntimeApi<Block, Client<B, E, Block, RA>> + Send + Sync,
impl<B, E, Block, RA> ProvideRuntimeApi<Block> for Client<B, E, Block, RA>where
B: Backend<Block>,
E: CallExecutor<Block, Backend = B> + Send + Sync,
Block: Block,
RA: ConstructRuntimeApi<Block, Client<B, E, Block, RA>> + Send + Sync,
Source§type Api = <RA as ConstructRuntimeApi<Block, Client<B, E, Block, RA>>>::RuntimeApi
type Api = <RA as ConstructRuntimeApi<Block, Client<B, E, Block, RA>>>::RuntimeApi
Source§fn runtime_api(
&self,
) -> ApiRef<'_, <Client<B, E, Block, RA> as ProvideRuntimeApi<Block>>::Api>
fn runtime_api( &self, ) -> ApiRef<'_, <Client<B, E, Block, RA> as ProvideRuntimeApi<Block>>::Api>
commit
its changes to an internal buffer. Otherwise,
the modifications will be discarded
. The modifications will not be applied to the
storage, even on a commit
.Source§impl<B, E, Block, RA> ProvideUncles<Block> for Client<B, E, Block, RA>
impl<B, E, Block, RA> ProvideUncles<Block> for Client<B, E, Block, RA>
Source§impl<B, E, Block, RA> StorageProvider<Block, B> for Client<B, E, Block, RA>
impl<B, E, Block, RA> StorageProvider<Block, B> for Client<B, E, Block, RA>
Source§fn storage_keys(
&self,
hash: <Block as Block>::Hash,
prefix: Option<&StorageKey>,
start_key: Option<&StorageKey>,
) -> Result<KeysIter<<B as Backend<Block>>::State, Block>, Error>
fn storage_keys( &self, hash: <Block as Block>::Hash, prefix: Option<&StorageKey>, start_key: Option<&StorageKey>, ) -> Result<KeysIter<<B as Backend<Block>>::State, Block>, Error>
Hash
and a key prefix, returns a KeysIter
iterates matching storage
keys in that block.Source§fn child_storage_keys(
&self,
hash: <Block as Block>::Hash,
child_info: ChildInfo,
prefix: Option<&StorageKey>,
start_key: Option<&StorageKey>,
) -> Result<KeysIter<<B as Backend<Block>>::State, Block>, Error>
fn child_storage_keys( &self, hash: <Block as Block>::Hash, child_info: ChildInfo, prefix: Option<&StorageKey>, start_key: Option<&StorageKey>, ) -> Result<KeysIter<<B as Backend<Block>>::State, Block>, Error>
Hash
and a key prefix
and a child storage key,
returns a KeysIter
that iterates matching storage keys in that block.Source§fn storage_pairs(
&self,
hash: <Block as Block>::Hash,
prefix: Option<&StorageKey>,
start_key: Option<&StorageKey>,
) -> Result<PairsIter<<B as Backend<Block>>::State, Block>, Error>
fn storage_pairs( &self, hash: <Block as Block>::Hash, prefix: Option<&StorageKey>, start_key: Option<&StorageKey>, ) -> Result<PairsIter<<B as Backend<Block>>::State, Block>, Error>
Hash
and a key prefix, returns an iterator over the storage keys and
values in that block.Source§fn storage(
&self,
hash: <Block as Block>::Hash,
key: &StorageKey,
) -> Result<Option<StorageData>, Error>
fn storage( &self, hash: <Block as Block>::Hash, key: &StorageKey, ) -> Result<Option<StorageData>, Error>
Hash
and a key, return the value under the key in that block.Source§fn storage_hash(
&self,
hash: <Block as Block>::Hash,
key: &StorageKey,
) -> Result<Option<<Block as Block>::Hash>, Error>
fn storage_hash( &self, hash: <Block as Block>::Hash, key: &StorageKey, ) -> Result<Option<<Block as Block>::Hash>, Error>
Hash
and a key, return the value under the hash in that block.Source§fn child_storage(
&self,
hash: <Block as Block>::Hash,
child_info: &ChildInfo,
key: &StorageKey,
) -> Result<Option<StorageData>, Error>
fn child_storage( &self, hash: <Block as Block>::Hash, child_info: &ChildInfo, key: &StorageKey, ) -> Result<Option<StorageData>, Error>
Hash
, a key and a child storage key, return the value under the key in
that block.Source§fn child_storage_hash(
&self,
hash: <Block as Block>::Hash,
child_info: &ChildInfo,
key: &StorageKey,
) -> Result<Option<<Block as Block>::Hash>, Error>
fn child_storage_hash( &self, hash: <Block as Block>::Hash, child_info: &ChildInfo, key: &StorageKey, ) -> Result<Option<<Block as Block>::Hash>, Error>
Hash
, a key and a child storage key, return the hash under the key in that
block.Source§impl<B, E, Block, RA> UsageProvider<Block> for Client<B, E, Block, RA>
impl<B, E, Block, RA> UsageProvider<Block> for Client<B, E, Block, RA>
Source§fn usage_info(&self) -> ClientInfo<Block>
fn usage_info(&self) -> ClientInfo<Block>
Get usage info about current client.