Skip to content

Commit 82a4bc1

Browse files
f: fix conflicts
1 parent 49cc467 commit 82a4bc1

File tree

6 files changed

+93
-49
lines changed

6 files changed

+93
-49
lines changed

lightning-liquidity/src/lsps2/service.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,6 @@ use crate::lsps0::ser::{
2323
LSPS0_CLIENT_REJECTED_ERROR_CODE,
2424
};
2525
use crate::lsps2::event::LSPS2ServiceEvent;
26-
use crate::lsps2::msgs::{
27-
LSPS2BuyRequest, LSPS2BuyResponse, LSPS2GetInfoRequest, LSPS2GetInfoResponse, LSPS2Message,
28-
LSPS2OpeningFeeParams, LSPS2RawOpeningFeeParams, LSPS2Request, LSPS2Response,
29-
LSPS2_BUY_REQUEST_INVALID_OPENING_FEE_PARAMS_ERROR_CODE,
30-
LSPS2_BUY_REQUEST_PAYMENT_SIZE_TOO_LARGE_ERROR_CODE,
31-
LSPS2_BUY_REQUEST_PAYMENT_SIZE_TOO_SMALL_ERROR_CODE,
32-
LSPS2_GET_INFO_REQUEST_UNRECOGNIZED_OR_STALE_TOKEN_ERROR_CODE,
33-
};
3426
use crate::lsps2::payment_queue::{InterceptedHTLC, PaymentQueue};
3527
use crate::lsps2::utils::{
3628
compute_opening_fee, is_expired_opening_fee_params, is_valid_opening_fee_params,
@@ -52,6 +44,15 @@ use lightning_types::payment::PaymentHash;
5244
use bitcoin::secp256k1::PublicKey;
5345
use bitcoin::Transaction;
5446

47+
use crate::lsps2::msgs::{
48+
LSPS2BuyRequest, LSPS2BuyResponse, LSPS2GetInfoRequest, LSPS2GetInfoResponse, LSPS2Message,
49+
LSPS2OpeningFeeParams, LSPS2RawOpeningFeeParams, LSPS2Request, LSPS2Response,
50+
LSPS2_BUY_REQUEST_INVALID_OPENING_FEE_PARAMS_ERROR_CODE,
51+
LSPS2_BUY_REQUEST_PAYMENT_SIZE_TOO_LARGE_ERROR_CODE,
52+
LSPS2_BUY_REQUEST_PAYMENT_SIZE_TOO_SMALL_ERROR_CODE,
53+
LSPS2_GET_INFO_REQUEST_UNRECOGNIZED_OR_STALE_TOKEN_ERROR_CODE,
54+
};
55+
5556
const MAX_PENDING_REQUESTS_PER_PEER: usize = 10;
5657
const MAX_TOTAL_PENDING_REQUESTS: usize = 1000;
5758
const MAX_TOTAL_PEERS: usize = 100000;
@@ -367,7 +368,6 @@ impl OutboundJITChannelState {
367368
channel_id,
368369
FeePayment { opening_fee_msat: *opening_fee_msat, htlcs },
369370
);
370-
371371
*self = OutboundJITChannelState::PendingPaymentForward {
372372
payment_queue: core::mem::take(payment_queue),
373373
opening_fee_msat: *opening_fee_msat,
@@ -1036,9 +1036,9 @@ where
10361036
Err(e) => {
10371037
return Err(APIError::APIMisuseError {
10381038
err: format!(
1039-
"Forwarded payment was not applicable for JIT channel: {}",
1040-
e.err
1041-
),
1039+
"Forwarded payment was not applicable for JIT channel: {}",
1040+
e.err
1041+
),
10421042
})
10431043
},
10441044
}

lightning-liquidity/tests/common/mod.rs

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,22 @@ use std::sync::Arc;
1717
pub(crate) struct LSPSNodes<'a, 'b, 'c> {
1818
pub service_node: LiquidityNode<'a, 'b, 'c>,
1919
pub client_node: LiquidityNode<'a, 'b, 'c>,
20-
pub payer_node_optional: Option<Node<'a, 'b, 'c>>,
2120
}
2221

