@@ -80,7 +80,7 @@ use crate::onion_message::messenger::{Destination, MessageRouter, Responder, Res
8080use crate::onion_message::offers::{OffersMessage, OffersMessageHandler};
8181use crate::sign::{EntropySource, NodeSigner, Recipient, SignerProvider};
8282use crate::sign::ecdsa::EcdsaChannelSigner;
83- use crate::util::config::{UserConfig, ChannelConfig, ChannelConfigUpdate};
83+ use crate::util::config::{ChannelConfig, ChannelConfigUpdate, ChannelConfigOverrides, UserConfig };
8484use crate::util::wakers::{Future, Notifier};
8585use crate::util::scid_utils::fake_scid;
8686use crate::util::string::UntrustedString;
@@ -1902,7 +1902,7 @@ where
19021902///
19031903/// let user_channel_id = 43;
19041904/// match channel_manager.accept_inbound_channel(
1905- /// &temporary_channel_id, &counterparty_node_id, user_channel_id
1905+ /// &temporary_channel_id, &counterparty_node_id, user_channel_id, None
19061906/// ) {
19071907/// Ok(()) => println!("Accepting channel {}", temporary_channel_id),
19081908/// Err(e) => println!("Error accepting channel {}: {:?}", temporary_channel_id, e),
@@ -7755,8 +7755,8 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
77557755 ///
77567756 /// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
77577757 /// [`Event::ChannelClosed::user_channel_id`]: events::Event::ChannelClosed::user_channel_id
7758- pub fn accept_inbound_channel(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128) -> Result<(), APIError> {
7759- self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, false, user_channel_id)
7758+ pub fn accept_inbound_channel(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128, config_overrides: Option<ChannelConfigOverrides> ) -> Result<(), APIError> {
7759+ self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, false, user_channel_id, config_overrides )
77607760 }
77617761
77627762 /// Accepts a request to open a channel after a [`events::Event::OpenChannelRequest`], treating
@@ -7777,15 +7777,23 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
77777777 ///
77787778 /// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
77797779 /// [`Event::ChannelClosed::user_channel_id`]: events::Event::ChannelClosed::user_channel_id
7780- pub fn accept_inbound_channel_from_trusted_peer_0conf(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128) -> Result<(), APIError> {
7781- self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, true, user_channel_id)
7780+ 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> {
7781+ self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, true, user_channel_id, config_overrides )
77827782 }
77837783
77847784 /// TODO(dual_funding): Allow contributions, pass intended amount and inputs
77857785 fn do_accept_inbound_channel(
77867786 &self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, accept_0conf: bool,
7787- user_channel_id: u128,
7787+ user_channel_id: u128, config_overrides: Option<ChannelConfigOverrides>
77887788 ) -> Result<(), APIError> {
7789+
7790+ let mut config = self.default_configuration.clone();
7791+
7792+ // Apply configuration overrides.
7793+ if let Some(overrides) = config_overrides {
7794+ config.apply(&overrides);
7795+ };
7796+
77897797 let logger = WithContext::from(&self.logger, Some(*counterparty_node_id), Some(*temporary_channel_id), None);
77907798 let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
77917799
@@ -7815,7 +7823,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
78157823 InboundV1Channel::new(
78167824 &self.fee_estimator, &self.entropy_source, &self.signer_provider, *counterparty_node_id,
78177825 &self.channel_type_features(), &peer_state.latest_features, &open_channel_msg,
7818- user_channel_id, &self.default_configuration , best_block_height, &self.logger, accept_0conf
7826+ user_channel_id, &config , best_block_height, &self.logger, accept_0conf
78197827 ).map_err(|err| MsgHandleErrInternal::from_chan_no_close(err, *temporary_channel_id)
78207828 ).map(|mut channel| {
78217829 let logger = WithChannelContext::from(&self.logger, &channel.context, None);
@@ -7835,7 +7843,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
78357843 self.get_our_node_id(), *counterparty_node_id,
78367844 &self.channel_type_features(), &peer_state.latest_features,
78377845 &open_channel_msg,
7838- user_channel_id, &self.default_configuration , best_block_height,
7846+ user_channel_id, &config , best_block_height,
78397847 &self.logger,
78407848 ).map_err(|_| MsgHandleErrInternal::from_chan_no_close(
78417849 ChannelError::Close(
@@ -14657,17 +14665,17 @@ mod tests {
1465714665 use crate::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, ClosureReason};
1465814666 use crate::ln::types::ChannelId;
1465914667 use crate::types::payment::{PaymentPreimage, PaymentHash, PaymentSecret};
14660- use crate::ln::channelmanager::{create_recv_pending_htlc_info, HTLCForwardInfo, inbound_payment , PaymentId, RecipientOnionFields, InterceptId };
14668+ use crate::ln::channelmanager::{create_recv_pending_htlc_info, inbound_payment, ChannelConfigOverrides, HTLCForwardInfo, InterceptId , PaymentId, RecipientOnionFields};
1466114669 use crate::ln::functional_test_utils::*;
14662- use crate::ln::msgs::{self, ErrorAction};
14670+ use crate::ln::msgs::{self, AcceptChannel, ErrorAction};
1466314671 use crate::ln::msgs::ChannelMessageHandler;
1466414672 use crate::ln::outbound_payment::Retry;
1466514673 use crate::prelude::*;
1466614674 use crate::routing::router::{PaymentParameters, RouteParameters, find_route};
1466714675 use crate::util::errors::APIError;
1466814676 use crate::util::ser::Writeable;
1466914677 use crate::util::test_utils;
14670- use crate::util::config::{ChannelConfig, ChannelConfigUpdate};
14678+ use crate::util::config::{ChannelConfig, ChannelConfigUpdate, ChannelHandshakeConfigUpdate };
1467114679 use crate::sign::EntropySource;
1467214680
1467314681 #[test]
@@ -15480,7 +15488,7 @@ mod tests {
1548015488 // Test the API functions.
1548115489 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);
1548215490
15483- check_unkown_peer_error(nodes[0].node.accept_inbound_channel(&channel_id, &unkown_public_key, 42), unkown_public_key);
15491+ check_unkown_peer_error(nodes[0].node.accept_inbound_channel(&channel_id, &unkown_public_key, 42, None ), unkown_public_key);
1548415492
1548515493 check_unkown_peer_error(nodes[0].node.close_channel(&channel_id, &unkown_public_key), unkown_public_key);
1548615494
@@ -15511,7 +15519,7 @@ mod tests {
1551115519 let error_message = "Channel force-closed";
1551215520
1551315521 // Test the API functions.
15514- check_api_misuse_error(nodes[0].node.accept_inbound_channel(&channel_id, &counterparty_node_id, 42));
15522+ check_api_misuse_error(nodes[0].node.accept_inbound_channel(&channel_id, &counterparty_node_id, 42, None ));
1551515523
1551615524 check_channel_unavailable_error(nodes[0].node.close_channel(&channel_id, &counterparty_node_id), channel_id, counterparty_node_id);
1551715525
@@ -15702,7 +15710,7 @@ mod tests {
1570215710 let events = nodes[1].node.get_and_clear_pending_events();
1570315711 match events[0] {
1570415712 Event::OpenChannelRequest { temporary_channel_id, .. } => {
15705- nodes[1].node.accept_inbound_channel(&temporary_channel_id, &random_pk, 23).unwrap();
15713+ nodes[1].node.accept_inbound_channel(&temporary_channel_id, &random_pk, 23, None ).unwrap();
1570615714 }
1570715715 _ => panic!("Unexpected event"),
1570815716 }
@@ -15720,7 +15728,7 @@ mod tests {
1572015728 let events = nodes[1].node.get_and_clear_pending_events();
1572115729 match events[0] {
1572215730 Event::OpenChannelRequest { temporary_channel_id, .. } => {
15723- match nodes[1].node.accept_inbound_channel(&temporary_channel_id, &last_random_pk, 23) {
15731+ match nodes[1].node.accept_inbound_channel(&temporary_channel_id, &last_random_pk, 23, None ) {
1572415732 Err(APIError::APIMisuseError { err }) =>
1572515733 assert_eq!(err, "Too many peers with unfunded channels, refusing to accept new ones"),
1572615734 _ => panic!(),
@@ -15736,7 +15744,7 @@ mod tests {
1573615744 let events = nodes[1].node.get_and_clear_pending_events();
1573715745 match events[0] {
1573815746 Event::OpenChannelRequest { temporary_channel_id, .. } => {
15739- nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &last_random_pk, 23).unwrap();
15747+ nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &last_random_pk, 23, None ).unwrap();
1574015748 }
1574115749 _ => panic!("Unexpected event"),
1574215750 }
@@ -15819,6 +15827,33 @@ mod tests {
1581915827
1582015828 #[test]
1582115829 fn test_inbound_anchors_manual_acceptance() {
15830+ test_inbound_anchors_manual_acceptance_with_override(None);
15831+ }
15832+
15833+ #[test]
15834+ fn test_inbound_anchors_manual_acceptance_overridden() {
15835+ let overrides = ChannelConfigOverrides {
15836+ handshake_overrides: Some(ChannelHandshakeConfigUpdate {
15837+ max_inbound_htlc_value_in_flight_percent_of_channel: Some(5),
15838+ htlc_minimum_msat: Some(1000),
15839+ minimum_depth: Some(2),
15840+ to_self_delay: Some(200),
15841+ max_accepted_htlcs: Some(5),
15842+ channel_reserve_proportional_millionths: Some(20000),
15843+ }),
15844+ update_overrides: None,
15845+ };
15846+
15847+ let accept_message = test_inbound_anchors_manual_acceptance_with_override(Some(overrides));
15848+ assert_eq!(accept_message.common_fields.max_htlc_value_in_flight_msat, 5_000_000);
15849+ assert_eq!(accept_message.common_fields.htlc_minimum_msat, 1_000);
15850+ assert_eq!(accept_message.common_fields.minimum_depth, 2);
15851+ assert_eq!(accept_message.common_fields.to_self_delay, 200);
15852+ assert_eq!(accept_message.common_fields.max_accepted_htlcs, 5);
15853+ assert_eq!(accept_message.channel_reserve_satoshis, 2_000);
15854+ }
15855+
15856+ fn test_inbound_anchors_manual_acceptance_with_override(config_overrides: Option<ChannelConfigOverrides>) -> AcceptChannel {
1582215857 // Tests that we properly limit inbound channels when we have the manual-channel-acceptance
1582315858 // flag set and (sometimes) accept channels as 0conf.
1582415859 let mut anchors_cfg = test_default_channel_config();
@@ -15855,10 +15890,10 @@ mod tests {
1585515890 let events = nodes[2].node.get_and_clear_pending_events();
1585615891 match events[0] {
1585715892 Event::OpenChannelRequest { temporary_channel_id, .. } =>
15858- nodes[2].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 23).unwrap(),
15893+ nodes[2].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 23, config_overrides ).unwrap(),
1585915894 _ => panic!("Unexpected event"),
1586015895 }
15861- get_event_msg!(nodes[2], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
15896+ get_event_msg!(nodes[2], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id())
1586215897 }
1586315898
1586415899 #[test]
@@ -15943,10 +15978,12 @@ mod tests {
1594315978 let new_fee = user_config.channel_config.forwarding_fee_proportional_millionths + 100;
1594415979 nodes[0].node.update_partial_channel_config(&channel.counterparty.node_id, &[channel.channel_id], &ChannelConfigUpdate {
1594515980 forwarding_fee_proportional_millionths: Some(new_fee),
15981+ accept_underpaying_htlcs: Some(true),
1594615982 ..Default::default()
1594715983 }).unwrap();
1594815984 assert_eq!(nodes[0].node.list_channels()[0].config.unwrap().cltv_expiry_delta, new_cltv_expiry_delta);
1594915985 assert_eq!(nodes[0].node.list_channels()[0].config.unwrap().forwarding_fee_proportional_millionths, new_fee);
15986+ assert_eq!(nodes[0].node.list_channels()[0].config.unwrap().accept_underpaying_htlcs, true);
1595015987 let events = nodes[0].node.get_and_clear_pending_msg_events();
1595115988 assert_eq!(events.len(), 1);
1595215989 match &events[0] {
0 commit comments