@@ -78,7 +78,7 @@ use crate::onion_message::messenger::{Destination, MessageRouter, Responder, Res
7878use crate::onion_message::offers::{OffersMessage, OffersMessageHandler};
7979use crate::sign::{EntropySource, NodeSigner, Recipient, SignerProvider};
8080use crate::sign::ecdsa::EcdsaChannelSigner;
81- use crate::util::config::{UserConfig, ChannelConfig, ChannelConfigUpdate};
81+ use crate::util::config::{ChannelConfig, ChannelConfigUpdate, InboundChannelConfigOverrides, UserConfig };
8282use crate::util::wakers::{Future, Notifier};
8383use crate::util::scid_utils::fake_scid;
8484use crate::util::string::UntrustedString;
@@ -1852,6 +1852,7 @@ where
18521852/// ```
18531853/// # use bitcoin::secp256k1::PublicKey;
18541854/// # use lightning::ln::channelmanager::AChannelManager;
1855+ /// # use lightning::util::config::InboundChannelConfigOverrides;
18551856/// # use lightning::events::{Event, EventsProvider};
18561857/// #
18571858/// # fn is_trusted(counterparty_node_id: PublicKey) -> bool {
@@ -1877,7 +1878,7 @@ where
18771878///
18781879/// let user_channel_id = 43;
18791880/// match channel_manager.accept_inbound_channel(
1880- /// &temporary_channel_id, &counterparty_node_id, user_channel_id
1881+ /// &temporary_channel_id, &counterparty_node_id, user_channel_id, None
18811882/// ) {
18821883/// Ok(()) => println!("Accepting channel {}", temporary_channel_id),
18831884/// Err(e) => println!("Error accepting channel {}: {:?}", temporary_channel_id, e),
@@ -7699,8 +7700,8 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
76997700 ///
77007701 /// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
77017702 /// [`Event::ChannelClosed::user_channel_id`]: events::Event::ChannelClosed::user_channel_id
7702- pub fn accept_inbound_channel(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128) -> Result<(), APIError> {
7703- self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, false, user_channel_id, vec![], Weight::from_wu(0))
7703+ pub fn accept_inbound_channel(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128, config_overrides: Option<InboundChannelConfigOverrides> ) -> Result<(), APIError> {
7704+ self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, false, user_channel_id, vec![], Weight::from_wu(0), config_overrides )
77047705 }
77057706
77067707 /// Accepts a request to open a channel after a [`events::Event::OpenChannelRequest`], treating
@@ -7721,15 +7722,24 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
77217722 ///
77227723 /// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
77237724 /// [`Event::ChannelClosed::user_channel_id`]: events::Event::ChannelClosed::user_channel_id
7724- pub fn accept_inbound_channel_from_trusted_peer_0conf(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128) -> Result<(), APIError> {
7725- self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, true, user_channel_id, vec![], Weight::from_wu(0))
7725+ 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<InboundChannelConfigOverrides> ) -> Result<(), APIError> {
7726+ self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, true, user_channel_id, vec![], Weight::from_wu(0), config_overrides )
77267727 }
77277728
77287729 fn do_accept_inbound_channel(
77297730 &self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, accept_0conf: bool,
77307731 user_channel_id: u128, _funding_inputs: Vec<(TxIn, TransactionU16LenLimited)>,
7731- _total_witness_weight: Weight,
7732+ _total_witness_weight: Weight, config_overrides: Option<InboundChannelConfigOverrides>
77327733 ) -> Result<(), APIError> {
7734+
7735+ // Apply configuration overrides.
7736+ let config: UserConfig = match config_overrides {
7737+ Some(overrides) => {
7738+ overrides.apply(&self.default_configuration)
7739+ },
7740+ None => self.default_configuration
7741+ };
7742+
77337743 let logger = WithContext::from(&self.logger, Some(*counterparty_node_id), Some(*temporary_channel_id), None);
77347744 let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
77357745
@@ -7759,7 +7769,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
77597769 InboundV1Channel::new(
77607770 &self.fee_estimator, &self.entropy_source, &self.signer_provider, *counterparty_node_id,
77617771 &self.channel_type_features(), &peer_state.latest_features, &open_channel_msg,
7762- user_channel_id, &self.default_configuration , best_block_height, &self.logger, accept_0conf
7772+ user_channel_id, &config , best_block_height, &self.logger, accept_0conf
77637773 ).map_err(|err| MsgHandleErrInternal::from_chan_no_close(err, *temporary_channel_id)
77647774 ).map(|mut channel| {
77657775 let logger = WithChannelContext::from(&self.logger, &channel.context, None);
@@ -7779,7 +7789,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
77797789 self.get_our_node_id(), *counterparty_node_id,
77807790 &self.channel_type_features(), &peer_state.latest_features,
77817791 &open_channel_msg, _funding_inputs, _total_witness_weight,
7782- user_channel_id, &self.default_configuration , best_block_height,
7792+ user_channel_id, &config , best_block_height,
77837793 &self.logger,
77847794 ).map_err(|_| MsgHandleErrInternal::from_chan_no_close(
77857795 ChannelError::Close(
@@ -14478,17 +14488,17 @@ mod tests {
1447814488 use crate::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, ClosureReason};
1447914489 use crate::ln::types::ChannelId;
1448014490 use crate::types::payment::{PaymentPreimage, PaymentHash, PaymentSecret};
14481- use crate::ln::channelmanager::{create_recv_pending_htlc_info, HTLCForwardInfo, inbound_payment , PaymentId, RecipientOnionFields, InterceptId };
14491+ use crate::ln::channelmanager::{create_recv_pending_htlc_info, inbound_payment, InboundChannelConfigOverrides, HTLCForwardInfo, InterceptId , PaymentId, RecipientOnionFields};
1448214492 use crate::ln::functional_test_utils::*;
14483- use crate::ln::msgs::{self, ErrorAction};
14493+ use crate::ln::msgs::{self, AcceptChannel, ErrorAction};
1448414494 use crate::ln::msgs::ChannelMessageHandler;
1448514495 use crate::ln::outbound_payment::Retry;
1448614496 use crate::prelude::*;
1448714497 use crate::routing::router::{PaymentParameters, RouteParameters, find_route};
1448814498 use crate::util::errors::APIError;
1448914499 use crate::util::ser::Writeable;
1449014500 use crate::util::test_utils;
14491- use crate::util::config::{ChannelConfig, ChannelConfigUpdate};
14501+ use crate::util::config::{ChannelConfig, ChannelConfigUpdate, InboundChannelHandshakeConfigOverrides };
1449214502 use crate::sign::EntropySource;
1449314503
1449414504 #[test]
@@ -15237,7 +15247,7 @@ mod tests {
1523715247 // Test the API functions.
1523815248 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);
1523915249
15240- check_unkown_peer_error(nodes[0].node.accept_inbound_channel(&channel_id, &unkown_public_key, 42), unkown_public_key);
15250+ check_unkown_peer_error(nodes[0].node.accept_inbound_channel(&channel_id, &unkown_public_key, 42, None ), unkown_public_key);
1524115251
1524215252 check_unkown_peer_error(nodes[0].node.close_channel(&channel_id, &unkown_public_key), unkown_public_key);
1524315253
@@ -15268,7 +15278,7 @@ mod tests {
1526815278 let error_message = "Channel force-closed";
1526915279
1527015280 // Test the API functions.
15271- check_api_misuse_error(nodes[0].node.accept_inbound_channel(&channel_id, &counterparty_node_id, 42));
15281+ check_api_misuse_error(nodes[0].node.accept_inbound_channel(&channel_id, &counterparty_node_id, 42, None ));
1527215282
1527315283 check_channel_unavailable_error(nodes[0].node.close_channel(&channel_id, &counterparty_node_id), channel_id, counterparty_node_id);
1527415284
@@ -15459,7 +15469,7 @@ mod tests {
1545915469 let events = nodes[1].node.get_and_clear_pending_events();
1546015470 match events[0] {
1546115471 Event::OpenChannelRequest { temporary_channel_id, .. } => {
15462- nodes[1].node.accept_inbound_channel(&temporary_channel_id, &random_pk, 23).unwrap();
15472+ nodes[1].node.accept_inbound_channel(&temporary_channel_id, &random_pk, 23, None ).unwrap();
1546315473 }
1546415474 _ => panic!("Unexpected event"),
1546515475 }
@@ -15477,7 +15487,7 @@ mod tests {
1547715487 let events = nodes[1].node.get_and_clear_pending_events();
1547815488 match events[0] {
1547915489 Event::OpenChannelRequest { temporary_channel_id, .. } => {
15480- match nodes[1].node.accept_inbound_channel(&temporary_channel_id, &last_random_pk, 23) {
15490+ match nodes[1].node.accept_inbound_channel(&temporary_channel_id, &last_random_pk, 23, None ) {
1548115491 Err(APIError::APIMisuseError { err }) =>
1548215492 assert_eq!(err, "Too many peers with unfunded channels, refusing to accept new ones"),
1548315493 _ => panic!(),
@@ -15493,7 +15503,7 @@ mod tests {
1549315503 let events = nodes[1].node.get_and_clear_pending_events();
1549415504 match events[0] {
1549515505 Event::OpenChannelRequest { temporary_channel_id, .. } => {
15496- nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &last_random_pk, 23).unwrap();
15506+ nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &last_random_pk, 23, None ).unwrap();
1549715507 }
1549815508 _ => panic!("Unexpected event"),
1549915509 }
@@ -15573,6 +15583,33 @@ mod tests {
1557315583
1557415584 #[test]
1557515585 fn test_inbound_anchors_manual_acceptance() {
15586+ test_inbound_anchors_manual_acceptance_with_override(None);
15587+ }
15588+
15589+ #[test]
15590+ fn test_inbound_anchors_manual_acceptance_overridden() {
15591+ let overrides = InboundChannelConfigOverrides {
15592+ handshake_overrides: Some(InboundChannelHandshakeConfigOverrides {
15593+ max_inbound_htlc_value_in_flight_percent_of_channel: Some(5),
15594+ htlc_minimum_msat: Some(1000),
15595+ minimum_depth: Some(2),
15596+ to_self_delay: Some(200),
15597+ max_accepted_htlcs: Some(5),
15598+ channel_reserve_proportional_millionths: Some(20000),
15599+ }),
15600+ update_overrides: None,
15601+ };
15602+
15603+ let accept_message = test_inbound_anchors_manual_acceptance_with_override(Some(overrides));
15604+ assert_eq!(accept_message.common_fields.max_htlc_value_in_flight_msat, 5_000_000);
15605+ assert_eq!(accept_message.common_fields.htlc_minimum_msat, 1_000);
15606+ assert_eq!(accept_message.common_fields.minimum_depth, 2);
15607+ assert_eq!(accept_message.common_fields.to_self_delay, 200);
15608+ assert_eq!(accept_message.common_fields.max_accepted_htlcs, 5);
15609+ assert_eq!(accept_message.channel_reserve_satoshis, 2_000);
15610+ }
15611+
15612+ fn test_inbound_anchors_manual_acceptance_with_override(config_overrides: Option<InboundChannelConfigOverrides>) -> AcceptChannel {
1557615613 // Tests that we properly limit inbound channels when we have the manual-channel-acceptance
1557715614 // flag set and (sometimes) accept channels as 0conf.
1557815615 let mut anchors_cfg = test_default_channel_config();
@@ -15609,10 +15646,10 @@ mod tests {
1560915646 let events = nodes[2].node.get_and_clear_pending_events();
1561015647 match events[0] {
1561115648 Event::OpenChannelRequest { temporary_channel_id, .. } =>
15612- nodes[2].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 23).unwrap(),
15649+ nodes[2].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 23, config_overrides ).unwrap(),
1561315650 _ => panic!("Unexpected event"),
1561415651 }
15615- get_event_msg!(nodes[2], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
15652+ get_event_msg!(nodes[2], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id())
1561615653 }
1561715654
1561815655 #[test]
0 commit comments