Struct lightning_invoice::InvoiceBuilder
source · pub struct InvoiceBuilder<D: Bool, H: Bool, T: Bool, C: Bool, S: Bool, M: Bool> { /* private fields */ }
Expand description
Builder for Bolt11Invoice
s. It’s the most convenient and advised way to use this library. It
ensures that only a semantically and syntactically correct invoice can be built using it.
extern crate lightning_invoice;
extern crate bitcoin;
use bitcoin::hashes::Hash;
use bitcoin::hashes::sha256;
use bitcoin::secp256k1::Secp256k1;
use bitcoin::secp256k1::SecretKey;
use lightning_types::payment::PaymentSecret;
use lightning_invoice::{Currency, InvoiceBuilder};
let private_key = SecretKey::from_slice(
&[
0xe1, 0x26, 0xf6, 0x8f, 0x7e, 0xaf, 0xcc, 0x8b, 0x74, 0xf5, 0x4d, 0x26, 0x9f,
0xe2, 0x06, 0xbe, 0x71, 0x50, 0x00, 0xf9, 0x4d, 0xac, 0x06, 0x7d, 0x1c, 0x04,
0xa8, 0xca, 0x3b, 0x2d, 0xb7, 0x34
][..]
).unwrap();
let payment_hash = sha256::Hash::from_slice(&[0; 32][..]).unwrap();
let payment_secret = PaymentSecret([42u8; 32]);
let invoice = InvoiceBuilder::new(Currency::Bitcoin)
.description("Coins pls!".into())
.payment_hash(payment_hash)
.payment_secret(payment_secret)
.current_timestamp()
.min_final_cltv_expiry_delta(144)
.build_signed(|hash| {
Secp256k1::new().sign_ecdsa_recoverable(hash, &private_key)
})
.unwrap();
assert!(invoice.to_string().starts_with("lnbc1"));
§Type parameters
The two parameters D
and H
signal if the builder already contains the correct amount of the
given field:
D
: exactly oneTaggedField::Description
orTaggedField::DescriptionHash
H
: exactly oneTaggedField::PaymentHash
T
: the timestamp is setC
: the CLTV expiry is setS
: the payment secret is setM
: payment metadata is set
This is not exported to bindings users as we likely need to manually select one set of boolean type parameters.
Implementations§
source§impl InvoiceBuilder<False, False, False, False, False, False>
impl InvoiceBuilder<False, False, False, False, False, False>
source§impl<D: Bool, H: Bool, T: Bool, C: Bool, S: Bool, M: Bool> InvoiceBuilder<D, H, T, C, S, M>
impl<D: Bool, H: Bool, T: Bool, C: Bool, S: Bool, M: Bool> InvoiceBuilder<D, H, T, C, S, M>
sourcepub fn amount_milli_satoshis(self, amount_msat: u64) -> Self
pub fn amount_milli_satoshis(self, amount_msat: u64) -> Self
Sets the amount in millisatoshis. The optimal SI prefix is chosen automatically.
sourcepub fn payee_pub_key(self, pub_key: PublicKey) -> Self
pub fn payee_pub_key(self, pub_key: PublicKey) -> Self
Sets the payee’s public key.
sourcepub fn expiry_time(self, expiry_time: Duration) -> Self
pub fn expiry_time(self, expiry_time: Duration) -> Self
Sets the expiry time, dropping the subsecond part (which is not representable in BOLT 11 invoices).
sourcepub fn private_route(self, hint: RouteHint) -> Self
pub fn private_route(self, hint: RouteHint) -> Self
Adds a private route.
source§impl<D: Bool, H: Bool, C: Bool, S: Bool, M: Bool> InvoiceBuilder<D, H, True, C, S, M>
impl<D: Bool, H: Bool, C: Bool, S: Bool, M: Bool> InvoiceBuilder<D, H, True, C, S, M>
sourcepub fn build_raw(self) -> Result<RawBolt11Invoice, CreationError>
pub fn build_raw(self) -> Result<RawBolt11Invoice, CreationError>
Builds a RawBolt11Invoice
if no CreationError
occurred while construction any of the
fields.
source§impl<H: Bool, T: Bool, C: Bool, S: Bool, M: Bool> InvoiceBuilder<False, H, T, C, S, M>
impl<H: Bool, T: Bool, C: Bool, S: Bool, M: Bool> InvoiceBuilder<False, H, T, C, S, M>
sourcepub fn description(
self,
description: String,
) -> InvoiceBuilder<True, H, T, C, S, M>
pub fn description( self, description: String, ) -> InvoiceBuilder<True, H, T, C, S, M>
Set the description. This function is only available if no description (hash) was set.
sourcepub fn description_hash(
self,
description_hash: Hash,
) -> InvoiceBuilder<True, H, T, C, S, M>
pub fn description_hash( self, description_hash: Hash, ) -> InvoiceBuilder<True, H, T, C, S, M>
Set the description hash. This function is only available if no description (hash) was set.
sourcepub fn invoice_description(
self,
description: Bolt11InvoiceDescription<'_>,
) -> InvoiceBuilder<True, H, T, C, S, M>
pub fn invoice_description( self, description: Bolt11InvoiceDescription<'_>, ) -> InvoiceBuilder<True, H, T, C, S, M>
Set the description or description hash. This function is only available if no description (hash) was set.
source§impl<D: Bool, T: Bool, C: Bool, S: Bool, M: Bool> InvoiceBuilder<D, False, T, C, S, M>
impl<D: Bool, T: Bool, C: Bool, S: Bool, M: Bool> InvoiceBuilder<D, False, T, C, S, M>
sourcepub fn payment_hash(self, hash: Hash) -> InvoiceBuilder<D, True, T, C, S, M>
pub fn payment_hash(self, hash: Hash) -> InvoiceBuilder<D, True, T, C, S, M>
Set the payment hash. This function is only available if no payment hash was set.
source§impl<D: Bool, H: Bool, C: Bool, S: Bool, M: Bool> InvoiceBuilder<D, H, False, C, S, M>
impl<D: Bool, H: Bool, C: Bool, S: Bool, M: Bool> InvoiceBuilder<D, H, False, C, S, M>
sourcepub fn timestamp(self, time: SystemTime) -> InvoiceBuilder<D, H, True, C, S, M>
Available on crate feature std
only.
pub fn timestamp(self, time: SystemTime) -> InvoiceBuilder<D, H, True, C, S, M>
std
only.Sets the timestamp to a specific SystemTime
.
sourcepub fn duration_since_epoch(
self,
time: Duration,
) -> InvoiceBuilder<D, H, True, C, S, M>
pub fn duration_since_epoch( self, time: Duration, ) -> InvoiceBuilder<D, H, True, C, S, M>
Sets the timestamp to a duration since the Unix epoch, dropping the subsecond part (which is not representable in BOLT 11 invoices).
sourcepub fn current_timestamp(self) -> InvoiceBuilder<D, H, True, C, S, M>
Available on crate feature std
only.
pub fn current_timestamp(self) -> InvoiceBuilder<D, H, True, C, S, M>
std
only.Sets the timestamp to the current system time.
source§impl<D: Bool, H: Bool, T: Bool, S: Bool, M: Bool> InvoiceBuilder<D, H, T, False, S, M>
impl<D: Bool, H: Bool, T: Bool, S: Bool, M: Bool> InvoiceBuilder<D, H, T, False, S, M>
sourcepub fn min_final_cltv_expiry_delta(
self,
min_final_cltv_expiry_delta: u64,
) -> InvoiceBuilder<D, H, T, True, S, M>
pub fn min_final_cltv_expiry_delta( self, min_final_cltv_expiry_delta: u64, ) -> InvoiceBuilder<D, H, T, True, S, M>
Sets min_final_cltv_expiry_delta
.
source§impl<D: Bool, H: Bool, T: Bool, C: Bool, M: Bool> InvoiceBuilder<D, H, T, C, False, M>
impl<D: Bool, H: Bool, T: Bool, C: Bool, M: Bool> InvoiceBuilder<D, H, T, C, False, M>
sourcepub fn payment_secret(
self,
payment_secret: PaymentSecret,
) -> InvoiceBuilder<D, H, T, C, True, M>
pub fn payment_secret( self, payment_secret: PaymentSecret, ) -> InvoiceBuilder<D, H, T, C, True, M>
Sets the payment secret and relevant features.
source§impl<D: Bool, H: Bool, T: Bool, C: Bool, S: Bool> InvoiceBuilder<D, H, T, C, S, False>
impl<D: Bool, H: Bool, T: Bool, C: Bool, S: Bool> InvoiceBuilder<D, H, T, C, S, False>
sourcepub fn payment_metadata(
self,
payment_metadata: Vec<u8>,
) -> InvoiceBuilder<D, H, T, C, S, True>
pub fn payment_metadata( self, payment_metadata: Vec<u8>, ) -> InvoiceBuilder<D, H, T, C, S, True>
Sets the payment metadata.
By default features are set to optionally allow the sender to include the payment metadata.
If you wish to require that the sender include the metadata (and fail to parse the invoice if
they don’t support payment metadata fields), you need to call
InvoiceBuilder::require_payment_metadata
after this.
source§impl<D: Bool, H: Bool, T: Bool, C: Bool, S: Bool> InvoiceBuilder<D, H, T, C, S, True>
impl<D: Bool, H: Bool, T: Bool, C: Bool, S: Bool> InvoiceBuilder<D, H, T, C, S, True>
sourcepub fn require_payment_metadata(self) -> InvoiceBuilder<D, H, T, C, S, True>
pub fn require_payment_metadata(self) -> InvoiceBuilder<D, H, T, C, S, True>
Sets forwarding of payment metadata as required. A reader of the invoice which does not support sending payment metadata will fail to read the invoice.
source§impl<D: Bool, H: Bool, T: Bool, C: Bool, M: Bool> InvoiceBuilder<D, H, T, C, True, M>
impl<D: Bool, H: Bool, T: Bool, C: Bool, M: Bool> InvoiceBuilder<D, H, T, C, True, M>
source§impl<M: Bool> InvoiceBuilder<True, True, True, True, True, M>
impl<M: Bool> InvoiceBuilder<True, True, True, True, True, M>
sourcepub fn build_signed<F>(
self,
sign_function: F,
) -> Result<Bolt11Invoice, CreationError>
pub fn build_signed<F>( self, sign_function: F, ) -> Result<Bolt11Invoice, CreationError>
Builds and signs an invoice using the supplied sign_function
. This function MAY NOT fail
and MUST produce a recoverable signature valid for the given hash and if applicable also for
the included payee public key.
sourcepub fn try_build_signed<F, E>(
self,
sign_function: F,
) -> Result<Bolt11Invoice, SignOrCreationError<E>>
pub fn try_build_signed<F, E>( self, sign_function: F, ) -> Result<Bolt11Invoice, SignOrCreationError<E>>
Builds and signs an invoice using the supplied sign_function
. This function MAY fail with
an error of type E
and MUST produce a recoverable signature valid for the given hash and
if applicable also for the included payee public key.
Trait Implementations§
source§impl<D: Clone + Bool, H: Clone + Bool, T: Clone + Bool, C: Clone + Bool, S: Clone + Bool, M: Clone + Bool> Clone for InvoiceBuilder<D, H, T, C, S, M>
impl<D: Clone + Bool, H: Clone + Bool, T: Clone + Bool, C: Clone + Bool, S: Clone + Bool, M: Clone + Bool> Clone for InvoiceBuilder<D, H, T, C, S, M>
source§fn clone(&self) -> InvoiceBuilder<D, H, T, C, S, M>
fn clone(&self) -> InvoiceBuilder<D, H, T, C, S, M>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<D: Debug + Bool, H: Debug + Bool, T: Debug + Bool, C: Debug + Bool, S: Debug + Bool, M: Debug + Bool> Debug for InvoiceBuilder<D, H, T, C, S, M>
impl<D: Debug + Bool, H: Debug + Bool, T: Debug + Bool, C: Debug + Bool, S: Debug + Bool, M: Debug + Bool> Debug for InvoiceBuilder<D, H, T, C, S, M>
source§impl<D: PartialEq + Bool, H: PartialEq + Bool, T: PartialEq + Bool, C: PartialEq + Bool, S: PartialEq + Bool, M: PartialEq + Bool> PartialEq for InvoiceBuilder<D, H, T, C, S, M>
impl<D: PartialEq + Bool, H: PartialEq + Bool, T: PartialEq + Bool, C: PartialEq + Bool, S: PartialEq + Bool, M: PartialEq + Bool> PartialEq for InvoiceBuilder<D, H, T, C, S, M>
source§fn eq(&self, other: &InvoiceBuilder<D, H, T, C, S, M>) -> bool
fn eq(&self, other: &InvoiceBuilder<D, H, T, C, S, M>) -> bool
self
and other
values to be equal, and is used by ==
.impl<D: Eq + Bool, H: Eq + Bool, T: Eq + Bool, C: Eq + Bool, S: Eq + Bool, M: Eq + Bool> Eq for InvoiceBuilder<D, H, T, C, S, M>
impl<D: Bool, H: Bool, T: Bool, C: Bool, S: Bool, M: Bool> StructuralPartialEq for InvoiceBuilder<D, H, T, C, S, M>
Auto Trait Implementations§
impl<D, H, T, C, S, M> Freeze for InvoiceBuilder<D, H, T, C, S, M>
impl<D, H, T, C, S, M> RefUnwindSafe for InvoiceBuilder<D, H, T, C, S, M>where
D: RefUnwindSafe,
H: RefUnwindSafe,
T: RefUnwindSafe,
C: RefUnwindSafe,
S: RefUnwindSafe,
M: RefUnwindSafe,
impl<D, H, T, C, S, M> Send for InvoiceBuilder<D, H, T, C, S, M>
impl<D, H, T, C, S, M> Sync for InvoiceBuilder<D, H, T, C, S, M>
impl<D, H, T, C, S, M> Unpin for InvoiceBuilder<D, H, T, C, S, M>
impl<D, H, T, C, S, M> UnwindSafe for InvoiceBuilder<D, H, T, C, S, M>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)