mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-14 13:21:10 +00:00
Onchain scraper in dispute-coordinator will scrape SCRAPED_FINALIZED_BLOCKS_COUNT blocks before finality (#7013)
* Onchain scraper in `dispute-coordinator` will scrape `SCRAPED_FINALIZED_BLOCKS_COUNT` blocks before finality The purpose is to make the availability of a `CandidateReceipt` for finalized candidates more likely. For details see: https://github.com/paritytech/polkadot/issues/7009 * Fix off by one error * Replace `SCRAPED_FINALIZED_BLOCKS_COUNT` with `DISPUTE_CANDIDATE_LIFETIME_AFTER_FINALIZATION`
This commit is contained in:
committed by
GitHub
parent
5889119fc9
commit
63a805baba
@@ -151,7 +151,10 @@ impl Inclusions {
|
||||
/// `process_active_leaves_update` any scraped votes.
|
||||
///
|
||||
/// Scraped candidates are available `DISPUTE_CANDIDATE_LIFETIME_AFTER_FINALIZATION` more blocks
|
||||
/// after finalization as a precaution not to prune them prematurely.
|
||||
/// after finalization as a precaution not to prune them prematurely. Besides the newly scraped
|
||||
/// candidates `DISPUTE_CANDIDATE_LIFETIME_AFTER_FINALIZATION` finalized blocks are parsed as
|
||||
/// another precaution to have their `CandidateReceipts` available in case a dispute is raised on
|
||||
/// them,
|
||||
pub struct ChainScraper {
|
||||
/// All candidates we have seen included, which not yet have been finalized.
|
||||
included_candidates: candidates::ScrapedCandidates,
|
||||
@@ -228,9 +231,10 @@ impl ChainScraper {
|
||||
None => return Ok(ScrapedUpdates::new()),
|
||||
};
|
||||
|
||||
// Fetch ancestry up to last finalized block.
|
||||
// Fetch ancestry up to `SCRAPED_FINALIZED_BLOCKS_COUNT` blocks beyond
|
||||
// the last finalized one
|
||||
let ancestors = self
|
||||
.get_unfinalized_block_ancestors(sender, activated.hash, activated.number)
|
||||
.get_relevant_block_ancestors(sender, activated.hash, activated.number)
|
||||
.await?;
|
||||
|
||||
// Ancestors block numbers are consecutive in the descending order.
|
||||
@@ -330,10 +334,11 @@ impl ChainScraper {
|
||||
}
|
||||
|
||||
/// Returns ancestors of `head` in the descending order, stopping
|
||||
/// either at the block present in cache or at the last finalized block.
|
||||
/// either at the block present in cache or at `SCRAPED_FINALIZED_BLOCKS_COUNT -1` blocks after
|
||||
/// the last finalized one (called `target_ancestor`).
|
||||
///
|
||||
/// Both `head` and the latest finalized block are **not** included in the result.
|
||||
async fn get_unfinalized_block_ancestors<Sender>(
|
||||
/// Both `head` and the `target_ancestor` blocks are **not** included in the result.
|
||||
async fn get_relevant_block_ancestors<Sender>(
|
||||
&mut self,
|
||||
sender: &mut Sender,
|
||||
mut head: Hash,
|
||||
@@ -342,7 +347,9 @@ impl ChainScraper {
|
||||
where
|
||||
Sender: overseer::DisputeCoordinatorSenderTrait,
|
||||
{
|
||||
let target_ancestor = get_finalized_block_number(sender).await?;
|
||||
let target_ancestor = get_finalized_block_number(sender)
|
||||
.await?
|
||||
.saturating_sub(DISPUTE_CANDIDATE_LIFETIME_AFTER_FINALIZATION);
|
||||
|
||||
let mut ancestors = Vec::new();
|
||||
|
||||
|
||||
@@ -410,7 +410,8 @@ fn scraper_requests_candidates_of_non_finalized_ancestors() {
|
||||
&mut virtual_overseer,
|
||||
&chain,
|
||||
finalized_block_number,
|
||||
BLOCKS_TO_SKIP - finalized_block_number as usize, // Expect the provider not to go past finalized block.
|
||||
BLOCKS_TO_SKIP -
|
||||
(finalized_block_number - DISPUTE_CANDIDATE_LIFETIME_AFTER_FINALIZATION) as usize, // Expect the provider not to go past finalized block.
|
||||
get_backed_and_included_candidate_events,
|
||||
);
|
||||
join(process_active_leaves_update(ctx.sender(), &mut ordering, next_update), overseer_fut)
|
||||
|
||||
Reference in New Issue
Block a user