Skip to content

Commit 0a8abaa

Browse files
committed
[fuzz] Always use PaymentSecrets in chanmon_consistency
1 parent ac4639b commit 0a8abaa

File tree

1 file changed

+33
-65
lines changed

1 file changed

+33
-65
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 33 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -261,45 +261,58 @@ fn check_payment_err(send_err: PaymentSendFailure) {
261261

262262
type ChanMan = ChannelManager<EnforcingSigner, Arc<TestChainMonitor>, Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<FuzzEstimator>, Arc<dyn Logger>>;
263263

264+
#[inline]
265+
fn get_payment_secret_hash(dest: &ChanMan, payment_id: &mut u8) -> Option<(PaymentSecret, PaymentHash)> {
266+
let mut payment_hash;
267+
for _ in 0..256 {
268+
payment_hash = PaymentHash(Sha256::hash(&[*payment_id; 1]).into_inner());
269+
if let Ok(payment_secret) = dest.get_payment_secret(payment_hash, None, 1008) {
270+
return Some((payment_secret, payment_hash));
271+
}
272+
*payment_id = payment_id.wrapping_add(1);
273+
}
274+
None
275+
}
276+
264277
#[inline]
265278
fn send_payment(source: &ChanMan, dest: &ChanMan, dest_chan_id: u64, amt: u64, payment_id: &mut u8) -> bool {
266-
let payment_hash = Sha256::hash(&[*payment_id; 1]);
267-
*payment_id = payment_id.wrapping_add(1);
279+
let (payment_secret, payment_hash) =
280+
if let Some((secret, hash)) = get_payment_secret_hash(dest, payment_id) { (secret, hash) } else { return true; };
268281
if let Err(err) = source.send_payment(&Route {
269282
paths: vec![vec![RouteHop {
270283
pubkey: dest.get_our_node_id(),
271-
node_features: NodeFeatures::empty(),
284+
node_features: NodeFeatures::known(),
272285
short_channel_id: dest_chan_id,
273-
channel_features: ChannelFeatures::empty(),
286+
channel_features: ChannelFeatures::known(),
274287
fee_msat: amt,
275288
cltv_expiry_delta: 200,
276289
}]],
277-
}, PaymentHash(payment_hash.into_inner()), &None) {
290+
}, payment_hash, &Some(payment_secret)) {
278291
check_payment_err(err);
279292
false
280293
} else { true }
281294
}
282295
#[inline]
283296
fn send_hop_payment(source: &ChanMan, middle: &ChanMan, middle_chan_id: u64, dest: &ChanMan, dest_chan_id: u64, amt: u64, payment_id: &mut u8) -> bool {
284-
let payment_hash = Sha256::hash(&[*payment_id; 1]);
285-
*payment_id = payment_id.wrapping_add(1);
297+
let (payment_secret, payment_hash) =
298+
if let Some((secret, hash)) = get_payment_secret_hash(dest, payment_id) { (secret, hash) } else { return true; };
286299
if let Err(err) = source.send_payment(&Route {
287300
paths: vec![vec![RouteHop {
288301
pubkey: middle.get_our_node_id(),
289-
node_features: NodeFeatures::empty(),
302+
node_features: NodeFeatures::known(),
290303
short_channel_id: middle_chan_id,
291-
channel_features: ChannelFeatures::empty(),
304+
channel_features: ChannelFeatures::known(),
292305
fee_msat: 50000,
293306
cltv_expiry_delta: 100,
294307
},RouteHop {
295308
pubkey: dest.get_our_node_id(),
296-
node_features: NodeFeatures::empty(),
309+
node_features: NodeFeatures::known(),
297310
short_channel_id: dest_chan_id,
298-
channel_features: ChannelFeatures::empty(),
311+
channel_features: ChannelFeatures::known(),
299312
fee_msat: amt,
300313
cltv_expiry_delta: 200,
301314
}]],
302-
}, PaymentHash(payment_hash.into_inner()), &None) {
315+
}, payment_hash, &Some(payment_secret)) {
303316
check_payment_err(err);
304317
false
305318
} else { true }
@@ -523,48 +536,6 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
523536
}
524537

