mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-10 19:17:22 +00:00
Zombienet tests - disputes on finalized blocks (#2184)
**Overview:** Adding an extra malus variant focusing on disputing finalized blocks. It will: - wrap around approval-voting - listen to `OverseerSignal::BlockFinalized` and when encountered start a dispute for the `dispute_offset`th ancestor - simply pass through all other messages and signals Add zombienet tests testing various edgecases: - disputing freshly finalized blocks - disputing stale finalized blocks - disputing eagerly pruned finalized blocks (might be separate PR) **TODO:** - [x] Register new malus variant - [x] Simple pass through wrapper (approval-voting) - [x] Simple network definition - [x] Listen to block finalizations - [x] Fetch ancestor hash - [x] Fetch session index - [x] Fetch candidate - [x] Construct and send dispute message - [x] zndsl test 1 checking that disputes on fresh finalizations resolve valid Closes #1365 - [x] zndsl test 2 checking that disputes for too old finalized blocks are not possible Closes #1364 - [ ] zndsl test 3 checking that disputes for candidates with eagerly pruned relay parent state are handled correctly #1359 (deferred to a separate PR) - [x] Unit tests for new malus variant (testing cli etc) - [x] Clean/streamline error handling - [ ] ~~Ensure it tests properly on session boundaries~~ --------- Co-authored-by: Javier Viola <javier@parity.io> Co-authored-by: Marcin S. <marcin@realemail.net> Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>
This commit is contained in:
@@ -36,6 +36,8 @@ enum NemesisVariant {
|
||||
BackGarbageCandidate(BackGarbageCandidateOptions),
|
||||
/// Delayed disputing of ancestors that are perfectly fine.
|
||||
DisputeAncestor(DisputeAncestorOptions),
|
||||
/// Delayed disputing of finalized candidates.
|
||||
DisputeFinalizedCandidates(DisputeFinalizedCandidatesOptions),
|
||||
}
|
||||
|
||||
#[derive(Debug, Parser)]
|
||||
@@ -80,6 +82,15 @@ impl MalusCli {
|
||||
finality_delay,
|
||||
)?
|
||||
},
|
||||
NemesisVariant::DisputeFinalizedCandidates(opts) => {
|
||||
let DisputeFinalizedCandidatesOptions { dispute_offset, cli } = opts;
|
||||
|
||||
polkadot_cli::run_node(
|
||||
cli,
|
||||
DisputeFinalizedCandidates { dispute_offset },
|
||||
finality_delay,
|
||||
)?
|
||||
},
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -184,4 +195,39 @@ mod tests {
|
||||
assert!(run.cli.run.base.bob);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn dispute_finalized_candidates_works() {
|
||||
let cli = MalusCli::try_parse_from(IntoIterator::into_iter([
|
||||
"malus",
|
||||
"dispute-finalized-candidates",
|
||||
"--bob",
|
||||
]))
|
||||
.unwrap();
|
||||
assert_matches::assert_matches!(cli, MalusCli {
|
||||
variant: NemesisVariant::DisputeFinalizedCandidates(run),
|
||||
..
|
||||
} => {
|
||||
assert!(run.cli.run.base.bob);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn dispute_finalized_offset_value_works() {
|
||||
let cli = MalusCli::try_parse_from(IntoIterator::into_iter([
|
||||
"malus",
|
||||
"dispute-finalized-candidates",
|
||||
"--dispute-offset",
|
||||
"13",
|
||||
"--bob",
|
||||
]))
|
||||
.unwrap();
|
||||
assert_matches::assert_matches!(cli, MalusCli {
|
||||
variant: NemesisVariant::DisputeFinalizedCandidates(opts),
|
||||
..
|
||||
} => {
|
||||
assert_eq!(opts.dispute_offset, 13); // This line checks that dispute_offset is correctly set to 13
|
||||
assert!(opts.cli.run.base.bob);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user