Skip to content

Commit 24e3ace

Browse files
authored
Merge pull request #6609 from jcnelson/feat/sip034
Feat/sip034
2 parents 02920d1 + 8ec9bf9 commit 24e3ace

File tree

29 files changed

+1962
-237
lines changed

29 files changed

+1962
-237
lines changed

stacks-common/src/types/mod.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,23 @@ impl StacksEpochId {
504504
}
505505
}
506506

507+
pub fn supports_specific_budget_extends(&self) -> bool {
508+
match self {
509+
StacksEpochId::Epoch10
510+
| StacksEpochId::Epoch20
511+
| StacksEpochId::Epoch2_05
512+
| StacksEpochId::Epoch21
513+
| StacksEpochId::Epoch22
514+
| StacksEpochId::Epoch23
515+
| StacksEpochId::Epoch24
516+
| StacksEpochId::Epoch25
517+
| StacksEpochId::Epoch30
518+
| StacksEpochId::Epoch31
519+
| StacksEpochId::Epoch32 => false,
520+
StacksEpochId::Epoch33 => true,
521+
}
522+
}
523+
507524
/// Whether or not this epoch supports the punishment of PoX reward
508525
/// recipients using the bitvec scheme
509526
pub fn allows_pox_punishment(&self) -> bool {

stacks-node/src/tests/nakamoto_integrations.rs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ use stacks::chainstate::burn::operations::{
4848
use stacks::chainstate::coordinator::comm::CoordinatorChannels;
4949
use stacks::chainstate::coordinator::OnChainRewardSetProvider;
5050
use stacks::chainstate::nakamoto::coordinator::{load_nakamoto_reward_set, TEST_COORDINATOR_STALL};
51-
use stacks::chainstate::nakamoto::miner::NakamotoBlockBuilder;
51+
use stacks::chainstate::nakamoto::miner::{MinerTenureInfoCause, NakamotoBlockBuilder};
5252
use stacks::chainstate::nakamoto::shadow::shadow_chainstate_repair;
5353
use stacks::chainstate::nakamoto::test_signers::TestSigners;
5454
use stacks::chainstate::nakamoto::{NakamotoBlock, NakamotoBlockHeader, NakamotoChainState};
@@ -3228,10 +3228,12 @@ fn block_proposal_api_endpoint() {
32283228
let tenure_change = None;
32293229
let coinbase = None;
32303230

3231-
let tenure_cause = tenure_change.and_then(|tx: &StacksTransaction| match &tx.payload {
3232-
TransactionPayload::TenureChange(tc) => Some(tc.cause),
3233-
_ => None,
3234-
});
3231+
let tenure_cause = tenure_change
3232+
.and_then(|tx: &StacksTransaction| match &tx.payload {
3233+
TransactionPayload::TenureChange(tc) => Some(MinerTenureInfoCause::from(tc.cause)),
3234+
_ => Some(MinerTenureInfoCause::NoTenureChange),
3235+
})
3236+
.unwrap_or(MinerTenureInfoCause::NoTenureChange);
32353237

32363238
// Apply miner signature
32373239
let sign = |p: &NakamotoBlockProposal| {
@@ -3253,6 +3255,7 @@ fn block_proposal_api_endpoint() {
32533255
1,
32543256
None,
32553257
None,
3258+
None,
32563259
)
32573260
.expect("Failed to build Nakamoto block");
32583261

@@ -6837,6 +6840,7 @@ fn signer_chainstate() {
68376840
tenure_idle_timeout_buffer: Duration::from_secs(2),
68386841
reorg_attempts_activity_timeout: Duration::from_secs(30),
68396842
reset_replay_set_after_fork_blocks: DEFAULT_RESET_REPLAY_SET_AFTER_FORK_BLOCKS,
6843+
supports_sip034_tenure_extensions: false,
68406844
};
68416845
let mut sortitions_view =
68426846
SortitionsView::fetch_view(proposal_conf, &signer_client).unwrap();
@@ -6972,6 +6976,7 @@ fn signer_chainstate() {
69726976
tenure_idle_timeout_buffer: Duration::from_secs(2),
69736977
reorg_attempts_activity_timeout: Duration::from_secs(30),
69746978
reset_replay_set_after_fork_blocks: DEFAULT_RESET_REPLAY_SET_AFTER_FORK_BLOCKS,
6979+
supports_sip034_tenure_extensions: false,
69756980
};
69766981
let burn_block_height = SortitionDB::get_canonical_burn_chain_tip(sortdb.conn())
69776982
.unwrap()
@@ -7051,6 +7056,7 @@ fn signer_chainstate() {
70517056
tenure_idle_timeout_buffer: Duration::from_secs(2),
70527057
reorg_attempts_activity_timeout: Duration::from_secs(30),
70537058
reset_replay_set_after_fork_blocks: DEFAULT_RESET_REPLAY_SET_AFTER_FORK_BLOCKS,
7059+
supports_sip034_tenure_extensions: false,
70547060
};
70557061
let mut sortitions_view = SortitionsView::fetch_view(proposal_conf, &signer_client).unwrap();
70567062
sortitions_view
@@ -7544,6 +7550,9 @@ fn continue_tenure_extend() {
75447550
}
75457551
tenure_block_founds.push(parsed);
75467552
}
7553+
_ => {
7554+
panic!("Unexpected tenure-extend cause {:?}", &payload.cause);
7555+
}
75477556
};
75487557
}
75497558
}
@@ -11142,7 +11151,7 @@ fn test_tenure_extend_from_flashblocks() {
1114211151
let parsed = StacksTransaction::consensus_deserialize(&mut &tx_bytes[..]).unwrap();
1114311152

1114411153
if let TransactionPayload::TenureChange(payload) = &parsed.payload {
11145-
if payload.cause == TenureChangeCause::Extended {
11154+
if payload.cause.is_eq(&TenureChangeCause::Extended) {
1114611155
has_extend = true;
1114711156
}
1114811157
}
@@ -11662,6 +11671,7 @@ fn large_mempool_base(strategy: MemPoolWalkStrategy, set_fee: impl Fn() -> u64)
1166211671

1166311672
let (mut naka_conf, _miner_account) = naka_neon_integration_conf(None);
1166411673
naka_conf.miner.mempool_walk_strategy = strategy;
11674+
naka_conf.miner.nakamoto_attempt_time_ms = 10_000;
1166511675

1166611676
let sender_signer_sk = Secp256k1PrivateKey::random();
1166711677
let sender_signer_addr = tests::to_addr(&sender_signer_sk);
@@ -12919,7 +12929,7 @@ fn miner_constructs_replay_block() {
1291912929
let tx_bytes = hex_bytes(&raw_tx[2..]).unwrap();
1292012930
let parsed = StacksTransaction::consensus_deserialize(&mut &tx_bytes[..]).unwrap();
1292112931
let tenure_change = parsed.try_as_tenure_change().unwrap();
12922-
assert_eq!(tenure_change.cause, TenureChangeCause::BlockFound);
12932+
assert!(tenure_change.cause.is_eq(&TenureChangeCause::BlockFound));
1292312933

1292412934
info!("Verifying next block contains the expected replay txs...");
1292512935
let block: StacksBlockEvent =

0 commit comments

Comments
 (0)