525538
loop {
526-
macro_rules! send_payment_with_secret {
527-
($source: expr, $middle: expr, $dest: expr) => { {
528-
let payment_hash = Sha256::hash(&[payment_id; 1]);
529-
payment_id = payment_id.wrapping_add(1);
530-
let payment_secret = Sha256::hash(&[payment_id; 1]);
531-
payment_id = payment_id.wrapping_add(1);
532-
if let Err(err) = $source.send_payment(&Route {
533-
paths: vec![vec![RouteHop {
534-
pubkey: $middle.0.get_our_node_id(),
535-
node_features: NodeFeatures::empty(),
536-
short_channel_id: $middle.1,
537-
channel_features: ChannelFeatures::empty(),
538-
fee_msat: 50_000,
539-
cltv_expiry_delta: 100,
540-
},RouteHop {
541-
pubkey: $dest.0.get_our_node_id(),
542-
node_features: NodeFeatures::empty(),
543-
short_channel_id: $dest.1,
544-
channel_features: ChannelFeatures::empty(),
545-
fee_msat: 10_000_000,
546-
cltv_expiry_delta: 200,
547-
}],vec![RouteHop {
548-
pubkey: $middle.0.get_our_node_id(),
549-
node_features: NodeFeatures::empty(),
550-
short_channel_id: $middle.1,
551-
channel_features: ChannelFeatures::empty(),
552-
fee_msat: 50_000,
553-
cltv_expiry_delta: 100,
554-
},RouteHop {
555-
pubkey: $dest.0.get_our_node_id(),
556-
node_features: NodeFeatures::empty(),
557-
short_channel_id: $dest.1,
558-
channel_features: ChannelFeatures::empty(),
559-
fee_msat: 10_000_000,
560-
cltv_expiry_delta: 200,
561-
}]],
562-
}, PaymentHash(payment_hash.into_inner()), &Some(PaymentSecret(payment_secret.into_inner()))) {
563-
check_payment_err(err);
564-
}
565-
} }
566-
}
567-
568539
macro_rules! process_msg_events {
569540
($node: expr, $corrupt_forward: expr) => { {
570541
let events = if $node == 1 {
@@ -788,15 +759,15 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
788759
},
789760
0x0e => {
790761
if chan_a_disconnected {
791-
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::empty() });
792-
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: InitFeatures::empty() });
762+
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known() });
763+
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: InitFeatures::known() });
793764
chan_a_disconnected = false;
794765
}
795766
},
796767
0x0f => {
797768
if chan_b_disconnected {
798-
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: InitFeatures::empty() });
799-
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::empty() });
769+
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: InitFeatures::known() });
770+
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known() });
800771
chan_b_disconnected = false;
801772
}
802773
},
@@ -860,9 +831,6 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
860831
0x24 => { send_hop_payment(&nodes[0], &nodes[1], chan_a, &nodes[2], chan_b, 10_000_000, &mut payment_id); },
861832
0x25 => { send_hop_payment(&nodes[2], &nodes[1], chan_b, &nodes[0], chan_a, 10_000_000, &mut payment_id); },
862833

863-
0x26 => { send_payment_with_secret!(nodes[0], (&nodes[1], chan_a), (&nodes[2], chan_b)); },
864-
0x27 => { send_payment_with_secret!(nodes[2], (&nodes[1], chan_b), (&nodes[0], chan_a)); },
865-
866834
0x28 => { send_payment(&nodes[0], &nodes[1], chan_a, 1_000_000, &mut payment_id); },
867835
0x29 => { send_payment(&nodes[1], &nodes[0], chan_a, 1_000_000, &mut payment_id); },
868836
0x2a => { send_payment(&nodes[1], &nodes[2], chan_b, 1_000_000, &mut payment_id); },
@@ -936,13 +904,13 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
936904

937905
// Next, make sure peers are all connected to each other
938906
if chan_a_disconnected {
939-
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::empty() });
940-
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: InitFeatures::empty() });
907+
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known() });
908+
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: InitFeatures::known() });
941909
chan_a_disconnected = false;
942910
}
943911
if chan_b_disconnected {
944-
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: InitFeatures::empty() });
945-
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::empty() });
912+
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: InitFeatures::known() });
913+
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known() });
946914
chan_b_disconnected = false;
947915
}
948916

0 commit comments

Comments
 (0)