@@ -293,6 +293,24 @@ impl StorableObject for PaymentDetails {
293
293
}
294
294
}
295
295
296
+ if let Some ( attempts) = update. broadcast_attempts {
297
+ match self . kind {
298
+ PaymentKind :: Onchain { ref mut broadcast_attempts, .. } => {
299
+ update_if_necessary ! ( * broadcast_attempts, attempts) ;
300
+ } ,
301
+ _ => { } ,
302
+ }
303
+ }
304
+
305
+ if let Some ( broadcast_time) = update. last_broadcast_time {
306
+ match self . kind {
307
+ PaymentKind :: Onchain { ref mut last_broadcast_time, .. } => {
308
+ update_if_necessary ! ( * last_broadcast_time, broadcast_time) ;
309
+ } ,
310
+ _ => { } ,
311
+ }
312
+ }
313
+
296
314
if updated {
297
315
self . latest_update_timestamp = SystemTime :: now ( )
298
316
. duration_since ( UNIX_EPOCH )
@@ -353,6 +371,12 @@ pub enum PaymentKind {
353
371
txid : Txid ,
354
372
/// The confirmation status of this payment.
355
373
status : ConfirmationStatus ,
374
+ /// The raw transaction for rebroadcasting
375
+ raw_tx : Option < Vec < u8 > > ,
376
+ /// Last broadcast attempt timestamp (UNIX seconds)
377
+ last_broadcast_time : Option < u64 > ,
378
+ /// Number of broadcast attempts
379
+ broadcast_attempts : Option < u32 > ,
356
380
} ,
357
381
/// A [BOLT 11] payment.
358
382
///
@@ -451,6 +475,9 @@ impl_writeable_tlv_based_enum!(PaymentKind,
451
475
( 0 , Onchain ) => {
452
476
( 0 , txid, required) ,
453
477
( 2 , status, required) ,
478
+ ( 4 , raw_tx, option) ,
479
+ ( 10 , last_broadcast_time, option) ,
480
+ ( 12 , broadcast_attempts, option) ,
454
481
} ,
455
482
( 2 , Bolt11 ) => {
456
483
( 0 , hash, required) ,
@@ -542,6 +569,8 @@ pub(crate) struct PaymentDetailsUpdate {
542
569
pub direction : Option < PaymentDirection > ,
543
570
pub status : Option < PaymentStatus > ,
544
571
pub confirmation_status : Option < ConfirmationStatus > ,
572
+ pub last_broadcast_time : Option < Option < u64 > > ,
573
+ pub broadcast_attempts : Option < Option < u32 > > ,
545
574
}
546
575
547
576
impl PaymentDetailsUpdate {
@@ -557,6 +586,8 @@ impl PaymentDetailsUpdate {
557
586
direction : None ,
558
587
status : None ,
559
588
confirmation_status : None ,
589
+ last_broadcast_time : None ,
590
+ broadcast_attempts : None ,
560
591
}
561
592
}
562
593
}
@@ -572,9 +603,11 @@ impl From<&PaymentDetails> for PaymentDetailsUpdate {
572
603
_ => ( None , None , None ) ,
573
604
} ;
574
605
575
- let confirmation_status = match value. kind {
576
- PaymentKind :: Onchain { status, .. } => Some ( status) ,
577
- _ => None ,
606
+ let ( confirmation_status, last_broadcast_time, broadcast_attempts) = match value. kind {
607
+ PaymentKind :: Onchain { status, last_broadcast_time, broadcast_attempts, .. } => {
608
+ ( Some ( status) , last_broadcast_time, broadcast_attempts)
609
+ } ,
610
+ _ => ( None , None , None ) ,
578
611
} ;
579
612
580
613
let counterparty_skimmed_fee_msat = match value. kind {
@@ -595,6 +628,8 @@ impl From<&PaymentDetails> for PaymentDetailsUpdate {
595
628
direction : Some ( value. direction ) ,
596
629
status : Some ( value. status ) ,
597
630
confirmation_status,
631
+ last_broadcast_time : Some ( last_broadcast_time) ,
632
+ broadcast_attempts : Some ( broadcast_attempts) ,
598
633
}
599
634
}
600
635
}
0 commit comments