pub struct InvoiceBuilder<D, H, T, C, S, M>
where D: Bool, H: Bool, T: Bool, C: Bool, S: Bool, M: Bool,
{ /* private fields */ }
Expand description

Builder for Bolt11Invoices. 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 secp256k1;
extern crate lightning;
extern crate lightning_invoice;
extern crate bitcoin_hashes;

use bitcoin_hashes::Hash;
use bitcoin_hashes::sha256;

use secp256k1::Secp256k1;
use secp256k1::SecretKey;

use lightning::ln::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:

This is not exported to bindings users as we likely need to manually select one set of boolean type parameters.

Implementations§

§

impl InvoiceBuilder<False, False, False, False, False, False>

pub fn new( currency: Currency, ) -> InvoiceBuilder<False, False, False, False, False, False>

Construct new, empty InvoiceBuilder. All necessary fields have to be filled first before InvoiceBuilder::build(self) becomes available.

§

impl<D, H, T, C, S, M> InvoiceBuilder<D, H, T, C, S, M>
where D: Bool, H: Bool, T: Bool, C: Bool, S: Bool, M: Bool,

pub fn amount_milli_satoshis( self, amount_msat: u64, ) -> InvoiceBuilder<D, H, T, C, S, M>

Sets the amount in millisatoshis. The optimal SI prefix is chosen automatically.

pub fn payee_pub_key( self, pub_key: PublicKey, ) -> InvoiceBuilder<D, H, T, C, S, M>

Sets the payee’s public key.

pub fn expiry_time( self, expiry_time: Duration, ) -> InvoiceBuilder<D, H, T, C, S, M>

Sets the expiry time, dropping the subsecond part (which is not representable in BOLT 11 invoices).

pub fn fallback(self, fallback: Fallback) -> InvoiceBuilder<D, H, T, C, S, M>

Adds a fallback address.

pub fn private_route(self, hint: RouteHint) -> InvoiceBuilder<D, H, T, C, S, M>

Adds a private route.

§

impl<D, H, C, S, M> InvoiceBuilder<D, H, True, C, S, M>
where D: Bool, H: Bool, C: Bool, S: Bool, M: Bool,

pub fn build_raw(self) -> Result<RawBolt11Invoice, CreationError>

Builds a RawBolt11Invoice if no CreationError occurred while construction any of the fields.

§

impl<H, T, C, S, M> InvoiceBuilder<False, H, T, C, S, M>
where H: Bool, T: Bool, C: Bool, S: Bool, M: Bool,

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.

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.

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.

§

impl<D, T, C, S, M> InvoiceBuilder<D, False, T, C, S, M>
where D: Bool, T: Bool, C: Bool, S: Bool, M: Bool,

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.

§

impl<D, H, C, S, M> InvoiceBuilder<D, H, False, C, S, M>
where D: Bool, H: Bool, C: Bool, S: Bool, M: Bool,

pub fn timestamp(self, time: SystemTime) -> InvoiceBuilder<D, H, True, C, S, M>

Sets the timestamp to a specific SystemTime.

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).

pub fn current_timestamp(self) -> InvoiceBuilder<D, H, True, C, S, M>

Sets the timestamp to the current system time.

§

impl<D, H, T, S, M> InvoiceBuilder<D, H, T, False, S, M>
where D: Bool, H: Bool, T: Bool, S: Bool, M: Bool,

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.

§

impl<D, H, T, C, M> InvoiceBuilder<D, H, T, C, False, M>
where D: Bool, H: Bool, T: Bool, C: Bool, M: Bool,

pub fn payment_secret( self, payment_secret: PaymentSecret, ) -> InvoiceBuilder<D, H, T, C, True, M>

Sets the payment secret and relevant features.

§

impl<D, H, T, C, S> InvoiceBuilder<D, H, T, C, S, False>
where D: Bool, H: Bool, T: Bool, C: Bool, S: Bool,

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.

§

impl<D, H, T, C, S> InvoiceBuilder<D, H, T, C, S, True>
where D: Bool, H: Bool, T: Bool, C: Bool, S: Bool,

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.

§

impl<D, H, T, C, M> InvoiceBuilder<D, H, T, C, True, M>
where D: Bool, H: Bool, T: Bool, C: Bool, M: Bool,

pub fn basic_mpp(self) -> InvoiceBuilder<D, H, T, C, True, M>

Sets the basic_mpp feature as optional.

§

impl<M> InvoiceBuilder<True, True, True, True, True, M>
where M: Bool,

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.

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§

§

impl<D, H, T, C, S, M> Clone for InvoiceBuilder<D, H, T, C, S, M>
where D: Clone + Bool, H: Clone + Bool, T: Clone + Bool, C: Clone + Bool, S: Clone + Bool, M: Clone + Bool,

§

fn clone(&self) -> InvoiceBuilder<D, H, T, C, S, M>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl<D, H, T, C, S, M> Debug for InvoiceBuilder<D, H, T, C, S, M>
where D: Debug + Bool, H: Debug + Bool, T: Debug + Bool, C: Debug + Bool, S: Debug + Bool, M: Debug + Bool,

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<D, H, T, C, S, M> PartialEq for InvoiceBuilder<D, H, T, C, S, M>
where D: PartialEq + Bool, H: PartialEq + Bool, T: PartialEq + Bool, C: PartialEq + Bool, S: PartialEq + Bool, M: PartialEq + Bool,

§

fn eq(&self, other: &InvoiceBuilder<D, H, T, C, S, M>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
§

impl<D, H, T, C, S, M> Eq for InvoiceBuilder<D, H, T, C, S, M>
where D: Eq + Bool, H: Eq + Bool, T: Eq + Bool, C: Eq + Bool, S: Eq + Bool, M: Eq + Bool,

§

impl<D, H, T, C, S, M> StructuralPartialEq for InvoiceBuilder<D, H, T, C, S, M>
where D: Bool, H: Bool, T: Bool, C: Bool, S: Bool, M: Bool,

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>

§

impl<D, H, T, C, S, M> Send for InvoiceBuilder<D, H, T, C, S, M>
where D: Send, H: Send, T: Send, C: Send, S: Send, M: Send,

§

impl<D, H, T, C, S, M> Sync for InvoiceBuilder<D, H, T, C, S, M>
where D: Sync, H: Sync, T: Sync, C: Sync, S: Sync, M: Sync,

§

impl<D, H, T, C, S, M> Unpin for InvoiceBuilder<D, H, T, C, S, M>
where D: Unpin, H: Unpin, T: Unpin, C: Unpin, S: Unpin, M: Unpin,

§

impl<D, H, T, C, S, M> UnwindSafe for InvoiceBuilder<D, H, T, C, S, M>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FromRef<T> for T
where T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> DartSafe for T

§

impl<T> TaskRetFutTrait for T
where T: Send,