@@ -884,13 +884,14 @@ where
884884 ///
885885 /// Returns an error if the refund targets a different chain or if no valid
886886 /// blinded path can be constructed.
887- pub fn create_invoice_builder_from_refund < ' a , ES : Deref , R : Deref > (
888- & ' a self , router : & R , entropy_source : ES , refund : & ' a Refund , payment_hash : PaymentHash ,
889- payment_secret : PaymentSecret , usable_channels : Vec < ChannelDetails > ,
887+ pub fn create_invoice_builder_from_refund < ' a , ES : Deref , R : Deref , F > (
888+ & ' a self , router : & R , entropy_source : ES , refund : & ' a Refund ,
889+ usable_channels : Vec < ChannelDetails > , get_payment_info : F ,
890890 ) -> Result < InvoiceBuilder < ' a , DerivedSigningPubkey > , Bolt12SemanticError >
891891 where
892892 ES :: Target : EntropySource ,
893893 R :: Target : Router ,
894+ F : Fn ( u64 , u32 ) -> Result < ( PaymentHash , PaymentSecret ) , Bolt12SemanticError > ,
894895 {
895896 if refund. chain ( ) != self . chain_hash {
896897 return Err ( Bolt12SemanticError :: UnsupportedChain ) ;
@@ -902,6 +903,8 @@ where
902903 let amount_msats = refund. amount_msats ( ) ;
903904 let relative_expiry = DEFAULT_RELATIVE_EXPIRY . as_secs ( ) as u32 ;
904905
906+ let ( payment_hash, payment_secret) = get_payment_info ( amount_msats, relative_expiry) ?;
907+
905908 let payment_context = PaymentContext :: Bolt12Refund ( Bolt12RefundContext { } ) ;
906909 let payment_paths = self
907910 . create_blinded_payment_paths (
@@ -951,20 +954,25 @@ where
951954 /// Returns a [`Bolt12SemanticError`] if:
952955 /// - Valid blinded payment paths could not be generated for the [`Bolt12Invoice`].
953956 /// - The [`InvoiceBuilder`] could not be created from the [`InvoiceRequest`].
954- pub fn create_invoice_builder_from_invoice_request_with_keys < ' a , ES : Deref , R : Deref > (
957+ pub fn create_invoice_builder_from_invoice_request_with_keys < ' a , ES : Deref , R : Deref , F > (
955958 & self , router : & R , entropy_source : ES ,
956- invoice_request : & ' a VerifiedInvoiceRequest < DerivedSigningPubkey > , amount_msats : u64 ,
957- payment_hash : PaymentHash , payment_secret : PaymentSecret ,
958- usable_channels : Vec < ChannelDetails > ,
959+ invoice_request : & ' a VerifiedInvoiceRequest < DerivedSigningPubkey > ,
960+ usable_channels : Vec < ChannelDetails > , get_payment_info : F ,
959961 ) -> Result < ( InvoiceBuilder < ' a , DerivedSigningPubkey > , MessageContext ) , Bolt12SemanticError >
960962 where
961963 ES :: Target : EntropySource ,
962964
963965 R :: Target : Router ,
966+ F : Fn ( u64 , u32 ) -> Result < ( PaymentHash , PaymentSecret ) , Bolt12SemanticError > ,
964967 {
965968 let entropy = & * entropy_source;
966969 let relative_expiry = DEFAULT_RELATIVE_EXPIRY . as_secs ( ) as u32 ;
967970
971+ let amount_msats =
972+ InvoiceBuilder :: < DerivedSigningPubkey > :: amount_msats ( & invoice_request. inner ) ?;
973+
974+ let ( payment_hash, payment_secret) = get_payment_info ( amount_msats, relative_expiry) ?;
975+
968976 let context = PaymentContext :: Bolt12Offer ( Bolt12OfferContext {
969977 offer_id : invoice_request. offer_id ,
970978 invoice_request : invoice_request. fields ( ) ,
@@ -1011,19 +1019,24 @@ where
10111019 /// Returns a [`Bolt12SemanticError`] if:
10121020 /// - Valid blinded payment paths could not be generated for the [`Bolt12Invoice`].
10131021 /// - The [`InvoiceBuilder`] could not be created from the [`InvoiceRequest`].
1014- pub fn create_invoice_builder_from_invoice_request_without_keys < ' a , ES : Deref , R : Deref > (
1022+ pub fn create_invoice_builder_from_invoice_request_without_keys < ' a , ES : Deref , R : Deref , F > (
10151023 & self , router : & R , entropy_source : ES ,
1016- invoice_request : & ' a VerifiedInvoiceRequest < ExplicitSigningPubkey > , amount_msats : u64 ,
1017- payment_hash : PaymentHash , payment_secret : PaymentSecret ,
1018- usable_channels : Vec < ChannelDetails > ,
1024+ invoice_request : & ' a VerifiedInvoiceRequest < ExplicitSigningPubkey > ,
1025+ usable_channels : Vec < ChannelDetails > , get_payment_info : F ,
10191026 ) -> Result < ( InvoiceBuilder < ' a , ExplicitSigningPubkey > , MessageContext ) , Bolt12SemanticError >
10201027 where
10211028 ES :: Target : EntropySource ,
10221029 R :: Target : Router ,
1030+ F : Fn ( u64 , u32 ) -> Result < ( PaymentHash , PaymentSecret ) , Bolt12SemanticError > ,
10231031 {
10241032 let entropy = & * entropy_source;
10251033 let relative_expiry = DEFAULT_RELATIVE_EXPIRY . as_secs ( ) as u32 ;
10261034
1035+ let amount_msats =
1036+ InvoiceBuilder :: < DerivedSigningPubkey > :: amount_msats ( & invoice_request. inner ) ?;
1037+
1038+ let ( payment_hash, payment_secret) = get_payment_info ( amount_msats, relative_expiry) ?;
1039+
10271040 let context = PaymentContext :: Bolt12Offer ( Bolt12OfferContext {
10281041 offer_id : invoice_request. offer_id ,
10291042 invoice_request : invoice_request. fields ( ) ,
0 commit comments