@@ -70,6 +70,7 @@ use stacks::net::api::getstackers::GetStackersResponse;
70
70
use stacks:: net:: api:: postblock_proposal:: {
71
71
BlockValidateReject , BlockValidateResponse , NakamotoBlockProposal , ValidateRejectCode ,
72
72
} ;
73
+ use stacks:: types:: chainstate:: StacksBlockId ;
73
74
use stacks:: util:: hash:: hex_bytes;
74
75
use stacks:: util_lib:: boot:: boot_code_id;
75
76
use stacks:: util_lib:: signed_structured_data:: pox4:: {
@@ -7671,6 +7672,8 @@ fn assert_block_info(
7671
7672
miner : & Value ,
7672
7673
miner_spend : & clarity:: vm:: Value ,
7673
7674
) {
7675
+ info ! ( "block info tuple data: {tuple0:#?}" ) ;
7676
+
7674
7677
assert ! ( tuple0
7675
7678
. get( "burnchain-header-hash" )
7676
7679
. unwrap( )
@@ -7816,7 +7819,7 @@ fn check_block_info() {
7816
7819
7817
7820
// Deploy this version with the Clarity 1 / 2 before epoch 3
7818
7821
let contract0_name = "test-contract-0" ;
7819
- let contract_clarity1 = "(define-read-only (get-info (height uint))
7822
+ let contract_clarity1 = "(define-read-only (get-block- info (height uint))
7820
7823
{
7821
7824
burnchain-header-hash: (get-block-info? burnchain-header-hash height),
7822
7825
id-header-hash: (get-block-info? id-header-hash height),
@@ -7859,7 +7862,7 @@ fn check_block_info() {
7859
7862
& naka_conf,
7860
7863
& sender_addr,
7861
7864
contract0_name,
7862
- "get-info" ,
7865
+ "get-block- info" ,
7863
7866
vec ! [ & clarity:: vm:: Value :: UInt ( 1 ) ] ,
7864
7867
) ;
7865
7868
let tuple0 = result0. expect_tuple ( ) . unwrap ( ) . data_map ;
@@ -7929,25 +7932,36 @@ fn check_block_info() {
7929
7932
let info = get_chain_info_result ( & naka_conf) . unwrap ( ) ;
7930
7933
info ! ( "Chain info: {:?}" , info) ;
7931
7934
let last_stacks_block_height = info. stacks_tip_height as u128 ;
7935
+ let last_stacks_tip = StacksBlockId :: new ( & info. stacks_tip_consensus_hash , & info. stacks_tip ) ;
7936
+ let ( chainstate, _) = StacksChainState :: open (
7937
+ naka_conf. is_mainnet ( ) ,
7938
+ naka_conf. burnchain . chain_id ,
7939
+ & naka_conf. get_chainstate_path_str ( ) ,
7940
+ None ,
7941
+ )
7942
+ . unwrap ( ) ;
7932
7943
7933
- let result0 = call_read_only (
7934
- & naka_conf,
7935
- & sender_addr,
7936
- contract0_name,
7937
- "get-info" ,
7938
- vec ! [ & clarity:: vm:: Value :: UInt ( last_stacks_block_height - 2 ) ] ,
7939
- ) ;
7940
- let tuple0 = result0. expect_tuple ( ) . unwrap ( ) . data_map ;
7944
+ let last_tenure_height: u128 =
7945
+ NakamotoChainState :: get_coinbase_height ( & mut chainstate. index_conn ( ) , & last_stacks_tip)
7946
+ . unwrap ( )
7947
+ . unwrap ( )
7948
+ . into ( ) ;
7949
+
7950
+ let get_block_info = |contract_name : & str , query_height : u128 | {
7951
+ let result = call_read_only (
7952
+ & naka_conf,
7953
+ & sender_addr,
7954
+ contract_name,
7955
+ "get-block-info" ,
7956
+ vec ! [ & clarity:: vm:: Value :: UInt ( query_height) ] ,
7957
+ ) ;
7958
+ result. expect_tuple ( ) . unwrap ( ) . data_map
7959
+ } ;
7960
+
7961
+ let tuple0 = get_block_info ( contract0_name, last_tenure_height - 1 ) ;
7941
7962
assert_block_info ( & tuple0, & miner, & miner_spend) ;
7942
7963
7943
- let result1 = call_read_only (
7944
- & naka_conf,
7945
- & sender_addr,
7946
- contract1_name,
7947
- "get-info" ,
7948
- vec ! [ & clarity:: vm:: Value :: UInt ( last_stacks_block_height - 2 ) ] ,
7949
- ) ;
7950
- let tuple1 = result1. expect_tuple ( ) . unwrap ( ) . data_map ;
7964
+ let tuple1 = get_block_info ( contract1_name, last_tenure_height - 1 ) ;
7951
7965
assert_eq ! ( tuple0, tuple1) ;
7952
7966
7953
7967
let result3_tenure = call_read_only (
@@ -7981,14 +7995,8 @@ fn check_block_info() {
7981
7995
tuple0. get( "miner-spend-winner" )
7982
7996
) ;
7983
7997
7984
- let result3_block = call_read_only (
7985
- & naka_conf,
7986
- & sender_addr,
7987
- contract3_name,
7988
- "get-block-info" ,
7989
- vec ! [ & clarity:: vm:: Value :: UInt ( last_stacks_block_height - 2 ) ] ,
7990
- ) ;
7991
- let tuple3_block1 = result3_block. expect_tuple ( ) . unwrap ( ) . data_map ;
7998
+ // this will point to the last block in the prior tenure (which should have been a 2.x block)
7999
+ let tuple3_block1 = get_block_info ( contract3_name, last_stacks_block_height - 2 ) ;
7992
8000
assert_eq ! (
7993
8001
tuple3_block1. get( "id-header-hash" ) ,
7994
8002
tuple0. get( "id-header-hash" )
@@ -8038,25 +8046,17 @@ fn check_block_info() {
8038
8046
let info = get_chain_info_result ( & naka_conf) . unwrap ( ) ;
8039
8047
info ! ( "Chain info: {:?}" , info) ;
8040
8048
let last_stacks_block_height = info. stacks_tip_height as u128 ;
8049
+ let last_stacks_tip = StacksBlockId :: new ( & info. stacks_tip_consensus_hash , & info. stacks_tip ) ;
8050
+ let last_tenure_height: u128 =
8051
+ NakamotoChainState :: get_coinbase_height ( & mut chainstate. index_conn ( ) , & last_stacks_tip)
8052
+ . unwrap ( )
8053
+ . unwrap ( )
8054
+ . into ( ) ;
8041
8055
8042
- let result0 = call_read_only (
8043
- & naka_conf,
8044
- & sender_addr,
8045
- contract0_name,
8046
- "get-info" ,
8047
- vec ! [ & clarity:: vm:: Value :: UInt ( last_stacks_block_height - 1 ) ] ,
8048
- ) ;
8049
- let tuple0 = result0. expect_tuple ( ) . unwrap ( ) . data_map ;
8056
+ let tuple0 = get_block_info ( contract0_name, last_tenure_height) ;
8050
8057
assert_block_info ( & tuple0, & miner, & miner_spend) ;
8051
8058
8052
- let result1 = call_read_only (
8053
- & naka_conf,
8054
- & sender_addr,
8055
- contract1_name,
8056
- "get-info" ,
8057
- vec ! [ & clarity:: vm:: Value :: UInt ( last_stacks_block_height - 1 ) ] ,
8058
- ) ;
8059
- let tuple1 = result1. expect_tuple ( ) . unwrap ( ) . data_map ;
8059
+ let tuple1 = get_block_info ( contract1_name, last_tenure_height) ;
8060
8060
assert_eq ! ( tuple0, tuple1) ;
8061
8061
8062
8062
let result3_tenure = call_read_only (
@@ -8102,11 +8102,15 @@ fn check_block_info() {
8102
8102
let tuple3_block2 = result3_block. expect_tuple ( ) . unwrap ( ) . data_map ;
8103
8103
// There should have been a block change, so these should be different.
8104
8104
assert_ne ! ( tuple3_block1, tuple3_block2) ;
8105
+
8106
+ // tuple 0 fetches the id-header-hash for the first block of the tenure (block1)
8107
+
8108
+ let tuple3_block1 = get_block_info ( contract3_name, last_stacks_block_height - 2 ) ;
8105
8109
assert_eq ! (
8106
- tuple3_block2 . get( "id-header-hash" ) ,
8110
+ tuple3_block1 . get( "id-header-hash" ) ,
8107
8111
tuple0. get( "id-header-hash" )
8108
8112
) ;
8109
- assert_eq ! ( tuple3_block2 . get( "header-hash" ) , tuple0. get( "header-hash" ) ) ;
8113
+ assert_eq ! ( tuple3_block1 . get( "header-hash" ) , tuple0. get( "header-hash" ) ) ;
8110
8114
assert ! ( tuple3_block2
8111
8115
. get( "time" )
8112
8116
. unwrap( )
@@ -8150,25 +8154,17 @@ fn check_block_info() {
8150
8154
let info = get_chain_info_result ( & naka_conf) . unwrap ( ) ;
8151
8155
info ! ( "Chain info: {:?}" , info) ;
8152
8156
let last_stacks_block_height = info. stacks_tip_height as u128 ;
8157
+ let last_stacks_tip = StacksBlockId :: new ( & info. stacks_tip_consensus_hash , & info. stacks_tip ) ;
8158
+ let last_tenure_height: u128 =
8159
+ NakamotoChainState :: get_coinbase_height ( & mut chainstate. index_conn ( ) , & last_stacks_tip)
8160
+ . unwrap ( )
8161
+ . unwrap ( )
8162
+ . into ( ) ;
8153
8163
8154
- let result0 = call_read_only (
8155
- & naka_conf,
8156
- & sender_addr,
8157
- contract0_name,
8158
- "get-info" ,
8159
- vec ! [ & clarity:: vm:: Value :: UInt ( last_stacks_block_height - 1 ) ] ,
8160
- ) ;
8161
- let tuple0 = result0. expect_tuple ( ) . unwrap ( ) . data_map ;
8164
+ let tuple0 = get_block_info ( contract0_name, last_tenure_height) ;
8162
8165
assert_block_info ( & tuple0, & miner, & miner_spend) ;
8163
8166
8164
- let result1 = call_read_only (
8165
- & naka_conf,
8166
- & sender_addr,
8167
- contract1_name,
8168
- "get-info" ,
8169
- vec ! [ & clarity:: vm:: Value :: UInt ( last_stacks_block_height - 1 ) ] ,
8170
- ) ;
8171
- let tuple1 = result1. expect_tuple ( ) . unwrap ( ) . data_map ;
8167
+ let tuple1 = get_block_info ( contract1_name, last_tenure_height) ;
8172
8168
assert_eq ! ( tuple0, tuple1) ;
8173
8169
8174
8170
let result3_tenure = call_read_only (
@@ -8181,21 +8177,14 @@ fn check_block_info() {
8181
8177
let tuple3_tenure1a = result3_tenure. expect_tuple ( ) . unwrap ( ) . data_map ;
8182
8178
assert_eq ! ( tuple3_tenure1, tuple3_tenure1a) ;
8183
8179
8184
- let result3_block = call_read_only (
8185
- & naka_conf,
8186
- & sender_addr,
8187
- contract3_name,
8188
- "get-block-info" ,
8189
- vec ! [ & clarity:: vm:: Value :: UInt ( last_stacks_block_height - 1 ) ] ,
8190
- ) ;
8191
- let tuple3_block3 = result3_block. expect_tuple ( ) . unwrap ( ) . data_map ;
8180
+ let tuple3_block3 = get_block_info ( contract3_name, last_stacks_block_height - 1 ) ;
8192
8181
// There should have been a block change, so these should be different.
8193
8182
assert_ne ! ( tuple3_block3, tuple3_block2) ;
8194
8183
assert_eq ! (
8195
- tuple3_block3 . get( "id-header-hash" ) ,
8184
+ tuple3_block1 . get( "id-header-hash" ) ,
8196
8185
tuple0. get( "id-header-hash" )
8197
8186
) ;
8198
- assert_eq ! ( tuple3_block3 . get( "header-hash" ) , tuple0. get( "header-hash" ) ) ;
8187
+ assert_eq ! ( tuple3_block1 . get( "header-hash" ) , tuple0. get( "header-hash" ) ) ;
8199
8188
assert ! ( tuple3_block3
8200
8189
. get( "time" )
8201
8190
. unwrap( )
0 commit comments