Class 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 Detail

      • get_payment_secret

        @Nullable
        public byte[] 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. Note that for spontaneous payments most lightning nodes do not currently support MPP receives, thus you should generally never be providing a secret here for spontaneous payments. Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
      • set_payment_secret

        public void set_payment_secret​(@Nullable
                                       byte[] 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. Note that for spontaneous payments most lightning nodes do not currently support MPP receives, thus you should generally never be providing a secret here for spontaneous payments. Note that val (or a relevant inner pointer) may be NULL or all-0s to represent None
      • 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.
      • 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
      • 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 spontaneous payments, i.e. this should generally only be used for calls to [`ChannelManager::send_spontaneous_payment`]. [`ChannelManager::send_spontaneous_payment`]: super::channelmanager::ChannelManager::send_spontaneous_payment