Skip to content

Commit 10b193e

Browse files
committed
DROPME: Separate premining from distributing funds
BDK currently panics if we start syncing the node while the tip height is still 0, which happens in our usual regtest setup. Here, we make sure to premine *before* starting up the nodes to avoid hitting this panic. While splitting premining and distributing funds in this way is fine (and even makes sense) in most cases, in some cases it's annoying as we wouldn't previously premine at all, but are now required to. So we should eventually drop/revert (at least this part of) this workaround as soon as BDK ships the fix on their end (bitcoindevkit/bdk#1601).
1 parent bcc714e commit 10b193e

File tree

4 files changed

+61
-22
lines changed

4 files changed

+61
-22
lines changed

tests/common/mod.rs

+12-1
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@ pub(crate) fn setup_bitcoind_and_electrsd() -> (BitcoinD, ElectrsD) {
171171
electrsd_conf.http_enabled = true;
172172
electrsd_conf.network = "regtest";
173173
let electrsd = ElectrsD::with_conf(electrs_exe, &bitcoind, &electrsd_conf).unwrap();
174+
175+
generate_blocks_and_wait(&bitcoind.client, &electrsd.client, 101);
174176
(bitcoind, electrsd)
175177
}
176178

@@ -371,10 +373,19 @@ where
371373
pub(crate) fn premine_and_distribute_funds<E: ElectrumApi>(
372374
bitcoind: &BitcoindClient, electrs: &E, addrs: Vec<Address>, amount: Amount,
373375
) {
376+
premine(bitcoind, electrs);
377+
distribute_funds(bitcoind, electrs, addrs, amount);
378+
}
379+
380+
pub(crate) fn premine<E: ElectrumApi>(bitcoind: &BitcoindClient, electrs: &E) {
374381
let _ = bitcoind.create_wallet("ldk_node_test", None, None, None, None);
375382
let _ = bitcoind.load_wallet("ldk_node_test");
376383
generate_blocks_and_wait(bitcoind, electrs, 101);
384+
}
377385

386+
pub(crate) fn distribute_funds<E: ElectrumApi>(
387+
bitcoind: &BitcoindClient, electrs: &E, addrs: Vec<Address>, amount: Amount,
388+
) {
378389
for addr in addrs {
379390
let txid =
380391
bitcoind.send_to_address(&addr, amount, None, None, None, None, None, None).unwrap();
@@ -415,7 +426,7 @@ pub(crate) fn do_channel_full_cycle<E: ElectrumApi>(
415426

416427
let premine_amount_sat = if expect_anchor_channel { 2_125_000 } else { 2_100_000 };
417428

418-
premine_and_distribute_funds(
429+
distribute_funds(
419430
&bitcoind,
420431
electrsd,
421432
vec![addr_a, addr_b],

tests/integration_tests_cln.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ fn test_cln() {
4040
let electrs_client = ElectrumClient::new("tcp://127.0.0.1:50001").unwrap();
4141

4242
// Give electrs a kick.
43-
common::generate_blocks_and_wait(&bitcoind_client, &electrs_client, 1);
43+
common::generate_blocks_and_wait(&bitcoind_client, &electrs_client, 101);
4444

4545
// Setup LDK Node
4646
let config = common::random_config(true);

tests/integration_tests_rust.rs

+44-19
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
mod common;
99

1010
use common::{
11-
do_channel_full_cycle, expect_channel_ready_event, expect_event, expect_payment_received_event,
12-
expect_payment_successful_event, generate_blocks_and_wait, open_channel,
13-
premine_and_distribute_funds, random_config, setup_bitcoind_and_electrsd, setup_builder,
14-
setup_node, setup_two_nodes, wait_for_tx, TestSyncStore,
11+
distribute_funds, do_channel_full_cycle, expect_channel_ready_event, expect_event,
12+
expect_payment_received_event, expect_payment_successful_event, generate_blocks_and_wait,
13+
open_channel, premine, random_config, setup_bitcoind_and_electrsd, setup_builder, setup_node,
14+
setup_two_nodes, wait_for_tx, TestSyncStore,
1515
};
1616

1717
use ldk_node::payment::{PaymentKind, QrPaymentResult, SendingParameters};
@@ -27,49 +27,61 @@ use std::sync::Arc;
2727
#[test]
2828
fn channel_full_cycle() {
2929
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
30+
premine(&bitcoind.client, &electrsd.client);
31+
3032
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
3133
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, false);
3234
}
3335

3436
#[test]
3537
fn channel_full_cycle_force_close() {
3638
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
39+
premine(&bitcoind.client, &electrsd.client);
40+
3741
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
3842
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, true);
3943
}
4044

4145
#[test]
4246
fn channel_full_cycle_force_close_trusted_no_reserve() {
4347
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
48+
premine(&bitcoind.client, &electrsd.client);
49+
4450
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, true);
4551
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, true);
4652
}
4753

4854
#[test]
4955
fn channel_full_cycle_0conf() {
5056
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
57+
premine(&bitcoind.client, &electrsd.client);
58+
5159
let (node_a, node_b) = setup_two_nodes(&electrsd, true, true, false);
5260
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, true, true, false)
5361
}
5462

5563
#[test]
5664
fn channel_full_cycle_legacy_staticremotekey() {
5765
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
66+
premine(&bitcoind.client, &electrsd.client);
67+
5868
let (node_a, node_b) = setup_two_nodes(&electrsd, false, false, false);
5969
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, false, false);
6070
}
6171

6272
#[test]
6373
fn channel_open_fails_when_funds_insufficient() {
6474
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
75+
premine(&bitcoind.client, &electrsd.client);
76+
6577
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
6678

6779
let addr_a = node_a.onchain_payment().new_address().unwrap();
6880
let addr_b = node_b.onchain_payment().new_address().unwrap();
6981

7082
let premine_amount_sat = 100_000;
7183

72-
premine_and_distribute_funds(
84+
distribute_funds(
7385
&bitcoind.client,
7486
&electrsd.client,
7587
vec![addr_a, addr_b],
@@ -97,6 +109,8 @@ fn channel_open_fails_when_funds_insufficient() {
97109
#[test]
98110
fn multi_hop_sending() {
99111
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
112+
premine(&bitcoind.client, &electrsd.client);
113+
100114
let esplora_url = format!("http://{}", electrsd.esplora_url.as_ref().unwrap());
101115

102116
// Setup and fund 5 nodes
@@ -112,7 +126,7 @@ fn multi_hop_sending() {
112126

113127
let addresses = nodes.iter().map(|n| n.onchain_payment().new_address().unwrap()).collect();
114128
let premine_amount_sat = 5_000_000;
115-
premine_and_distribute_funds(
129+
distribute_funds(
116130
&bitcoind.client,
117131
&electrsd.client,
118132
addresses,
@@ -192,6 +206,8 @@ fn connect_to_public_testnet_esplora() {
192206
#[test]
193207
fn start_stop_reinit() {
194208
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
209+
premine(&bitcoind.client, &electrsd.client);
210+
195211
let config = random_config(true);
196212

197213
let esplora_url = format!("http://{}", electrsd.esplora_url.as_ref().unwrap());
@@ -213,12 +229,7 @@ fn start_stop_reinit() {
213229
assert_eq!(node.list_balances().total_onchain_balance_sats, 0);
214230

215231
let expected_amount = Amount::from_sat(100000);
216-
premine_and_distribute_funds(
217-
&bitcoind.client,
218-
&electrsd.client,
219-
vec![funding_address],
220-
expected_amount,
221-
);
232+
distribute_funds(&bitcoind.client, &electrsd.client, vec![funding_address], expected_amount);
222233

223234
node.sync_wallets().unwrap();
224235
assert_eq!(node.list_balances().spendable_onchain_balance_sats, expected_amount.to_sat());
@@ -260,12 +271,14 @@ fn start_stop_reinit() {
260271
#[test]
261272
fn onchain_spend_receive() {
262273
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
274+
premine(&bitcoind.client, &electrsd.client);
275+
263276
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
264277

265278
let addr_a = node_a.onchain_payment().new_address().unwrap();
266279
let addr_b = node_b.onchain_payment().new_address().unwrap();
267280

268-
premine_and_distribute_funds(
281+
distribute_funds(
269282
&bitcoind.client,
270283
&electrsd.client,
271284
vec![addr_b.clone()],
@@ -307,7 +320,9 @@ fn onchain_spend_receive() {
307320

308321
#[test]
309322
fn sign_verify_msg() {
310-
let (_bitcoind, electrsd) = setup_bitcoind_and_electrsd();
323+
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
324+
premine(&bitcoind.client, &electrsd.client);
325+
311326
let config = random_config(true);
312327
let node = setup_node(&electrsd, config);
313328

@@ -325,7 +340,9 @@ fn connection_restart_behavior() {
325340
}
326341

327342
fn do_connection_restart_behavior(persist: bool) {
328-
let (_bitcoind, electrsd) = setup_bitcoind_and_electrsd();
343+
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
344+
premine(&bitcoind.client, &electrsd.client);
345+
329346
let (node_a, node_b) = setup_two_nodes(&electrsd, false, false, false);
330347

331348
let node_id_a = node_a.node_id();
@@ -376,7 +393,9 @@ fn do_connection_restart_behavior(persist: bool) {
376393

377394
#[test]
378395
fn concurrent_connections_succeed() {
379-
let (_bitcoind, electrsd) = setup_bitcoind_and_electrsd();
396+
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
397+
premine(&bitcoind.client, &electrsd.client);
398+
380399
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
381400

382401
let node_a = Arc::new(node_a);
@@ -407,11 +426,13 @@ fn concurrent_connections_succeed() {
407426
#[test]
408427
fn simple_bolt12_send_receive() {
409428
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
429+
premine(&bitcoind.client, &electrsd.client);
430+
410431
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
411432

412433
let address_a = node_a.onchain_payment().new_address().unwrap();
413434
let premine_amount_sat = 5_000_000;
414-
premine_and_distribute_funds(
435+
distribute_funds(
415436
&bitcoind.client,
416437
&electrsd.client,
417438
vec![address_a],
@@ -614,12 +635,14 @@ fn simple_bolt12_send_receive() {
614635
#[test]
615636
fn generate_bip21_uri() {
616637
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
638+
premine(&bitcoind.client, &electrsd.client);
639+
617640
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
618641

619642
let address_a = node_a.onchain_payment().new_address().unwrap();
620643
let premined_sats = 5_000_000;
621644

622-
premine_and_distribute_funds(
645+
distribute_funds(
623646
&bitcoind.client,
624647
&electrsd.client,
625648
vec![address_a],
@@ -655,12 +678,14 @@ fn generate_bip21_uri() {
655678
#[test]
656679
fn unified_qr_send_receive() {
657680
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
681+
premine(&bitcoind.client, &electrsd.client);
682+
658683
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
659684

660685
let address_a = node_a.onchain_payment().new_address().unwrap();
661686
let premined_sats = 5_000_000;
662687

663-
premine_and_distribute_funds(
688+
distribute_funds(
664689
&bitcoind.client,
665690
&electrsd.client,
666691
vec![address_a],

tests/integration_tests_vss.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,16 @@ fn channel_full_cycle_with_vss_store() {
2222
let vss_base_url = std::env::var("TEST_VSS_BASE_URL").unwrap();
2323
let node_a =
2424
builder_a.build_with_vss_store(vss_base_url.clone(), "node_1_store".to_string()).unwrap();
25-
node_a.start().unwrap();
2625

2726
println!("\n== Node B ==");
2827
let config_b = common::random_config(true);
2928
let mut builder_b = Builder::from_config(config_b);
3029
builder_b.set_esplora_server(esplora_url);
3130
let node_b = builder_b.build_with_vss_store(vss_base_url, "node_2_store".to_string()).unwrap();
31+
32+
common::premine(&bitcoind.client, electrsd.client);
33+
34+
node_a.start().unwrap();
3235
node_b.start().unwrap();
3336

3437
common::do_channel_full_cycle(

0 commit comments

Comments
 (0)