Skip to content

Commit 37a3a03

Browse files
committed
Run chanmon_consistency_test with anchor outputs channels
1 parent be8797e commit 37a3a03

File tree

1 file changed

+32
-6
lines changed

1 file changed

+32
-6
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ fn send_hop_payment(source: &ChanMan, middle: &ChanMan, middle_chan_id: u64, des
432432
}
433433

434434
#[inline]
435-
pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
435+
pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
436436
let out = SearchingOutput::new(underlying_out);
437437
let broadcast = Arc::new(TestBroadcaster{});
438438
let router = FuzzRouter {};
@@ -450,6 +450,10 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
450450
let mut config = UserConfig::default();
451451
config.channel_config.forwarding_fee_proportional_millionths = 0;
452452
config.channel_handshake_config.announced_channel = true;
453+
if anchors {
454+
config.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx = true;
455+
config.manually_accept_inbound_channels = true;
456+
}
453457
let network = Network::Bitcoin;
454458
let best_block_timestamp = genesis_block(network).header.time;
455459
let params = ChainParameters {
@@ -473,6 +477,10 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
473477
let mut config = UserConfig::default();
474478
config.channel_config.forwarding_fee_proportional_millionths = 0;
475479
config.channel_handshake_config.announced_channel = true;
480+
if anchors {
481+
config.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx = true;
482+
config.manually_accept_inbound_channels = true;
483+
}
476484

477485
let mut monitors = HashMap::new();
478486
let mut old_monitors = $old_monitors.latest_monitors.lock().unwrap();
@@ -509,7 +517,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
509517

510518
let mut channel_txn = Vec::new();
511519
macro_rules! make_channel {
512-
($source: expr, $dest: expr, $chan_id: expr) => { {
520+
($source: expr, $dest: expr, $dest_keys_manager: expr, $chan_id: expr) => { {
513521
$source.peer_connected(&$dest.get_our_node_id(), &Init {
514522
features: $dest.init_features(), networks: None, remote_network_address: None
515523
}, true).unwrap();
@@ -528,6 +536,22 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
528536

529537
$dest.handle_open_channel(&$source.get_our_node_id(), &open_channel);
530538
let accept_channel = {
539+
if anchors {
540+
let events = $dest.get_and_clear_pending_events();
541+
assert_eq!(events.len(), 1);
542+
if let events::Event::OpenChannelRequest {
543+
ref temporary_channel_id, ref counterparty_node_id, ..
544+
} = events[0] {
545+
let mut random_bytes = [0u8; 16];
546+
random_bytes.copy_from_slice(&$dest_keys_manager.get_secure_random_bytes()[..16]);
547+
let user_channel_id = u128::from_be_bytes(random_bytes);
548+
$dest.accept_inbound_channel(
549+
temporary_channel_id,
550+
counterparty_node_id,
551+
user_channel_id,
552+
).unwrap();
553+
} else { panic!("Wrong event type"); }
554+
}
531555
let events = $dest.get_and_clear_pending_msg_events();
532556
assert_eq!(events.len(), 1);
533557
if let events::MessageSendEvent::SendAcceptChannel { ref msg, .. } = events[0] {
@@ -639,8 +663,8 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
639663

640664
let mut nodes = [node_a, node_b, node_c];
641665

642-
let chan_1_funding = make_channel!(nodes[0], nodes[1], 0);
643-
let chan_2_funding = make_channel!(nodes[1], nodes[2], 1);
666+
let chan_1_funding = make_channel!(nodes[0], nodes[1], keys_manager_b, 0);
667+
let chan_2_funding = make_channel!(nodes[1], nodes[2], keys_manager_c, 1);
644668

645669
for node in nodes.iter() {
646670
confirm_txn!(node);
@@ -1338,10 +1362,12 @@ impl<O: Output> SearchingOutput<O> {
13381362
}
13391363

13401364
pub fn chanmon_consistency_test<Out: Output>(data: &[u8], out: Out) {
1341-
do_test(data, out);
1365+
do_test(data, out.clone(), false);
1366+
do_test(data, out, true);
13421367
}
13431368

13441369
#[no_mangle]
13451370
pub extern "C" fn chanmon_consistency_run(data: *const u8, datalen: usize) {
1346-
do_test(unsafe { std::slice::from_raw_parts(data, datalen) }, test_logger::DevNull{});
1371+
do_test(unsafe { std::slice::from_raw_parts(data, datalen) }, test_logger::DevNull{}, false);
1372+
do_test(unsafe { std::slice::from_raw_parts(data, datalen) }, test_logger::DevNull{}, true);
13471373
}

0 commit comments

Comments
 (0)