23-
pub(crate) fn create_service_and_client_nodes<'a, 'b, 'c>(
24-
nodes: Vec<Node<'a, 'b, 'c>>, service_config: LiquidityServiceConfig,
22+
// this is ONLY used on LSPS2 so it says it's not used but it is
23+
#[allow(dead_code)]
24+
pub(crate) struct LSPSNodesWithPayer<'a, 'b, 'c> {
25+
pub service_node: LiquidityNode<'a, 'b, 'c>,
26+
pub client_node: LiquidityNode<'a, 'b, 'c>,
27+
pub payer_node: Node<'a, 'b, 'c>,
28+
}
29+
30+
// Reusable helper: consumes a Vec<Node>, builds service + client LiquidityNodes, returns optional leftover node.
31+
fn build_service_and_client<'a, 'b, 'c>(
32+
mut nodes: Vec<Node<'a, 'b, 'c>>, service_config: LiquidityServiceConfig,
2533
client_config: LiquidityClientConfig, time_provider: Arc<dyn TimeProvider + Send + Sync>,
26-
) -> LSPSNodes<'a, 'b, 'c> {
34+
) -> (LiquidityNode<'a, 'b, 'c>, LiquidityNode<'a, 'b, 'c>, Option<Node<'a, 'b, 'c>>) {
35+
assert!(nodes.len() >= 2, "Need at least two nodes (service, client)");
2736
let chain_params = ChainParameters {
2837
network: Network::Testnet,
2938
best_block: BestBlock::from_network(Network::Testnet),
@@ -50,11 +59,33 @@ pub(crate) fn create_service_and_client_nodes<'a, 'b, 'c>(
5059
time_provider,
5160
);
5261

53-
let mut iter = nodes.into_iter();
62+
let mut iter = nodes.drain(..);
5463
let service_node = LiquidityNode::new(iter.next().unwrap(), service_lm);
5564
let client_node = LiquidityNode::new(iter.next().unwrap(), client_lm);
65+
let leftover = iter.next(); // payer if present
66+
(service_node, client_node, leftover)
67+
}
5668

57-
LSPSNodes { service_node, client_node, payer_node_optional: iter.next() }
69+
pub(crate) fn create_service_and_client_nodes<'a, 'b, 'c>(
70+
nodes: Vec<Node<'a, 'b, 'c>>, service_config: LiquidityServiceConfig,
71+
client_config: LiquidityClientConfig, time_provider: Arc<dyn TimeProvider + Send + Sync>,
72+
) -> LSPSNodes<'a, 'b, 'c> {
73+
let (service_node, client_node, _extra) =
74+
build_service_and_client(nodes, service_config, client_config, time_provider);
75+
LSPSNodes { service_node, client_node }
76+
}
77+
78+
// this is ONLY used on LSPS2 so it says it's not used but it is
79+
#[allow(dead_code)]
80+
pub(crate) fn create_service_client_and_payer_nodes<'a, 'b, 'c>(
81+
nodes: Vec<Node<'a, 'b, 'c>>, service_config: LiquidityServiceConfig,
82+
client_config: LiquidityClientConfig, time_provider: Arc<dyn TimeProvider + Send + Sync>,
83+
) -> LSPSNodesWithPayer<'a, 'b, 'c> {
84+
assert!(nodes.len() >= 3, "Need three nodes (service, client, payer)");
85+
let (service_node, client_node, payer_opt) =
86+
build_service_and_client(nodes, service_config, client_config, time_provider);
87+
let payer_node = payer_opt.expect("payer node missing");
88+
LSPSNodesWithPayer { service_node, client_node, payer_node }
5889
}
5990

6091
pub(crate) struct LiquidityNode<'a, 'b, 'c> {

