Skip to content

Commit b9906b3

Browse files
committed
Actually remember the order state in ChannelOrder
We here remember and update the order state and channel details in `ChannelOrder`
1 parent 040d2c6 commit b9906b3

File tree

2 files changed

+50
-28
lines changed

2 files changed

+50
-28
lines changed

lightning-liquidity/src/lsps1/peer_state.rs

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99

1010
//! Contains peer state objects that are used by `LSPS1ServiceHandler`.
1111
12-
use super::msgs::{LSPS1OrderId, LSPS1OrderParams, LSPS1PaymentInfo, LSPS1Request};
12+
use super::msgs::{
13+
LSPS1ChannelInfo, LSPS1OrderId, LSPS1OrderParams, LSPS1OrderState, LSPS1PaymentInfo,
14+
LSPS1Request,
15+
};
1316

1417
use crate::lsps0::ser::{LSPSDateTime, LSPSRequestId};
1518
use crate::prelude::HashMap;
@@ -26,13 +29,31 @@ impl PeerState {
2629
pub(super) fn new_order(
2730
&mut self, order_id: LSPS1OrderId, order_params: LSPS1OrderParams,
2831
created_at: LSPSDateTime, payment_details: LSPS1PaymentInfo,
29-
) {
30-
let channel_order = ChannelOrder { order_params, created_at, payment_details };
31-
self.outbound_channels_by_order_id.insert(order_id, channel_order);
32+
) -> ChannelOrder {
33+
let order_state = LSPS1OrderState::Created;
34+
let channel_details = None;
35+
let channel_order = ChannelOrder {
36+
order_params,
37+
order_state,
38+
created_at,
39+
payment_details,
40+
channel_details,
41+
};
42+
self.outbound_channels_by_order_id.insert(order_id, channel_order.clone());
43+
channel_order
3244
}
3345

34-
pub(super) fn get_order<'a>(&'a self, order_id: &LSPS1OrderId) -> Option<&'a ChannelOrder> {
35-
self.outbound_channels_by_order_id.get(order_id)
46+
pub(super) fn update_order<'a>(
47+
&'a mut self, order_id: &LSPS1OrderId, order_state: LSPS1OrderState,
48+
channel_details: Option<LSPS1ChannelInfo>,
49+
) -> Result<&'a ChannelOrder, PeerStateError> {
50+
let order = self
51+
.outbound_channels_by_order_id
52+
.get_mut(order_id)
53+
.ok_or(PeerStateError::UnknownOrderId)?;
54+
order.order_state = order_state;
55+
order.channel_details = channel_details;
56+
Ok(order)
3657
}
3758

3859
pub(super) fn register_request(
@@ -60,19 +81,24 @@ impl PeerState {
6081
pub(super) enum PeerStateError {
6182
UnknownRequestId,
6283
DuplicateRequestId,
84+
UnknownOrderId,
6385
}
6486

6587
impl fmt::Display for PeerStateError {
6688
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
6789
match self {
6890
Self::UnknownRequestId => write!(f, "unknown request id"),
6991
Self::DuplicateRequestId => write!(f, "duplicate request id"),
92+
Self::UnknownOrderId => write!(f, "unknown order id"),
7093
}
7194
}
7295
}
7396

97+
#[derive(Debug, Clone)]
7498
pub(super) struct ChannelOrder {
7599
pub(super) order_params: LSPS1OrderParams,
100+
pub(super) order_state: LSPS1OrderState,
76101
pub(super) created_at: LSPSDateTime,
77102
pub(super) payment_details: LSPS1PaymentInfo,
103+
pub(super) channel_details: Option<LSPS1ChannelInfo>,
78104
}

lightning-liquidity/src/lsps1/service.rs

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ where
186186
/// [`LSPS1ServiceEvent::RequestForPaymentDetails`]: crate::lsps1::event::LSPS1ServiceEvent::RequestForPaymentDetails
187187
pub fn send_payment_details(
188188
&self, request_id: LSPSRequestId, counterparty_node_id: &PublicKey,
189-
payment: LSPS1PaymentInfo, created_at: LSPSDateTime,
189+
payment_details: LSPS1PaymentInfo, created_at: LSPSDateTime,
190190
) -> Result<(), APIError> {
191191
let mut message_queue_notifier = self.pending_messages.notifier();
192192

@@ -203,23 +203,21 @@ where
203203
match request {
204204
LSPS1Request::CreateOrder(params) => {
205205
let order_id = self.generate_order_id();
206-
peer_state_lock.new_order(
206+
let order = peer_state_lock.new_order(
207207
order_id.clone(),
208-
params.order.clone(),
208+
params.order,
209209
created_at,
210-
payment.clone(),
210+
payment_details,
211211
);
212212

213213
let response = LSPS1Response::CreateOrder(LSPS1CreateOrderResponse {
214-
order: params.order,
214+
order: order.order_params,
215215
order_id,
216216

217-
// TODO, we need to set this in the peer/channel state, and send the
218-
// set value here:
219-
order_state: LSPS1OrderState::Created,
220-
created_at,
221-
payment,
222-
channel: None,
217+
order_state: order.order_state,
218+
created_at: order.created_at,
219+
payment: order.payment_details,
220+
channel: order.channel_details,
223221
});
224222
let msg = LSPS1Message::Response(request_id, response).into();
225223
message_queue_notifier.enqueue(counterparty_node_id, msg);
@@ -289,30 +287,28 @@ where
289287
/// [`LSPS1ServiceEvent::CheckPaymentConfirmation`]: crate::lsps1::event::LSPS1ServiceEvent::CheckPaymentConfirmation
290288
pub fn update_order_status(
291289
&self, request_id: LSPSRequestId, counterparty_node_id: PublicKey, order_id: LSPS1OrderId,
292-
order_state: LSPS1OrderState, channel: Option<LSPS1ChannelInfo>,
290+
order_state: LSPS1OrderState, channel_details: Option<LSPS1ChannelInfo>,
293291
) -> Result<(), APIError> {
294292
let mut message_queue_notifier = self.pending_messages.notifier();
295293

296294
let outer_state_lock = self.per_peer_state.read().unwrap();
297295

298296
match outer_state_lock.get(&counterparty_node_id) {
299297
Some(inner_state_lock) => {
300-
let peer_state_lock = inner_state_lock.lock().unwrap();
301-
let order =
302-
peer_state_lock.get_order(&order_id).ok_or(APIError::APIMisuseError {
303-
err: format!("Channel with order_id {} not found", order_id.0),
304-
})?;
305-
306-
// FIXME: we need to actually remember the order state (and eventually persist it)
307-
// here.
298+
let mut peer_state_lock = inner_state_lock.lock().unwrap();
299+
let order = peer_state_lock
300+
.update_order(&order_id, order_state, channel_details)
301+
.map_err(|e| APIError::APIMisuseError {
302+
err: format!("Failed to update order: {:?}", e),
303+
})?;
308304

309305
let response = LSPS1Response::GetOrder(LSPS1CreateOrderResponse {
310306
order_id,
311307
order: order.order_params.clone(),
312-
order_state,
308+
order_state: order.order_state.clone(),
313309
created_at: order.created_at.clone(),
314310
payment: order.payment_details.clone(),
315-
channel,
311+
channel: order.channel_details.clone(),
316312
});
317313
let msg = LSPS1Message::Response(request_id, response).into();
318314
message_queue_notifier.enqueue(&counterparty_node_id, msg);

0 commit comments

Comments
 (0)