X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Foffers%2Finvoice_request.rs;h=e863ef6cd613f2c79759e34b5b2df6987e60e448;hb=95892e37daeda1fd8e89b3e97e6e4e5cdba99d52;hp=126d9b552decf689bee53bae7a2c82a9bf681be5;hpb=88c5197e4445166c4dd8307b9c6903ef4990c70f;p=rust-lightning diff --git a/lightning/src/offers/invoice_request.rs b/lightning/src/offers/invoice_request.rs index 126d9b55..e863ef6c 100644 --- a/lightning/src/offers/invoice_request.rs +++ b/lightning/src/offers/invoice_request.rs @@ -57,7 +57,6 @@ use bitcoin::network::constants::Network; use bitcoin::secp256k1::{Message, PublicKey}; use bitcoin::secp256k1::schnorr::Signature; use core::convert::TryFrom; -use core::time::Duration; use crate::io; use crate::ln::PaymentHash; use crate::ln::features::InvoiceRequestFeatures; @@ -326,23 +325,35 @@ impl InvoiceRequest { /// Creates an [`Invoice`] for the request with the given required fields. /// /// Unless [`InvoiceBuilder::relative_expiry`] is set, the invoice will expire two hours after - /// `created_at`. The caller is expected to remember the preimage of `payment_hash` in order to - /// claim a payment for the invoice. + /// calling this method in `std` builds. For `no-std` builds, a final [`Duration`] parameter + /// must be given, which is used to set [`Invoice::created_at`] since [`std::time::SystemTime`] + /// is not available. + /// + /// The caller is expected to remember the preimage of `payment_hash` in order to claim a payment + /// for the invoice. /// /// The `payment_paths` parameter is useful for maintaining the payment recipient's privacy. It /// must contain one or more elements. /// /// Errors if the request contains unknown required features. /// + /// [`Duration`]: core::time::Duration /// [`Invoice`]: crate::offers::invoice::Invoice + /// [`Invoice::created_at`]: crate::offers::invoice::Invoice::created_at pub fn respond_with( - &self, payment_paths: Vec<(BlindedPath, BlindedPayInfo)>, created_at: Duration, - payment_hash: PaymentHash + &self, payment_paths: Vec<(BlindedPath, BlindedPayInfo)>, payment_hash: PaymentHash, + #[cfg(any(test, not(feature = "std")))] + created_at: core::time::Duration ) -> Result { if self.features().requires_unknown_bits() { return Err(SemanticError::UnknownRequiredFeatures); } + #[cfg(all(not(test), feature = "std"))] + let created_at = std::time::SystemTime::now() + .duration_since(std::time::SystemTime::UNIX_EPOCH) + .expect("SystemTime::now() should come after SystemTime::UNIX_EPOCH"); + InvoiceBuilder::for_offer(self, payment_paths, created_at, payment_hash) }