@@ -4,7 +4,8 @@ use crate::{
4
4
} ;
5
5
6
6
use crate :: payment:: payment_store:: {
7
- PaymentDetails , PaymentDetailsUpdate , PaymentDirection , PaymentStatus , PaymentStore ,
7
+ PaymentDetails , PaymentDetailsUpdate , PaymentDirection , PaymentKind , PaymentStatus ,
8
+ PaymentStore ,
8
9
} ;
9
10
10
11
use crate :: io:: {
@@ -17,6 +18,7 @@ use lightning::chain::chaininterface::ConfirmationTarget;
17
18
use lightning:: events:: { ClosureReason , PaymentPurpose } ;
18
19
use lightning:: events:: { Event as LdkEvent , PaymentFailureReason } ;
19
20
use lightning:: impl_writeable_tlv_based_enum;
21
+ use lightning:: ln:: channelmanager:: PaymentId ;
20
22
use lightning:: ln:: { ChannelId , PaymentHash } ;
21
23
use lightning:: routing:: gossip:: NodeId ;
22
24
use lightning:: util:: errors:: APIError ;
@@ -410,7 +412,8 @@ where
410
412
onion_fields : _,
411
413
counterparty_skimmed_fee_msat,
412
414
} => {
413
- if let Some ( info) = self . payment_store . get ( & payment_hash) {
415
+ let payment_id = PaymentId ( payment_hash. 0 ) ;
416
+ if let Some ( info) = self . payment_store . get ( & payment_id) {
414
417
if info. status == PaymentStatus :: Succeeded {
415
418
log_info ! (
416
419
self . logger,
@@ -422,7 +425,7 @@ where
422
425
423
426
let update = PaymentDetailsUpdate {
424
427
status : Some ( PaymentStatus :: Failed ) ,
425
- ..PaymentDetailsUpdate :: new ( payment_hash )
428
+ ..PaymentDetailsUpdate :: new ( payment_id )
426
429
} ;
427
430
self . payment_store . update ( & update) . unwrap_or_else ( |e| {
428
431
log_error ! ( self . logger, "Failed to access payment store: {}" , e) ;
@@ -431,17 +434,22 @@ where
431
434
return ;
432
435
}
433
436
434
- let max_total_opening_fee_msat = info
435
- . lsp_fee_limits
436
- . and_then ( |l| {
437
- l. max_total_opening_fee_msat . or_else ( || {
438
- l. max_proportional_opening_fee_ppm_msat . and_then ( |max_prop_fee| {
439
- // If it's a variable amount payment, compute the actual fee.
440
- compute_opening_fee ( amount_msat, 0 , max_prop_fee)
437
+ let max_total_opening_fee_msat = match info. kind {
438
+ PaymentKind :: Bolt11Jit { lsp_fee_limits, .. } => {
439
+ lsp_fee_limits
440
+ . max_total_opening_fee_msat
441
+ . or_else ( || {
442
+ lsp_fee_limits. max_proportional_opening_fee_ppm_msat . and_then (
443
+ |max_prop_fee| {
444
+ // If it's a variable amount payment, compute the actual fee.
445
+ compute_opening_fee ( amount_msat, 0 , max_prop_fee)
446
+ } ,
447
+ )
441
448
} )
442
- } )
443
- } )
444
- . unwrap_or ( 0 ) ;
449
+ . unwrap_or ( 0 )
450
+ } ,
451
+ _ => 0 ,
452
+ } ;
445
453
446
454
if counterparty_skimmed_fee_msat > max_total_opening_fee_msat {
447
455
log_info ! (
@@ -455,7 +463,7 @@ where
455
463
456
464
let update = PaymentDetailsUpdate {
457
465
status : Some ( PaymentStatus :: Failed ) ,
458
- ..PaymentDetailsUpdate :: new ( payment_hash )
466
+ ..PaymentDetailsUpdate :: new ( payment_id )
459
467
} ;
460
468
self . payment_store . update ( & update) . unwrap_or_else ( |e| {
461
469
log_error ! ( self . logger, "Failed to access payment store: {}" , e) ;
@@ -496,7 +504,7 @@ where
496
504
497
505
let update = PaymentDetailsUpdate {
498
506
status : Some ( PaymentStatus :: Failed ) ,
499
- ..PaymentDetailsUpdate :: new ( payment_hash )
507
+ ..PaymentDetailsUpdate :: new ( payment_id )
500
508
} ;
501
509
self . payment_store . update ( & update) . unwrap_or_else ( |e| {
502
510
log_error ! ( self . logger, "Failed to access payment store: {}" , e) ;
@@ -518,14 +526,15 @@ where
518
526
hex_utils:: to_string( & payment_hash. 0 ) ,
519
527
amount_msat,
520
528
) ;
529
+ let payment_id = PaymentId ( payment_hash. 0 ) ;
521
530
match purpose {
522
531
PaymentPurpose :: InvoicePayment { payment_preimage, payment_secret, .. } => {
523
532
let update = PaymentDetailsUpdate {
524
533
preimage : Some ( payment_preimage) ,
525
534
secret : Some ( Some ( payment_secret) ) ,
526
535
amount_msat : Some ( Some ( amount_msat) ) ,
527
536
status : Some ( PaymentStatus :: Succeeded ) ,
528
- ..PaymentDetailsUpdate :: new ( payment_hash )
537
+ ..PaymentDetailsUpdate :: new ( payment_id )
529
538
} ;
530
539
match self . payment_store . update ( & update) {
531
540
Ok ( true ) => ( ) ,
@@ -549,14 +558,17 @@ where
549
558
}
550
559
} ,
551
560
PaymentPurpose :: SpontaneousPayment ( preimage) => {
552
- let payment = PaymentDetails {
553
- preimage : Some ( preimage ) ,
561
+ let id = PaymentId ( payment_hash . 0 ) ;
562
+ let kind = PaymentKind :: Spontaneous {
554
563
hash : payment_hash,
555
- secret : None ,
564
+ preimage : Some ( preimage) ,
565
+ } ;
566
+ let payment = PaymentDetails {
567
+ id,
568
+ kind,
556
569
amount_msat : Some ( amount_msat) ,
557
570
direction : PaymentDirection :: Inbound ,
558
571
status : PaymentStatus :: Succeeded ,
559
- lsp_fee_limits : None ,
560
572
} ;
561
573
562
574
match self . payment_store . insert ( payment) {
@@ -590,13 +602,19 @@ where
590
602
} ) ;
591
603
} ,
592
604
LdkEvent :: PaymentSent { payment_preimage, payment_hash, fee_paid_msat, .. } => {
593
- if let Some ( mut payment) = self . payment_store . get ( & payment_hash) {
594
- payment. preimage = Some ( payment_preimage) ;
595
- payment. status = PaymentStatus :: Succeeded ;
596
- self . payment_store . insert ( payment. clone ( ) ) . unwrap_or_else ( |e| {
597
- log_error ! ( self . logger, "Failed to access payment store: {}" , e) ;
598
- panic ! ( "Failed to access payment store" ) ;
599
- } ) ;
605
+ let payment_id = PaymentId ( payment_hash. 0 ) ;
606
+ let update = PaymentDetailsUpdate {
607
+ preimage : Some ( Some ( payment_preimage) ) ,
608
+ status : Some ( PaymentStatus :: Succeeded ) ,
609
+ ..PaymentDetailsUpdate :: new ( payment_id)
610
+ } ;
611
+
612
+ self . payment_store . update ( & update) . unwrap_or_else ( |e| {
613
+ log_error ! ( self . logger, "Failed to access payment store: {}" , e) ;
614
+ panic ! ( "Failed to access payment store" ) ;
615
+ } ) ;
616
+
617
+ self . payment_store . get ( & payment_id) . map ( |payment| {
600
618
log_info ! (
601
619
self . logger,
602
620
"Successfully sent payment of {}msat{} from \
@@ -610,7 +628,8 @@ where
610
628
hex_utils:: to_string( & payment_hash. 0 ) ,
611
629
hex_utils:: to_string( & payment_preimage. 0 )
612
630
) ;
613
- }
631
+ } ) ;
632
+
614
633
self . event_queue
615
634
. add_event ( Event :: PaymentSuccessful { payment_hash, fee_paid_msat } )
616
635
. unwrap_or_else ( |e| {
@@ -626,9 +645,10 @@ where
626
645
reason
627
646
) ;
628
647
648
+ let payment_id = PaymentId ( payment_hash. 0 ) ;
629
649
let update = PaymentDetailsUpdate {
630
650
status : Some ( PaymentStatus :: Failed ) ,
631
- ..PaymentDetailsUpdate :: new ( payment_hash )
651
+ ..PaymentDetailsUpdate :: new ( payment_id )
632
652
} ;
633
653
self . payment_store . update ( & update) . unwrap_or_else ( |e| {
634
654
log_error ! ( self . logger, "Failed to access payment store: {}" , e) ;
0 commit comments