Skip to content

Commit b34967a

Browse files
committed
Allow config defaults override for inbound channels
This commit introduces a config override struct parameter to the accept_inbound_channel methods. With manual channel acceptance enabled, users can modify the default configuration as needed.
1 parent 2a3e002 commit b34967a

8 files changed

+231
-54
lines changed

fuzz/src/chanmon_consistency.rs

+1
Original file line numberDiff line numberDiff line change
@@ -809,6 +809,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
809809
temporary_channel_id,
810810
counterparty_node_id,
811811
user_channel_id,
812+
None,
812813
)
813814
.unwrap();
814815
} else {

lightning/src/ln/async_signer_tests.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ fn do_test_open_channel(zero_conf: bool) {
7474
match &events[0] {
7575
Event::OpenChannelRequest { temporary_channel_id, .. } => {
7676
nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(
77-
temporary_channel_id, &nodes[0].node.get_our_node_id(), 0)
77+
temporary_channel_id, &nodes[0].node.get_our_node_id(), 0, None)
7878
.expect("Unable to accept inbound zero-conf channel");
7979
},
8080
ev => panic!("Expected OpenChannelRequest, not {:?}", ev)
@@ -319,7 +319,7 @@ fn do_test_funding_signed_0conf(signer_ops: Vec<SignerOp>) {
319319
match &events[0] {
320320
Event::OpenChannelRequest { temporary_channel_id, .. } => {
321321
nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(
322-
temporary_channel_id, &nodes[0].node.get_our_node_id(), 0)
322+
temporary_channel_id, &nodes[0].node.get_our_node_id(), 0, None)
323323
.expect("Unable to accept inbound zero-conf channel");
324324
},
325325
ev => panic!("Expected OpenChannelRequest, not {:?}", ev)

lightning/src/ln/chanmon_update_fail_tests.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -2775,9 +2775,9 @@ fn do_test_outbound_reload_without_init_mon(use_0conf: bool) {
27752775
match events[0] {
27762776
Event::OpenChannelRequest { temporary_channel_id, .. } => {
27772777
if use_0conf {
2778-
nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 0).unwrap();
2778+
nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 0, None).unwrap();
27792779
} else {
2780-
nodes[1].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 0).unwrap();
2780+
nodes[1].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 0, None).unwrap();
27812781
}
27822782
},
27832783
_ => panic!("Unexpected event"),
@@ -2866,9 +2866,9 @@ fn do_test_inbound_reload_without_init_mon(use_0conf: bool, lock_commitment: boo
28662866
match events[0] {
28672867
Event::OpenChannelRequest { temporary_channel_id, .. } => {
28682868
if use_0conf {
2869-
nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 0).unwrap();
2869+
nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 0, None).unwrap();
28702870
} else {
2871-
nodes[1].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 0).unwrap();
2871+
nodes[1].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 0, None).unwrap();
28722872
}
28732873
},
28742874
_ => panic!("Unexpected event"),

lightning/src/ln/channelmanager.rs

+54-19
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ use crate::onion_message::messenger::{Destination, MessageRouter, Responder, Res
8080
use crate::onion_message::offers::{OffersMessage, OffersMessageHandler};
8181
use crate::sign::{EntropySource, NodeSigner, Recipient, SignerProvider};
8282
use crate::sign::ecdsa::EcdsaChannelSigner;
83-
use crate::util::config::{UserConfig, ChannelConfig, ChannelConfigUpdate};
83+
use crate::util::config::{ChannelConfig, ChannelConfigUpdate, ChannelConfigOverrides, UserConfig};
8484
use crate::util::wakers::{Future, Notifier};
8585
use crate::util::scid_utils::fake_scid;
8686
use crate::util::string::UntrustedString;
@@ -1900,7 +1900,7 @@ where
19001900
///
19011901
/// let user_channel_id = 43;
19021902
/// match channel_manager.accept_inbound_channel(
1903-
/// &temporary_channel_id, &counterparty_node_id, user_channel_id
1903+
/// &temporary_channel_id, &counterparty_node_id, user_channel_id, None
19041904
/// ) {
19051905
/// Ok(()) => println!("Accepting channel {}", temporary_channel_id),
19061906
/// Err(e) => println!("Error accepting channel {}: {:?}", temporary_channel_id, e),
@@ -7722,8 +7722,8 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
77227722
///
77237723
/// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
77247724
/// [`Event::ChannelClosed::user_channel_id`]: events::Event::ChannelClosed::user_channel_id
7725-
pub fn accept_inbound_channel(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128) -> Result<(), APIError> {
7726-
self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, false, user_channel_id)
7725+
pub fn accept_inbound_channel(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128, config_overrides: Option<ChannelConfigOverrides>) -> Result<(), APIError> {
7726+
self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, false, user_channel_id, config_overrides)
77277727
}
77287728

