Skip to content

Commit b08c599

Browse files
authored
Merge pull request #1092 from openmina/feat/consensus/do_consensus_first_then_verification
Fix(transition_frontier/candidate): don't forever invalidate early received blocks
2 parents 5c85b24 + 7439a47 commit b08c599

File tree

3 files changed

+13
-5
lines changed

3 files changed

+13
-5
lines changed

core/src/block/prevalidate.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ pub enum BlockPrevalidationError {
2222
InvalidDeltaBlockChainProof,
2323
}
2424

25+
impl BlockPrevalidationError {
26+
pub fn is_forever_invalid(&self) -> bool {
27+
!matches!(self, Self::ReceivedTooEarly { .. })
28+
}
29+
}
30+
2531
pub fn validate_block_timing(
2632
block: &ArcBlockWithHash,
2733
genesis: &ArcBlockWithHash,

node/src/transition_frontier/candidate/transition_frontier_candidate_reducer.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ impl TransitionFrontierCandidatesState {
6767
}
6868
}
6969
}
70-
TransitionFrontierCandidateAction::BlockPrevalidateError { hash, .. } => {
71-
state.invalidate(hash);
70+
TransitionFrontierCandidateAction::BlockPrevalidateError { hash, error } => {
71+
state.invalidate(hash, error.is_forever_invalid());
7272
}
7373
TransitionFrontierCandidateAction::BlockPrevalidateSuccess { hash } => {
7474
state.update_status(hash, |_| TransitionFrontierCandidateStatus::Prevalidated);
@@ -111,7 +111,7 @@ impl TransitionFrontierCandidatesState {
111111
});
112112
}
113113
TransitionFrontierCandidateAction::BlockSnarkVerifyError { hash, .. } => {
114-
state.invalidate(hash);
114+
state.invalidate(hash, true);
115115
}
116116
TransitionFrontierCandidateAction::BlockSnarkVerifySuccess { hash } => {
117117
state.update_status(hash, |_| {

node/src/transition_frontier/candidate/transition_frontier_candidate_state.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,10 +180,12 @@ impl TransitionFrontierCandidatesState {
180180
})
181181
}
182182

183-
pub(super) fn invalidate(&mut self, hash: &StateHash) {
183+
pub(super) fn invalidate(&mut self, hash: &StateHash, is_forever_invalid: bool) {
184184
self.ordered.retain(|s| {
185185
if s.block.hash() == hash {
186-
self.invalid.insert(hash.clone(), s.block.global_slot());
186+
if is_forever_invalid {
187+
self.invalid.insert(hash.clone(), s.block.global_slot());
188+
}
187189
false
188190
} else {
189191
true

0 commit comments

Comments
 (0)