@@ -847,13 +847,14 @@ where
847847 ///
848848 /// Returns an error if the refund targets a different chain or if no valid
849849 /// blinded path can be constructed.
850- pub fn create_invoice_builder_from_refund < ' a , ES : Deref , R : Deref > (
851- & ' a self , router : & R , entropy_source : ES , refund : & ' a Refund , payment_hash : PaymentHash ,
852- payment_secret : PaymentSecret , usable_channels : Vec < ChannelDetails > ,
850+ pub fn create_invoice_builder_from_refund < ' a , ES : Deref , R : Deref , F > (
851+ & ' a self , router : & R , entropy_source : ES , refund : & ' a Refund ,
852+ usable_channels : Vec < ChannelDetails > , get_payment_info : F ,
853853 ) -> Result < InvoiceBuilder < ' a , DerivedSigningPubkey > , Bolt12SemanticError >
854854 where
855855 ES :: Target : EntropySource ,
856856 R :: Target : Router ,
857+ F : Fn ( u64 , u32 ) -> Result < ( PaymentHash , PaymentSecret ) , Bolt12SemanticError > ,
857858 {
858859 if refund. chain ( ) != self . chain_hash {
859860 return Err ( Bolt12SemanticError :: UnsupportedChain ) ;
@@ -865,6 +866,8 @@ where
865866 let amount_msats = refund. amount_msats ( ) ;
866867 let relative_expiry = DEFAULT_RELATIVE_EXPIRY . as_secs ( ) as u32 ;
867868
869+ let ( payment_hash, payment_secret) = get_payment_info ( amount_msats, relative_expiry) ?;
870+
868871 let payment_context = PaymentContext :: Bolt12Refund ( Bolt12RefundContext { } ) ;
869872 let payment_paths = self
870873 . create_blinded_payment_paths (
@@ -914,20 +917,25 @@ where
914917 /// Returns a [`Bolt12SemanticError`] if:
915918 /// - Valid blinded payment paths could not be generated for the [`Bolt12Invoice`].
916919 /// - The [`InvoiceBuilder`] could not be created from the [`InvoiceRequest`].
917- pub fn create_invoice_builder_from_invoice_request_with_keys < ' a , ES : Deref , R : Deref > (
920+ pub fn create_invoice_builder_from_invoice_request_with_keys < ' a , ES : Deref , R : Deref , F > (
918921 & self , router : & R , entropy_source : ES ,
919- invoice_request : & ' a VerifiedInvoiceRequest < DerivedSigningPubkey > , amount_msats : u64 ,
920- payment_hash : PaymentHash , payment_secret : PaymentSecret ,
921- usable_channels : Vec < ChannelDetails > ,
922+ invoice_request : & ' a VerifiedInvoiceRequest < DerivedSigningPubkey > ,
923+ usable_channels : Vec < ChannelDetails > , get_payment_info : F ,
922924 ) -> Result < ( InvoiceBuilder < ' a , DerivedSigningPubkey > , MessageContext ) , Bolt12SemanticError >
923925 where
924926 ES :: Target : EntropySource ,
925927
926928 R :: Target : Router ,
929+ F : Fn ( u64 , u32 ) -> Result < ( PaymentHash , PaymentSecret ) , Bolt12SemanticError > ,
927930 {
928931 let entropy = & * entropy_source;
929932 let relative_expiry = DEFAULT_RELATIVE_EXPIRY . as_secs ( ) as u32 ;
930933
934+ let amount_msats =
935+ InvoiceBuilder :: < DerivedSigningPubkey > :: amount_msats ( & invoice_request. inner ) ?;
936+
937+ let ( payment_hash, payment_secret) = get_payment_info ( amount_msats, relative_expiry) ?;
938+
931939 let context = PaymentContext :: Bolt12Offer ( Bolt12OfferContext {
932940 offer_id : invoice_request. offer_id ,
933941 invoice_request : invoice_request. fields ( ) ,
@@ -974,19 +982,24 @@ where
974982 /// Returns a [`Bolt12SemanticError`] if:
975983 /// - Valid blinded payment paths could not be generated for the [`Bolt12Invoice`].
976984 /// - The [`InvoiceBuilder`] could not be created from the [`InvoiceRequest`].
977- pub fn create_invoice_builder_from_invoice_request_without_keys < ' a , ES : Deref , R : Deref > (
985+ pub fn create_invoice_builder_from_invoice_request_without_keys < ' a , ES : Deref , R : Deref , F > (
978986 & self , router : & R , entropy_source : ES ,
979- invoice_request : & ' a VerifiedInvoiceRequest < ExplicitSigningPubkey > , amount_msats : u64 ,
980- payment_hash : PaymentHash , payment_secret : PaymentSecret ,
981- usable_channels : Vec < ChannelDetails > ,
987+ invoice_request : & ' a VerifiedInvoiceRequest < ExplicitSigningPubkey > ,
988+ usable_channels : Vec < ChannelDetails > , get_payment_info : F ,
982989 ) -> Result < ( InvoiceBuilder < ' a , ExplicitSigningPubkey > , MessageContext ) , Bolt12SemanticError >
983990 where
984991 ES :: Target : EntropySource ,
985992 R :: Target : Router ,
993+ F : Fn ( u64 , u32 ) -> Result < ( PaymentHash , PaymentSecret ) , Bolt12SemanticError > ,
986994 {
987995 let entropy = & * entropy_source;
988996 let relative_expiry = DEFAULT_RELATIVE_EXPIRY . as_secs ( ) as u32 ;
989997
998+ let amount_msats =
999+ InvoiceBuilder :: < DerivedSigningPubkey > :: amount_msats ( & invoice_request. inner ) ?;
1000+
1001+ let ( payment_hash, payment_secret) = get_payment_info ( amount_msats, relative_expiry) ?;
1002+
9901003 let context = PaymentContext :: Bolt12Offer ( Bolt12OfferContext {
9911004 offer_id : invoice_request. offer_id ,
9921005 invoice_request : invoice_request. fields ( ) ,
0 commit comments