Skip to content

Commit 99e5a61

Browse files
authored
feat: support tenure-height in block messages (#661)
1 parent 21234c9 commit 99e5a61

File tree

7 files changed

+26
-0
lines changed

7 files changed

+26
-0
lines changed

components/chainhook-cli/src/service/tests/helpers/mock_stacks_node.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@ pub fn create_stacks_new_block(
261261
events,
262262
matured_miner_rewards: vec![],
263263
block_time: Some(12345),
264+
tenure_height: Some(1122),
264265
signer_bitvec: Some("000800000001ff".to_owned()),
265266
signer_signature: Some(vec!["1234".to_owned(), "2345".to_owned()]),
266267
cycle_number: Some(1),

components/chainhook-sdk/src/chainhooks/tests/fixtures/stacks/testnet/occurrence.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"pox_cycle_position": 1033,
1717
"stacks_block_hash": "0x",
1818
"block_time": null,
19+
"tenure_height": null,
1920
"cycle_number": null,
2021
"reward_set": null,
2122
"signer_bitvec": null,
@@ -103,6 +104,7 @@
103104
"pox_cycle_position": 1033,
104105
"stacks_block_hash": "0x",
105106
"block_time": null,
107+
"tenure_height": null,
106108
"cycle_number": null,
107109
"reward_set": null,
108110
"signer_bitvec": null,
@@ -189,6 +191,7 @@
189191
"pox_cycle_position": 1033,
190192
"stacks_block_hash": "0x",
191193
"block_time": null,
194+
"tenure_height": null,
192195
"cycle_number": null,
193196
"reward_set": null,
194197
"signer_bitvec": null,
@@ -276,6 +279,7 @@
276279
"pox_cycle_position": 1033,
277280
"stacks_block_hash": "0x",
278281
"block_time": null,
282+
"tenure_height": null,
279283
"cycle_number": null,
280284
"reward_set": null,
281285
"signer_bitvec": null,
@@ -362,6 +366,7 @@
362366
"pox_cycle_position": 1033,
363367
"stacks_block_hash": "0x",
364368
"block_time": null,
369+
"tenure_height": null,
365370
"cycle_number": null,
366371
"reward_set": null,
367372
"signer_bitvec": null,
@@ -450,6 +455,7 @@
450455
"pox_cycle_position": 1033,
451456
"stacks_block_hash": "0x",
452457
"block_time": null,
458+
"tenure_height": null,
453459
"cycle_number": null,
454460
"reward_set": null,
455461
"signer_bitvec": null,
@@ -537,6 +543,7 @@
537543
"pox_cycle_position": 1033,
538544
"stacks_block_hash": "0x",
539545
"block_time": null,
546+
"tenure_height": null,
540547
"cycle_number": null,
541548
"reward_set": null,
542549
"signer_bitvec": null,
@@ -624,6 +631,7 @@
624631
"pox_cycle_position": 1033,
625632
"stacks_block_hash": "0x",
626633
"block_time": null,
634+
"tenure_height": null,
627635
"cycle_number": null,
628636
"reward_set": null,
629637
"signer_bitvec": null,
@@ -712,6 +720,7 @@
712720
"pox_cycle_position": 1033,
713721
"stacks_block_hash": "0x",
714722
"block_time": null,
723+
"tenure_height": null,
715724
"cycle_number": null,
716725
"reward_set": null,
717726
"signer_bitvec": null,
@@ -799,6 +808,7 @@
799808
"pox_cycle_position": 1033,
800809
"stacks_block_hash": "0x",
801810
"block_time": null,
811+
"tenure_height": null,
802812
"cycle_number": null,
803813
"reward_set": null,
804814
"signer_bitvec": null,
@@ -886,6 +896,7 @@
886896
"pox_cycle_position": 1033,
887897
"stacks_block_hash": "0x",
888898
"block_time": null,
899+
"tenure_height": null,
889900
"cycle_number": null,
890901
"reward_set": null,
891902
"signer_bitvec": null,
@@ -973,6 +984,7 @@
973984
"pox_cycle_position": 1033,
974985
"stacks_block_hash": "0x",
975986
"block_time": null,
987+
"tenure_height": null,
976988
"cycle_number": null,
977989
"reward_set": null,
978990
"signer_bitvec": null,
@@ -1060,6 +1072,7 @@
10601072
"pox_cycle_position": 1033,
10611073
"stacks_block_hash": "0x",
10621074
"block_time": null,
1075+
"tenure_height": null,
10631076
"cycle_number": null,
10641077
"reward_set": null,
10651078
"signer_bitvec": null,
@@ -1157,6 +1170,7 @@
11571170
"pox_cycle_position": 1033,
11581171
"stacks_block_hash": "0x",
11591172
"block_time": null,
1173+
"tenure_height": null,
11601174
"cycle_number": null,
11611175
"reward_set": null,
11621176
"signer_bitvec": null,

components/chainhook-sdk/src/indexer/stacks/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ pub struct NewBlock {
3636
pub events: Vec<NewEvent>,
3737
pub matured_miner_rewards: Vec<MaturedMinerReward>,
3838

39+
#[serde(skip_serializing_if = "Option::is_none")]
40+
pub tenure_height: Option<u64>,
41+
3942
#[serde(skip_serializing_if = "Option::is_none")]
4043
pub block_time: Option<u64>,
4144

@@ -464,6 +467,7 @@ pub fn standardize_stacks_block(
464467
stacks_block_hash: block.block_hash.clone(),
465468

466469
block_time: block.block_time,
470+
tenure_height: block.tenure_height,
467471
// TODO: decode `signer_bitvec` into an easy to use bit string representation (e.g. "01010101")
468472
signer_bitvec: block.signer_bitvec.clone(),
469473
signer_signature: block.signer_signature.clone(),

components/chainhook-sdk/src/indexer/tests/helpers/stacks_blocks.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ pub fn generate_test_stacks_block(
7373
confirm_microblock_identifier,
7474
stacks_block_hash: String::new(),
7575
block_time: Some(12345),
76+
tenure_height: Some(1122),
7677
signer_bitvec: Some("1010101010101".to_owned()),
7778
signer_signature: Some(vec!["1234".to_owned(), "2345".to_owned()]),
7879
cycle_number: Some(1),

components/chainhook-types-js/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -696,6 +696,7 @@ export interface StacksBlockMetadata {
696696
pox_cycle_length: number;
697697

698698
block_time?: number | null;
699+
tenure_height?: number | null;
699700
signer_bitvec?: string | null;
700701
signer_signature?: string[] | null;
701702
cycle_number?: number | null;

components/chainhook-types-rs/src/rosetta.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ pub struct StacksBlockMetadata {
123123
// Available starting in epoch3, only included in blocks where the pox cycle rewards are first calculated
124124
pub cycle_number: Option<u64>,
125125
pub reward_set: Option<StacksBlockMetadataRewardSet>,
126+
127+
// Available in /new_block messages sent from stacks-core v3.0 and newer
128+
pub tenure_height: Option<u64>,
126129
}
127130

128131
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]

components/client/typescript/src/schemas/stacks/payload.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ export const StacksEventMetadataSchema = Type.Object({
6767
pox_cycle_position: Type.Integer(),
6868
stacks_block_hash: Type.String(),
6969

70+
tenure_height: Nullable(Type.Integer()),
71+
7072
// Fields included in Nakamoto block headers
7173
block_time: Nullable(Type.Integer()),
7274
signer_bitvec: Nullable(Type.String()),

0 commit comments

Comments
 (0)