@@ -15210,13 +15210,16 @@ mod tests {
15210
15210
use crate::routing::router::{find_route, PaymentParameters, RouteParameters};
15211
15211
use crate::sign::EntropySource;
15212
15212
use crate::types::payment::{PaymentHash, PaymentPreimage, PaymentSecret};
15213
- use crate::util::config::{ChannelConfig, ChannelConfigUpdate, ChannelHandshakeConfigUpdate};
15213
+ use crate::util::config::{
15214
+ ChannelConfig, ChannelConfigUpdate, ChannelHandshakeConfigUpdate, UserConfig,
15215
+ };
15214
15216
use crate::util::errors::APIError;
15215
15217
use crate::util::ser::Writeable;
15216
15218
use crate::util::test_utils;
15217
15219
use bitcoin::secp256k1::ecdh::SharedSecret;
15218
15220
use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey};
15219
15221
use core::sync::atomic::Ordering;
15222
+ use lightning_types::features::ChannelTypeFeatures;
15220
15223
15221
15224
#[test]
15222
15225
#[rustfmt::skip]
@@ -16349,42 +16352,56 @@ mod tests {
16349
16352
}
16350
16353
16351
16354
#[test]
16352
- #[rustfmt::skip]
16353
- fn test_anchors_zero_fee_htlc_tx_fallback() {
16355
+ fn test_anchors_zero_fee_htlc_tx_downgrade() {
16354
16356
// Tests that if both nodes support anchors, but the remote node does not want to accept
16355
16357
// anchor channels at the moment, an error it sent to the local node such that it can retry
16356
16358
// the channel without the anchors feature.
16359
+ let mut initiator_cfg = test_default_channel_config();
16360
+ initiator_cfg.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx = true;
16361
+
16362
+ let mut receiver_cfg = test_default_channel_config();
16363
+ receiver_cfg.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx = true;
16364
+ receiver_cfg.manually_accept_inbound_channels = true;
16365
+
16366
+ let start_type = ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies();
16367
+ let end_type = ChannelTypeFeatures::only_static_remote_key();
16368
+ do_test_channel_type_downgrade(initiator_cfg, receiver_cfg, start_type, vec![end_type]);
16369
+ }
16370
+
16371
+ #[rustfmt::skip]
16372
+ fn do_test_channel_type_downgrade(initiator_cfg: UserConfig, acceptor_cfg: UserConfig,
16373
+ start_type: ChannelTypeFeatures, downgrade_types: Vec<ChannelTypeFeatures>) {
16357
16374
let chanmon_cfgs = create_chanmon_cfgs(2);
16358
16375
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
16359
- let mut anchors_config = test_default_channel_config();
16360
- anchors_config.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx = true;
16361
- anchors_config.manually_accept_inbound_channels = true;
16362
- let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[Some(anchors_config.clone()), Some(anchors_config.clone())]);
16376
+ let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[Some(initiator_cfg), Some(acceptor_cfg)]);
16363
16377
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
16364
16378
let error_message = "Channel force-closed";
16365
16379
16366
16380
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100_000, 0, 0, None, None).unwrap();
16367
- let open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
16368
- assert !(open_channel_msg.common_fields.channel_type.as_ref().unwrap().supports_anchors_zero_fee_htlc_tx() );
16381
+ let mut open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
16382
+ assert_eq !(open_channel_msg.common_fields.channel_type.as_ref().unwrap(), &start_type );
16369
16383
16370
- nodes[1].node.handle_open_channel(nodes[0].node.get_our_node_id(), &open_channel_msg);
16371
- let events = nodes[1].node.get_and_clear_pending_events();
16372
- match events[0] {
16373
- Event::OpenChannelRequest { temporary_channel_id, .. } => {
16374
- nodes[1].node.force_close_broadcasting_latest_txn(&temporary_channel_id, &nodes[0].node.get_our_node_id(), error_message.to_string()).unwrap();
16384
+ for downgrade_type in downgrade_types {
16385
+ nodes[1].node.handle_open_channel(nodes[0].node.get_our_node_id(), &open_channel_msg);
16386
+ let events = nodes[1].node.get_and_clear_pending_events();
16387
+ match events[0] {
16388
+ Event::OpenChannelRequest { temporary_channel_id, .. } => {
16389
+ nodes[1].node.force_close_broadcasting_latest_txn(&temporary_channel_id, &nodes[0].node.get_our_node_id(), error_message.to_string()).unwrap();
16390
+ }
16391
+ _ => panic!("Unexpected event"),
16375
16392
}
16376
- _ => panic!("Unexpected event"),
16377
- }
16378
16393
16379
- let error_msg = get_err_msg(&nodes[1], &nodes[0].node.get_our_node_id());
16380
- nodes[0].node.handle_error(nodes[1].node.get_our_node_id(), &error_msg);
16394
+ let error_msg = get_err_msg(&nodes[1], &nodes[0].node.get_our_node_id());
16395
+ nodes[0].node.handle_error(nodes[1].node.get_our_node_id(), &error_msg);
16381
16396
16382
- let open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
16383
- assert!(!open_channel_msg.common_fields.channel_type.unwrap().supports_anchors_zero_fee_htlc_tx());
16397
+ open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
16398
+ let channel_type = open_channel_msg.common_fields.channel_type.as_ref().unwrap();
16399
+ assert_eq!(channel_type, &downgrade_type);
16384
16400
16385
- // Since nodes[1] should not have accepted the channel, it should
16386
- // not have generated any events.
16387
- assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
16401
+ // Since nodes[1] should not have accepted the channel, it should
16402
+ // not have generated any events.
16403
+ assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
16404
+ }
16388
16405
}
16389
16406
16390
16407
#[test]
0 commit comments