@@ -101,6 +101,17 @@ sealed class OnionPaymentPayloadTlv : Tlv {
101101 }
102102 }
103103
104+ /* * Id of the next node. */
105+ data class OutgoingNodeId (val nodeId : PublicKey ) : OnionPaymentPayloadTlv() {
106+ override val tag: Long get() = OutgoingNodeId .tag
107+ override fun write (out : Output ) = LightningCodecs .writeBytes(nodeId.value, out )
108+
109+ companion object : TlvValueReader <OutgoingNodeId > {
110+ const val tag: Long = 14
111+ override fun read (input : Input ): OutgoingNodeId = OutgoingNodeId (PublicKey (LightningCodecs .bytes(input, 33 )))
112+ }
113+ }
114+
104115 /* *
105116 * When payment metadata is included in a Bolt 9 invoice, we should send it as-is to the recipient.
106117 * This lets recipients generate invoices without having to store anything on their side until the invoice is paid.
@@ -128,6 +139,20 @@ sealed class OnionPaymentPayloadTlv : Tlv {
128139 }
129140 }
130141
142+ /* * An encrypted trampoline onion packet. */
143+ data class TrampolineOnion (val packet : OnionRoutingPacket ) : OnionPaymentPayloadTlv() {
144+ override val tag: Long get() = TrampolineOnion .tag
145+ override fun write (out : Output ) = OnionRoutingPacketSerializer (packet.payload.size()).write(packet, out )
146+
147+ companion object : TlvValueReader <TrampolineOnion > {
148+ const val tag: Long = 20
149+ override fun read (input : Input ): TrampolineOnion {
150+ val payloadLength = input.availableBytes - 66 // 1 byte version + 33 bytes public key + 32 bytes HMAC
151+ return TrampolineOnion (OnionRoutingPacketSerializer (payloadLength).read(input))
152+ }
153+ }
154+ }
155+
131156 /* *
132157 * Invoice feature bits. Only included for intermediate trampoline nodes when they should convert to a legacy payment
133158 * because the final recipient doesn't support trampoline.
@@ -142,17 +167,6 @@ sealed class OnionPaymentPayloadTlv : Tlv {
142167 }
143168 }
144169
145- /* * Id of the next node. */
146- data class OutgoingNodeId (val nodeId : PublicKey ) : OnionPaymentPayloadTlv() {
147- override val tag: Long get() = OutgoingNodeId .tag
148- override fun write (out : Output ) = LightningCodecs .writeBytes(nodeId.value, out )
149-
150- companion object : TlvValueReader <OutgoingNodeId > {
151- const val tag: Long = 66098
152- override fun read (input : Input ): OutgoingNodeId = OutgoingNodeId (PublicKey (LightningCodecs .bytes(input, 33 )))
153- }
154- }
155-
156170 /* *
157171 * Invoice routing hints. Only included for intermediate trampoline nodes when they should convert to a legacy payment
158172 * because the final recipient doesn't support trampoline.
@@ -194,20 +208,6 @@ sealed class OnionPaymentPayloadTlv : Tlv {
194208 }
195209 }
196210
197- /* * An encrypted trampoline onion packet. */
198- data class TrampolineOnion (val packet : OnionRoutingPacket ) : OnionPaymentPayloadTlv() {
199- override val tag: Long get() = TrampolineOnion .tag
200- override fun write (out : Output ) = OnionRoutingPacketSerializer (packet.payload.size()).write(packet, out )
201-
202- companion object : TlvValueReader <TrampolineOnion > {
203- const val tag: Long = 66100
204- override fun read (input : Input ): TrampolineOnion {
205- val payloadLength = input.availableBytes - 66 // 1 byte version + 33 bytes public key + 32 bytes HMAC
206- return TrampolineOnion (OnionRoutingPacketSerializer (payloadLength).read(input))
207- }
208- }
209- }
210-
211211 /* * Blinded paths to relay the payment to */
212212 data class OutgoingBlindedPaths (val paths : List <Bolt12Invoice .Companion .PaymentBlindedContactInfo >) : OnionPaymentPayloadTlv() {
213213 override val tag: Long get() = OutgoingBlindedPaths .tag
@@ -252,15 +252,15 @@ object PaymentOnion {
252252 OnionPaymentPayloadTlv .AmountToForward .tag to OnionPaymentPayloadTlv .AmountToForward .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
253253 OnionPaymentPayloadTlv .OutgoingCltv .tag to OnionPaymentPayloadTlv .OutgoingCltv .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
254254 OnionPaymentPayloadTlv .OutgoingChannelId .tag to OnionPaymentPayloadTlv .OutgoingChannelId .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
255+ OnionPaymentPayloadTlv .OutgoingNodeId .tag to OnionPaymentPayloadTlv .OutgoingNodeId .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
255256 OnionPaymentPayloadTlv .PaymentData .tag to OnionPaymentPayloadTlv .PaymentData .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
256257 OnionPaymentPayloadTlv .EncryptedRecipientData .tag to OnionPaymentPayloadTlv .EncryptedRecipientData .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
257258 OnionPaymentPayloadTlv .BlindingPoint .tag to OnionPaymentPayloadTlv .BlindingPoint .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
258259 OnionPaymentPayloadTlv .PaymentMetadata .tag to OnionPaymentPayloadTlv .PaymentMetadata .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
259260 OnionPaymentPayloadTlv .TotalAmount .tag to OnionPaymentPayloadTlv .TotalAmount .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
261+ OnionPaymentPayloadTlv .TrampolineOnion .tag to OnionPaymentPayloadTlv .TrampolineOnion .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
260262 OnionPaymentPayloadTlv .InvoiceFeatures .tag to OnionPaymentPayloadTlv .InvoiceFeatures .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
261- OnionPaymentPayloadTlv .OutgoingNodeId .tag to OnionPaymentPayloadTlv .OutgoingNodeId .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
262263 OnionPaymentPayloadTlv .InvoiceRoutingInfo .tag to OnionPaymentPayloadTlv .InvoiceRoutingInfo .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
263- OnionPaymentPayloadTlv .TrampolineOnion .tag to OnionPaymentPayloadTlv .TrampolineOnion .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
264264 OnionPaymentPayloadTlv .OutgoingBlindedPaths .tag to OnionPaymentPayloadTlv .OutgoingBlindedPaths .Companion as TlvValueReader <OnionPaymentPayloadTlv >,
265265 )
266266 )
0 commit comments