Skip to content

Commit 2c3e12e

Browse files
committed
Remove genesis block hash from public API
Forcing users to pass a genesis block hash has ended up being error-prone largely due to byte-swapping questions for bindings users. Further, our API is currently inconsistent - in `ChannelManager` we take a `Bitcoin::Network` but in `NetworkGraph` we take the genesis block hash. Luckily `NetworkGraph` is the only remaining place where we require users pass the genesis block hash, so swapping it for a `Network` is a simple change.
1 parent 96c8507 commit 2c3e12e

File tree

15 files changed

+46
-81
lines changed

15 files changed

+46
-81
lines changed

fuzz/src/full_stack.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
450450
// it's easier to just increment the counter here so the keys don't change.
451451
keys_manager.counter.fetch_sub(3, Ordering::AcqRel);
452452
let our_id = &keys_manager.get_node_id(Recipient::Node).unwrap();
453-
let network_graph = Arc::new(NetworkGraph::new(genesis_block(network).block_hash(), Arc::clone(&logger)));
453+
let network_graph = Arc::new(NetworkGraph::new(network, Arc::clone(&logger)));
454454
let gossip_sync = Arc::new(P2PGossipSync::new(Arc::clone(&network_graph), None, Arc::clone(&logger)));
455455
let scorer = FixedPenaltyScorer::with_penalty(0);
456456

fuzz/src/process_network_graph.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
// Imports that need to be added manually
22
use lightning_rapid_gossip_sync::RapidGossipSync;
3-
use bitcoin::hashes::Hash as TraitImport;
43

54
use crate::utils::test_logger;
65

76
/// Actual fuzz test, method signature and name are fixed
87
fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
9-
let block_hash = bitcoin::BlockHash::all_zeros();
108
let logger = test_logger::TestLogger::new("".to_owned(), out);
11-
let network_graph = lightning::routing::gossip::NetworkGraph::new(block_hash, &logger);
9+
let network_graph = lightning::routing::gossip::NetworkGraph::new(bitcoin::Network::Bitcoin, &logger);
1210
let rapid_sync = RapidGossipSync::new(&network_graph);
1311
let _ = rapid_sync.update_network_graph(data);
1412
}

fuzz/src/router.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ use lightning::util::ser::Readable;
2424
use bitcoin::hashes::Hash;
2525
use bitcoin::secp256k1::PublicKey;
2626
use bitcoin::network::constants::Network;
27-
use bitcoin::blockdata::constants::genesis_block;
2827

2928
use crate::utils::test_logger;
3029

@@ -189,7 +188,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
189188
let logger = test_logger::TestLogger::new("".to_owned(), out);
190189

