Skip to content

Commit 4752a90

Browse files
committed
Do not attempt to process a block validation response for an already globally processed block
Signed-off-by: Jacinta Ferrant <[email protected]>
1 parent 61eab90 commit 4752a90

File tree

2 files changed

+22
-3
lines changed
  • stacks-signer/src/v0
  • testnet/stacks-node/src/tests/signer

2 files changed

+22
-3
lines changed

stacks-signer/src/v0/signer.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,16 @@ impl Signer {
530530
.signer_db
531531
.block_lookup(self.reward_cycle, &signer_signature_hash)
532532
{
533-
Ok(Some(block_info)) => block_info,
533+
Ok(Some(block_info)) => {
534+
if block_info.state == BlockState::GloballyRejected
535+
|| block_info.state == BlockState::GloballyAccepted
536+
{
537+
debug!("{self}: Received block validation for a block that is already marked as {}. Ignoring...", block_info.state);
538+
return None;
539+
} else {
540+
block_info
541+
}
542+
}
534543
Ok(None) => {
535544
// We have not seen this block before. Why are we getting a response for it?
536545
debug!("{self}: Received a block validate response for a block we have not seen before. Ignoring...");

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4001,7 +4001,7 @@ fn locally_accepted_blocks_overriden_by_global_rejection() {
40014001
let sender_addr = tests::to_addr(&sender_sk);
40024002
let send_amt = 100;
40034003
let send_fee = 180;
4004-
let nmb_txs = 2;
4004+
let nmb_txs = 3;
40054005
let recipient = PrincipalData::from(StacksAddress::burn_address(false));
40064006
let short_timeout_secs = 20;
40074007
let mut signer_test: SignerTest<SpawnedSigner> = SignerTest::new(
@@ -4057,7 +4057,11 @@ fn locally_accepted_blocks_overriden_by_global_rejection() {
40574057

40584058
info!("------------------------- Attempt to Mine Nakamoto Block N+1 -------------------------");
40594059
// Make half of the signers reject the block proposal by the miner to ensure its marked globally rejected
4060-
let rejecting_signers: Vec<_> = all_signers.iter().cloned().take(num_signers / 2).collect();
4060+
let rejecting_signers: Vec<_> = all_signers
4061+
.iter()
4062+
.cloned()
4063+
.take(num_signers / 2 + num_signers % 2)
4064+
.collect();
40614065
TEST_REJECT_ALL_BLOCK_PROPOSAL
40624066
.lock()
40634067
.unwrap()
@@ -4066,6 +4070,7 @@ fn locally_accepted_blocks_overriden_by_global_rejection() {
40664070
let transfer_tx =
40674071
make_stacks_transfer(&sender_sk, sender_nonce, send_fee, &recipient, send_amt);
40684072
let tx = submit_tx(&http_origin, &transfer_tx);
4073+
sender_nonce += 1;
40694074
info!("Submitted tx {tx} to mine block N+1");
40704075

40714076
let blocks_before = mined_blocks.load(Ordering::SeqCst);
@@ -4090,6 +4095,11 @@ fn locally_accepted_blocks_overriden_by_global_rejection() {
40904095
.unwrap()
40914096
.replace(Vec::new());
40924097

4098+
let transfer_tx =
4099+
make_stacks_transfer(&sender_sk, sender_nonce, send_fee, &recipient, send_amt);
4100+
let tx = submit_tx(&http_origin, &transfer_tx);
4101+
info!("Submitted tx {tx} to mine block N+1'");
4102+
40934103
wait_for(short_timeout_secs, || {
40944104
Ok(mined_blocks.load(Ordering::SeqCst) > blocks_before
40954105
&& signer_test

0 commit comments

Comments
 (0)