Skip to content

Commit f509a45

Browse files
committed
Add some checks on provided payment details
As per spec, we check that the user provides at least one payment detail *and* that they don't provide onchain payment details if `refund_onchain_address` is unset.
1 parent f320efb commit f509a45

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

lightning-liquidity/src/lsps1/service.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,23 @@ where
358358
let created_at = LSPSDateTime::new_from_duration_since_epoch(
359359
self.time_provider.duration_since_epoch(),
360360
);
361+
362+
if payment_details.bolt11.is_none()
363+
&& payment_details.bolt12.is_none()
364+
&& payment_details.onchain.is_none()
365+
{
366+
let err = "At least one payment option must be provided".to_string();
367+
return Err(APIError::APIMisuseError { err });
368+
}
369+
370+
if params.refund_onchain_address.is_none()
371+
&& payment_details.onchain.is_some()
372+
{
373+
// bLIP-51: 'LSP MUST disable on-chain payments if the client omits this field.'
374+
let err = "Onchain payments must be disabled if no refund_onchain_address is set.".to_string();
375+
return Err(APIError::APIMisuseError { err });
376+
}
377+
361378
let order = peer_state_lock.new_order(
362379
order_id.clone(),
363380
params.order,

lightning-liquidity/tests/lsps1_integration_tests.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,15 @@ fn lsps1_happy_path() {
145145
announce_channel: true,
146146
};
147147

148-
let _create_order_id =
149-
client_handler.create_order(&service_node_id, order_params.clone(), None);
148+
let refund_onchain_address =
149+
Address::from_str("bc1p5uvtaxzkjwvey2tfy49k5vtqfpjmrgm09cvs88ezyy8h2zv7jhas9tu4yr")
150+
.unwrap()
151+
.assume_checked();
152+
let _create_order_id = client_handler.create_order(
153+
&service_node_id,
154+
order_params.clone(),
155+
Some(refund_onchain_address),
156+
);
150157
let create_order = get_lsps_message!(client_node, service_node_id);
151158

152159
service_node.liquidity_manager.handle_custom_message(create_order, client_node_id).unwrap();

0 commit comments

Comments
 (0)