@@ -128,6 +128,8 @@ use crate::{tests, BitcoinRegtestController, BurnchainController, Config, Config
128
128
pub static POX_4_DEFAULT_STACKER_BALANCE : u64 = 100_000_000_000_000 ;
129
129
pub static POX_4_DEFAULT_STACKER_STX_AMT : u128 = 99_000_000_000_000 ;
130
130
131
+ use crate :: clarity:: vm:: clarity:: ClarityConnection ;
132
+
131
133
lazy_static ! {
132
134
pub static ref NAKAMOTO_INTEGRATION_EPOCHS : [ StacksEpoch ; 11 ] = [
133
135
StacksEpoch {
@@ -12675,3 +12677,136 @@ fn write_signer_update(
12675
12677
) ;
12676
12678
}
12677
12679
}
12680
+
12681
+ /// Test SIP-031 activation
12682
+ ///
12683
+ /// - check epoch 3.2 is activa
12684
+ /// - check sip031 boot contract has a balance of 200_000_000 STX (TODO)
12685
+ #[ test]
12686
+ #[ ignore]
12687
+ fn test_sip_031_activation ( ) {
12688
+ if env:: var ( "BITCOIND_TEST" ) != Ok ( "1" . into ( ) ) {
12689
+ return ;
12690
+ }
12691
+
12692
+ let ( mut naka_conf, _miner_account) = naka_neon_integration_conf ( None ) ;
12693
+ naka_conf. node . pox_sync_sample_secs = 180 ;
12694
+ naka_conf. burnchain . max_rbf = 10_000_000 ;
12695
+
12696
+ let sender_sk = Secp256k1PrivateKey :: random ( ) ;
12697
+ let sender_signer_sk = Secp256k1PrivateKey :: random ( ) ;
12698
+ let sender_signer_addr = tests:: to_addr ( & sender_signer_sk) ;
12699
+ let mut signers = TestSigners :: new ( vec ! [ sender_signer_sk] ) ;
12700
+ let tenure_count = 5 ;
12701
+ let inter_blocks_per_tenure = 9 ;
12702
+ // setup sender + recipient for some test stx transfers
12703
+ // these are necessary for the interim blocks to get mined at all
12704
+ let sender_addr = tests:: to_addr ( & sender_sk) ;
12705
+ let send_amt = 100 ;
12706
+ let send_fee = 180 ;
12707
+ naka_conf. add_initial_balance (
12708
+ PrincipalData :: from ( sender_addr) . to_string ( ) ,
12709
+ ( send_amt + send_fee) * tenure_count * inter_blocks_per_tenure,
12710
+ ) ;
12711
+ naka_conf. add_initial_balance ( PrincipalData :: from ( sender_signer_addr) . to_string ( ) , 100000 ) ;
12712
+ let stacker_sk = setup_stacker ( & mut naka_conf) ;
12713
+
12714
+ test_observer:: spawn ( ) ;
12715
+ test_observer:: register_any ( & mut naka_conf) ;
12716
+
12717
+ let mut btcd_controller = BitcoinCoreController :: new ( naka_conf. clone ( ) ) ;
12718
+ btcd_controller
12719
+ . start_bitcoind ( )
12720
+ . expect ( "Failed starting bitcoind" ) ;
12721
+ let mut btc_regtest_controller = BitcoinRegtestController :: new ( naka_conf. clone ( ) , None ) ;
12722
+ btc_regtest_controller. bootstrap_chain ( 201 ) ;
12723
+
12724
+ let mut run_loop = boot_nakamoto:: BootRunLoop :: new ( naka_conf. clone ( ) ) . unwrap ( ) ;
12725
+ let run_loop_stopper = run_loop. get_termination_switch ( ) ;
12726
+ let Counters {
12727
+ blocks_processed,
12728
+ naka_submitted_commits : commits_submitted,
12729
+ ..
12730
+ } = run_loop. counters ( ) ;
12731
+ let counters = run_loop. counters ( ) ;
12732
+
12733
+ let coord_channel = run_loop. coordinator_channels ( ) ;
12734
+
12735
+ let run_loop_thread = thread:: Builder :: new ( )
12736
+ . name ( "run_loop" . into ( ) )
12737
+ . spawn ( move || run_loop. start ( None , 0 ) )
12738
+ . unwrap ( ) ;
12739
+ wait_for_runloop ( & blocks_processed) ;
12740
+ boot_to_epoch_3 (
12741
+ & naka_conf,
12742
+ & blocks_processed,
12743
+ & [ stacker_sk] ,
12744
+ & [ sender_signer_sk] ,
12745
+ & mut Some ( & mut signers) ,
12746
+ & mut btc_regtest_controller,
12747
+ ) ;
12748
+
12749
+ info ! ( "Bootstrapped to Epoch-3.0 boundary, starting nakamoto miner" ) ;
12750
+
12751
+ let burnchain = naka_conf. get_burnchain ( ) ;
12752
+ let sortdb = burnchain. open_sortition_db ( true ) . unwrap ( ) ;
12753
+ let ( mut chainstate, _) = StacksChainState :: open (
12754
+ naka_conf. is_mainnet ( ) ,
12755
+ naka_conf. burnchain . chain_id ,
12756
+ & naka_conf. get_chainstate_path_str ( ) ,
12757
+ None ,
12758
+ )
12759
+ . unwrap ( ) ;
12760
+
12761
+ info ! ( "Nakamoto miner started..." ) ;
12762
+ blind_signer ( & naka_conf, & signers, & counters) ;
12763
+
12764
+ wait_for_first_naka_block_commit ( 60 , & commits_submitted) ;
12765
+
12766
+ // mine until epooch 3.2 height
12767
+ loop {
12768
+ let commits_before = commits_submitted. load ( Ordering :: SeqCst ) ;
12769
+ next_block_and_process_new_stacks_block ( & mut btc_regtest_controller, 60 , & coord_channel)
12770
+ . unwrap ( ) ;
12771
+ wait_for ( 20 , || {
12772
+ Ok ( commits_submitted. load ( Ordering :: SeqCst ) > commits_before)
12773
+ } )
12774
+ . unwrap ( ) ;
12775
+
12776
+ let node_info = get_chain_info_opt ( & naka_conf) . unwrap ( ) ;
12777
+ if node_info. burn_block_height
12778
+ >= naka_conf. burnchain . epochs . clone ( ) . unwrap ( ) [ StacksEpochId :: Epoch32 ] . start_height
12779
+ {
12780
+ break ;
12781
+ }
12782
+ }
12783
+
12784
+ info ! (
12785
+ "Nakamoto miner has advanced to bitcoin height {}" ,
12786
+ get_chain_info_opt( & naka_conf) . unwrap( ) . burn_block_height
12787
+ ) ;
12788
+
12789
+ // check for Epoch 3.2 in clarity db
12790
+ let latest_stacks_block_id = get_latest_block_proposal ( & naka_conf, & sortdb)
12791
+ . unwrap ( )
12792
+ . 0
12793
+ . block_id ( ) ;
12794
+
12795
+ let epoch_version = chainstate. with_read_only_clarity_tx (
12796
+ & sortdb
12797
+ . index_handle_at_block ( & chainstate, & latest_stacks_block_id)
12798
+ . unwrap ( ) ,
12799
+ & latest_stacks_block_id,
12800
+ |conn| conn. with_clarity_db_readonly ( |db| db. get_clarity_epoch_version ( ) . unwrap ( ) ) ,
12801
+ ) ;
12802
+
12803
+ assert_eq ! ( epoch_version, Some ( StacksEpochId :: Epoch32 ) ) ;
12804
+
12805
+ coord_channel
12806
+ . lock ( )
12807
+ . expect ( "Mutex poisoned" )
12808
+ . stop_chains_coordinator ( ) ;
12809
+ run_loop_stopper. store ( false , Ordering :: SeqCst ) ;
12810
+
12811
+ run_loop_thread. join ( ) . unwrap ( ) ;
12812
+ }
0 commit comments