@@ -884,13 +884,14 @@ where
884
884
///
885
885
/// Returns an error if the refund targets a different chain or if no valid
886
886
/// 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 ,
890
890
) -> Result < InvoiceBuilder < ' a , DerivedSigningPubkey > , Bolt12SemanticError >
891
891
where
892
892
ES :: Target : EntropySource ,
893
893
R :: Target : Router ,
894
+ F : Fn ( u64 , u32 ) -> Result < ( PaymentHash , PaymentSecret ) , Bolt12SemanticError > ,
894
895
{
895
896
if refund. chain ( ) != self . chain_hash {
896
897
return Err ( Bolt12SemanticError :: UnsupportedChain ) ;
@@ -902,6 +903,8 @@ where
902
903
let amount_msats = refund. amount_msats ( ) ;
903
904
let relative_expiry = DEFAULT_RELATIVE_EXPIRY . as_secs ( ) as u32 ;
904
905
906
+ let ( payment_hash, payment_secret) = get_payment_info ( amount_msats, relative_expiry) ?;
907
+
905
908
let payment_context = PaymentContext :: Bolt12Refund ( Bolt12RefundContext { } ) ;
906
909
let payment_paths = self
907
910
. create_blinded_payment_paths (
@@ -951,20 +954,25 @@ where
951
954
/// Returns a [`Bolt12SemanticError`] if:
952
955
/// - Valid blinded payment paths could not be generated for the [`Bolt12Invoice`].
953
956
/// - 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 > (
955
958
& 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 ,
959
961
) -> Result < ( InvoiceBuilder < ' a , DerivedSigningPubkey > , MessageContext ) , Bolt12SemanticError >
960
962
where
961
963
ES :: Target : EntropySource ,
962
964
963
965
R :: Target : Router ,
966
+ F : Fn ( u64 , u32 ) -> Result < ( PaymentHash , PaymentSecret ) , Bolt12SemanticError > ,
964
967
{
965
968
let entropy = & * entropy_source;
966
969
let relative_expiry = DEFAULT_RELATIVE_EXPIRY . as_secs ( ) as u32 ;
967
970
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
+
968
976
let context = PaymentContext :: Bolt12Offer ( Bolt12OfferContext {
969
977
offer_id : invoice_request. offer_id ,
970
978
invoice_request : invoice_request. fields ( ) ,
@@ -1011,19 +1019,24 @@ where
1011
1019
/// Returns a [`Bolt12SemanticError`] if:
1012
1020
/// - Valid blinded payment paths could not be generated for the [`Bolt12Invoice`].
1013
1021
/// - 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 > (
1015
1023
& 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 ,
1019
1026
) -> Result < ( InvoiceBuilder < ' a , ExplicitSigningPubkey > , MessageContext ) , Bolt12SemanticError >
1020
1027
where
1021
1028
ES :: Target : EntropySource ,
1022
1029
R :: Target : Router ,
1030
+ F : Fn ( u64 , u32 ) -> Result < ( PaymentHash , PaymentSecret ) , Bolt12SemanticError > ,
1023
1031
{
1024
1032
let entropy = & * entropy_source;
1025
1033
let relative_expiry = DEFAULT_RELATIVE_EXPIRY . as_secs ( ) as u32 ;
1026
1034
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
+
1027
1040
let context = PaymentContext :: Bolt12Offer ( Bolt12OfferContext {
1028
1041
offer_id : invoice_request. offer_id ,
1029
1042
invoice_request : invoice_request. fields ( ) ,
0 commit comments