@@ -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