lightning-liquidity/tests/lsps0_integration_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ fn list_protocols_integration_test() {
6060
let service_node_id = nodes[0].node.get_our_node_id();
6161
let client_node_id = nodes[1].node.get_our_node_id();
6262

63-
let LSPSNodes { service_node, client_node , ..} = create_service_and_client_nodes(
63+
let LSPSNodes { service_node, client_node } = create_service_and_client_nodes(
6464
nodes,
6565
service_config,
6666
client_config,

lightning-liquidity/tests/lsps2_integration_tests.rs

Lines changed: 41 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
mod common;
44

5-
use common::{create_service_and_client_nodes, get_lsps_message, LSPSNodes, LiquidityNode};
5+
use common::{
6+
create_service_and_client_nodes, create_service_client_and_payer_nodes, get_lsps_message,
7+
LSPSNodes, LSPSNodesWithPayer, LiquidityNode,
8+
};
69

710
use lightning::check_added_monitors;
811
use lightning::events::Event;
@@ -61,9 +64,7 @@ use std::time::Duration;
6164
const MAX_PENDING_REQUESTS_PER_PEER: usize = 10;
6265
const MAX_TOTAL_PENDING_REQUESTS: usize = 1000;
6366

64-
fn setup_test_lsps2_nodes<'a, 'b, 'c>(
65-
nodes: Vec<Node<'a, 'b, 'c>>,
66-
) -> (LSPSNodes<'a, 'b, 'c>, [u8; 32]) {
67+
fn build_lsps2_configs() -> ([u8; 32], LiquidityServiceConfig, LiquidityClientConfig) {
6768
let promise_secret = [42; 32];
6869
let lsps2_service_config = LSPS2ServiceConfig { promise_secret };
6970
let service_config = LiquidityServiceConfig {
@@ -73,20 +74,38 @@ fn setup_test_lsps2_nodes<'a, 'b, 'c>(
7374
lsps5_service_config: None,
7475
advertise_service: true,
7576
};
76-
7777
let lsps2_client_config = LSPS2ClientConfig::default();
7878
let client_config = LiquidityClientConfig {
7979
lsps1_client_config: None,
8080
lsps2_client_config: Some(lsps2_client_config),
8181
lsps5_client_config: None,
8282
};
83-
let lsps_nodes = create_service_and_client_nodes(
83+
(promise_secret, service_config, client_config)
84+
}
85+
86+
fn setup_test_lsps2_nodes_with_payer<'a, 'b, 'c>(
87+
nodes: Vec<Node<'a, 'b, 'c>>,
88+
) -> (LSPSNodesWithPayer<'a, 'b, 'c>, [u8; 32]) {
89+
let (promise_secret, service_config, client_config) = build_lsps2_configs();
90+
let lsps_nodes = create_service_client_and_payer_nodes(
8491
nodes,
8592
service_config,
8693
client_config,
8794
Arc::new(DefaultTimeProvider),
8895
);
96+
(lsps_nodes, promise_secret)
97+
}
8998

99+
fn setup_test_lsps2_nodes<'a, 'b, 'c>(
100+
nodes: Vec<Node<'a, 'b, 'c>>,
101+
) -> (LSPSNodes<'a, 'b, 'c>, [u8; 32]) {
102+
let (promise_secret, service_config, client_config) = build_lsps2_configs();
103+
let lsps_nodes = create_service_and_client_nodes(
104+
nodes,
105+
service_config,
106+
client_config,
107+
Arc::new(DefaultTimeProvider),
108+
);
90109
(lsps_nodes, promise_secret)
91110
}
92111

@@ -103,10 +122,6 @@ fn create_jit_invoice(
103122
log_error!(node.logger, "Failed to register inbound payment: {:?}", e);
104123
})?;
105124

106-
// Add debugging here
107-
println!("Creating route hint with intercept_scid: {}", intercept_scid);
108-
println!("Service node ID: {}", service_node_id);
109-
110125
let route_hint = RouteHint(vec![RouteHintHop {
111126
src_node_id: service_node_id,
112127
short_channel_id: intercept_scid,
@@ -147,9 +162,6 @@ fn create_jit_invoice(
147162
})
148163
})?;
149164

150-
// Add debugging to verify the invoice
151-
println!("Created invoice with route hints: {:?}", invoice.route_hints());
152-
153165
Ok(invoice)
154166
}
155167

