Skip to content

Commit c3a015e

Browse files
committed
added integration test base for sip031
1 parent 03d0f50 commit c3a015e

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed

testnet/stacks-node/src/tests/nakamoto_integrations.rs

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ use crate::{tests, BitcoinRegtestController, BurnchainController, Config, Config
128128
pub static POX_4_DEFAULT_STACKER_BALANCE: u64 = 100_000_000_000_000;
129129
pub static POX_4_DEFAULT_STACKER_STX_AMT: u128 = 99_000_000_000_000;
130130

131+
use crate::clarity::vm::clarity::ClarityConnection;
132+
131133
lazy_static! {
132134
pub static ref NAKAMOTO_INTEGRATION_EPOCHS: [StacksEpoch; 11] = [
133135
StacksEpoch {
@@ -12675,3 +12677,136 @@ fn write_signer_update(
1267512677
);
1267612678
}
1267712679
}
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

Comments
 (0)