Skip to content

Commit 36838f7

Browse files
committed
Add a latest_update_timestamp field to PaymentDetails
.. which allows to filter and sort payment based on how recent they are.
1 parent b8efd9d commit 36838f7

File tree

6 files changed

+184
-150
lines changed

6 files changed

+184
-150
lines changed

bindings/ldk_node.udl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ dictionary PaymentDetails {
294294
u64? amount_msat;
295295
PaymentDirection direction;
296296
PaymentStatus status;
297+
u64 latest_update_timestamp;
297298
};
298299

299300
[NonExhaustive]

src/event.rs

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -598,19 +598,21 @@ where
598598
..
599599
} => {
600600
let offer_id = payment_context.offer_id;
601-
let payment = PaymentDetails {
602-
id: payment_id,
603-
kind: PaymentKind::Bolt12Offer {
604-
hash: Some(payment_hash),
605-
preimage: payment_preimage,
606-
secret: Some(payment_secret),
607-
offer_id,
608-
},
609-
amount_msat: Some(amount_msat),
610-
direction: PaymentDirection::Inbound,
611-
status: PaymentStatus::Pending,
601+
let kind = PaymentKind::Bolt12Offer {
602+
hash: Some(payment_hash),
603+
preimage: payment_preimage,
604+
secret: Some(payment_secret),
605+
offer_id,
612606
};
613607

608+
let payment = PaymentDetails::new(
609+
payment_id,
610+
kind,
611+
Some(amount_msat),
612+
PaymentDirection::Inbound,
613+
PaymentStatus::Pending,
614+
);
615+
614616
match self.payment_store.insert(payment) {
615617
Ok(false) => (),
616618
Ok(true) => {
@@ -638,17 +640,19 @@ where
638640
},
639641
PaymentPurpose::SpontaneousPayment(preimage) => {
640642
// Since it's spontaneous, we insert it now into our store.
641-
let payment = PaymentDetails {
642-
id: payment_id,
643-
kind: PaymentKind::Spontaneous {
644-
hash: payment_hash,
645-
preimage: Some(preimage),
646-
},
647-
amount_msat: Some(amount_msat),
648-
direction: PaymentDirection::Inbound,
649-
status: PaymentStatus::Pending,
643+
let kind = PaymentKind::Spontaneous {
644+
hash: payment_hash,
645+
preimage: Some(preimage),
650646
};
651647

648+
let payment = PaymentDetails::new(
649+
payment_id,
650+
kind,
651+
Some(amount_msat),
652+
PaymentDirection::Inbound,
653+
PaymentStatus::Pending,
654+
);
655+
652656
match self.payment_store.insert(payment) {
653657
Ok(false) => (),
654658
Ok(true) => {

src/payment/bolt11.rs

Lines changed: 66 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -105,17 +105,18 @@ impl Bolt11Payment {
105105
let amt_msat = invoice.amount_milli_satoshis().unwrap();
106106
log_info!(self.logger, "Initiated sending {}msat to {}", amt_msat, payee_pubkey);
107107

108-
let payment = PaymentDetails {
109-
id: payment_id,
110-
kind: PaymentKind::Bolt11 {
111-
hash: payment_hash,
112-
preimage: None,
113-
secret: payment_secret,
114-
},
115-
amount_msat: invoice.amount_milli_satoshis(),
116-
direction: PaymentDirection::Outbound,
117-
status: PaymentStatus::Pending,
108+
let kind = PaymentKind::Bolt11 {
109+
hash: payment_hash,
110+
preimage: None,
111+
secret: payment_secret,
118112
};
113+
let payment = PaymentDetails::new(
114+
payment_id,
115+
kind,
116+
invoice.amount_milli_satoshis(),
117+
PaymentDirection::Outbound,
118+
PaymentStatus::Pending,
119+
);
119120

120121
self.payment_store.insert(payment)?;
121122

@@ -126,17 +127,18 @@ impl Bolt11Payment {
126127
match e {
127128
RetryableSendFailure::DuplicatePayment => Err(Error::DuplicatePayment),
128129
_ => {
129-
let payment = PaymentDetails {
130-
id: payment_id,
131-
kind: PaymentKind::Bolt11 {
132-
hash: payment_hash,
133-
preimage: None,
134-
secret: payment_secret,
135-
},
136-
amount_msat: invoice.amount_milli_satoshis(),
137-
direction: PaymentDirection::Outbound,
138-
status: PaymentStatus::Failed,
130+
let kind = PaymentKind::Bolt11 {
131+
hash: payment_hash,
132+
preimage: None,
133+
secret: payment_secret,
139134
};
135+
let payment = PaymentDetails::new(
136+
payment_id,
137+
kind,
138+
invoice.amount_milli_satoshis(),
139+
PaymentDirection::Outbound,
140+
PaymentStatus::Failed,
141+
);
140142

141143
self.payment_store.insert(payment)?;
142144
Err(Error::PaymentSendingFailed)
@@ -216,17 +218,19 @@ impl Bolt11Payment {
216218
payee_pubkey
217219
);
218220

219-
let payment = PaymentDetails {
220-
id: payment_id,
221-
kind: PaymentKind::Bolt11 {
222-
hash: payment_hash,
223-
preimage: None,
224-
secret: Some(*payment_secret),
225-
},
226-
amount_msat: Some(amount_msat),
227-
direction: PaymentDirection::Outbound,
228-
status: PaymentStatus::Pending,
221+
let kind = PaymentKind::Bolt11 {
222+
hash: payment_hash,
223+
preimage: None,
224+
secret: Some(*payment_secret),
229225
};
226+
227+
let payment = PaymentDetails::new(
228+
payment_id,
229+
kind,
230+
Some(amount_msat),
231+
PaymentDirection::Outbound,
232+
PaymentStatus::Pending,
233+
);
230234
self.payment_store.insert(payment)?;
231235

232236
Ok(payment_id)
@@ -237,17 +241,18 @@ impl Bolt11Payment {
237241
match e {
238242
RetryableSendFailure::DuplicatePayment => Err(Error::DuplicatePayment),
239243
_ => {
240-
let payment = PaymentDetails {
241-
id: payment_id,
242-
kind: PaymentKind::Bolt11 {
243-
hash: payment_hash,
244-
preimage: None,
245-
secret: Some(*payment_secret),
246-
},
247-
amount_msat: Some(amount_msat),
248-
direction: PaymentDirection::Outbound,
249-
status: PaymentStatus::Failed,
244+
let kind = PaymentKind::Bolt11 {
245+
hash: payment_hash,
246+
preimage: None,
247+
secret: Some(*payment_secret),
250248
};
249+
let payment = PaymentDetails::new(
250+
payment_id,
251+
kind,
252+
Some(amount_msat),
253+
PaymentDirection::Outbound,
254+
PaymentStatus::Failed,
255+
);
251256
self.payment_store.insert(payment)?;
252257

253258
Err(Error::PaymentSendingFailed)
@@ -467,19 +472,18 @@ impl Bolt11Payment {
467472
} else {
468473
None
469474
};
470-
let payment = PaymentDetails {
475+
let kind = PaymentKind::Bolt11 {
476+
hash: payment_hash,
477+
preimage,
478+
secret: Some(payment_secret.clone()),
479+
};
480+
let payment = PaymentDetails::new(
471481
id,
472-
kind: PaymentKind::Bolt11 {
473-
hash: payment_hash,
474-
preimage,
475-
secret: Some(payment_secret.clone()),
476-
},
477-
482+
kind,
478483
amount_msat,
479-
direction: PaymentDirection::Inbound,
480-
status: PaymentStatus::Pending,
481-
};
482-
484+
PaymentDirection::Inbound,
485+
PaymentStatus::Pending,
486+
);
483487
self.payment_store.insert(payment)?;
484488

485489
Ok(invoice)
@@ -600,19 +604,19 @@ impl Bolt11Payment {
600604
let id = PaymentId(payment_hash.0);
601605
let preimage =
602606
self.channel_manager.get_payment_preimage(payment_hash, payment_secret.clone()).ok();
603-
let payment = PaymentDetails {
607+
let kind = PaymentKind::Bolt11Jit {
608+
hash: payment_hash,
609+
preimage,
610+
secret: Some(payment_secret.clone()),
611+
lsp_fee_limits,
612+
};
613+
let payment = PaymentDetails::new(
604614
id,
605-
kind: PaymentKind::Bolt11Jit {
606-
hash: payment_hash,
607-
preimage,
608-
secret: Some(payment_secret.clone()),
609-
lsp_fee_limits,
610-
},
615+
kind,
611616
amount_msat,
612-
direction: PaymentDirection::Inbound,
613-
status: PaymentStatus::Pending,
614-
};
615-
617+
PaymentDirection::Inbound,
618+
PaymentStatus::Pending,
619+
);
616620
self.payment_store.insert(payment)?;
617621

618622
// Persist LSP peer to make sure we reconnect on restart.

src/payment/bolt12.rs

Lines changed: 40 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,13 @@ impl Bolt12Payment {
9696
secret: None,
9797
offer_id: offer.id(),
9898
};
99-
let payment = PaymentDetails {
100-
id: payment_id,
99+
let payment = PaymentDetails::new(
100+
payment_id,
101101
kind,
102-
amount_msat: Some(*offer_amount_msat),
103-
direction: PaymentDirection::Outbound,
104-
status: PaymentStatus::Pending,
105-
};
102+
Some(*offer_amount_msat),
103+
PaymentDirection::Outbound,
104+
PaymentStatus::Pending,
105+
);
106106
self.payment_store.insert(payment)?;
107107

108108
Ok(payment_id)
@@ -118,13 +118,13 @@ impl Bolt12Payment {
118118
secret: None,
119119
offer_id: offer.id(),
120120
};
121-
let payment = PaymentDetails {
122-
id: payment_id,
121+
let payment = PaymentDetails::new(
122+
payment_id,
123123
kind,
124-
amount_msat: Some(*offer_amount_msat),
125-
direction: PaymentDirection::Outbound,
126-
status: PaymentStatus::Failed,
127-
};
124+
Some(*offer_amount_msat),
125+
PaymentDirection::Outbound,
126+
PaymentStatus::Failed,
127+
);
128128
self.payment_store.insert(payment)?;
129129
Err(Error::InvoiceRequestCreationFailed)
130130
},
@@ -197,13 +197,13 @@ impl Bolt12Payment {
197197
secret: None,
198198
offer_id: offer.id(),
199199
};
200-
let payment = PaymentDetails {
201-
id: payment_id,
200+
let payment = PaymentDetails::new(
201+
payment_id,
202202
kind,
203-
amount_msat: Some(amount_msat),
204-
direction: PaymentDirection::Outbound,
205-
status: PaymentStatus::Pending,
206-
};
203+
Some(amount_msat),
204+
PaymentDirection::Outbound,
205+
PaymentStatus::Pending,
206+
);
207207
self.payment_store.insert(payment)?;
208208

209209
Ok(payment_id)
@@ -219,13 +219,13 @@ impl Bolt12Payment {
219219
secret: None,
220220
offer_id: offer.id(),
221221
};
222-
let payment = PaymentDetails {
223-
id: payment_id,
222+
let payment = PaymentDetails::new(
223+
payment_id,
224224
kind,
225-
amount_msat: Some(amount_msat),
226-
direction: PaymentDirection::Outbound,
227-
status: PaymentStatus::Failed,
228-
};
225+
Some(amount_msat),
226+
PaymentDirection::Outbound,
227+
PaymentStatus::Failed,
228+
);
229229
self.payment_store.insert(payment)?;
230230
Err(Error::PaymentSendingFailed)
231231
},
@@ -281,17 +281,16 @@ impl Bolt12Payment {
281281
let payment_hash = invoice.payment_hash();
282282
let payment_id = PaymentId(payment_hash.0);
283283

284-
let payment = PaymentDetails {
285-
id: payment_id,
286-
kind: PaymentKind::Bolt12Refund {
287-
hash: Some(payment_hash),
288-
preimage: None,
289-
secret: None,
290-
},
291-
amount_msat: Some(refund.amount_msats()),
292-
direction: PaymentDirection::Inbound,
293-
status: PaymentStatus::Pending,
294-
};
284+
let kind =
285+
PaymentKind::Bolt12Refund { hash: Some(payment_hash), preimage: None, secret: None };
286+
287+
let payment = PaymentDetails::new(
288+
payment_id,
289+
kind,
290+
Some(refund.amount_msats()),
291+
PaymentDirection::Inbound,
292+
PaymentStatus::Pending,
293+
);
295294

296295
self.payment_store.insert(payment)?;
297296

@@ -333,13 +332,13 @@ impl Bolt12Payment {
333332

334333
let kind = PaymentKind::Bolt12Refund { hash: None, preimage: None, secret: None };
335334

336-
let payment = PaymentDetails {
337-
id: payment_id,
335+
let payment = PaymentDetails::new(
336+
payment_id,
338337
kind,
339-
amount_msat: Some(amount_msat),
340-
direction: PaymentDirection::Outbound,
341-
status: PaymentStatus::Pending,
342-
};
338+
Some(amount_msat),
339+
PaymentDirection::Outbound,
340+
PaymentStatus::Pending,
341+
);
343342

344343
self.payment_store.insert(payment)?;
345344

0 commit comments

Comments
 (0)