@@ -160,7 +172,7 @@ fn invoice_generation_flow() {
160172
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
161173
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
162174
let (lsps_nodes, promise_secret) = setup_test_lsps2_nodes(nodes);
163-
let LSPSNodes { service_node, client_node, .. } = lsps_nodes;
175+
let LSPSNodes { service_node, client_node } = lsps_nodes;
164176
let service_node_id = service_node.inner.node.get_our_node_id();
165177
let client_node_id = client_node.inner.node.get_our_node_id();
166178

@@ -308,7 +320,7 @@ fn channel_open_failed() {
308320
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
309321
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
310322
let (lsps_nodes, _) = setup_test_lsps2_nodes(nodes);
311-
let LSPSNodes { service_node, client_node, .. } = lsps_nodes;
323+
let LSPSNodes { service_node, client_node } = lsps_nodes;
312324

313325
let service_node_id = service_node.inner.node.get_our_node_id();
314326
let client_node_id = client_node.inner.node.get_our_node_id();
@@ -443,7 +455,7 @@ fn channel_open_failed_nonexistent_channel() {
443455
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
444456
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
445457
let (lsps_nodes, _) = setup_test_lsps2_nodes(nodes);
446-
let LSPSNodes { service_node, client_node, .. } = lsps_nodes;
458+
let LSPSNodes { service_node, client_node } = lsps_nodes;
447459

448460
let client_node_id = client_node.inner.node.get_our_node_id();
449461

@@ -469,7 +481,7 @@ fn channel_open_abandoned() {
469481
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
470482
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
471483
let (lsps_nodes, _) = setup_test_lsps2_nodes(nodes);
472-
let LSPSNodes { service_node, client_node, .. } = lsps_nodes;
484+
let LSPSNodes { service_node, client_node } = lsps_nodes;
473485

474486
let service_node_id = service_node.inner.node.get_our_node_id();
475487
let client_node_id = client_node.inner.node.get_our_node_id();
@@ -553,7 +565,7 @@ fn channel_open_abandoned_nonexistent_channel() {
553565
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
554566
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
555567
let (lsps_nodes, _) = setup_test_lsps2_nodes(nodes);
556-
let LSPSNodes { service_node, client_node, .. } = lsps_nodes;
568+
let LSPSNodes { service_node, client_node } = lsps_nodes;
557569

558570
let client_node_id = client_node.inner.node.get_our_node_id();
559571
let service_handler = service_node.liquidity_manager.lsps2_service_handler().unwrap();
@@ -578,7 +590,7 @@ fn max_pending_requests_per_peer_rejected() {
578590
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
579591
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
580592
let (lsps_nodes, _) = setup_test_lsps2_nodes(nodes);
581-
let LSPSNodes { service_node, client_node, .. } = lsps_nodes;
593+
let LSPSNodes { service_node, client_node } = lsps_nodes;
582594

583595
let service_node_id = service_node.inner.node.get_our_node_id();
584596
let client_node_id = client_node.inner.node.get_our_node_id();
@@ -633,7 +645,7 @@ fn max_total_requests_buy_rejected() {
633645
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
634646
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
635647
let (lsps_nodes, _) = setup_test_lsps2_nodes(nodes);
636-
let LSPSNodes { service_node, client_node, .. } = lsps_nodes;
648+
let LSPSNodes { service_node, client_node } = lsps_nodes;
637649

638650
let service_node_id = service_node.inner.node.get_our_node_id();
639651

@@ -762,7 +774,7 @@ fn invalid_token_flow() {
762774
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
763775
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
764776
let (lsps_nodes, _) = setup_test_lsps2_nodes(nodes);
765-
let LSPSNodes { service_node, client_node, .. } = lsps_nodes;
777+
let LSPSNodes { service_node, client_node } = lsps_nodes;
766778

767779
let service_node_id = service_node.inner.node.get_our_node_id();
768780
let client_node_id = client_node.inner.node.get_our_node_id();
@@ -841,7 +853,7 @@ fn opening_fee_params_menu_is_sorted_by_spec() {
841853
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
842854
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
843855
let (lsps_nodes, _) = setup_test_lsps2_nodes(nodes);
844-
let LSPSNodes { service_node, client_node, .. } = lsps_nodes;
856+
let LSPSNodes { service_node, client_node } = lsps_nodes;
845857
let service_node_id = service_node.inner.node.get_our_node_id();
846858
let client_node_id = client_node.inner.node.get_our_node_id();
847859

@@ -926,9 +938,9 @@ fn full_lsps2_flow() {
926938
&[Some(service_node_config), Some(client_node_config), None],
927939
);
928940
let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
929-
let (lsps_nodes, promise_secret) = setup_test_lsps2_nodes(nodes);
930-
let LSPSNodes { service_node, client_node, payer_node_optional } = lsps_nodes;
931-
let payer_node = payer_node_optional.unwrap();
941+
let (lsps_nodes, promise_secret) = setup_test_lsps2_nodes_with_payer(nodes);
942+
let LSPSNodesWithPayer { service_node, client_node, payer_node } = lsps_nodes;
943+
932944
let payer_node_id = payer_node.node.get_our_node_id();
933945
let service_node_id = service_node.inner.node.get_our_node_id();
934946
let client_node_id = client_node.inner.node.get_our_node_id();
@@ -1188,15 +1200,15 @@ fn full_lsps2_flow() {
11881200
assert!(events.is_empty(), "Expected no events from service node, got: {:?}", events);
11891201

11901202
client_node.inner.node.claim_funds(preimage.unwrap());
1191-
/// TODO SIMPLIFY: put the payment_forwarded call inside a PaymentForwardedEvent
1203+
// TODO SIMPLIFY: put the payment_forwarded call inside a PaymentForwardedEvent
11921204
let expected_paths: &[&[&lightning::ln::functional_test_utils::Node<'_, '_, '_>]] =
11931205
&[&[&service_node.inner, &client_node.inner]];
11941206

11951207
let args = ClaimAlongRouteArgs::new(&payer_node, expected_paths, preimage.unwrap());
11961208
let total_fee_msat = pass_claimed_payment_along_route(args);
11971209

11981210
service_handler.payment_forwarded(channel_id).unwrap();
1199-
///
1211+
12001212
match service_node.liquidity_manager.next_event().unwrap() {
12011213
LiquidityEvent::LSPS2Service(LSPS2ServiceEvent::BroadcastFundingTransaction {
12021214
counterparty_node_id,
@@ -1205,6 +1217,8 @@ fn full_lsps2_flow() {
12051217
}) => {
12061218
assert_eq!(counterparty_node_id, client_node_id);
12071219
assert_eq!(uid, user_channel_id);
1220+
1221+
// TODO actually broadcast transaction
12081222
},
12091223
other => panic!("Unexpected event: {:?}", other),
12101224
}

lightning/src/ln/functional_test_utils.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1952,7 +1952,7 @@ pub fn do_check_spends<F: Fn(&bitcoin::transaction::OutPoint) -> Option<TxOut>>(
19521952
total_value_out += output.value.to_sat();
19531953
}
19541954
let min_fee = (tx.weight().to_wu() as u64 + 3) / 4; // One sat per vbyte (ie per weight/4, rounded up)
1955-
// Input amount - output amount = fee, so check that out + min_fee is smaller than input
1955+
// Input amount - output amount = fee, so check that out + min_fee is smaller than input
19561956
assert!(total_value_out + min_fee <= total_value_in);
19571957
tx.verify(get_output).unwrap();
19581958
}
@@ -3010,7 +3010,6 @@ pub fn expect_channel_pending_event<'a, 'b, 'c, 'd>(
30103010
node: &'a Node<'b, 'c, 'd>, expected_counterparty_node_id: &PublicKey,
30113011
) -> ChannelId {
30123012
let events = node.node.get_and_clear_pending_events();
3013-
println!("Pending events: {:?}", events);
30143013
assert_eq!(events.len(), 1);
30153014
match &events[0] {
30163015
crate::events::Event::ChannelPending { channel_id, counterparty_node_id, .. } => {

lightning/src/routing/router.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1142,7 +1142,7 @@ impl PaymentParameters {
11421142
}
11431143

11441144
/// A struct for configuring parameters for routing the payment.
1145-
#[derive(Clone, Copy)]
1145+
#[derive(Clone, Copy, Debug)]
11461146
pub struct RouteParametersConfig {
11471147
/// The maximum total fees, in millisatoshi, that may accrue during route finding.
11481148
///

0 commit comments

Comments
 (0)