Skip to content

Commit 9a19b37

Browse files
committed
Add new ValidateRejectCodes that are more descriptive and update failure to find a parent block id as an UnknownParent error code
Signed-off-by: Jacinta Ferrant <jacinta.ferrant@gmail.com>
1 parent 03e691c commit 9a19b37

File tree

5 files changed

+17
-14
lines changed

5 files changed

+17
-14
lines changed

stacks-signer/src/v0/signer.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,8 +1541,7 @@ fn should_reevaluate_block(block_info: &BlockInfo) -> bool {
15411541
| RejectReason::TestingDirective
15421542
| RejectReason::InvalidTenureExtend
15431543
| RejectReason::NotRejected
1544-
| RejectReason::Unknown(_)
1545-
| RejectReason::InvalidParentBlock => true,
1544+
| RejectReason::Unknown(_) => true,
15461545
RejectReason::ValidationFailed(_)
15471546
| RejectReason::RejectedInPriorRound
15481547
| RejectReason::SortitionViewMismatch
@@ -1551,6 +1550,7 @@ fn should_reevaluate_block(block_info: &BlockInfo) -> bool {
15511550
| RejectReason::PubkeyHashMismatch
15521551
| RejectReason::InvalidMiner
15531552
| RejectReason::NotLatestSortitionWinner
1553+
| RejectReason::InvalidParentBlock
15541554
| RejectReason::DuplicateBlockFound => {
15551555
// No need to re-validate these types of rejections.
15561556
false

stackslib/src/net/api/postblock_proposal.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,10 @@ define_u8_enum![ValidateRejectCode {
8787
ChainstateError = 3,
8888
UnknownParent = 4,
8989
NonCanonicalTenure = 5,
90-
NoSuchTenure = 6
90+
NoSuchTenure = 6,
91+
InvalidParentBlock = 7,
92+
InvalidTimestamp = 8,
93+
NetworkChainMismatch = 9
9194
}];
9295

9396
pub static TOO_MANY_REQUESTS_STATUS: u16 = 429;
@@ -287,7 +290,7 @@ impl NakamotoBlockProposal {
287290
"highest_header.height" => highest_header.anchored_header.height(),
288291
);
289292
return Err(BlockValidateRejectReason {
290-
reason_code: ValidateRejectCode::InvalidBlock,
293+
reason_code: ValidateRejectCode::InvalidParentBlock,
291294
reason: "Block is not higher than the highest block in its tenure".into(),
292295
});
293296
}
@@ -405,7 +408,7 @@ impl NakamotoBlockProposal {
405408
"received_mainnet" => mainnet,
406409
);
407410
return Err(BlockValidateRejectReason {
408-
reason_code: ValidateRejectCode::InvalidBlock,
411+
reason_code: ValidateRejectCode::NetworkChainMismatch,
409412
reason: "Wrong network/chain_id".into(),
410413
});
411414
}
@@ -428,8 +431,8 @@ impl NakamotoBlockProposal {
428431
&self.block.header.parent_block_id,
429432
)?
430433
.ok_or_else(|| BlockValidateRejectReason {
431-
reason_code: ValidateRejectCode::InvalidBlock,
432-
reason: "Invalid parent block".into(),
434+
reason_code: ValidateRejectCode::UnknownParent,
435+
reason: "Unknown parent block".into(),
433436
})?;
434437

435438
let burn_view_consensus_hash =
@@ -494,7 +497,7 @@ impl NakamotoBlockProposal {
494497
"parent_block_timestamp" => parent_nakamoto_header.timestamp,
495498
);
496499
return Err(BlockValidateRejectReason {
497-
reason_code: ValidateRejectCode::InvalidBlock,
500+
reason_code: ValidateRejectCode::InvalidTimestamp,
498501
reason: "Block timestamp is not greater than parent block".into(),
499502
});
500503
}
@@ -507,7 +510,7 @@ impl NakamotoBlockProposal {
507510
"current_time" => get_epoch_time_secs(),
508511
);
509512
return Err(BlockValidateRejectReason {
510-
reason_code: ValidateRejectCode::InvalidBlock,
513+
reason_code: ValidateRejectCode::InvalidTimestamp,
511514
reason: "Block timestamp is too far into the future".into(),
512515
});
513516
}

stackslib/src/net/api/tests/postblock_proposal.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ fn test_try_make_response() {
473473
reason,
474474
..
475475
}) => {
476-
assert_eq!(reason_code, ValidateRejectCode::InvalidBlock);
476+
assert_eq!(reason_code, ValidateRejectCode::InvalidTimestamp);
477477
assert_eq!(reason, "Block timestamp is not greater than parent block");
478478
}
479479
}
@@ -486,7 +486,7 @@ fn test_try_make_response() {
486486
reason,
487487
..
488488
}) => {
489-
assert_eq!(reason_code, ValidateRejectCode::InvalidBlock);
489+
assert_eq!(reason_code, ValidateRejectCode::InvalidTimestamp);
490490
assert_eq!(reason, "Block timestamp is too far into the future");
491491
}
492492
}

testnet/stacks-node/src/tests/nakamoto_integrations.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3133,7 +3133,7 @@ fn block_proposal_api_endpoint() {
31333133
sign(&p)
31343134
},
31353135
HTTP_ACCEPTED,
3136-
Some(Err(ValidateRejectCode::InvalidBlock)),
3136+
Some(Err(ValidateRejectCode::NetworkChainMismatch)),
31373137
),
31383138
(
31393139
"Invalid `miner_signature`",

testnet/stacks-node/src/tests/signer/v0.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1511,7 +1511,7 @@ fn block_proposal_rejection() {
15111511
signer_test.wait_for_validate_reject_response(short_timeout, block_signer_signature_hash_2);
15121512
assert!(matches!(
15131513
reject.reason_code,
1514-
ValidateRejectCode::InvalidBlock
1514+
ValidateRejectCode::UnknownParent
15151515
));
15161516

15171517
let start_polling = Instant::now();
@@ -1541,7 +1541,7 @@ fn block_proposal_rejection() {
15411541
found_signer_signature_hash_2 = true;
15421542
assert!(matches!(
15431543
reason_code,
1544-
RejectCode::ValidationFailed(ValidateRejectCode::InvalidBlock)
1544+
RejectCode::ValidationFailed(ValidateRejectCode::UnknownParent)
15451545
));
15461546
} else {
15471547
continue;

0 commit comments

Comments
 (0)