Skip to content

Commit ca46d23

Browse files
Merge pull request #7209 from aaronb-stacks/feat/wf-signer-set
Integrate pox-5 signer set calculation
2 parents 9791d29 + c33cf38 commit ca46d23

219 files changed

Lines changed: 7257 additions & 6369 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

stacks-node/src/tests/nakamoto_integrations.rs

Lines changed: 92 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ use crate::tests::neon_integrations::{
135135
get_sortition_info, next_block_and_wait, run_until_burnchain_height, submit_tx,
136136
submit_tx_fallible, test_observer, wait_for_runloop, wait_for_tenure_change_tx,
137137
};
138-
use crate::tests::signer::v0::agg_pubkey_sbtc_stub_source;
138+
use crate::tests::signer::v0::{sbtc_registry_stub_source, sbtc_token_stub_source};
139139
use crate::tests::signer::SignerTest;
140140
use crate::tests::{gen_random_port, get_chain_info, make_contract_publish, to_addr};
141141
use crate::{tests, BitcoinRegtestController, BurnchainController, Config, ConfigFile, Keychain};
@@ -19524,19 +19524,24 @@ fn check_pox_5_stake_lifecycle() {
1952419524
100000,
1952519525
);
1952619526

19527-
// sBTC stub — pox-5 boot needs the stub deployed before the epoch 4.0
19528-
// transition for static analysis to find the referenced contract.
19527+
// sBTC stubs - pox-5 boot needs both stubs deployed before the epoch 4.0
19528+
// transition for static analysis to find the referenced contracts.
1952919529
let sbtc_deployer_sk = Secp256k1PrivateKey::random();
1953019530
let sbtc_deployer_addr = tests::to_addr(&sbtc_deployer_sk);
1953119531
naka_conf.add_initial_balance(
1953219532
PrincipalData::from(sbtc_deployer_addr.clone()).to_string(),
19533-
deploy_fee,
19533+
2 * deploy_fee,
1953419534
);
1953519535
let sbtc_token_id = QualifiedContractIdentifier::new(
1953619536
sbtc_deployer_addr.clone().into(),
1953719537
clarity::vm::ContractName::try_from("sbtc-token").unwrap(),
1953819538
);
19539+
let sbtc_registry_id = QualifiedContractIdentifier::new(
19540+
sbtc_deployer_addr.clone().into(),
19541+
clarity::vm::ContractName::try_from("sbtc-registry").unwrap(),
19542+
);
1953919543
naka_conf.node.pox_5_sbtc_contract = Some(sbtc_token_id.clone());
19544+
naka_conf.node.pox_5_sbtc_registry_contract = Some(sbtc_registry_id.clone());
1954019545