191190
let our_pubkey = get_pubkey!();
192-
let net_graph = NetworkGraph::new(genesis_block(Network::Bitcoin).header.block_hash(), &logger);
191+
let net_graph = NetworkGraph::new(Network::Bitcoin, &logger);
193192
let chain_source = FuzzChainSource {
194193
input: Arc::clone(&input),
195194
net_graph: &net_graph,

lightning-background-processor/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -941,7 +941,7 @@ mod tests {
941941
let logger = Arc::new(test_utils::TestLogger::with_id(format!("node {}", i)));
942942
let network = Network::Testnet;
943943
let genesis_block = genesis_block(network);
944-
let network_graph = Arc::new(NetworkGraph::new(genesis_block.header.block_hash(), logger.clone()));
944+
let network_graph = Arc::new(NetworkGraph::new(network, logger.clone()));
945945
let scorer = Arc::new(Mutex::new(TestScorer::new()));
946946
let seed = [i as u8; 32];
947947
let router = Arc::new(DefaultRouter::new(network_graph.clone(), logger.clone(), seed, scorer.clone()));

lightning-rapid-gossip-sync/src/lib.rs

+4-10
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@
5353
//! # }
5454
//! # let logger = FakeLogger {};
5555
//!
56-
//! let block_hash = genesis_block(Network::Bitcoin).header.block_hash();
57-
//! let network_graph = NetworkGraph::new(block_hash, &logger);
56+
//! let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
5857
//! let rapid_sync = RapidGossipSync::new(&network_graph);
5958
//! let snapshot_contents: &[u8] = &[0; 0];
6059
//! let new_last_sync_timestamp_result = rapid_sync.update_network_graph(snapshot_contents);
@@ -161,7 +160,6 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
161160
mod tests {
162161
use std::fs;
163162

164-
use bitcoin::blockdata::constants::genesis_block;
165163
use bitcoin::Network;
166164

167165
use lightning::ln::msgs::DecodeError;
@@ -225,9 +223,8 @@ mod tests {
225223
let sync_test = FileSyncTest::new(tmp_directory, &valid_response);
226224
let graph_sync_test_file = sync_test.get_test_file_path();
227225

228-
let block_hash = genesis_block(Network::Bitcoin).block_hash();
229226
let logger = TestLogger::new();
230-
let network_graph = NetworkGraph::new(block_hash, &logger);
227+
let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
231228

232229
assert_eq!(network_graph.read_only().channels().len(), 0);
233230

@@ -258,9 +255,8 @@ mod tests {
258255

259256
#[test]
260257
fn measure_native_read_from_file() {
261-
let block_hash = genesis_block(Network::Bitcoin).block_hash();
262258
let logger = TestLogger::new();
263-
let network_graph = NetworkGraph::new(block_hash, &logger);
259+
let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
264260

265261
assert_eq!(network_graph.read_only().channels().len(), 0);
266262

@@ -290,7 +286,6 @@ mod tests {
290286
pub mod bench {
291287
use test::Bencher;
292288

293-
use bitcoin::blockdata::constants::genesis_block;
294289
use bitcoin::Network;
295290

296291
use lightning::ln::msgs::DecodeError;
@@ -301,10 +296,9 @@ pub mod bench {
301296

302297
#[bench]
303298
fn bench_reading_full_graph_from_file(b: &mut Bencher) {
304-
let block_hash = genesis_block(Network::Bitcoin).block_hash();
305299
let logger = TestLogger::new();
306300
b.iter(|| {
307-
let network_graph = NetworkGraph::new(block_hash, &logger);
301+
let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
308302
let rapid_sync = RapidGossipSync::new(&network_graph);
309303
let sync_result = rapid_sync.sync_network_graph_with_file_path("./res/full_graph.lngossip");
310304
if let Err(crate::error::GraphSyncError::DecodeError(DecodeError::Io(io_error))) = &sync_result {

lightning-rapid-gossip-sync/src/processing.rs

+11-22
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,6 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
237237

238238
#[cfg(test)]
239239
mod tests {
240-
use bitcoin::blockdata::constants::genesis_block;
241240
use bitcoin::Network;
242241

243242
use lightning::ln::msgs::DecodeError;
@@ -269,9 +268,8 @@ mod tests {
269268

270269
#[test]
271270
fn network_graph_fails_to_update_from_clipped_input() {
272-
let block_hash = genesis_block(Network::Bitcoin).block_hash();
273271
let logger = TestLogger::new();
274-
let network_graph = NetworkGraph::new(block_hash, &logger);
272+
let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
275273

276274
let example_input = vec![
277275
76, 68, 75, 1, 111, 226, 140, 10, 182, 241, 179, 114, 193, 166, 162, 70, 174, 99, 247,
@@ -309,9 +307,8 @@ mod tests {
309307
68, 226, 0, 6, 11, 0, 1, 128,
310308
];
311309

312-
let block_hash = genesis_block(Network::Bitcoin).block_hash();
313310
let logger = TestLogger::new();
314-
let network_graph = NetworkGraph::new(block_hash, &logger);
311+
let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
315312

316313
assert_eq!(network_graph.read_only().channels().len(), 0);
317314

@@ -338,9 +335,8 @@ mod tests {
338335
2, 68, 226, 0, 6, 11, 0, 1, 128,
339336
];
340337

341-
let block_hash = genesis_block(Network::Bitcoin).block_hash();
342338
let logger = TestLogger::new();
343-
let network_graph = NetworkGraph::new(block_hash, &logger);
339+
let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
344340

345341
assert_eq!(network_graph.read_only().channels().len(), 0);
346342

@@ -375,9 +371,8 @@ mod tests {
375371
0, 1, 0, 0, 0, 125, 255, 2, 68, 226, 0, 6, 11, 0, 1, 5, 0, 0, 0, 0, 29, 129, 25, 192,
376372
];
377373

378-
let block_hash = genesis_block(Network::Bitcoin).block_hash();
379374
let logger = TestLogger::new();
380-
let network_graph = NetworkGraph::new(block_hash, &logger);
375+
let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
381376

382377
assert_eq!(network_graph.read_only().channels().len(), 0);
383378

@@ -442,9 +437,8 @@ mod tests {
442437
25, 192,
443438
];
444439

445-
let block_hash = genesis_block(Network::Bitcoin).block_hash();
446440
let logger = TestLogger::new();
447-
let network_graph = NetworkGraph::new(block_hash, &logger);
441+
let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
448442

449443
assert_eq!(network_graph.read_only().channels().len(), 0);
450444

@@ -502,9 +496,8 @@ mod tests {
502496
25, 192,
503497
];
504498

505-
let block_hash = genesis_block(Network::Bitcoin).block_hash();
506499
let logger = TestLogger::new();
507-
let network_graph = NetworkGraph::new(block_hash, &logger);
500+
let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
508501

509502
assert_eq!(network_graph.read_only().channels().len(), 0);
510503

@@ -528,9 +521,8 @@ mod tests {
528521

529522
#[test]
530523
fn full_update_succeeds() {
531-
let block_hash = genesis_block(Network::Bitcoin).block_hash();
532524
let logger = TestLogger::new();
533-
let network_graph = NetworkGraph::new(block_hash, &logger);
525+
let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
534526

535527
assert_eq!(network_graph.read_only().channels().len(), 0);
536528

@@ -560,9 +552,8 @@ mod tests {
560552

561553
#[test]
562554
fn full_update_succeeds_at_the_beginning_of_the_unix_era() {
563-
let block_hash = genesis_block(Network::Bitcoin).block_hash();
564555
let logger = TestLogger::new();
565-
let network_graph = NetworkGraph::new(block_hash, &logger);
556+
let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
566557

567558
assert_eq!(network_graph.read_only().channels().len(), 0);
568559

@@ -576,14 +567,13 @@ mod tests {
576567
#[test]
577568
fn timestamp_edge_cases_are_handled_correctly() {
578569
// this is the timestamp encoded in the binary data of valid_input below
579-
let block_hash = genesis_block(Network::Bitcoin).block_hash();
580570
let logger = TestLogger::new();
581571

582572
let latest_succeeding_time = VALID_BINARY_TIMESTAMP + STALE_RGS_UPDATE_AGE_LIMIT_SECS;
583573
let earliest_failing_time = latest_succeeding_time + 1;
584574

585575
{
586-
let network_graph = NetworkGraph::new(block_hash, &logger);
576+
let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
587577
assert_eq!(network_graph.read_only().channels().len(), 0);
588578

589579
let rapid_sync = RapidGossipSync::new(&network_graph);
@@ -593,7 +583,7 @@ mod tests {
593583
}
594584

595585
{
596-
let network_graph = NetworkGraph::new(block_hash, &logger);
586+
let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
597587
assert_eq!(network_graph.read_only().channels().len(), 0);
598588

599589
let rapid_sync = RapidGossipSync::new(&network_graph);
@@ -630,9 +620,8 @@ mod tests {
630620
0, 0, 1,
631621
];
632622

633-
let block_hash = genesis_block(Network::Bitcoin).block_hash();
634623
let logger = TestLogger::new();
635-
let network_graph = NetworkGraph::new(block_hash, &logger);
624+
let network_graph = NetworkGraph::new(Network::Bitcoin, &logger);
636625
let rapid_sync = RapidGossipSync::new(&network_graph);
637626
let update_result = rapid_sync.update_network_graph(&unknown_version_input[..]);
638627

lightning/src/ln/channelmanager.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -8672,13 +8672,12 @@ pub mod bench {
86728672
// Note that this is unrealistic as each payment send will require at least two fsync
86738673
// calls per node.
86748674
let network = bitcoin::Network::Testnet;
8675-
let genesis_hash = bitcoin::blockdata::constants::genesis_block(network).header.block_hash();
86768675

86778676
let tx_broadcaster = test_utils::TestBroadcaster{txn_broadcasted: Mutex::new(Vec::new()), blocks: Arc::new(Mutex::new(Vec::new()))};
86788677
let fee_estimator = test_utils::TestFeeEstimator { sat_per_kw: Mutex::new(253) };
86798678
let logger_a = test_utils::TestLogger::with_id("node a".to_owned());
86808679
let scorer = Mutex::new(test_utils::TestScorer::new());
8681-
let router = test_utils::TestRouter::new(Arc::new(NetworkGraph::new(genesis_hash, &logger_a)), &scorer);
8680+
let router = test_utils::TestRouter::new(Arc::new(NetworkGraph::new(network, &logger_a)), &scorer);
86828681

86838682
let mut config: UserConfig = Default::default();
86848683
config.channel_handshake_config.minimum_depth = 1;
@@ -8722,7 +8721,7 @@ pub mod bench {
87228721
assert_eq!(&tx_broadcaster.txn_broadcasted.lock().unwrap()[..], &[tx.clone()]);
87238722

87248723
let block = Block {
8725-
header: BlockHeader { version: 0x20000000, prev_blockhash: genesis_hash, merkle_root: TxMerkleNode::all_zeros(), time: 42, bits: 42, nonce: 42 },
8724+
header: BlockHeader { version: 0x20000000, prev_blockhash: BestBlock::from_genesis(network), merkle_root: TxMerkleNode::all_zeros(), time: 42, bits: 42, nonce: 42 },
87268725
txdata: vec![tx],
87278726
};
87288727
Listen::block_connected(&node_a, &block, 1);
@@ -8761,7 +8760,7 @@ pub mod bench {
87618760
_ => panic!("Unexpected event"),
87628761
}
87638762

8764-
let dummy_graph = NetworkGraph::new(genesis_hash, &logger_a);
8763+
let dummy_graph = NetworkGraph::new(network, &logger_a);
87658764

87668765
let mut payment_count: u64 = 0;
87678766
macro_rules! send_payment {

lightning/src/ln/functional_test_utils.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2300,7 +2300,7 @@ pub fn create_node_cfgs<'a>(node_count: usize, chanmon_cfgs: &'a Vec<TestChanMon
23002300

23012301
for i in 0..node_count {
23022302
let chain_monitor = test_utils::TestChainMonitor::new(Some(&chanmon_cfgs[i].chain_source), &chanmon_cfgs[i].tx_broadcaster, &chanmon_cfgs[i].logger, &chanmon_cfgs[i].fee_estimator, &chanmon_cfgs[i].persister, &chanmon_cfgs[i].keys_manager);
2303-
let network_graph = Arc::new(NetworkGraph::new(chanmon_cfgs[i].chain_source.genesis_hash, &chanmon_cfgs[i].logger));
2303+
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &chanmon_cfgs[i].logger));
23042304
let seed = [i as u8; 32];
23052305
nodes.push(NodeCfg {
23062306
chain_source: &chanmon_cfgs[i].chain_source,

lightning/src/ln/functional_tests.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5280,7 +5280,7 @@ fn test_key_derivation_params() {
52805280
let seed = [42; 32];
52815281
let keys_manager = test_utils::TestKeysInterface::new(&seed, Network::Testnet);
52825282
let chain_monitor = test_utils::TestChainMonitor::new(Some(&chanmon_cfgs[0].chain_source), &chanmon_cfgs[0].tx_broadcaster, &chanmon_cfgs[0].logger, &chanmon_cfgs[0].fee_estimator, &chanmon_cfgs[0].persister, &keys_manager);
5283-
let network_graph = Arc::new(NetworkGraph::new(chanmon_cfgs[0].chain_source.genesis_hash, &chanmon_cfgs[0].logger));
5283+
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &chanmon_cfgs[0].logger));
52845284
let scorer = Mutex::new(test_utils::TestScorer::new());
52855285
let router = test_utils::TestRouter::new(network_graph.clone(), &scorer);
52865286
let node = NodeCfg { chain_source: &chanmon_cfgs[0].chain_source, logger: &chanmon_cfgs[0].logger, tx_broadcaster: &chanmon_cfgs[0].tx_broadcaster, fee_estimator: &chanmon_cfgs[0].fee_estimator, router, chain_monitor, keys_manager: &keys_manager, network_graph, node_seed: seed, override_init_features: alloc::rc::Rc::new(core::cell::RefCell::new(None)) };

lightning/src/ln/outbound_payment.rs

+2-5
Original file line numberDiff line numberDiff line change
@@ -1236,7 +1236,6 @@ impl_writeable_tlv_based_enum_upgradable!(PendingOutboundPayment,
12361236

12371237
#[cfg(test)]
12381238
mod tests {
1239-
use bitcoin::blockdata::constants::genesis_block;
12401239
use bitcoin::network::constants::Network;
12411240
use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey};
12421241

@@ -1260,8 +1259,7 @@ mod tests {
12601259
fn do_fails_paying_after_expiration(on_retry: bool) {
12611260
let outbound_payments = OutboundPayments::new();
12621261
let logger = test_utils::TestLogger::new();
1263-
let genesis_hash = genesis_block(Network::Testnet).header.block_hash();
1264-
let network_graph = Arc::new(NetworkGraph::new(genesis_hash, &logger));
1262+
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &logger));
12651263
let scorer = Mutex::new(test_utils::TestScorer::new());
12661264
let router = test_utils::TestRouter::new(network_graph, &scorer);
12671265
let secp_ctx = Secp256k1::new();
@@ -1300,8 +1298,7 @@ mod tests {
13001298
fn do_find_route_error(on_retry: bool) {
13011299
let outbound_payments = OutboundPayments::new();
13021300
let logger = test_utils::TestLogger::new();
1303-
let genesis_hash = genesis_block(Network::Testnet).header.block_hash();
1304-
let network_graph = Arc::new(NetworkGraph::new(genesis_hash, &logger));
1301+
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &logger));
13051302
let scorer = Mutex::new(test_utils::TestScorer::new());
13061303
let router = test_utils::TestRouter::new(network_graph, &scorer);
13071304
let secp_ctx = Secp256k1::new();

0 commit comments

Comments
 (0)