Skip to content

Commit fb2f456

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 89af89d commit fb2f456

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
@@ -357,6 +357,23 @@ where
357357
let created_at = LSPSDateTime::new_from_duration_since_epoch(
358358
self.time_provider.duration_since_epoch(),
359359
);
360+
361+
if payment_details.bolt11.is_none()
362+
&& payment_details.bolt12.is_none()
363+
&& payment_details.onchain.is_none()
364+
{
365+
let err = format!("At least one payment option must be provided");
366+
return Err(APIError::APIMisuseError { err });
367+
}
368+
369+
if params.refund_onchain_address.is_none()
370+
&& payment_details.onchain.is_some()
371+
{
372+
// bLIP-51: 'LSP MUST disable on-chain payments if the client omits this field.'
373+
let err = format!("Onchain payments must be disabled if no refund_onchain_address is set.");
374+
return Err(APIError::APIMisuseError { err });
375+
}
376+
360377
let order = peer_state_lock.new_order(
361378
order_id.clone(),
362379
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)