Package org.ldk.structs
Class RecipientOnionFields
- java.lang.Object
-
- org.ldk.structs.RecipientOnionFields
-
public class RecipientOnionFields extends Object
Information which is provided, encrypted, to the payment recipient when sending HTLCs. This should generally be constructed with data communicated to us from the recipient (via a BOLT11 or BOLT12 invoice).
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description RecipientOnionFieldsclone()Creates a copy of the RecipientOnionFieldsTwoTuple_u64CVec_u8ZZ[]custom_tlvs()Gets the custom TLVs that will be sent or have been received.booleaneq(RecipientOnionFields b)Checks if two RecipientOnionFieldss contain equal inner contents.booleanequals(Object o)protected voidfinalize()Option_CVec_u8ZZget_payment_metadata()The payment metadata serves a similar purpose as [`Self::payment_secret`] but is of arbitrary length.Option_ThirtyTwoBytesZget_payment_secret()The [`PaymentSecret`] is an arbitrary 32 bytes provided by the recipient for us to repeat in the onion.static Result_RecipientOnionFieldsDecodeErrorZread(byte[] ser)Read a RecipientOnionFields from a byte array, created by RecipientOnionFields_writestatic RecipientOnionFieldssecret_only(byte[] payment_secret)Creates a [`RecipientOnionFields`] from only a [`PaymentSecret`].voidset_payment_metadata(Option_CVec_u8ZZ val)The payment metadata serves a similar purpose as [`Self::payment_secret`] but is of arbitrary length.voidset_payment_secret(Option_ThirtyTwoBytesZ val)The [`PaymentSecret`] is an arbitrary 32 bytes provided by the recipient for us to repeat in the onion.static RecipientOnionFieldsspontaneous_empty()Creates a new [`RecipientOnionFields`] with no fields.Result_RecipientOnionFieldsNoneZwith_custom_tlvs(TwoTuple_u64CVec_u8ZZ[] custom_tlvs)Creates a new [`RecipientOnionFields`] from an existing one, adding custom TLVs.byte[]write()Serialize the RecipientOnionFields object into a byte array which can be read by RecipientOnionFields_read
-
-
-
Method Detail
-
finalize
protected void finalize() throws Throwable
-
get_payment_secret
public Option_ThirtyTwoBytesZ get_payment_secret()
The [`PaymentSecret`] is an arbitrary 32 bytes provided by the recipient for us to repeat in the onion. It is unrelated to `payment_hash` (or [`PaymentPreimage`]) and exists to authenticate the sender to the recipient and prevent payment-probing (deanonymization) attacks. If you do not have one, the [`Route`] you pay over must not contain multiple paths as multi-path payments require a recipient-provided secret. Some implementations may reject spontaneous payments with payment secrets, so you may only want to provide a secret for a spontaneous payment if MPP is needed and you know your recipient will not reject it.
-
set_payment_secret
public void set_payment_secret(Option_ThirtyTwoBytesZ val)
The [`PaymentSecret`] is an arbitrary 32 bytes provided by the recipient for us to repeat in the onion. It is unrelated to `payment_hash` (or [`PaymentPreimage`]) and exists to authenticate the sender to the recipient and prevent payment-probing (deanonymization) attacks. If you do not have one, the [`Route`] you pay over must not contain multiple paths as multi-path payments require a recipient-provided secret. Some implementations may reject spontaneous payments with payment secrets, so you may only want to provide a secret for a spontaneous payment if MPP is needed and you know your recipient will not reject it.
-
get_payment_metadata
public Option_CVec_u8ZZ get_payment_metadata()
The payment metadata serves a similar purpose as [`Self::payment_secret`] but is of arbitrary length. This gives recipients substantially more flexibility to receive additional data. In LDK, while the [`Self::payment_secret`] is fixed based on an internal authentication scheme to authenticate received payments against expected payments and invoices, this field is not used in LDK for received payments, and can be used to store arbitrary data in invoices which will be received with the payment. Note that this field was added to the lightning specification more recently than [`Self::payment_secret`] and while nearly all lightning senders support secrets, metadata may not be supported as universally. Returns a copy of the field.
-
set_payment_metadata
public void set_payment_metadata(Option_CVec_u8ZZ val)
The payment metadata serves a similar purpose as [`Self::payment_secret`] but is of arbitrary length. This gives recipients substantially more flexibility to receive additional data. In LDK, while the [`Self::payment_secret`] is fixed based on an internal authentication scheme to authenticate received payments against expected payments and invoices, this field is not used in LDK for received payments, and can be used to store arbitrary data in invoices which will be received with the payment. Note that this field was added to the lightning specification more recently than [`Self::payment_secret`] and while nearly all lightning senders support secrets, metadata may not be supported as universally.
-
clone
public RecipientOnionFields clone()
Creates a copy of the RecipientOnionFields
-
eq
public boolean eq(RecipientOnionFields b)
Checks if two RecipientOnionFieldss contain equal inner contents. This ignores pointers and is_owned flags and looks at the values in fields. Two objects with NULL inner values will be considered "equal" here.
-
write
public byte[] write()
Serialize the RecipientOnionFields object into a byte array which can be read by RecipientOnionFields_read
-
read
public static Result_RecipientOnionFieldsDecodeErrorZ read(byte[] ser)
Read a RecipientOnionFields from a byte array, created by RecipientOnionFields_write
-
secret_only
public static RecipientOnionFields secret_only(byte[] payment_secret)
Creates a [`RecipientOnionFields`] from only a [`PaymentSecret`]. This is the most common set of onion fields for today's BOLT11 invoices - most nodes require a [`PaymentSecret`] but do not require or provide any further data.
-
spontaneous_empty
public static RecipientOnionFields spontaneous_empty()
Creates a new [`RecipientOnionFields`] with no fields. This generally does not create payable HTLCs except for single-path spontaneous payments, i.e. this should generally only be used for calls to [`ChannelManager::send_spontaneous_payment`]. If you are sending a spontaneous MPP this will not work as all MPP require payment secrets; you may instead want to use [`RecipientOnionFields::secret_only`]. [`ChannelManager::send_spontaneous_payment`]: super::channelmanager::ChannelManager::send_spontaneous_payment [`RecipientOnionFields::secret_only`]: RecipientOnionFields::secret_only
-
with_custom_tlvs
public Result_RecipientOnionFieldsNoneZ with_custom_tlvs(TwoTuple_u64CVec_u8ZZ[] custom_tlvs)
Creates a new [`RecipientOnionFields`] from an existing one, adding custom TLVs. Each TLV is provided as a `(u64, Vec)` for the type number and serialized value respectively. TLV type numbers must be unique and within the range reserved for custom types, i.e. >= 2^16, otherwise this method will return `Err(())`. This method will also error for types in the experimental range which have been standardized within the protocol, which only includes 5482373484 (keysend) for now. See [`Self::custom_tlvs`] for more info.
-
custom_tlvs
public TwoTuple_u64CVec_u8ZZ[] custom_tlvs()
Gets the custom TLVs that will be sent or have been received. Custom TLVs allow sending extra application-specific data with a payment. They provide additional flexibility on top of payment metadata, as while other implementations may require `payment_metadata` to reflect metadata provided in an invoice, custom TLVs do not have this restriction. Note that if this field is non-empty, it will contain strictly increasing TLVs, each represented by a `(u64, Vec)` for its type number and serialized value respectively. This is validated when setting this field using [`Self::with_custom_tlvs`].
-
-