mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 22:51:13 +00:00
BlockId removal: runtime-api refactor (#13255)
* BlockId removal: refactor of runtime API It changes the arguments of: - `ApiExt` methods: `has_api`, `has_api_with`, `api_version` - `CallApiAt` method: `runtime_version_at` from: `BlockId<Block>` to: `Block::Hash` It also changes the first argument of all generated runtime API calls from: `BlockId<Block>` to: `Block::Hash` This PR is part of BlockId::Number refactoring analysis (paritytech/substrate#11292) * BlockId removal: refactor of runtime API - tests - tests adjusted to new runtime API, - some tests migrated from block number to block hash * benchmarking-cli: BlockId(0) migrated to info().genesis_hash `runtime_api.call()` now requires the block hash instead of BlockId::Number. To access the genesis hash widely used in benchmarking engine the Client was constrained to satisfy `sp_blockchain::HeaderBackend<Block>` trait which provides `info().genesis_hash`. * trivial: api.call(BlockId) -> api.call(Hash) - Migrated all `runtime_api.calls` to use Hash - Noteworthy (?): -- `validate_transaction_blocking` in transaction pool, * CallApiAtParams::at changed to Block::Hash * missed doc updated * Apply suggestions from code review Co-authored-by: Bastian Köcher <git@kchr.de> * ".git/.scripts/commands/fmt/fmt.sh" * BlockId removal: Benchmark::consumed_weight Little refactor around `Benchmark::consumed_weight`: `BlockId` removed. * at_hash renamed * wrong merge fixed * beefy worker: merged with master * beefy: tests: missing block problem fixed * Apply review suggestion * fix --------- Co-authored-by: Bastian Köcher <git@kchr.de> Co-authored-by: command-bot <>
This commit is contained in:
committed by
GitHub
parent
ac13aaeb2f
commit
7a10154188
@@ -115,7 +115,7 @@ pub const MAX_EXTRINSIC_DEPTH: u32 = 256;
|
||||
/// The macro will create two declarations, one for using on the client side and one for using
|
||||
/// on the runtime side. The declaration for the runtime side is hidden in its own module.
|
||||
/// The client side declaration gets two extra parameters per function,
|
||||
/// `&self` and `at: &BlockId<Block>`. The runtime side declaration will match the given trait
|
||||
/// `&self` and `at: Block::Hash`. The runtime side declaration will match the given trait
|
||||
/// declaration. Besides one exception, the macro adds an extra generic parameter `Block:
|
||||
/// BlockT` to the client side and the runtime side. This generic parameter is usable by the
|
||||
/// user.
|
||||
@@ -182,7 +182,7 @@ pub const MAX_EXTRINSIC_DEPTH: u32 = 256;
|
||||
/// ```
|
||||
///
|
||||
/// To check if a given runtime implements a runtime api trait, the `RuntimeVersion` has the
|
||||
/// function `has_api<A>()`. Also the `ApiExt` provides a function `has_api<A>(at: &BlockId)`
|
||||
/// function `has_api<A>()`. Also the `ApiExt` provides a function `has_api<A>(at: Hash)`
|
||||
/// to check if the runtime at the given block id implements the requested runtime api trait.
|
||||
///
|
||||
/// # Declaring multiple api versions
|
||||
@@ -400,16 +400,16 @@ pub use sp_api_proc_macro::impl_runtime_apis;
|
||||
///
|
||||
/// This attribute can be placed above individual function in the mock implementation to
|
||||
/// request more control over the function declaration. From the client side each runtime api
|
||||
/// function is called with the `at` parameter that is a [`BlockId`](sp_api::BlockId). When
|
||||
/// using the `advanced` attribute, the macro expects that the first parameter of the function
|
||||
/// is this `at` parameter. Besides that the macro also doesn't do the automatic return value
|
||||
/// rewrite, which means that full return value must be specified. The full return value is
|
||||
/// constructed like [`Result`]`<<ReturnValue>, Error>` while `ReturnValue` being the return
|
||||
/// value that is specified in the trait declaration.
|
||||
/// function is called with the `at` parameter that is a [`Hash`](sp_runtime::traits::Hash).
|
||||
/// When using the `advanced` attribute, the macro expects that the first parameter of the
|
||||
/// function is this `at` parameter. Besides that the macro also doesn't do the automatic
|
||||
/// return value rewrite, which means that full return value must be specified. The full return
|
||||
/// value is constructed like [`Result`]`<<ReturnValue>, Error>` while `ReturnValue` being the
|
||||
/// return value that is specified in the trait declaration.
|
||||
///
|
||||
/// ## Example
|
||||
/// ```rust
|
||||
/// # use sp_runtime::{traits::Block as BlockT, generic::BlockId};
|
||||
/// # use sp_runtime::traits::Block as BlockT;
|
||||
/// # use sp_test_primitives::Block;
|
||||
/// # use codec;
|
||||
/// #
|
||||
@@ -429,16 +429,14 @@ pub use sp_api_proc_macro::impl_runtime_apis;
|
||||
/// sp_api::mock_impl_runtime_apis! {
|
||||
/// impl Balance<Block> for MockApi {
|
||||
/// #[advanced]
|
||||
/// fn get_balance(&self, at: &BlockId<Block>) -> Result<u64, sp_api::ApiError> {
|
||||
/// fn get_balance(&self, at: <Block as BlockT>::Hash) -> Result<u64, sp_api::ApiError> {
|
||||
/// println!("Being called at: {}", at);
|
||||
///
|
||||
/// Ok(self.balance.into())
|
||||
/// }
|
||||
/// #[advanced]
|
||||
/// fn set_balance(at: &BlockId<Block>, val: u64) -> Result<(), sp_api::ApiError> {
|
||||
/// if let BlockId::Number(1) = at {
|
||||
/// println!("Being called to set balance to: {}", val);
|
||||
/// }
|
||||
/// fn set_balance(at: <Block as BlockT>::Hash, val: u64) -> Result<(), sp_api::ApiError> {
|
||||
/// println!("Being called at: {}", at);
|
||||
///
|
||||
/// Ok(().into())
|
||||
/// }
|
||||
@@ -539,14 +537,14 @@ pub trait ApiExt<Block: BlockT> {
|
||||
Self: Sized;
|
||||
|
||||
/// Checks if the given api is implemented and versions match.
|
||||
fn has_api<A: RuntimeApiInfo + ?Sized>(&self, at: &BlockId<Block>) -> Result<bool, ApiError>
|
||||
fn has_api<A: RuntimeApiInfo + ?Sized>(&self, at_hash: Block::Hash) -> Result<bool, ApiError>
|
||||
where
|
||||
Self: Sized;
|
||||
|
||||
/// Check if the given api is implemented and the version passes a predicate.
|
||||
fn has_api_with<A: RuntimeApiInfo + ?Sized, P: Fn(u32) -> bool>(
|
||||
&self,
|
||||
at: &BlockId<Block>,
|
||||
at_hash: Block::Hash,
|
||||
pred: P,
|
||||
) -> Result<bool, ApiError>
|
||||
where
|
||||
@@ -555,7 +553,7 @@ pub trait ApiExt<Block: BlockT> {
|
||||
/// Returns the version of the given api.
|
||||
fn api_version<A: RuntimeApiInfo + ?Sized>(
|
||||
&self,
|
||||
at: &BlockId<Block>,
|
||||
at_hash: Block::Hash,
|
||||
) -> Result<Option<u32>, ApiError>
|
||||
where
|
||||
Self: Sized;
|
||||
@@ -590,7 +588,7 @@ pub trait ApiExt<Block: BlockT> {
|
||||
#[cfg(feature = "std")]
|
||||
pub struct CallApiAtParams<'a, Block: BlockT, Backend: StateBackend<HashFor<Block>>> {
|
||||
/// The block id that determines the state that should be setup when calling the function.
|
||||
pub at: &'a BlockId<Block>,
|
||||
pub at: Block::Hash,
|
||||
/// The name of the function that should be called.
|
||||
pub function: &'static str,
|
||||
/// The encoded arguments of the function.
|
||||
@@ -619,7 +617,7 @@ pub trait CallApiAt<Block: BlockT> {
|
||||
) -> Result<Vec<u8>, ApiError>;
|
||||
|
||||
/// Returns the runtime version at the given block.
|
||||
fn runtime_version_at(&self, at: &BlockId<Block>) -> Result<RuntimeVersion, ApiError>;
|
||||
fn runtime_version_at(&self, at_hash: Block::Hash) -> Result<RuntimeVersion, ApiError>;
|
||||
|
||||
/// Get the state `at` the given block.
|
||||
fn state_at(&self, at: Block::Hash) -> Result<Self::StateBackend, ApiError>;
|
||||
|
||||
Reference in New Issue
Block a user