1954119546
let stacker_sk = setup_stacker(&mut naka_conf);
1954219547
let staker_sk = setup_stacker(&mut naka_conf);
@@ -19582,22 +19587,32 @@ fn check_pox_5_stake_lifecycle() {
1958219587
.to_bytes_compressed()
1958319588
.try_into()
1958419589
.expect("compressed secp256k1 pubkey should be 33 bytes");
19585-
let sbtc_token_contract = agg_pubkey_sbtc_stub_source(&pubkey_bytes);
19590+
let sbtc_token_contract = sbtc_token_stub_source();
1958619591
let sbtc_deploy_tx = make_contract_publish(
1958719592
&sbtc_deployer_sk,
1958819593
0,
1958919594
deploy_fee,
1959019595
naka_conf.burnchain.chain_id,
1959119596
"sbtc-token",
19592-
&sbtc_token_contract,
19597+
sbtc_token_contract,
1959319598
);
1959419599
submit_tx(&http_origin, &sbtc_deploy_tx);
19600+
let sbtc_registry_contract = sbtc_registry_stub_source(&pubkey_bytes);
19601+
let sbtc_registry_deploy_tx = make_contract_publish(
19602+
&sbtc_deployer_sk,
19603+
1,
19604+
deploy_fee,
19605+
naka_conf.burnchain.chain_id,
19606+
"sbtc-registry",
19607+
&sbtc_registry_contract,
19608+
);
19609+
submit_tx(&http_origin, &sbtc_registry_deploy_tx);
1959519610
next_block_and_process_new_stacks_block(&mut btc_regtest_controller, 60, &coord_channel)
1959619611
.unwrap();
1959719612
wait_for(60, || {
19598-
Ok(get_account(&http_origin, &to_addr(&sbtc_deployer_sk)).nonce > 0)
19613+
Ok(get_account(&http_origin, &to_addr(&sbtc_deployer_sk)).nonce > 1)
1959919614
})
19600-
.expect("Timed out waiting for sbtc-token deploy");
19615+
.expect("Timed out waiting for sbtc-token and sbtc-registry deploys");
1960119616

1960219617
// mine until epoch 4.0
1960319618
loop {
@@ -19926,19 +19941,24 @@ fn check_pox_5_register_for_bond_lifecycle() {
1992619941
100000,
1992719942
);
1992819943

19929-
// sBTC stub — pox-5 boot needs the stub deployed before the epoch 4.0
19930-
// transition for static analysis to find the referenced contract.
19944+
// sBTC stubs - pox-5 boot needs both stubs deployed before the epoch 4.0
19945+
// transition for static analysis to find the referenced contracts.
1993119946
let sbtc_deployer_sk = Secp256k1PrivateKey::random();
1993219947
let sbtc_deployer_addr = tests::to_addr(&sbtc_deployer_sk);
1993319948
naka_conf.add_initial_balance(
1993419949
PrincipalData::from(sbtc_deployer_addr.clone()).to_string(),
19935-
deploy_fee,
19950+
2 * deploy_fee,
1993619951
);
1993719952
let sbtc_token_id = QualifiedContractIdentifier::new(
1993819953
sbtc_deployer_addr.clone().into(),
1993919954
clarity::vm::ContractName::try_from("sbtc-token").unwrap(),
1994019955
);
19956+
let sbtc_registry_id = QualifiedContractIdentifier::new(
19957+
sbtc_deployer_addr.clone().into(),
19958+
clarity::vm::ContractName::try_from("sbtc-registry").unwrap(),
19959+
);
1994119960
naka_conf.node.pox_5_sbtc_contract = Some(sbtc_token_id.clone());
19961+
naka_conf.node.pox_5_sbtc_registry_contract = Some(sbtc_registry_id.clone());
1994219962

1994319963
// The pox-5 boot contract initializes its `bond-admin` data var to
1994419964
// `tx-sender`, which at boot deploy time is the unsignable boot
@@ -20000,22 +20020,32 @@ fn check_pox_5_register_for_bond_lifecycle() {
2000020020
.to_bytes_compressed()
2000120021
.try_into()
2000220022
.expect("compressed secp256k1 pubkey should be 33 bytes");
20003-
let sbtc_token_contract = agg_pubkey_sbtc_stub_source(&pubkey_bytes);
20023+
let sbtc_token_contract = sbtc_token_stub_source();
2000420024
let sbtc_deploy_tx = make_contract_publish(
2000520025
&sbtc_deployer_sk,
2000620026
0,
2000720027
deploy_fee,
2000820028
naka_conf.burnchain.chain_id,
2000920029
"sbtc-token",
20010-
&sbtc_token_contract,
20030+
sbtc_token_contract,
2001120031
);
2001220032
submit_tx(&http_origin, &sbtc_deploy_tx);
20033+
let sbtc_registry_contract = sbtc_registry_stub_source(&pubkey_bytes);
20034+
let sbtc_registry_deploy_tx = make_contract_publish(
20035+
&sbtc_deployer_sk,
20036+
1,
20037+
deploy_fee,
20038+
naka_conf.burnchain.chain_id,
20039+
"sbtc-registry",
20040+
&sbtc_registry_contract,
20041+
);
20042+
submit_tx(&http_origin, &sbtc_registry_deploy_tx);
2001320043
next_block_and_process_new_stacks_block(&mut btc_regtest_controller, 60, &coord_channel)
2001420044
.unwrap();
2001520045
wait_for(60, || {
20016-
Ok(get_account(&http_origin, &to_addr(&sbtc_deployer_sk)).nonce > 0)
20046+
Ok(get_account(&http_origin, &to_addr(&sbtc_deployer_sk)).nonce > 1)
2001720047
})
20018-
.expect("Timed out waiting for sbtc-token deploy");
20048+
.expect("Timed out waiting for sbtc-token and sbtc-registry deploys");
2001920049

2002020050
// mine until epoch 4.0
2002120051
loop {
@@ -20398,18 +20428,24 @@ fn check_with_stacking_allowances_stake() {
2039820428
100000,
2039920429
);
2040020430

20401-
// Set the sBTC token contract, which we will deploy before epoch 4.0
20431+
// Set the sBTC token and registry contracts, which we will deploy before
20432+
// epoch 4.0
2040220433
let sbtc_deployer_sk = Secp256k1PrivateKey::random();
2040320434
let sbtc_deployer_addr = tests::to_addr(&sbtc_deployer_sk);
2040420435
naka_conf.add_initial_balance(
2040520436
PrincipalData::from(sbtc_deployer_addr.clone()).to_string(),
20406-
deploy_fee,
20437+
2 * deploy_fee,
2040720438
);
2040820439
let sbtc_token_id = QualifiedContractIdentifier::new(
2040920440
sbtc_deployer_addr.clone().into(),
2041020441
clarity::vm::ContractName::try_from("sbtc-token").unwrap(),
2041120442
);
20443+
let sbtc_registry_id = QualifiedContractIdentifier::new(
20444+
sbtc_deployer_addr.clone().into(),
20445+
clarity::vm::ContractName::try_from("sbtc-registry").unwrap(),
20446+
);
2041220447
naka_conf.node.pox_5_sbtc_contract = Some(sbtc_token_id.clone());
20448+
naka_conf.node.pox_5_sbtc_registry_contract = Some(sbtc_registry_id.clone());
2041320449

2041420450
// Default stacker used for bootstrapping
2041520451
let stacker_sk = setup_stacker(&mut naka_conf);
@@ -20464,26 +20500,37 @@ fn check_with_stacking_allowances_stake() {
2046420500
.to_bytes_compressed()
2046520501
.try_into()
2046620502
.expect("compressed secp256k1 pubkey should be 33 bytes");
20467-
let sbtc_token_contract = agg_pubkey_sbtc_stub_source(&pubkey_bytes);
20503+
let sbtc_token_contract = sbtc_token_stub_source();
2046820504
let sbtc_deploy_tx = make_contract_publish(
2046920505
&sbtc_deployer_sk,
2047020506
0,
2047120507
deploy_fee,
2047220508
naka_conf.burnchain.chain_id,
2047320509
"sbtc-token",
20474-
&sbtc_token_contract,
20510+
sbtc_token_contract,
2047520511
);
2047620512
let sbtc_deploy_txid = submit_tx(&http_origin, &sbtc_deploy_tx);
2047720513
info!("Submitted sbtc-token deploy txid: {sbtc_deploy_txid}");
20514+
let sbtc_registry_contract = sbtc_registry_stub_source(&pubkey_bytes);
20515+
let sbtc_registry_deploy_tx = make_contract_publish(
20516+
&sbtc_deployer_sk,
20517+
1,
20518+
deploy_fee,
20519+
naka_conf.burnchain.chain_id,
20520+
"sbtc-registry",
20521+
&sbtc_registry_contract,
20522+
);
20523+
let sbtc_registry_deploy_txid = submit_tx(&http_origin, &sbtc_registry_deploy_tx);
20524+
info!("Submitted sbtc-registry deploy txid: {sbtc_registry_deploy_txid}");
2047820525

20479-
// Wait for the sbtc-token deploy to be processed.
20526+
// Wait for the sbtc-token and sbtc-registry deploys to be processed.
2048020527
next_block_and_process_new_stacks_block(&mut btc_regtest_controller, 60, &coord_channel)
2048120528
.unwrap();
2048220529
wait_for(60, || {
2048320530
let sbtc_deployer_nonce = get_account(&http_origin, &to_addr(&sbtc_deployer_sk)).nonce;
20484-
Ok(sbtc_deployer_nonce > 0)
20531+
Ok(sbtc_deployer_nonce > 1)
2048520532
})
20486-
.expect("Timed out waiting for sbtc-token contract deploy");
20533+
.expect("Timed out waiting for sbtc-token and sbtc-registry contract deploys");
2048720534

2048820535
// mine until epoch 4.0 height
2048920536
loop {
@@ -20996,18 +21043,24 @@ fn check_with_stacking_allowances_register_for_bond() {
2099621043
100000,
2099721044
);
2099821045

20999-
// Set the sBTC token contract, which we will deploy before epoch 4.0
21046+
// Set the sBTC token and registry contracts, which we will deploy before
21047+
// epoch 4.0
2100021048
let sbtc_deployer_sk = Secp256k1PrivateKey::random();
2100121049
let sbtc_deployer_addr = tests::to_addr(&sbtc_deployer_sk);
2100221050
naka_conf.add_initial_balance(
2100321051
PrincipalData::from(sbtc_deployer_addr.clone()).to_string(),
21004-
deploy_fee,
21052+
2 * deploy_fee,
2100521053
);
2100621054
let sbtc_token_id = QualifiedContractIdentifier::new(
2100721055
sbtc_deployer_addr.clone().into(),
2100821056
clarity::vm::ContractName::try_from("sbtc-token").unwrap(),
2100921057
);
21058+
let sbtc_registry_id = QualifiedContractIdentifier::new(
21059+
sbtc_deployer_addr.clone().into(),
21060+
clarity::vm::ContractName::try_from("sbtc-registry").unwrap(),
21061+
);
2101021062
naka_conf.node.pox_5_sbtc_contract = Some(sbtc_token_id.clone());
21063+
naka_conf.node.pox_5_sbtc_registry_contract = Some(sbtc_registry_id.clone());
2101121064

2101221065
// The pox-5 boot contract initializes its `bond-admin` data var to
2101321066
// `tx-sender`, which at boot deploy time is the unsignable boot
@@ -21076,25 +21129,36 @@ fn check_with_stacking_allowances_register_for_bond() {
2107621129
.to_bytes_compressed()
2107721130
.try_into()
2107821131
.expect("compressed secp256k1 pubkey should be 33 bytes");
21079-
let sbtc_token_contract = agg_pubkey_sbtc_stub_source(&pubkey_bytes);
21132+
let sbtc_token_contract = sbtc_token_stub_source();
2108021133
let sbtc_deploy_tx = make_contract_publish(
2108121134
&sbtc_deployer_sk,
2108221135
0,
2108321136
deploy_fee,
2108421137
naka_conf.burnchain.chain_id,
2108521138
"sbtc-token",
21086-
&sbtc_token_contract,
21139+
sbtc_token_contract,
2108721140
);
2108821141
let sbtc_deploy_txid = submit_tx(&http_origin, &sbtc_deploy_tx);
2108921142
info!("Submitted sbtc-token deploy txid: {sbtc_deploy_txid}");
21143+
let sbtc_registry_contract = sbtc_registry_stub_source(&pubkey_bytes);
21144+
let sbtc_registry_deploy_tx = make_contract_publish(
21145+
&sbtc_deployer_sk,
21146+
1,
21147+
deploy_fee,
21148+
naka_conf.burnchain.chain_id,
21149+
"sbtc-registry",
21150+
&sbtc_registry_contract,
21151+
);
21152+
let sbtc_registry_deploy_txid = submit_tx(&http_origin, &sbtc_registry_deploy_tx);
21153+
info!("Submitted sbtc-registry deploy txid: {sbtc_registry_deploy_txid}");
2109021154

2109121155
next_block_and_process_new_stacks_block(&mut btc_regtest_controller, 60, &coord_channel)
2109221156
.unwrap();
2109321157
wait_for(60, || {
2109421158
let sbtc_deployer_nonce = get_account(&http_origin, &to_addr(&sbtc_deployer_sk)).nonce;
21095-
Ok(sbtc_deployer_nonce > 0)
21159+
Ok(sbtc_deployer_nonce > 1)
2109621160
})
21097-
.expect("Timed out waiting for sbtc-token contract deploy");
21161+
.expect("Timed out waiting for sbtc-token and sbtc-registry contract deploys");
2109821162

2109921163
// mine until epoch 4.0 height
2110021164
loop {

0 commit comments

Comments
 (0)