Skip to content

Commit 9ca9dd0

Browse files
committed
Test Øconf accept/reject behavior.
1 parent 147a755 commit 9ca9dd0

File tree

1 file changed

+64
-1
lines changed

1 file changed

+64
-1
lines changed

lightning/src/ln/functional_tests.rs

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use ln::channel::{Channel, ChannelError};
2424
use ln::{chan_utils, onion_utils};
2525
use ln::chan_utils::{htlc_success_tx_weight, htlc_timeout_tx_weight, HTLCOutputInCommitment};
2626
use routing::router::{PaymentParameters, Route, RouteHop, RouteParameters, find_route, get_route};
27-
use ln::features::{ChannelFeatures, InitFeatures, InvoiceFeatures, NodeFeatures};
27+
use ln::features::{ChannelFeatures, ChannelTypeFeatures, InitFeatures, InvoiceFeatures, NodeFeatures};
2828
use ln::msgs;
2929
use ln::msgs::{ChannelMessageHandler, RoutingMessageHandler, OptionalField, ErrorAction};
3030
use util::enforcing_trait_impls::EnforcingSigner;
@@ -10057,3 +10057,66 @@ fn test_max_dust_htlc_exposure() {
1005710057
do_test_max_dust_htlc_exposure(false, ExposureEvent::AtUpdateFeeOutbound, false);
1005810058
do_test_max_dust_htlc_exposure(false, ExposureEvent::AtUpdateFeeOutbound, true);
1005910059
}
10060+
10061+
#[test]
10062+
fn test_zero_conf_accept_reject() {
10063+
let mut channel_type_features = ChannelTypeFeatures::only_static_remote_key();
10064+
channel_type_features.set_zero_conf_required();
10065+
10066+
// Check we reject zero conf channels by default
10067+
let chanmon_cfgs = create_chanmon_cfgs(2);
10068+
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
10069+
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
10070+
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
10071+
10072+
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, None).unwrap();
10073+
let mut open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
10074+
10075+
open_channel_msg.channel_type = Some(channel_type_features.clone());
10076+
10077+
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &open_channel_msg);
10078+
10079+
let events = nodes[1].node.get_and_clear_pending_msg_events();
10080+
println!("EVENTS {:?}", events);
10081+
match events[0] {
10082+
MessageSendEvent::HandleError { action: ErrorAction::SendErrorMessage { ref msg, .. }, .. } => {
10083+
assert_eq!(msg.data, "No zero confirmation channels accepted".to_owned());
10084+
},
10085+
_ => panic!(),
10086+
}
10087+
10088+
// Check we can manually accept zero conf channels
10089+
let mut manually_accept_conf = UserConfig::default();
10090+
manually_accept_conf.manually_accept_inbound_channels = true;
10091+
10092+
let chanmon_cfgs = create_chanmon_cfgs(2);
10093+
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
10094+
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, Some(manually_accept_conf.clone())]);
10095+
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
10096+
10097+
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, Some(manually_accept_conf)).unwrap();
10098+
let mut open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
10099+
10100+
open_channel_msg.channel_type = Some(channel_type_features);
10101+
10102+
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &open_channel_msg);
10103+
10104+
// Assert that `nodes[1]` has no `MessageSendEvent::SendAcceptChannel` in the `msg_events` before the manual accept.
10105+
assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
10106+
10107+
let events = nodes[1].node.get_and_clear_pending_events();
10108+
10109+
match events[0] {
10110+
Event::OpenChannelRequest { temporary_channel_id, .. } => {
10111+
// Assert we fail to accept via the non-0conf method
10112+
assert!(nodes[1].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 0).is_err());
10113+
// Assert we can accept via the 0conf method
10114+
assert!(nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 0).is_ok());
10115+
},
10116+
_ => panic!(),
10117+
}
10118+
10119+
// Don't handle generated events
10120+
nodes[1].node.get_and_clear_pending_msg_events();
10121+
nodes[1].node.get_and_clear_pending_events();
10122+
}

0 commit comments

Comments
 (0)