@@ -866,13 +866,14 @@ where
866866 ///
867867 /// Returns an error if the refund targets a different chain or if no valid
868868 /// blinded path can be constructed.
869- pub fn create_invoice_builder_from_refund < ' a , ES : Deref , R : Deref > (
870- & ' a self , router : & R , entropy_source : ES , refund : & ' a Refund , payment_hash : PaymentHash ,
871- payment_secret : PaymentSecret , usable_channels : Vec < ChannelDetails > ,
869+ pub fn create_invoice_builder_from_refund < ' a , ES : Deref , R : Deref , F > (
870+ & ' a self , router : & R , entropy_source : ES , refund : & ' a Refund ,
871+ usable_channels : Vec < ChannelDetails > , get_payment_info : F ,
872872 ) -> Result < InvoiceBuilder < ' a , DerivedSigningPubkey > , Bolt12SemanticError >
873873 where
874874 ES :: Target : EntropySource ,
875875 R :: Target : Router ,
876+ F : Fn ( u64 , u32 ) -> Result < ( PaymentHash , PaymentSecret ) , Bolt12SemanticError > ,
876877 {
877878 if refund. chain ( ) != self . chain_hash {
878879 return Err ( Bolt12SemanticError :: UnsupportedChain ) ;
@@ -884,6 +885,8 @@ where
884885 let amount_msats = refund. amount_msats ( ) ;
885886 let relative_expiry = DEFAULT_RELATIVE_EXPIRY . as_secs ( ) as u32 ;
886887
888+ let ( payment_hash, payment_secret) = get_payment_info ( amount_msats, relative_expiry) ?;
889+
887890 let payment_context = PaymentContext :: Bolt12Refund ( Bolt12RefundContext { } ) ;
888891 let payment_paths = self
889892 . create_blinded_payment_paths (
@@ -934,20 +937,25 @@ where
934937 /// - User call the function with [`VerifiedInvoiceRequest<ExplicitSigningPubkey>`].
935938 /// - Valid blinded payment paths could not be generated for the [`Bolt12Invoice`].
936939 /// - The [`InvoiceBuilder`] could not be created from the [`InvoiceRequest`].
937- pub fn create_invoice_builder_from_invoice_request_with_keys < ' a , ES : Deref , R : Deref > (
940+ pub fn create_invoice_builder_from_invoice_request_with_keys < ' a , ES : Deref , R : Deref , F > (
938941 & ' a self , router : & R , entropy_source : ES ,
939- invoice_request : & ' a VerifiedInvoiceRequest < DerivedSigningPubkey > , amount_msats : u64 ,
940- payment_hash : PaymentHash , payment_secret : PaymentSecret ,
941- usable_channels : Vec < ChannelDetails > ,
942+ invoice_request : & ' a VerifiedInvoiceRequest < DerivedSigningPubkey > ,
943+ usable_channels : Vec < ChannelDetails > , get_payment_info : F ,
942944 ) -> Result < ( InvoiceBuilder < ' a , DerivedSigningPubkey > , MessageContext ) , Bolt12SemanticError >
943945 where
944946 ES :: Target : EntropySource ,
945947
946948 R :: Target : Router ,
949+ F : Fn ( u64 , u32 ) -> Result < ( PaymentHash , PaymentSecret ) , Bolt12SemanticError > ,
947950 {
948951 let entropy = & * entropy_source;
949952 let relative_expiry = DEFAULT_RELATIVE_EXPIRY . as_secs ( ) as u32 ;
950953
954+ let amount_msats =
955+ InvoiceBuilder :: < DerivedSigningPubkey > :: amount_msats ( & invoice_request. inner ) ?;
956+
957+ let ( payment_hash, payment_secret) = get_payment_info ( amount_msats, relative_expiry) ?;
958+
951959 let context = PaymentContext :: Bolt12Offer ( Bolt12OfferContext {
952960 offer_id : invoice_request. offer_id ,
953961 invoice_request : invoice_request. fields ( ) ,
@@ -995,19 +1003,24 @@ where
9951003 /// - User call the function with [`VerifiedInvoiceRequest<DerivedSigningPubkey>`].
9961004 /// - Valid blinded payment paths could not be generated for the [`Bolt12Invoice`].
9971005 /// - The [`InvoiceBuilder`] could not be created from the [`InvoiceRequest`].
998- pub fn create_invoice_builder_from_invoice_request_without_keys < ' a , ES : Deref , R : Deref > (
1006+ pub fn create_invoice_builder_from_invoice_request_without_keys < ' a , ES : Deref , R : Deref , F > (
9991007 & ' a self , router : & R , entropy_source : ES ,
1000- invoice_request : & ' a VerifiedInvoiceRequest < ExplicitSigningPubkey > , amount_msats : u64 ,
1001- payment_hash : PaymentHash , payment_secret : PaymentSecret ,
1002- usable_channels : Vec < ChannelDetails > ,
1008+ invoice_request : & ' a VerifiedInvoiceRequest < ExplicitSigningPubkey > ,
1009+ usable_channels : Vec < ChannelDetails > , get_payment_info : F ,
10031010 ) -> Result < ( InvoiceBuilder < ' a , ExplicitSigningPubkey > , MessageContext ) , Bolt12SemanticError >
10041011 where
10051012 ES :: Target : EntropySource ,
10061013 R :: Target : Router ,
1014+ F : Fn ( u64 , u32 ) -> Result < ( PaymentHash , PaymentSecret ) , Bolt12SemanticError > ,
10071015 {
10081016 let entropy = & * entropy_source;
10091017 let relative_expiry = DEFAULT_RELATIVE_EXPIRY . as_secs ( ) as u32 ;
10101018
1019+ let amount_msats =
1020+ InvoiceBuilder :: < DerivedSigningPubkey > :: amount_msats ( & invoice_request. inner ) ?;
1021+
1022+ let ( payment_hash, payment_secret) = get_payment_info ( amount_msats, relative_expiry) ?;
1023+
10111024 let context = PaymentContext :: Bolt12Offer ( Bolt12OfferContext {
10121025 offer_id : invoice_request. offer_id ,
10131026 invoice_request : invoice_request. fields ( ) ,
0 commit comments