@@ -78,7 +78,7 @@ use crate::onion_message::messenger::{Destination, MessageRouter, Responder, Res
78
78
use crate::onion_message::offers::{OffersMessage, OffersMessageHandler};
79
79
use crate::sign::{EntropySource, NodeSigner, Recipient, SignerProvider};
80
80
use crate::sign::ecdsa::EcdsaChannelSigner;
81
- use crate::util::config::{UserConfig, ChannelConfig, ChannelConfigUpdate};
81
+ use crate::util::config::{ChannelConfig, ChannelConfigUpdate, InboundChannelConfigOverrides, UserConfig };
82
82
use crate::util::wakers::{Future, Notifier};
83
83
use crate::util::scid_utils::fake_scid;
84
84
use crate::util::string::UntrustedString;
@@ -1852,6 +1852,7 @@ where
1852
1852
/// ```
1853
1853
/// # use bitcoin::secp256k1::PublicKey;
1854
1854
/// # use lightning::ln::channelmanager::AChannelManager;
1855
+ /// # use lightning::util::config::InboundChannelConfigOverrides;
1855
1856
/// # use lightning::events::{Event, EventsProvider};
1856
1857
/// #
1857
1858
/// # fn is_trusted(counterparty_node_id: PublicKey) -> bool {
@@ -1877,7 +1878,7 @@ where
1877
1878
///
1878
1879
/// let user_channel_id = 43;
1879
1880
/// 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
1881
1882
/// ) {
1882
1883
/// Ok(()) => println!("Accepting channel {}", temporary_channel_id),
1883
1884
/// 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/
7699
7700
///
7700
7701
/// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
7701
7702
/// [`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 )
7704
7705
}
7705
7706
7706
7707
/// 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/
7721
7722
///
7722
7723
/// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
7723
7724
/// [`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 )
7726
7727
}
7727
7728
7728
7729
fn do_accept_inbound_channel(
7729
7730
&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, accept_0conf: bool,
7730
7731
user_channel_id: u128, _funding_inputs: Vec<(TxIn, TransactionU16LenLimited)>,
7731
- _total_witness_weight: Weight,
7732
+ _total_witness_weight: Weight, config_overrides: Option<InboundChannelConfigOverrides>
7732
7733
) -> 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
+
7733
7743
let logger = WithContext::from(&self.logger, Some(*counterparty_node_id), Some(*temporary_channel_id), None);
7734
7744
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
7735
7745
@@ -7759,7 +7769,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
7759
7769
InboundV1Channel::new(
7760
7770
&self.fee_estimator, &self.entropy_source, &self.signer_provider, *counterparty_node_id,
7761
7771
&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
7763
7773
).map_err(|err| MsgHandleErrInternal::from_chan_no_close(err, *temporary_channel_id)
7764
7774
).map(|mut channel| {
7765
7775
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/
7779
7789
self.get_our_node_id(), *counterparty_node_id,
7780
7790
&self.channel_type_features(), &peer_state.latest_features,
7781
7791
&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,
7783
7793
&self.logger,
7784
7794
).map_err(|_| MsgHandleErrInternal::from_chan_no_close(
7785
7795
ChannelError::Close(
@@ -14478,17 +14488,17 @@ mod tests {
14478
14488
use crate::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, ClosureReason};
14479
14489
use crate::ln::types::ChannelId;
14480
14490
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};
14482
14492
use crate::ln::functional_test_utils::*;
14483
- use crate::ln::msgs::{self, ErrorAction};
14493
+ use crate::ln::msgs::{self, AcceptChannel, ErrorAction};
14484
14494
use crate::ln::msgs::ChannelMessageHandler;
14485
14495
use crate::ln::outbound_payment::Retry;
14486
14496
use crate::prelude::*;
14487
14497
use crate::routing::router::{PaymentParameters, RouteParameters, find_route};
14488
14498
use crate::util::errors::APIError;
14489
14499
use crate::util::ser::Writeable;
14490
14500
use crate::util::test_utils;
14491
- use crate::util::config::{ChannelConfig, ChannelConfigUpdate};
14501
+ use crate::util::config::{ChannelConfig, ChannelConfigUpdate, InboundChannelHandshakeConfigOverrides };
14492
14502
use crate::sign::EntropySource;
14493
14503
14494
14504
#[test]
@@ -15237,7 +15247,7 @@ mod tests {
15237
15247
// Test the API functions.
15238
15248
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);
15239
15249
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);
15241
15251
15242
15252
check_unkown_peer_error(nodes[0].node.close_channel(&channel_id, &unkown_public_key), unkown_public_key);
15243
15253
@@ -15268,7 +15278,7 @@ mod tests {
15268
15278
let error_message = "Channel force-closed";
15269
15279
15270
15280
// 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 ));
15272
15282
15273
15283
check_channel_unavailable_error(nodes[0].node.close_channel(&channel_id, &counterparty_node_id), channel_id, counterparty_node_id);
15274
15284
@@ -15459,7 +15469,7 @@ mod tests {
15459
15469
let events = nodes[1].node.get_and_clear_pending_events();
15460
15470
match events[0] {
15461
15471
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();
15463
15473
}
15464
15474
_ => panic!("Unexpected event"),
15465
15475
}
@@ -15477,7 +15487,7 @@ mod tests {
15477
15487
let events = nodes[1].node.get_and_clear_pending_events();
15478
15488
match events[0] {
15479
15489
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 ) {
15481
15491
Err(APIError::APIMisuseError { err }) =>
15482
15492
assert_eq!(err, "Too many peers with unfunded channels, refusing to accept new ones"),
15483
15493
_ => panic!(),
@@ -15493,7 +15503,7 @@ mod tests {
15493
15503
let events = nodes[1].node.get_and_clear_pending_events();
15494
15504
match events[0] {
15495
15505
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();
15497
15507
}
15498
15508
_ => panic!("Unexpected event"),
15499
15509
}
@@ -15573,6 +15583,33 @@ mod tests {
15573
15583
15574
15584
#[test]
15575
15585
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 {
15576
15613
// Tests that we properly limit inbound channels when we have the manual-channel-acceptance
15577
15614
// flag set and (sometimes) accept channels as 0conf.
15578
15615
let mut anchors_cfg = test_default_channel_config();
@@ -15609,10 +15646,10 @@ mod tests {
15609
15646
let events = nodes[2].node.get_and_clear_pending_events();
15610
15647
match events[0] {
15611
15648
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(),
15613
15650
_ => panic!("Unexpected event"),
15614
15651
}
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())
15616
15653
}
15617
15654
15618
15655
#[test]
0 commit comments