Merge pull request #1940 from TheBlueMatt/2023-01-nostd-try-lock
[rust-lightning] / lightning-invoice / src / utils.rs
index c2fe5e4aefc533557c0bba8cd9cfef646d4ee938..1f6dc619a560b42b8f928cc8e6096605615e8f6c 100644 (file)
@@ -15,7 +15,7 @@ use lightning::ln::channelmanager::{ChannelDetails, ChannelManager, PaymentId, P
 use lightning::ln::channelmanager::{PhantomRouteHints, MIN_CLTV_EXPIRY_DELTA};
 use lightning::ln::inbound_payment::{create, create_from_hash, ExpandedKey};
 use lightning::routing::gossip::RoutingFees;
-use lightning::routing::router::{InFlightHtlcs, Route, RouteHint, RouteHintHop};
+use lightning::routing::router::{InFlightHtlcs, Route, RouteHint, RouteHintHop, Router};
 use lightning::util::logger::Logger;
 use secp256k1::PublicKey;
 use core::ops::Deref;
@@ -232,8 +232,8 @@ where
 ///
 /// `invoice_expiry_delta_secs` describes the number of seconds that the invoice is valid for
 /// in excess of the current time.
-pub fn create_invoice_from_channelmanager<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>(
-       channelmanager: &ChannelManager<M, T, K, F, L>, keys_manager: K, logger: L,
+pub fn create_invoice_from_channelmanager<M: Deref, T: Deref, K: Deref, F: Deref, R: Deref, L: Deref>(
+       channelmanager: &ChannelManager<M, T, K, F, R, L>, keys_manager: K, logger: L,
        network: Currency, amt_msat: Option<u64>, description: String, invoice_expiry_delta_secs: u32
 ) -> Result<Invoice, SignOrCreationError<()>>
 where
@@ -241,6 +241,7 @@ where
        T::Target: BroadcasterInterface,
        K::Target: KeysInterface,
        F::Target: FeeEstimator,
+       R::Target: Router,
        L::Target: Logger,
 {
        use std::time::SystemTime;
@@ -262,8 +263,8 @@ where
 ///
 /// `invoice_expiry_delta_secs` describes the number of seconds that the invoice is valid for
 /// in excess of the current time.
-pub fn create_invoice_from_channelmanager_with_description_hash<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>(
-       channelmanager: &ChannelManager<M, T, K, F, L>, keys_manager: K, logger: L,
+pub fn create_invoice_from_channelmanager_with_description_hash<M: Deref, T: Deref, K: Deref, F: Deref, R: Deref, L: Deref>(
+       channelmanager: &ChannelManager<M, T, K, F, R, L>, keys_manager: K, logger: L,
        network: Currency, amt_msat: Option<u64>, description_hash: Sha256,
        invoice_expiry_delta_secs: u32
 ) -> Result<Invoice, SignOrCreationError<()>>
@@ -272,6 +273,7 @@ where
        T::Target: BroadcasterInterface,
        K::Target: KeysInterface,
        F::Target: FeeEstimator,
+       R::Target: Router,
        L::Target: Logger,
 {
        use std::time::SystemTime;
@@ -289,8 +291,8 @@ where
 /// See [`create_invoice_from_channelmanager_with_description_hash`]
 /// This version can be used in a `no_std` environment, where [`std::time::SystemTime`] is not
 /// available and the current time is supplied by the caller.
-pub fn create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>(
-       channelmanager: &ChannelManager<M, T, K, F, L>, keys_manager: K, logger: L,
+pub fn create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch<M: Deref, T: Deref, K: Deref, F: Deref, R: Deref, L: Deref>(
+       channelmanager: &ChannelManager<M, T, K, F, R, L>, keys_manager: K, logger: L,
        network: Currency, amt_msat: Option<u64>, description_hash: Sha256,
        duration_since_epoch: Duration, invoice_expiry_delta_secs: u32
 ) -> Result<Invoice, SignOrCreationError<()>>
@@ -299,6 +301,7 @@ pub fn create_invoice_from_channelmanager_with_description_hash_and_duration_sin
                        T::Target: BroadcasterInterface,
                        K::Target: KeysInterface,
                        F::Target: FeeEstimator,
+                       R::Target: Router,
                        L::Target: Logger,
 {
        _create_invoice_from_channelmanager_and_duration_since_epoch(
@@ -311,8 +314,8 @@ pub fn create_invoice_from_channelmanager_with_description_hash_and_duration_sin
 /// See [`create_invoice_from_channelmanager`]
 /// This version can be used in a `no_std` environment, where [`std::time::SystemTime`] is not
 /// available and the current time is supplied by the caller.
-pub fn create_invoice_from_channelmanager_and_duration_since_epoch<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>(
-       channelmanager: &ChannelManager<M, T, K, F, L>, keys_manager: K, logger: L,
+pub fn create_invoice_from_channelmanager_and_duration_since_epoch<M: Deref, T: Deref, K: Deref, F: Deref, R: Deref, L: Deref>(
+       channelmanager: &ChannelManager<M, T, K, F, R, L>, keys_manager: K, logger: L,
        network: Currency, amt_msat: Option<u64>, description: String, duration_since_epoch: Duration,
        invoice_expiry_delta_secs: u32
 ) -> Result<Invoice, SignOrCreationError<()>>
@@ -321,6 +324,7 @@ pub fn create_invoice_from_channelmanager_and_duration_since_epoch<M: Deref, T:
                        T::Target: BroadcasterInterface,
                        K::Target: KeysInterface,
                        F::Target: FeeEstimator,
+                       R::Target: Router,
                        L::Target: Logger,
 {
        _create_invoice_from_channelmanager_and_duration_since_epoch(
@@ -332,8 +336,8 @@ pub fn create_invoice_from_channelmanager_and_duration_since_epoch<M: Deref, T:
        )
 }
 
-fn _create_invoice_from_channelmanager_and_duration_since_epoch<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>(
-       channelmanager: &ChannelManager<M, T, K, F, L>, keys_manager: K, logger: L,
+fn _create_invoice_from_channelmanager_and_duration_since_epoch<M: Deref, T: Deref, K: Deref, F: Deref, R: Deref, L: Deref>(
+       channelmanager: &ChannelManager<M, T, K, F, R, L>, keys_manager: K, logger: L,
        network: Currency, amt_msat: Option<u64>, description: InvoiceDescription,
        duration_since_epoch: Duration, invoice_expiry_delta_secs: u32
 ) -> Result<Invoice, SignOrCreationError<()>>
@@ -342,6 +346,7 @@ fn _create_invoice_from_channelmanager_and_duration_since_epoch<M: Deref, T: Der
                        T::Target: BroadcasterInterface,
                        K::Target: KeysInterface,
                        F::Target: FeeEstimator,
+                       R::Target: Router,
                        L::Target: Logger,
 {
        // `create_inbound_payment` only returns an error if the amount is greater than the total bitcoin
@@ -357,8 +362,8 @@ fn _create_invoice_from_channelmanager_and_duration_since_epoch<M: Deref, T: Der
 /// This version allows for providing a custom [`PaymentHash`] for the invoice.
 /// This may be useful if you're building an on-chain swap or involving another protocol where
 /// the payment hash is also involved outside the scope of lightning.
-pub fn create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>(
-       channelmanager: &ChannelManager<M, T, K, F, L>, keys_manager: K, logger: L,
+pub fn create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash<M: Deref, T: Deref, K: Deref, F: Deref, R: Deref, L: Deref>(
+       channelmanager: &ChannelManager<M, T, K, F, R, L>, keys_manager: K, logger: L,
        network: Currency, amt_msat: Option<u64>, description: String, duration_since_epoch: Duration,
        invoice_expiry_delta_secs: u32, payment_hash: PaymentHash
 ) -> Result<Invoice, SignOrCreationError<()>>
@@ -367,6 +372,7 @@ pub fn create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_
                T::Target: BroadcasterInterface,
                K::Target: KeysInterface,
                F::Target: FeeEstimator,
+               R::Target: Router,
                L::Target: Logger,
 {
        let payment_secret = channelmanager
@@ -381,8 +387,8 @@ pub fn create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_
        )
 }
 
-fn _create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>(
-       channelmanager: &ChannelManager<M, T, K, F, L>, keys_manager: K, logger: L,
+fn _create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash<M: Deref, T: Deref, K: Deref, F: Deref, R: Deref, L: Deref>(
+       channelmanager: &ChannelManager<M, T, K, F, R, L>, keys_manager: K, logger: L,
        network: Currency, amt_msat: Option<u64>, description: InvoiceDescription, duration_since_epoch: Duration,
        invoice_expiry_delta_secs: u32, payment_hash: PaymentHash, payment_secret: PaymentSecret
 ) -> Result<Invoice, SignOrCreationError<()>>
@@ -391,6 +397,7 @@ fn _create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_has
                T::Target: BroadcasterInterface,
                K::Target: KeysInterface,
                F::Target: FeeEstimator,
+               R::Target: Router,
                L::Target: Logger,
 {
        let our_node_pubkey = channelmanager.get_our_node_id();
@@ -565,12 +572,13 @@ fn filter_channels<L: Deref>(
                .collect::<Vec<RouteHint>>()
 }
 
-impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> Payer for ChannelManager<M, T, K, F, L>
+impl<M: Deref, T: Deref, K: Deref, F: Deref, R: Deref, L: Deref> Payer for ChannelManager<M, T, K, F, R, L>
 where
        M::Target: chain::Watch<<K::Target as SignerProvider>::Signer>,
        T::Target: BroadcasterInterface,
        K::Target: KeysInterface,
        F::Target: FeeEstimator,
+       R::Target: Router,
        L::Target: Logger,
 {
        fn node_id(&self) -> PublicKey {