77297729
/// Accepts a request to open a channel after a [`events::Event::OpenChannelRequest`], treating
@@ -7744,15 +7744,23 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
77447744
///
77457745
/// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
77467746
/// [`Event::ChannelClosed::user_channel_id`]: events::Event::ChannelClosed::user_channel_id
7747-
pub fn accept_inbound_channel_from_trusted_peer_0conf(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128) -> Result<(), APIError> {
7748-
self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, true, user_channel_id)
7747+
pub fn accept_inbound_channel_from_trusted_peer_0conf(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128, config_overrides: Option<ChannelConfigOverrides>) -> Result<(), APIError> {
7748+
self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, true, user_channel_id, config_overrides)
77497749
}
77507750

77517751
/// TODO(dual_funding): Allow contributions, pass intended amount and inputs
77527752
fn do_accept_inbound_channel(
77537753
&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, accept_0conf: bool,
7754-
user_channel_id: u128,
7754+
user_channel_id: u128, config_overrides: Option<ChannelConfigOverrides>
77557755
) -> Result<(), APIError> {
7756+
7757+
let mut config = self.default_configuration.clone();
7758+
7759+
// Apply configuration overrides.
7760+
if let Some(overrides) = config_overrides {
7761+
config.apply(&overrides);
7762+
};
7763+
77567764
let logger = WithContext::from(&self.logger, Some(*counterparty_node_id), Some(*temporary_channel_id), None);
77577765
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
77587766

@@ -7782,7 +7790,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
77827790
InboundV1Channel::new(
77837791
&self.fee_estimator, &self.entropy_source, &self.signer_provider, *counterparty_node_id,
77847792
&self.channel_type_features(), &peer_state.latest_features, &open_channel_msg,
7785-
user_channel_id, &self.default_configuration, best_block_height, &self.logger, accept_0conf
7793+
user_channel_id, &config, best_block_height, &self.logger, accept_0conf
77867794
).map_err(|err| MsgHandleErrInternal::from_chan_no_close(err, *temporary_channel_id)
77877795
).map(|mut channel| {
77887796
let logger = WithChannelContext::from(&self.logger, &channel.context, None);
@@ -7802,7 +7810,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
78027810
self.get_our_node_id(), *counterparty_node_id,
78037811
&self.channel_type_features(), &peer_state.latest_features,
78047812
&open_channel_msg,
7805-
user_channel_id, &self.default_configuration, best_block_height,
7813+
user_channel_id, &config, best_block_height,
78067814
&self.logger,
78077815
).map_err(|_| MsgHandleErrInternal::from_chan_no_close(
78087816
ChannelError::Close(
@@ -14540,17 +14548,17 @@ mod tests {
1454014548
use crate::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, ClosureReason};
1454114549
use crate::ln::types::ChannelId;
1454214550
use crate::types::payment::{PaymentPreimage, PaymentHash, PaymentSecret};
14543-
use crate::ln::channelmanager::{create_recv_pending_htlc_info, HTLCForwardInfo, inbound_payment, PaymentId, RecipientOnionFields, InterceptId};
14551+
use crate::ln::channelmanager::{create_recv_pending_htlc_info, inbound_payment, ChannelConfigOverrides, HTLCForwardInfo, InterceptId, PaymentId, RecipientOnionFields};
1454414552
use crate::ln::functional_test_utils::*;
14545-
use crate::ln::msgs::{self, ErrorAction};
14553+
use crate::ln::msgs::{self, AcceptChannel, ErrorAction};
1454614554
use crate::ln::msgs::ChannelMessageHandler;
1454714555
use crate::ln::outbound_payment::Retry;
1454814556
use crate::prelude::*;
1454914557
use crate::routing::router::{PaymentParameters, RouteParameters, find_route};
1455014558
use crate::util::errors::APIError;
1455114559
use crate::util::ser::Writeable;
1455214560
use crate::util::test_utils;
14553-
use crate::util::config::{ChannelConfig, ChannelConfigUpdate};
14561+
use crate::util::config::{ChannelConfig, ChannelConfigUpdate, ChannelHandshakeConfigUpdate};
1455414562
use crate::sign::EntropySource;
1455514563

1455614564
#[test]
@@ -15299,7 +15307,7 @@ mod tests {
1529915307
// Test the API functions.
1530015308
check_not_connected_to_peer_error(nodes[0].node.create_channel(unkown_public_key, 1_000_000, 500_000_000, 42, None, None), unkown_public_key);
1530115309

15302-
check_unkown_peer_error(nodes[0].node.accept_inbound_channel(&channel_id, &unkown_public_key, 42), unkown_public_key);
15310+
check_unkown_peer_error(nodes[0].node.accept_inbound_channel(&channel_id, &unkown_public_key, 42, None), unkown_public_key);
1530315311

1530415312
check_unkown_peer_error(nodes[0].node.close_channel(&channel_id, &unkown_public_key), unkown_public_key);
1530515313

@@ -15330,7 +15338,7 @@ mod tests {
1533015338
let error_message = "Channel force-closed";
1533115339

1533215340
// Test the API functions.
15333-
check_api_misuse_error(nodes[0].node.accept_inbound_channel(&channel_id, &counterparty_node_id, 42));
15341+
check_api_misuse_error(nodes[0].node.accept_inbound_channel(&channel_id, &counterparty_node_id, 42, None));
1533415342

1533515343
check_channel_unavailable_error(nodes[0].node.close_channel(&channel_id, &counterparty_node_id), channel_id, counterparty_node_id);
1533615344

@@ -15521,7 +15529,7 @@ mod tests {
1552115529
let events = nodes[1].node.get_and_clear_pending_events();
1552215530
match events[0] {
1552315531
Event::OpenChannelRequest { temporary_channel_id, .. } => {
15524-
nodes[1].node.accept_inbound_channel(&temporary_channel_id, &random_pk, 23).unwrap();
15532+
nodes[1].node.accept_inbound_channel(&temporary_channel_id, &random_pk, 23, None).unwrap();
1552515533
}
1552615534
_ => panic!("Unexpected event"),
1552715535
}
@@ -15539,7 +15547,7 @@ mod tests {
1553915547
let events = nodes[1].node.get_and_clear_pending_events();
1554015548
match events[0] {
1554115549
Event::OpenChannelRequest { temporary_channel_id, .. } => {
15542-
match nodes[1].node.accept_inbound_channel(&temporary_channel_id, &last_random_pk, 23) {
15550+
match nodes[1].node.accept_inbound_channel(&temporary_channel_id, &last_random_pk, 23, None) {
1554315551
Err(APIError::APIMisuseError { err }) =>
1554415552
assert_eq!(err, "Too many peers with unfunded channels, refusing to accept new ones"),
1554515553
_ => panic!(),
@@ -15555,7 +15563,7 @@ mod tests {
1555515563
let events = nodes[1].node.get_and_clear_pending_events();
1555615564
match events[0] {
1555715565
Event::OpenChannelRequest { temporary_channel_id, .. } => {
15558-
nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &last_random_pk, 23).unwrap();
15566+
nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &last_random_pk, 23, None).unwrap();
1555915567
}
1556015568
_ => panic!("Unexpected event"),
1556115569
}
@@ -15635,6 +15643,33 @@ mod tests {
1563515643

1563615644
#[test]
1563715645
fn test_inbound_anchors_manual_acceptance() {
15646+
test_inbound_anchors_manual_acceptance_with_override(None);
15647+
}
15648+
15649+
#[test]
15650+
fn test_inbound_anchors_manual_acceptance_overridden() {
15651+
let overrides = ChannelConfigOverrides {
15652+
handshake_overrides: Some(ChannelHandshakeConfigUpdate {
15653+
max_inbound_htlc_value_in_flight_percent_of_channel: Some(5),
15654+
htlc_minimum_msat: Some(1000),
15655+
minimum_depth: Some(2),
15656+
to_self_delay: Some(200),
15657+
max_accepted_htlcs: Some(5),
15658+
channel_reserve_proportional_millionths: Some(20000),
15659+
}),
15660+
update_overrides: None,
15661+
};
15662+
15663+
let accept_message = test_inbound_anchors_manual_acceptance_with_override(Some(overrides));
15664+
assert_eq!(accept_message.common_fields.max_htlc_value_in_flight_msat, 5_000_000);
15665+
assert_eq!(accept_message.common_fields.htlc_minimum_msat, 1_000);
15666+
assert_eq!(accept_message.common_fields.minimum_depth, 2);
15667+
assert_eq!(accept_message.common_fields.to_self_delay, 200);
15668+
assert_eq!(accept_message.common_fields.max_accepted_htlcs, 5);
15669+
assert_eq!(accept_message.channel_reserve_satoshis, 2_000);
15670+
}
15671+
15672+
fn test_inbound_anchors_manual_acceptance_with_override(config_overrides: Option<ChannelConfigOverrides>) -> AcceptChannel {
1563815673
// Tests that we properly limit inbound channels when we have the manual-channel-acceptance
1563915674
// flag set and (sometimes) accept channels as 0conf.
1564015675
let mut anchors_cfg = test_default_channel_config();
@@ -15671,10 +15706,10 @@ mod tests {
1567115706
let events = nodes[2].node.get_and_clear_pending_events();
1567215707
match events[0] {
1567315708
Event::OpenChannelRequest { temporary_channel_id, .. } =>
15674-
nodes[2].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 23).unwrap(),
15709+
nodes[2].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 23, config_overrides).unwrap(),
1567515710
_ => panic!("Unexpected event"),
1567615711
}
15677-
get_event_msg!(nodes[2], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
15712+
get_event_msg!(nodes[2], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id())
1567815713
}
1567915714

1568015715
#[test]

lightning/src/ln/functional_test_utils.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ use crate::onion_message::messenger::OnionMessenger;
2727
use crate::routing::gossip::{P2PGossipSync, NetworkGraph, NetworkUpdate};
2828
use crate::routing::router::{self, PaymentParameters, Route, RouteParameters};
2929
use crate::sign::{EntropySource, RandomBytes};
30-
use crate::util::config::{UserConfig, MaxDustHTLCExposure};
30+
use crate::util::config::{MaxDustHTLCExposure, UserConfig};
3131
#[cfg(test)]
3232
use crate::util::logger::Logger;
3333
use crate::util::scid_utils;
@@ -1321,7 +1321,7 @@ pub fn open_zero_conf_channel<'a, 'b, 'c, 'd>(initiator: &'a Node<'b, 'c, 'd>, r
13211321
assert_eq!(events.len(), 1);
13221322
match events[0] {
13231323
Event::OpenChannelRequest { temporary_channel_id, .. } => {
1324-
receiver.node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &initiator.node.get_our_node_id(), 0).unwrap();
1324+
receiver.node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &initiator.node.get_our_node_id(), 0, None).unwrap();
13251325
},
13261326
_ => panic!("Unexpected event"),
13271327
};
@@ -1389,7 +1389,7 @@ pub fn exchange_open_accept_chan<'a, 'b, 'c>(node_a: &Node<'a, 'b, 'c>, node_b:
13891389
assert_eq!(events.len(), 1);
13901390
match &events[0] {
13911391
Event::OpenChannelRequest { temporary_channel_id, counterparty_node_id, .. } =>
1392-
node_b.node.accept_inbound_channel(temporary_channel_id, counterparty_node_id, 42).unwrap(),
1392+
node_b.node.accept_inbound_channel(temporary_channel_id, counterparty_node_id, 42, None).unwrap(),
13931393
_ => panic!("Unexpected event"),
13941394
};
13951395
}

0 commit comments

Comments
 (0)