@@ -4,7 +4,8 @@ use crate::{
44} ;
55
66use crate :: payment:: payment_store:: {
7- PaymentDetails , PaymentDetailsUpdate , PaymentDirection , PaymentStatus , PaymentStore ,
7+ PaymentDetails , PaymentDetailsUpdate , PaymentDirection , PaymentKind , PaymentStatus ,
8+ PaymentStore ,
89} ;
910
1011use crate :: io:: {
@@ -17,6 +18,7 @@ use lightning::chain::chaininterface::ConfirmationTarget;
1718use lightning:: events:: { ClosureReason , PaymentPurpose } ;
1819use lightning:: events:: { Event as LdkEvent , PaymentFailureReason } ;
1920use lightning:: impl_writeable_tlv_based_enum;
21+ use lightning:: ln:: channelmanager:: PaymentId ;
2022use lightning:: ln:: { ChannelId , PaymentHash } ;
2123use lightning:: routing:: gossip:: NodeId ;
2224use lightning:: util:: errors:: APIError ;
@@ -410,7 +412,8 @@ where
410412 onion_fields : _,
411413 counterparty_skimmed_fee_msat,
412414 } => {
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) {
414417 if info. status == PaymentStatus :: Succeeded {
415418 log_info ! (
416419 self . logger,
@@ -422,7 +425,7 @@ where
422425
423426 let update = PaymentDetailsUpdate {
424427 status : Some ( PaymentStatus :: Failed ) ,
425- ..PaymentDetailsUpdate :: new ( payment_hash )
428+ ..PaymentDetailsUpdate :: new ( payment_id )
426429 } ;
427430 self . payment_store . update ( & update) . unwrap_or_else ( |e| {
428431 log_error ! ( self . logger, "Failed to access payment store: {}" , e) ;
@@ -431,17 +434,22 @@ where
431434 return ;
432435 }
433436
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+ )
441448 } )
442- } )
443- } )
444- . unwrap_or ( 0 ) ;
449+ . unwrap_or ( 0 )
450+ } ,
451+ _ => 0 ,
452+ } ;
445453
446454 if counterparty_skimmed_fee_msat > max_total_opening_fee_msat {
447455 log_info ! (
@@ -455,7 +463,7 @@ where
455463
456464 let update = PaymentDetailsUpdate {
457465 status : Some ( PaymentStatus :: Failed ) ,
458- ..PaymentDetailsUpdate :: new ( payment_hash )
466+ ..PaymentDetailsUpdate :: new ( payment_id )
459467 } ;
460468 self . payment_store . update ( & update) . unwrap_or_else ( |e| {
461469 log_error ! ( self . logger, "Failed to access payment store: {}" , e) ;
@@ -496,7 +504,7 @@ where
496504
497505 let update = PaymentDetailsUpdate {
498506 status : Some ( PaymentStatus :: Failed ) ,
499- ..PaymentDetailsUpdate :: new ( payment_hash )
507+ ..PaymentDetailsUpdate :: new ( payment_id )
500508 } ;
501509 self . payment_store . update ( & update) . unwrap_or_else ( |e| {
502510 log_error ! ( self . logger, "Failed to access payment store: {}" , e) ;
@@ -518,14 +526,15 @@ where
518526 hex_utils:: to_string( & payment_hash. 0 ) ,
519527 amount_msat,
520528 ) ;
529+ let payment_id = PaymentId ( payment_hash. 0 ) ;
521530 match purpose {
522531 PaymentPurpose :: InvoicePayment { payment_preimage, payment_secret, .. } => {
523532 let update = PaymentDetailsUpdate {
524533 preimage : Some ( payment_preimage) ,
525534 secret : Some ( Some ( payment_secret) ) ,
526535 amount_msat : Some ( Some ( amount_msat) ) ,
527536 status : Some ( PaymentStatus :: Succeeded ) ,
528- ..PaymentDetailsUpdate :: new ( payment_hash )
537+ ..PaymentDetailsUpdate :: new ( payment_id )
529538 } ;
530539 match self . payment_store . update ( & update) {
531540 Ok ( true ) => ( ) ,
@@ -549,14 +558,17 @@ where
549558 }
550559 } ,
551560 PaymentPurpose :: SpontaneousPayment ( preimage) => {
552- let payment = PaymentDetails {
553- preimage : Some ( preimage ) ,
561+ let id = PaymentId ( payment_hash . 0 ) ;
562+ let kind = PaymentKind :: Spontaneous {
554563 hash : payment_hash,
555- secret : None ,
564+ preimage : Some ( preimage) ,
565+ } ;
566+ let payment = PaymentDetails {
567+ id,
568+ kind,
556569 amount_msat : Some ( amount_msat) ,
557570 direction : PaymentDirection :: Inbound ,
558571 status : PaymentStatus :: Succeeded ,
559- lsp_fee_limits : None ,
560572 } ;
561573
562574 match self . payment_store . insert ( payment) {
@@ -590,13 +602,19 @@ where
590602 } ) ;
591603 } ,
592604 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| {
600618 log_info ! (
601619 self . logger,
602620 "Successfully sent payment of {}msat{} from \
@@ -610,7 +628,8 @@ where
610628 hex_utils:: to_string( & payment_hash. 0 ) ,
611629 hex_utils:: to_string( & payment_preimage. 0 )
612630 ) ;
613- }
631+ } ) ;
632+
614633 self . event_queue
615634 . add_event ( Event :: PaymentSuccessful { payment_hash, fee_paid_msat } )
616635 . unwrap_or_else ( |e| {
@@ -626,9 +645,10 @@ where
626645 reason
627646 ) ;
628647
648+ let payment_id = PaymentId ( payment_hash. 0 ) ;
629649 let update = PaymentDetailsUpdate {
630650 status : Some ( PaymentStatus :: Failed ) ,
631- ..PaymentDetailsUpdate :: new ( payment_hash )
651+ ..PaymentDetailsUpdate :: new ( payment_id )
632652 } ;
633653 self . payment_store . update ( & update) . unwrap_or_else ( |e| {
634654 log_error ! ( self . logger, "Failed to access payment store: {}" , e) ;
0 commit comments