@@ -80,7 +80,7 @@ use crate::onion_message::messenger::{Destination, MessageRouter, Responder, Res
80
80
use crate::onion_message::offers::{OffersMessage, OffersMessageHandler};
81
81
use crate::sign::{EntropySource, NodeSigner, Recipient, SignerProvider};
82
82
use crate::sign::ecdsa::EcdsaChannelSigner;
83
- use crate::util::config::{UserConfig, ChannelConfig, ChannelConfigUpdate};
83
+ use crate::util::config::{ChannelConfig, ChannelConfigUpdate, InboundChannelConfigOverrides, UserConfig };
84
84
use crate::util::wakers::{Future, Notifier};
85
85
use crate::util::scid_utils::fake_scid;
86
86
use crate::util::string::UntrustedString;
@@ -1875,6 +1875,7 @@ where
1875
1875
/// ```
1876
1876
/// # use bitcoin::secp256k1::PublicKey;
1877
1877
/// # use lightning::ln::channelmanager::AChannelManager;
1878
+ /// # use lightning::util::config::InboundChannelConfigOverrides;
1878
1879
/// # use lightning::events::{Event, EventsProvider};
1879
1880
/// #
1880
1881
/// # fn is_trusted(counterparty_node_id: PublicKey) -> bool {
@@ -1900,7 +1901,7 @@ where
1900
1901
///
1901
1902
/// let user_channel_id = 43;
1902
1903
/// match channel_manager.accept_inbound_channel(
1903
- /// &temporary_channel_id, &counterparty_node_id, user_channel_id
1904
+ /// &temporary_channel_id, &counterparty_node_id, user_channel_id, None
1904
1905
/// ) {
1905
1906
/// Ok(()) => println!("Accepting channel {}", temporary_channel_id),
1906
1907
/// Err(e) => println!("Error accepting channel {}: {:?}", temporary_channel_id, e),
@@ -7722,8 +7723,8 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
7722
7723
///
7723
7724
/// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
7724
7725
/// [`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)
7726
+ pub fn accept_inbound_channel(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128, config_overrides: Option<InboundChannelConfigOverrides> ) -> Result<(), APIError> {
7727
+ self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, false, user_channel_id, config_overrides )
7727
7728
}
7728
7729
7729
7730
/// Accepts a request to open a channel after a [`events::Event::OpenChannelRequest`], treating
@@ -7744,15 +7745,24 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
7744
7745
///
7745
7746
/// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
7746
7747
/// [`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)
7748
+ 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> {
7749
+ self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, true, user_channel_id, config_overrides )
7749
7750
}
7750
7751
7751
7752
/// TODO(dual_funding): Allow contributions, pass intended amount and inputs
7752
7753
fn do_accept_inbound_channel(
7753
7754
&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, accept_0conf: bool,
7754
- user_channel_id: u128,
7755
+ user_channel_id: u128, config_overrides: Option<InboundChannelConfigOverrides>
7755
7756
) -> Result<(), APIError> {
7757
+
7758
+ // Apply configuration overrides.
7759
+ let config: UserConfig = match config_overrides {
7760
+ Some(overrides) => {
7761
+ overrides.apply(&self.default_configuration)
7762
+ },
7763
+ None => self.default_configuration
7764
+ };
7765
+
7756
7766
let logger = WithContext::from(&self.logger, Some(*counterparty_node_id), Some(*temporary_channel_id), None);
7757
7767
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
7758
7768
@@ -7782,7 +7792,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
7782
7792
InboundV1Channel::new(
7783
7793
&self.fee_estimator, &self.entropy_source, &self.signer_provider, *counterparty_node_id,
7784
7794
&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
7795
+ user_channel_id, &config , best_block_height, &self.logger, accept_0conf
7786
7796
).map_err(|err| MsgHandleErrInternal::from_chan_no_close(err, *temporary_channel_id)
7787
7797
).map(|mut channel| {
7788
7798
let logger = WithChannelContext::from(&self.logger, &channel.context, None);
@@ -7802,7 +7812,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
7802
7812
self.get_our_node_id(), *counterparty_node_id,
7803
7813
&self.channel_type_features(), &peer_state.latest_features,
7804
7814
&open_channel_msg,
7805
- user_channel_id, &self.default_configuration , best_block_height,
7815
+ user_channel_id, &config , best_block_height,
7806
7816
&self.logger,
7807
7817
).map_err(|_| MsgHandleErrInternal::from_chan_no_close(
7808
7818
ChannelError::Close(
@@ -14540,17 +14550,17 @@ mod tests {
14540
14550
use crate::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, ClosureReason};
14541
14551
use crate::ln::types::ChannelId;
14542
14552
use crate::types::payment::{PaymentPreimage, PaymentHash, PaymentSecret};
14543
- use crate::ln::channelmanager::{create_recv_pending_htlc_info, HTLCForwardInfo, inbound_payment , PaymentId, RecipientOnionFields, InterceptId };
14553
+ use crate::ln::channelmanager::{create_recv_pending_htlc_info, inbound_payment, InboundChannelConfigOverrides, HTLCForwardInfo, InterceptId , PaymentId, RecipientOnionFields};
14544
14554
use crate::ln::functional_test_utils::*;
14545
- use crate::ln::msgs::{self, ErrorAction};
14555
+ use crate::ln::msgs::{self, AcceptChannel, ErrorAction};
14546
14556
use crate::ln::msgs::ChannelMessageHandler;
14547
14557
use crate::ln::outbound_payment::Retry;
14548
14558
use crate::prelude::*;
14549
14559
use crate::routing::router::{PaymentParameters, RouteParameters, find_route};
14550
14560
use crate::util::errors::APIError;
14551
14561
use crate::util::ser::Writeable;
14552
14562
use crate::util::test_utils;
14553
- use crate::util::config::{ChannelConfig, ChannelConfigUpdate};
14563
+ use crate::util::config::{ChannelConfig, ChannelConfigUpdate, InboundChannelHandshakeConfigOverrides };
14554
14564
use crate::sign::EntropySource;
14555
14565
14556
14566
#[test]
@@ -15299,7 +15309,7 @@ mod tests {
15299
15309
// Test the API functions.
15300
15310
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);
15301
15311
15302
- check_unkown_peer_error(nodes[0].node.accept_inbound_channel(&channel_id, &unkown_public_key, 42), unkown_public_key);
15312
+ check_unkown_peer_error(nodes[0].node.accept_inbound_channel(&channel_id, &unkown_public_key, 42, None ), unkown_public_key);
15303
15313
15304
15314
check_unkown_peer_error(nodes[0].node.close_channel(&channel_id, &unkown_public_key), unkown_public_key);
15305
15315
@@ -15330,7 +15340,7 @@ mod tests {
15330
15340
let error_message = "Channel force-closed";
15331
15341
15332
15342
// Test the API functions.
15333
- check_api_misuse_error(nodes[0].node.accept_inbound_channel(&channel_id, &counterparty_node_id, 42));
15343
+ check_api_misuse_error(nodes[0].node.accept_inbound_channel(&channel_id, &counterparty_node_id, 42, None ));
15334
15344
15335
15345
check_channel_unavailable_error(nodes[0].node.close_channel(&channel_id, &counterparty_node_id), channel_id, counterparty_node_id);
15336
15346
@@ -15521,7 +15531,7 @@ mod tests {
15521
15531
let events = nodes[1].node.get_and_clear_pending_events();
15522
15532
match events[0] {
15523
15533
Event::OpenChannelRequest { temporary_channel_id, .. } => {
15524
- nodes[1].node.accept_inbound_channel(&temporary_channel_id, &random_pk, 23).unwrap();
15534
+ nodes[1].node.accept_inbound_channel(&temporary_channel_id, &random_pk, 23, None ).unwrap();
15525
15535
}
15526
15536
_ => panic!("Unexpected event"),
15527
15537
}
@@ -15539,7 +15549,7 @@ mod tests {
15539
15549
let events = nodes[1].node.get_and_clear_pending_events();
15540
15550
match events[0] {
15541
15551
Event::OpenChannelRequest { temporary_channel_id, .. } => {
15542
- match nodes[1].node.accept_inbound_channel(&temporary_channel_id, &last_random_pk, 23) {
15552
+ match nodes[1].node.accept_inbound_channel(&temporary_channel_id, &last_random_pk, 23, None ) {
15543
15553
Err(APIError::APIMisuseError { err }) =>
15544
15554
assert_eq!(err, "Too many peers with unfunded channels, refusing to accept new ones"),
15545
15555
_ => panic!(),
@@ -15555,7 +15565,7 @@ mod tests {
15555
15565
let events = nodes[1].node.get_and_clear_pending_events();
15556
15566
match events[0] {
15557
15567
Event::OpenChannelRequest { temporary_channel_id, .. } => {
15558
- nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &last_random_pk, 23).unwrap();
15568
+ nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &last_random_pk, 23, None ).unwrap();
15559
15569
}
15560
15570
_ => panic!("Unexpected event"),
15561
15571
}
@@ -15635,6 +15645,33 @@ mod tests {
15635
15645
15636
15646
#[test]
15637
15647
fn test_inbound_anchors_manual_acceptance() {
15648
+ test_inbound_anchors_manual_acceptance_with_override(None);
15649
+ }
15650
+
15651
+ #[test]
15652
+ fn test_inbound_anchors_manual_acceptance_overridden() {
15653
+ let overrides = InboundChannelConfigOverrides {
15654
+ handshake_overrides: Some(InboundChannelHandshakeConfigOverrides {
15655
+ max_inbound_htlc_value_in_flight_percent_of_channel: Some(5),
15656
+ htlc_minimum_msat: Some(1000),
15657
+ minimum_depth: Some(2),
15658
+ to_self_delay: Some(200),
15659
+ max_accepted_htlcs: Some(5),
15660
+ channel_reserve_proportional_millionths: Some(20000),
15661
+ }),
15662
+ update_overrides: None,
15663
+ };
15664
+
15665
+ let accept_message = test_inbound_anchors_manual_acceptance_with_override(Some(overrides));
15666
+ assert_eq!(accept_message.common_fields.max_htlc_value_in_flight_msat, 5_000_000);
15667
+ assert_eq!(accept_message.common_fields.htlc_minimum_msat, 1_000);
15668
+ assert_eq!(accept_message.common_fields.minimum_depth, 2);
15669
+ assert_eq!(accept_message.common_fields.to_self_delay, 200);
15670
+ assert_eq!(accept_message.common_fields.max_accepted_htlcs, 5);
15671
+ assert_eq!(accept_message.channel_reserve_satoshis, 2_000);
15672
+ }
15673
+
15674
+ fn test_inbound_anchors_manual_acceptance_with_override(config_overrides: Option<InboundChannelConfigOverrides>) -> AcceptChannel {
15638
15675
// Tests that we properly limit inbound channels when we have the manual-channel-acceptance
15639
15676
// flag set and (sometimes) accept channels as 0conf.
15640
15677
let mut anchors_cfg = test_default_channel_config();
@@ -15671,10 +15708,10 @@ mod tests {
15671
15708
let events = nodes[2].node.get_and_clear_pending_events();
15672
15709
match events[0] {
15673
15710
Event::OpenChannelRequest { temporary_channel_id, .. } =>
15674
- nodes[2].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 23).unwrap(),
15711
+ nodes[2].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 23, config_overrides ).unwrap(),
15675
15712
_ => panic!("Unexpected event"),
15676
15713
}
15677
- get_event_msg!(nodes[2], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
15714
+ get_event_msg!(nodes[2], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id())
15678
15715
}
15679
15716
15680
15717
#[test]
0 commit comments