mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 22:47:56 +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
@@ -92,13 +92,12 @@ where
|
||||
|
||||
for i in self.params.from..=self.params.to {
|
||||
let block_num = BlockId::Number(i.into());
|
||||
let parent_num = BlockId::Number(((i - 1) as u32).into());
|
||||
let consumed = self.consumed_weight(&block_num)?;
|
||||
let hash = self.client.expect_block_hash_from_id(&block_num)?;
|
||||
let consumed = self.consumed_weight(hash)?;
|
||||
|
||||
let block = self.client.block(hash)?.ok_or(format!("Block {} not found", block_num))?;
|
||||
let block = self.unsealed(block.block);
|
||||
let took = self.measure_block(&block, &parent_num)?;
|
||||
let took = self.measure_block(&block, *block.header().parent_hash())?;
|
||||
|
||||
self.log_weight(i, block.extrinsics().len(), consumed, took);
|
||||
}
|
||||
@@ -107,7 +106,7 @@ where
|
||||
}
|
||||
|
||||
/// Return the average *execution* aka. *import* time of the block.
|
||||
fn measure_block(&self, block: &Block, parent_num: &BlockId<Block>) -> Result<NanoSeconds> {
|
||||
fn measure_block(&self, block: &Block, parent_hash: Block::Hash) -> Result<NanoSeconds> {
|
||||
let mut record = Vec::<NanoSeconds>::default();
|
||||
// Interesting part here:
|
||||
// Execute the block multiple times and collect stats about its execution time.
|
||||
@@ -117,7 +116,7 @@ where
|
||||
let start = Instant::now();
|
||||
|
||||
runtime_api
|
||||
.execute_block(&parent_num, block)
|
||||
.execute_block(parent_hash, block)
|
||||
.map_err(|e| Error::Client(RuntimeApiError(e)))?;
|
||||
|
||||
record.push(start.elapsed().as_nanos() as NanoSeconds);
|
||||
@@ -131,7 +130,7 @@ where
|
||||
///
|
||||
/// This is the post-dispatch corrected weight and is only available
|
||||
/// after executing the block.
|
||||
fn consumed_weight(&self, block: &BlockId<Block>) -> Result<NanoSeconds> {
|
||||
fn consumed_weight(&self, block_hash: Block::Hash) -> Result<NanoSeconds> {
|
||||
// Hard-coded key for System::BlockWeight. It could also be passed in as argument
|
||||
// for the benchmark, but I think this should work as well.
|
||||
let hash = array_bytes::hex2bytes(
|
||||
@@ -139,11 +138,10 @@ where
|
||||
)?;
|
||||
let key = StorageKey(hash);
|
||||
|
||||
let block_hash = self.client.expect_block_hash_from_id(block)?;
|
||||
let mut raw_weight = &self
|
||||
.client
|
||||
.storage(block_hash, &key)?
|
||||
.ok_or(format!("Could not find System::BlockWeight for block: {}", block))?
|
||||
.ok_or(format!("Could not find System::BlockWeight for block: {}", block_hash))?
|
||||
.0[..];
|
||||
|
||||
let weight = ConsumedWeight::decode_all(&mut raw_weight)?;
|
||||
|
||||
Reference in New Issue
Block a user