@@ -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, ChannelConfigOverrides, 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;
@@ -1902,7 +1902,7 @@ where
1902
1902
///
1903
1903
/// let user_channel_id = 43;
1904
1904
/// 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
1906
1906
/// ) {
1907
1907
/// Ok(()) => println!("Accepting channel {}", temporary_channel_id),
1908
1908
/// 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/
7755
7755
///
7756
7756
/// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
7757
7757
/// [`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 )
7760
7760
}
7761
7761
7762
7762
/// 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/
7777
7777
///
7778
7778
/// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
7779
7779
/// [`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 )
7782
7782
}
7783
7783
7784
7784
/// TODO(dual_funding): Allow contributions, pass intended amount and inputs
7785
7785
fn do_accept_inbound_channel(
7786
7786
&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>
7788
7788
) -> 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
+
7789
7797
let logger = WithContext::from(&self.logger, Some(*counterparty_node_id), Some(*temporary_channel_id), None);
7790
7798
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
7791
7799
@@ -7815,7 +7823,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
7815
7823
InboundV1Channel::new(
7816
7824
&self.fee_estimator, &self.entropy_source, &self.signer_provider, *counterparty_node_id,
7817
7825
&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
7819
7827
).map_err(|err| MsgHandleErrInternal::from_chan_no_close(err, *temporary_channel_id)
7820
7828
).map(|mut channel| {
7821
7829
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/
7835
7843
self.get_our_node_id(), *counterparty_node_id,
7836
7844
&self.channel_type_features(), &peer_state.latest_features,
7837
7845
&open_channel_msg,
7838
- user_channel_id, &self.default_configuration , best_block_height,
7846
+ user_channel_id, &config , best_block_height,
7839
7847
&self.logger,
7840
7848
).map_err(|_| MsgHandleErrInternal::from_chan_no_close(
7841
7849
ChannelError::Close(
@@ -14657,17 +14665,17 @@ mod tests {
14657
14665
use crate::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, ClosureReason};
14658
14666
use crate::ln::types::ChannelId;
14659
14667
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};
14661
14669
use crate::ln::functional_test_utils::*;
14662
- use crate::ln::msgs::{self, ErrorAction};
14670
+ use crate::ln::msgs::{self, AcceptChannel, ErrorAction};
14663
14671
use crate::ln::msgs::ChannelMessageHandler;
14664
14672
use crate::ln::outbound_payment::Retry;
14665
14673
use crate::prelude::*;
14666
14674
use crate::routing::router::{PaymentParameters, RouteParameters, find_route};
14667
14675
use crate::util::errors::APIError;
14668
14676
use crate::util::ser::Writeable;
14669
14677
use crate::util::test_utils;
14670
- use crate::util::config::{ChannelConfig, ChannelConfigUpdate};
14678
+ use crate::util::config::{ChannelConfig, ChannelConfigUpdate, ChannelHandshakeConfigUpdate };
14671
14679
use crate::sign::EntropySource;
14672
14680
14673
14681
#[test]
@@ -15480,7 +15488,7 @@ mod tests {
15480
15488
// Test the API functions.
15481
15489
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);
15482
15490
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);
15484
15492
15485
15493
check_unkown_peer_error(nodes[0].node.close_channel(&channel_id, &unkown_public_key), unkown_public_key);
15486
15494
@@ -15511,7 +15519,7 @@ mod tests {
15511
15519
let error_message = "Channel force-closed";
15512
15520
15513
15521
// 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 ));
15515
15523
15516
15524
check_channel_unavailable_error(nodes[0].node.close_channel(&channel_id, &counterparty_node_id), channel_id, counterparty_node_id);
15517
15525
@@ -15702,7 +15710,7 @@ mod tests {
15702
15710
let events = nodes[1].node.get_and_clear_pending_events();
15703
15711
match events[0] {
15704
15712
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();
15706
15714
}
15707
15715
_ => panic!("Unexpected event"),
15708
15716
}
@@ -15720,7 +15728,7 @@ mod tests {
15720
15728
let events = nodes[1].node.get_and_clear_pending_events();
15721
15729
match events[0] {
15722
15730
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 ) {
15724
15732
Err(APIError::APIMisuseError { err }) =>
15725
15733
assert_eq!(err, "Too many peers with unfunded channels, refusing to accept new ones"),
15726
15734
_ => panic!(),
@@ -15736,7 +15744,7 @@ mod tests {
15736
15744
let events = nodes[1].node.get_and_clear_pending_events();
15737
15745
match events[0] {
15738
15746
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();
15740
15748
}
15741
15749
_ => panic!("Unexpected event"),
15742
15750
}
@@ -15819,6 +15827,33 @@ mod tests {
15819
15827
15820
15828
#[test]
15821
15829
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 {
15822
15857
// Tests that we properly limit inbound channels when we have the manual-channel-acceptance
15823
15858
// flag set and (sometimes) accept channels as 0conf.
15824
15859
let mut anchors_cfg = test_default_channel_config();
@@ -15855,10 +15890,10 @@ mod tests {
15855
15890
let events = nodes[2].node.get_and_clear_pending_events();
15856
15891
match events[0] {
15857
15892
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(),
15859
15894
_ => panic!("Unexpected event"),
15860
15895
}
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())
15862
15897
}
15863
15898
15864
15899
#[test]
@@ -15943,10 +15978,12 @@ mod tests {
15943
15978
let new_fee = user_config.channel_config.forwarding_fee_proportional_millionths + 100;
15944
15979
nodes[0].node.update_partial_channel_config(&channel.counterparty.node_id, &[channel.channel_id], &ChannelConfigUpdate {
15945
15980
forwarding_fee_proportional_millionths: Some(new_fee),
15981
+ accept_underpaying_htlcs: Some(true),
15946
15982
..Default::default()
15947
15983
}).unwrap();
15948
15984
assert_eq!(nodes[0].node.list_channels()[0].config.unwrap().cltv_expiry_delta, new_cltv_expiry_delta);
15949
15985
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);
15950
15987
let events = nodes[0].node.get_and_clear_pending_msg_events();
15951
15988
assert_eq!(events.len(), 1);
15952
15989
match &events[0] {
0 commit comments