impl Display for SocketAddress
[rust-lightning] / lightning / src / ln / msgs.rs
1 // This file is Copyright its original authors, visible in version control
2 // history.
3 //
4 // This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
5 // or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
6 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
7 // You may not use this file except in accordance with one or both of these
8 // licenses.
9
10 //! Wire messages, traits representing wire message handlers, and a few error types live here.
11 //!
12 //! For a normal node you probably don't need to use anything here, however, if you wish to split a
13 //! node into an internet-facing route/message socket handling daemon and a separate daemon (or
14 //! server entirely) which handles only channel-related messages you may wish to implement
15 //! [`ChannelMessageHandler`] yourself and use it to re-serialize messages and pass them across
16 //! daemons/servers.
17 //!
18 //! Note that if you go with such an architecture (instead of passing raw socket events to a
19 //! non-internet-facing system) you trust the frontend internet-facing system to not lie about the
20 //! source `node_id` of the message, however this does allow you to significantly reduce bandwidth
21 //! between the systems as routing messages can represent a significant chunk of bandwidth usage
22 //! (especially for non-channel-publicly-announcing nodes). As an alternate design which avoids
23 //! this issue, if you have sufficient bidirectional bandwidth between your systems, you may send
24 //! raw socket events into your non-internet-facing system and then send routing events back to
25 //! track the network on the less-secure system.
26
27 use bitcoin::blockdata::constants::ChainHash;
28 use bitcoin::secp256k1::PublicKey;
29 use bitcoin::secp256k1::ecdsa::Signature;
30 use bitcoin::{secp256k1, Witness};
31 use bitcoin::blockdata::script::Script;
32 use bitcoin::hash_types::Txid;
33
34 use crate::blinded_path::payment::ReceiveTlvs;
35 use crate::ln::{ChannelId, PaymentPreimage, PaymentHash, PaymentSecret};
36 use crate::ln::features::{ChannelFeatures, ChannelTypeFeatures, InitFeatures, NodeFeatures};
37 use crate::ln::onion_utils;
38 use crate::onion_message;
39 use crate::sign::{NodeSigner, Recipient};
40
41 use crate::prelude::*;
42 #[cfg(feature = "std")]
43 use core::convert::TryFrom;
44 use core::fmt;
45 use core::fmt::Debug;
46 use core::ops::Deref;
47 #[cfg(feature = "std")]
48 use core::str::FromStr;
49 #[cfg(feature = "std")]
50 use std::net::SocketAddr;
51 use core::fmt::Display;
52 use crate::io::{self, Cursor, Read};
53 use crate::io_extras::read_to_end;
54
55 use crate::events::MessageSendEventsProvider;
56 use crate::util::chacha20poly1305rfc::ChaChaPolyReadAdapter;
57 use crate::util::logger;
58 use crate::util::ser::{LengthReadable, LengthReadableArgs, Readable, ReadableArgs, Writeable, Writer, WithoutLength, FixedLengthReader, HighZeroBytesDroppedBigSize, Hostname, TransactionU16LenLimited, BigSize};
59 use crate::util::base32;
60
61 use crate::routing::gossip::{NodeAlias, NodeId};
62
63 /// 21 million * 10^8 * 1000
64 pub(crate) const MAX_VALUE_MSAT: u64 = 21_000_000_0000_0000_000;
65
66 #[cfg(taproot)]
67 /// A partial signature that also contains the Musig2 nonce its signer used
68 #[derive(Clone, Debug, PartialEq, Eq)]
69 pub struct PartialSignatureWithNonce(pub musig2::types::PartialSignature, pub musig2::types::PublicNonce);
70
71 /// An error in decoding a message or struct.
72 #[derive(Clone, Debug, PartialEq, Eq)]
73 pub enum DecodeError {
74         /// A version byte specified something we don't know how to handle.
75         ///
76         /// Includes unknown realm byte in an onion hop data packet.
77         UnknownVersion,
78         /// Unknown feature mandating we fail to parse message (e.g., TLV with an even, unknown type)
79         UnknownRequiredFeature,
80         /// Value was invalid.
81         ///
82         /// For example, a byte which was supposed to be a bool was something other than a 0
83         /// or 1, a public key/private key/signature was invalid, text wasn't UTF-8, TLV was
84         /// syntactically incorrect, etc.
85         InvalidValue,
86         /// The buffer to be read was too short.
87         ShortRead,
88         /// A length descriptor in the packet didn't describe the later data correctly.
89         BadLengthDescriptor,
90         /// Error from [`std::io`].
91         Io(io::ErrorKind),
92         /// The message included zlib-compressed values, which we don't support.
93         UnsupportedCompression,
94 }
95
96 /// An [`init`] message to be sent to or received from a peer.
97 ///
98 /// [`init`]: https://github.com/lightning/bolts/blob/master/01-messaging.md#the-init-message
99 #[derive(Clone, Debug, PartialEq, Eq)]
100 pub struct Init {
101         /// The relevant features which the sender supports.
102         pub features: InitFeatures,
103         /// Indicates chains the sender is interested in.
104         ///
105         /// If there are no common chains, the connection will be closed.
106         pub networks: Option<Vec<ChainHash>>,
107         /// The receipient's network address.
108         ///
109         /// This adds the option to report a remote IP address back to a connecting peer using the init
110         /// message. A node can decide to use that information to discover a potential update to its
111         /// public IPv4 address (NAT) and use that for a [`NodeAnnouncement`] update message containing
112         /// the new address.
113         pub remote_network_address: Option<SocketAddress>,
114 }
115
116 /// An [`error`] message to be sent to or received from a peer.
117 ///
118 /// [`error`]: https://github.com/lightning/bolts/blob/master/01-messaging.md#the-error-and-warning-messages
119 #[derive(Clone, Debug, PartialEq, Eq)]
120 pub struct ErrorMessage {
121         /// The channel ID involved in the error.
122         ///
123         /// All-0s indicates a general error unrelated to a specific channel, after which all channels
124         /// with the sending peer should be closed.
125         pub channel_id: ChannelId,
126         /// A possibly human-readable error description.
127         ///
128         /// The string should be sanitized before it is used (e.g., emitted to logs or printed to
129         /// `stdout`). Otherwise, a well crafted error message may trigger a security vulnerability in
130         /// the terminal emulator or the logging subsystem.
131         pub data: String,
132 }
133
134 /// A [`warning`] message to be sent to or received from a peer.
135 ///
136 /// [`warning`]: https://github.com/lightning/bolts/blob/master/01-messaging.md#the-error-and-warning-messages
137 #[derive(Clone, Debug, PartialEq, Eq)]
138 pub struct WarningMessage {
139         /// The channel ID involved in the warning.
140         ///
141         /// All-0s indicates a warning unrelated to a specific channel.
142         pub channel_id: ChannelId,
143         /// A possibly human-readable warning description.
144         ///
145         /// The string should be sanitized before it is used (e.g. emitted to logs or printed to
146         /// stdout). Otherwise, a well crafted error message may trigger a security vulnerability in
147         /// the terminal emulator or the logging subsystem.
148         pub data: String,
149 }
150
151 /// A [`ping`] message to be sent to or received from a peer.
152 ///
153 /// [`ping`]: https://github.com/lightning/bolts/blob/master/01-messaging.md#the-ping-and-pong-messages
154 #[derive(Clone, Debug, PartialEq, Eq)]
155 pub struct Ping {
156         /// The desired response length.
157         pub ponglen: u16,
158         /// The ping packet size.
159         ///
160         /// This field is not sent on the wire. byteslen zeros are sent.
161         pub byteslen: u16,
162 }
163
164 /// A [`pong`] message to be sent to or received from a peer.
165 ///
166 /// [`pong`]: https://github.com/lightning/bolts/blob/master/01-messaging.md#the-ping-and-pong-messages
167 #[derive(Clone, Debug, PartialEq, Eq)]
168 pub struct Pong {
169         /// The pong packet size.
170         ///
171         /// This field is not sent on the wire. byteslen zeros are sent.
172         pub byteslen: u16,
173 }
174
175 /// An [`open_channel`] message to be sent to or received from a peer.
176 ///
177 /// Used in V1 channel establishment
178 ///
179 /// [`open_channel`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#the-open_channel-message
180 #[derive(Clone, Debug, PartialEq, Eq)]
181 pub struct OpenChannel {
182         /// The genesis hash of the blockchain where the channel is to be opened
183         pub chain_hash: ChainHash,
184         /// A temporary channel ID, until the funding outpoint is announced
185         pub temporary_channel_id: ChannelId,
186         /// The channel value
187         pub funding_satoshis: u64,
188         /// The amount to push to the counterparty as part of the open, in milli-satoshi
189         pub push_msat: u64,
190         /// The threshold below which outputs on transactions broadcast by sender will be omitted
191         pub dust_limit_satoshis: u64,
192         /// The maximum inbound HTLC value in flight towards sender, in milli-satoshi
193         pub max_htlc_value_in_flight_msat: u64,
194         /// The minimum value unencumbered by HTLCs for the counterparty to keep in the channel
195         pub channel_reserve_satoshis: u64,
196         /// The minimum HTLC size incoming to sender, in milli-satoshi
197         pub htlc_minimum_msat: u64,
198         /// The feerate per 1000-weight of sender generated transactions, until updated by
199         /// [`UpdateFee`]
200         pub feerate_per_kw: u32,
201         /// The number of blocks which the counterparty will have to wait to claim on-chain funds if
202         /// they broadcast a commitment transaction
203         pub to_self_delay: u16,
204         /// The maximum number of inbound HTLCs towards sender
205         pub max_accepted_htlcs: u16,
206         /// The sender's key controlling the funding transaction
207         pub funding_pubkey: PublicKey,
208         /// Used to derive a revocation key for transactions broadcast by counterparty
209         pub revocation_basepoint: PublicKey,
210         /// A payment key to sender for transactions broadcast by counterparty
211         pub payment_point: PublicKey,
212         /// Used to derive a payment key to sender for transactions broadcast by sender
213         pub delayed_payment_basepoint: PublicKey,
214         /// Used to derive an HTLC payment key to sender
215         pub htlc_basepoint: PublicKey,
216         /// The first to-be-broadcast-by-sender transaction's per commitment point
217         pub first_per_commitment_point: PublicKey,
218         /// The channel flags to be used
219         pub channel_flags: u8,
220         /// A request to pre-set the to-sender output's `scriptPubkey` for when we collaboratively close
221         pub shutdown_scriptpubkey: Option<Script>,
222         /// The channel type that this channel will represent
223         ///
224         /// If this is `None`, we derive the channel type from the intersection of our
225         /// feature bits with our counterparty's feature bits from the [`Init`] message.
226         pub channel_type: Option<ChannelTypeFeatures>,
227 }
228
229 /// An open_channel2 message to be sent by or received from the channel initiator.
230 ///
231 /// Used in V2 channel establishment
232 ///
233 // TODO(dual_funding): Add spec link for `open_channel2`.
234 #[derive(Clone, Debug, PartialEq, Eq)]
235 pub struct OpenChannelV2 {
236         /// The genesis hash of the blockchain where the channel is to be opened
237         pub chain_hash: ChainHash,
238         /// A temporary channel ID derived using a zeroed out value for the channel acceptor's revocation basepoint
239         pub temporary_channel_id: ChannelId,
240         /// The feerate for the funding transaction set by the channel initiator
241         pub funding_feerate_sat_per_1000_weight: u32,
242         /// The feerate for the commitment transaction set by the channel initiator
243         pub commitment_feerate_sat_per_1000_weight: u32,
244         /// Part of the channel value contributed by the channel initiator
245         pub funding_satoshis: u64,
246         /// The threshold below which outputs on transactions broadcast by the channel initiator will be
247         /// omitted
248         pub dust_limit_satoshis: u64,
249         /// The maximum inbound HTLC value in flight towards channel initiator, in milli-satoshi
250         pub max_htlc_value_in_flight_msat: u64,
251         /// The minimum HTLC size incoming to channel initiator, in milli-satoshi
252         pub htlc_minimum_msat: u64,
253         /// The number of blocks which the counterparty will have to wait to claim on-chain funds if they
254         /// broadcast a commitment transaction
255         pub to_self_delay: u16,
256         /// The maximum number of inbound HTLCs towards channel initiator
257         pub max_accepted_htlcs: u16,
258         /// The locktime for the funding transaction
259         pub locktime: u32,
260         /// The channel initiator's key controlling the funding transaction
261         pub funding_pubkey: PublicKey,
262         /// Used to derive a revocation key for transactions broadcast by counterparty
263         pub revocation_basepoint: PublicKey,
264         /// A payment key to channel initiator for transactions broadcast by counterparty
265         pub payment_basepoint: PublicKey,
266         /// Used to derive a payment key to channel initiator for transactions broadcast by channel
267         /// initiator
268         pub delayed_payment_basepoint: PublicKey,
269         /// Used to derive an HTLC payment key to channel initiator
270         pub htlc_basepoint: PublicKey,
271         /// The first to-be-broadcast-by-channel-initiator transaction's per commitment point
272         pub first_per_commitment_point: PublicKey,
273         /// The second to-be-broadcast-by-channel-initiator transaction's per commitment point
274         pub second_per_commitment_point: PublicKey,
275         /// Channel flags
276         pub channel_flags: u8,
277         /// Optionally, a request to pre-set the to-channel-initiator output's scriptPubkey for when we
278         /// collaboratively close
279         pub shutdown_scriptpubkey: Option<Script>,
280         /// The channel type that this channel will represent. If none is set, we derive the channel
281         /// type from the intersection of our feature bits with our counterparty's feature bits from
282         /// the Init message.
283         pub channel_type: Option<ChannelTypeFeatures>,
284         /// Optionally, a requirement that only confirmed inputs can be added
285         pub require_confirmed_inputs: Option<()>,
286 }
287
288 /// An [`accept_channel`] message to be sent to or received from a peer.
289 ///
290 /// Used in V1 channel establishment
291 ///
292 /// [`accept_channel`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#the-accept_channel-message
293 #[derive(Clone, Debug, PartialEq, Eq)]
294 pub struct AcceptChannel {
295         /// A temporary channel ID, until the funding outpoint is announced
296         pub temporary_channel_id: ChannelId,
297         /// The threshold below which outputs on transactions broadcast by sender will be omitted
298         pub dust_limit_satoshis: u64,
299         /// The maximum inbound HTLC value in flight towards sender, in milli-satoshi
300         pub max_htlc_value_in_flight_msat: u64,
301         /// The minimum value unencumbered by HTLCs for the counterparty to keep in the channel
302         pub channel_reserve_satoshis: u64,
303         /// The minimum HTLC size incoming to sender, in milli-satoshi
304         pub htlc_minimum_msat: u64,
305         /// Minimum depth of the funding transaction before the channel is considered open
306         pub minimum_depth: u32,
307         /// The number of blocks which the counterparty will have to wait to claim on-chain funds if they broadcast a commitment transaction
308         pub to_self_delay: u16,
309         /// The maximum number of inbound HTLCs towards sender
310         pub max_accepted_htlcs: u16,
311         /// The sender's key controlling the funding transaction
312         pub funding_pubkey: PublicKey,
313         /// Used to derive a revocation key for transactions broadcast by counterparty
314         pub revocation_basepoint: PublicKey,
315         /// A payment key to sender for transactions broadcast by counterparty
316         pub payment_point: PublicKey,
317         /// Used to derive a payment key to sender for transactions broadcast by sender
318         pub delayed_payment_basepoint: PublicKey,
319         /// Used to derive an HTLC payment key to sender for transactions broadcast by counterparty
320         pub htlc_basepoint: PublicKey,
321         /// The first to-be-broadcast-by-sender transaction's per commitment point
322         pub first_per_commitment_point: PublicKey,
323         /// A request to pre-set the to-sender output's scriptPubkey for when we collaboratively close
324         pub shutdown_scriptpubkey: Option<Script>,
325         /// The channel type that this channel will represent.
326         ///
327         /// If this is `None`, we derive the channel type from the intersection of
328         /// our feature bits with our counterparty's feature bits from the [`Init`] message.
329         /// This is required to match the equivalent field in [`OpenChannel::channel_type`].
330         pub channel_type: Option<ChannelTypeFeatures>,
331         #[cfg(taproot)]
332         /// Next nonce the channel initiator should use to create a funding output signature against
333         pub next_local_nonce: Option<musig2::types::PublicNonce>,
334 }
335
336 /// An accept_channel2 message to be sent by or received from the channel accepter.
337 ///
338 /// Used in V2 channel establishment
339 ///
340 // TODO(dual_funding): Add spec link for `accept_channel2`.
341 #[derive(Clone, Debug, PartialEq, Eq)]
342 pub struct AcceptChannelV2 {
343         /// The same `temporary_channel_id` received from the initiator's `open_channel2` message.
344         pub temporary_channel_id: ChannelId,
345         /// Part of the channel value contributed by the channel acceptor
346         pub funding_satoshis: u64,
347         /// The threshold below which outputs on transactions broadcast by the channel acceptor will be
348         /// omitted
349         pub dust_limit_satoshis: u64,
350         /// The maximum inbound HTLC value in flight towards channel acceptor, in milli-satoshi
351         pub max_htlc_value_in_flight_msat: u64,
352         /// The minimum HTLC size incoming to channel acceptor, in milli-satoshi
353         pub htlc_minimum_msat: u64,
354         /// Minimum depth of the funding transaction before the channel is considered open
355         pub minimum_depth: u32,
356         /// The number of blocks which the counterparty will have to wait to claim on-chain funds if they
357         /// broadcast a commitment transaction
358         pub to_self_delay: u16,
359         /// The maximum number of inbound HTLCs towards channel acceptor
360         pub max_accepted_htlcs: u16,
361         /// The channel acceptor's key controlling the funding transaction
362         pub funding_pubkey: PublicKey,
363         /// Used to derive a revocation key for transactions broadcast by counterparty
364         pub revocation_basepoint: PublicKey,
365         /// A payment key to channel acceptor for transactions broadcast by counterparty
366         pub payment_basepoint: PublicKey,
367         /// Used to derive a payment key to channel acceptor for transactions broadcast by channel
368         /// acceptor
369         pub delayed_payment_basepoint: PublicKey,
370         /// Used to derive an HTLC payment key to channel acceptor for transactions broadcast by counterparty
371         pub htlc_basepoint: PublicKey,
372         /// The first to-be-broadcast-by-channel-acceptor transaction's per commitment point
373         pub first_per_commitment_point: PublicKey,
374         /// The second to-be-broadcast-by-channel-acceptor transaction's per commitment point
375         pub second_per_commitment_point: PublicKey,
376         /// Optionally, a request to pre-set the to-channel-acceptor output's scriptPubkey for when we
377         /// collaboratively close
378         pub shutdown_scriptpubkey: Option<Script>,
379         /// The channel type that this channel will represent. If none is set, we derive the channel
380         /// type from the intersection of our feature bits with our counterparty's feature bits from
381         /// the Init message.
382         ///
383         /// This is required to match the equivalent field in [`OpenChannelV2::channel_type`].
384         pub channel_type: Option<ChannelTypeFeatures>,
385         /// Optionally, a requirement that only confirmed inputs can be added
386         pub require_confirmed_inputs: Option<()>,
387 }
388
389 /// A [`funding_created`] message to be sent to or received from a peer.
390 ///
391 /// Used in V1 channel establishment
392 ///
393 /// [`funding_created`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#the-funding_created-message
394 #[derive(Clone, Debug, PartialEq, Eq)]
395 pub struct FundingCreated {
396         /// A temporary channel ID, until the funding is established
397         pub temporary_channel_id: ChannelId,
398         /// The funding transaction ID
399         pub funding_txid: Txid,
400         /// The specific output index funding this channel
401         pub funding_output_index: u16,
402         /// The signature of the channel initiator (funder) on the initial commitment transaction
403         pub signature: Signature,
404         #[cfg(taproot)]
405         /// The partial signature of the channel initiator (funder)
406         pub partial_signature_with_nonce: Option<PartialSignatureWithNonce>,
407         #[cfg(taproot)]
408         /// Next nonce the channel acceptor should use to finalize the funding output signature
409         pub next_local_nonce: Option<musig2::types::PublicNonce>
410 }
411
412 /// A [`funding_signed`] message to be sent to or received from a peer.
413 ///
414 /// Used in V1 channel establishment
415 ///
416 /// [`funding_signed`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#the-funding_signed-message
417 #[derive(Clone, Debug, PartialEq, Eq)]
418 pub struct FundingSigned {
419         /// The channel ID
420         pub channel_id: ChannelId,
421         /// The signature of the channel acceptor (fundee) on the initial commitment transaction
422         pub signature: Signature,
423         #[cfg(taproot)]
424         /// The partial signature of the channel acceptor (fundee)
425         pub partial_signature_with_nonce: Option<PartialSignatureWithNonce>,
426 }
427
428 /// A [`channel_ready`] message to be sent to or received from a peer.
429 ///
430 /// [`channel_ready`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#the-channel_ready-message
431 #[derive(Clone, Debug, PartialEq, Eq)]
432 pub struct ChannelReady {
433         /// The channel ID
434         pub channel_id: ChannelId,
435         /// The per-commitment point of the second commitment transaction
436         pub next_per_commitment_point: PublicKey,
437         /// If set, provides a `short_channel_id` alias for this channel.
438         ///
439         /// The sender will accept payments to be forwarded over this SCID and forward them to this
440         /// messages' recipient.
441         pub short_channel_id_alias: Option<u64>,
442 }
443
444 /// A tx_add_input message for adding an input during interactive transaction construction
445 ///
446 // TODO(dual_funding): Add spec link for `tx_add_input`.
447 #[derive(Clone, Debug, PartialEq, Eq)]
448 pub struct TxAddInput {
449         /// The channel ID
450         pub channel_id: ChannelId,
451         /// A randomly chosen unique identifier for this input, which is even for initiators and odd for
452         /// non-initiators.
453         pub serial_id: u64,
454         /// Serialized transaction that contains the output this input spends to verify that it is non
455         /// malleable.
456         pub prevtx: TransactionU16LenLimited,
457         /// The index of the output being spent
458         pub prevtx_out: u32,
459         /// The sequence number of this input
460         pub sequence: u32,
461 }
462
463 /// A tx_add_output message for adding an output during interactive transaction construction.
464 ///
465 // TODO(dual_funding): Add spec link for `tx_add_output`.
466 #[derive(Clone, Debug, PartialEq, Eq)]
467 pub struct TxAddOutput {
468         /// The channel ID
469         pub channel_id: ChannelId,
470         /// A randomly chosen unique identifier for this output, which is even for initiators and odd for
471         /// non-initiators.
472         pub serial_id: u64,
473         /// The satoshi value of the output
474         pub sats: u64,
475         /// The scriptPubKey for the output
476         pub script: Script,
477 }
478
479 /// A tx_remove_input message for removing an input during interactive transaction construction.
480 ///
481 // TODO(dual_funding): Add spec link for `tx_remove_input`.
482 #[derive(Clone, Debug, PartialEq, Eq)]
483 pub struct TxRemoveInput {
484         /// The channel ID
485         pub channel_id: ChannelId,
486         /// The serial ID of the input to be removed
487         pub serial_id: u64,
488 }
489
490 /// A tx_remove_output message for removing an output during interactive transaction construction.
491 ///
492 // TODO(dual_funding): Add spec link for `tx_remove_output`.
493 #[derive(Clone, Debug, PartialEq, Eq)]
494 pub struct TxRemoveOutput {
495         /// The channel ID
496         pub channel_id: ChannelId,
497         /// The serial ID of the output to be removed
498         pub serial_id: u64,
499 }
500
501 /// A tx_complete message signalling the conclusion of a peer's transaction contributions during
502 /// interactive transaction construction.
503 ///
504 // TODO(dual_funding): Add spec link for `tx_complete`.
505 #[derive(Clone, Debug, PartialEq, Eq)]
506 pub struct TxComplete {
507         /// The channel ID
508         pub channel_id: ChannelId,
509 }
510
511 /// A tx_signatures message containing the sender's signatures for a transaction constructed with
512 /// interactive transaction construction.
513 ///
514 // TODO(dual_funding): Add spec link for `tx_signatures`.
515 #[derive(Clone, Debug, PartialEq, Eq)]
516 pub struct TxSignatures {
517         /// The channel ID
518         pub channel_id: ChannelId,
519         /// The TXID
520         pub tx_hash: Txid,
521         /// The list of witnesses
522         pub witnesses: Vec<Witness>,
523 }
524
525 /// A tx_init_rbf message which initiates a replacement of the transaction after it's been
526 /// completed.
527 ///
528 // TODO(dual_funding): Add spec link for `tx_init_rbf`.
529 #[derive(Clone, Debug, PartialEq, Eq)]
530 pub struct TxInitRbf {
531         /// The channel ID
532         pub channel_id: ChannelId,
533         /// The locktime of the transaction
534         pub locktime: u32,
535         /// The feerate of the transaction
536         pub feerate_sat_per_1000_weight: u32,
537         /// The number of satoshis the sender will contribute to or, if negative, remove from
538         /// (e.g. splice-out) the funding output of the transaction
539         pub funding_output_contribution: Option<i64>,
540 }
541
542 /// A tx_ack_rbf message which acknowledges replacement of the transaction after it's been
543 /// completed.
544 ///
545 // TODO(dual_funding): Add spec link for `tx_ack_rbf`.
546 #[derive(Clone, Debug, PartialEq, Eq)]
547 pub struct TxAckRbf {
548         /// The channel ID
549         pub channel_id: ChannelId,
550         /// The number of satoshis the sender will contribute to or, if negative, remove from
551         /// (e.g. splice-out) the funding output of the transaction
552         pub funding_output_contribution: Option<i64>,
553 }
554
555 /// A tx_abort message which signals the cancellation of an in-progress transaction negotiation.
556 ///
557 // TODO(dual_funding): Add spec link for `tx_abort`.
558 #[derive(Clone, Debug, PartialEq, Eq)]
559 pub struct TxAbort {
560         /// The channel ID
561         pub channel_id: ChannelId,
562         /// Message data
563         pub data: Vec<u8>,
564 }
565
566 /// A [`shutdown`] message to be sent to or received from a peer.
567 ///
568 /// [`shutdown`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#closing-initiation-shutdown
569 #[derive(Clone, Debug, PartialEq, Eq)]
570 pub struct Shutdown {
571         /// The channel ID
572         pub channel_id: ChannelId,
573         /// The destination of this peer's funds on closing.
574         ///
575         /// Must be in one of these forms: P2PKH, P2SH, P2WPKH, P2WSH, P2TR.
576         pub scriptpubkey: Script,
577 }
578
579 /// The minimum and maximum fees which the sender is willing to place on the closing transaction.
580 ///
581 /// This is provided in [`ClosingSigned`] by both sides to indicate the fee range they are willing
582 /// to use.
583 #[derive(Clone, Debug, PartialEq, Eq)]
584 pub struct ClosingSignedFeeRange {
585         /// The minimum absolute fee, in satoshis, which the sender is willing to place on the closing
586         /// transaction.
587         pub min_fee_satoshis: u64,
588         /// The maximum absolute fee, in satoshis, which the sender is willing to place on the closing
589         /// transaction.
590         pub max_fee_satoshis: u64,
591 }
592
593 /// A [`closing_signed`] message to be sent to or received from a peer.
594 ///
595 /// [`closing_signed`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#closing-negotiation-closing_signed
596 #[derive(Clone, Debug, PartialEq, Eq)]
597 pub struct ClosingSigned {
598         /// The channel ID
599         pub channel_id: ChannelId,
600         /// The proposed total fee for the closing transaction
601         pub fee_satoshis: u64,
602         /// A signature on the closing transaction
603         pub signature: Signature,
604         /// The minimum and maximum fees which the sender is willing to accept, provided only by new
605         /// nodes.
606         pub fee_range: Option<ClosingSignedFeeRange>,
607 }
608
609 /// An [`update_add_htlc`] message to be sent to or received from a peer.
610 ///
611 /// [`update_add_htlc`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#adding-an-htlc-update_add_htlc
612 #[derive(Clone, Debug, PartialEq, Eq)]
613 pub struct UpdateAddHTLC {
614         /// The channel ID
615         pub channel_id: ChannelId,
616         /// The HTLC ID
617         pub htlc_id: u64,
618         /// The HTLC value in milli-satoshi
619         pub amount_msat: u64,
620         /// The payment hash, the pre-image of which controls HTLC redemption
621         pub payment_hash: PaymentHash,
622         /// The expiry height of the HTLC
623         pub cltv_expiry: u32,
624         /// The extra fee skimmed by the sender of this message. See
625         /// [`ChannelConfig::accept_underpaying_htlcs`].
626         ///
627         /// [`ChannelConfig::accept_underpaying_htlcs`]: crate::util::config::ChannelConfig::accept_underpaying_htlcs
628         pub skimmed_fee_msat: Option<u64>,
629         pub(crate) onion_routing_packet: OnionPacket,
630 }
631
632  /// An onion message to be sent to or received from a peer.
633  ///
634  // TODO: update with link to OM when they are merged into the BOLTs
635 #[derive(Clone, Debug, PartialEq, Eq)]
636 pub struct OnionMessage {
637         /// Used in decrypting the onion packet's payload.
638         pub blinding_point: PublicKey,
639         /// The full onion packet including hop data, pubkey, and hmac
640         pub onion_routing_packet: onion_message::Packet,
641 }
642
643 /// An [`update_fulfill_htlc`] message to be sent to or received from a peer.
644 ///
645 /// [`update_fulfill_htlc`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#removing-an-htlc-update_fulfill_htlc-update_fail_htlc-and-update_fail_malformed_htlc
646 #[derive(Clone, Debug, PartialEq, Eq)]
647 pub struct UpdateFulfillHTLC {
648         /// The channel ID
649         pub channel_id: ChannelId,
650         /// The HTLC ID
651         pub htlc_id: u64,
652         /// The pre-image of the payment hash, allowing HTLC redemption
653         pub payment_preimage: PaymentPreimage,
654 }
655
656 /// An [`update_fail_htlc`] message to be sent to or received from a peer.
657 ///
658 /// [`update_fail_htlc`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#removing-an-htlc-update_fulfill_htlc-update_fail_htlc-and-update_fail_malformed_htlc
659 #[derive(Clone, Debug, PartialEq, Eq)]
660 pub struct UpdateFailHTLC {
661         /// The channel ID
662         pub channel_id: ChannelId,
663         /// The HTLC ID
664         pub htlc_id: u64,
665         pub(crate) reason: OnionErrorPacket,
666 }
667
668 /// An [`update_fail_malformed_htlc`] message to be sent to or received from a peer.
669 ///
670 /// [`update_fail_malformed_htlc`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#removing-an-htlc-update_fulfill_htlc-update_fail_htlc-and-update_fail_malformed_htlc
671 #[derive(Clone, Debug, PartialEq, Eq)]
672 pub struct UpdateFailMalformedHTLC {
673         /// The channel ID
674         pub channel_id: ChannelId,
675         /// The HTLC ID
676         pub htlc_id: u64,
677         pub(crate) sha256_of_onion: [u8; 32],
678         /// The failure code
679         pub failure_code: u16,
680 }
681
682 /// A [`commitment_signed`] message to be sent to or received from a peer.
683 ///
684 /// [`commitment_signed`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#committing-updates-so-far-commitment_signed
685 #[derive(Clone, Debug, PartialEq, Eq)]
686 pub struct CommitmentSigned {
687         /// The channel ID
688         pub channel_id: ChannelId,
689         /// A signature on the commitment transaction
690         pub signature: Signature,
691         /// Signatures on the HTLC transactions
692         pub htlc_signatures: Vec<Signature>,
693         #[cfg(taproot)]
694         /// The partial Taproot signature on the commitment transaction
695         pub partial_signature_with_nonce: Option<PartialSignatureWithNonce>,
696 }
697
698 /// A [`revoke_and_ack`] message to be sent to or received from a peer.
699 ///
700 /// [`revoke_and_ack`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#completing-the-transition-to-the-updated-state-revoke_and_ack
701 #[derive(Clone, Debug, PartialEq, Eq)]
702 pub struct RevokeAndACK {
703         /// The channel ID
704         pub channel_id: ChannelId,
705         /// The secret corresponding to the per-commitment point
706         pub per_commitment_secret: [u8; 32],
707         /// The next sender-broadcast commitment transaction's per-commitment point
708         pub next_per_commitment_point: PublicKey,
709         #[cfg(taproot)]
710         /// Musig nonce the recipient should use in their next commitment signature message
711         pub next_local_nonce: Option<musig2::types::PublicNonce>
712 }
713
714 /// An [`update_fee`] message to be sent to or received from a peer
715 ///
716 /// [`update_fee`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#updating-fees-update_fee
717 #[derive(Clone, Debug, PartialEq, Eq)]
718 pub struct UpdateFee {
719         /// The channel ID
720         pub channel_id: ChannelId,
721         /// Fee rate per 1000-weight of the transaction
722         pub feerate_per_kw: u32,
723 }
724
725 /// A [`channel_reestablish`] message to be sent to or received from a peer.
726 ///
727 /// [`channel_reestablish`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#message-retransmission
728 #[derive(Clone, Debug, PartialEq, Eq)]
729 pub struct ChannelReestablish {
730         /// The channel ID
731         pub channel_id: ChannelId,
732         /// The next commitment number for the sender
733         pub next_local_commitment_number: u64,
734         /// The next commitment number for the recipient
735         pub next_remote_commitment_number: u64,
736         /// Proof that the sender knows the per-commitment secret of a specific commitment transaction
737         /// belonging to the recipient
738         pub your_last_per_commitment_secret: [u8; 32],
739         /// The sender's per-commitment point for their current commitment transaction
740         pub my_current_per_commitment_point: PublicKey,
741         /// The next funding transaction ID
742         pub next_funding_txid: Option<Txid>,
743 }
744
745 /// An [`announcement_signatures`] message to be sent to or received from a peer.
746 ///
747 /// [`announcement_signatures`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-announcement_signatures-message
748 #[derive(Clone, Debug, PartialEq, Eq)]
749 pub struct AnnouncementSignatures {
750         /// The channel ID
751         pub channel_id: ChannelId,
752         /// The short channel ID
753         pub short_channel_id: u64,
754         /// A signature by the node key
755         pub node_signature: Signature,
756         /// A signature by the funding key
757         pub bitcoin_signature: Signature,
758 }
759
760 /// An address which can be used to connect to a remote peer.
761 #[derive(Clone, Debug, PartialEq, Eq)]
762 pub enum SocketAddress {
763         /// An IPv4 address and port on which the peer is listening.
764         TcpIpV4 {
765                 /// The 4-byte IPv4 address
766                 addr: [u8; 4],
767                 /// The port on which the node is listening
768                 port: u16,
769         },
770         /// An IPv6 address and port on which the peer is listening.
771         TcpIpV6 {
772                 /// The 16-byte IPv6 address
773                 addr: [u8; 16],
774                 /// The port on which the node is listening
775                 port: u16,
776         },
777         /// An old-style Tor onion address/port on which the peer is listening.
778         ///
779         /// This field is deprecated and the Tor network generally no longer supports V2 Onion
780         /// addresses. Thus, the details are not parsed here.
781         OnionV2([u8; 12]),
782         /// A new-style Tor onion address/port on which the peer is listening.
783         ///
784         /// To create the human-readable "hostname", concatenate the ED25519 pubkey, checksum, and version,
785         /// wrap as base32 and append ".onion".
786         OnionV3 {
787                 /// The ed25519 long-term public key of the peer
788                 ed25519_pubkey: [u8; 32],
789                 /// The checksum of the pubkey and version, as included in the onion address
790                 checksum: u16,
791                 /// The version byte, as defined by the Tor Onion v3 spec.
792                 version: u8,
793                 /// The port on which the node is listening
794                 port: u16,
795         },
796         /// A hostname/port on which the peer is listening.
797         Hostname {
798                 /// The hostname on which the node is listening.
799                 hostname: Hostname,
800                 /// The port on which the node is listening.
801                 port: u16,
802         },
803 }
804 impl SocketAddress {
805         /// Gets the ID of this address type. Addresses in [`NodeAnnouncement`] messages should be sorted
806         /// by this.
807         pub(crate) fn get_id(&self) -> u8 {
808                 match self {
809                         &SocketAddress::TcpIpV4 {..} => { 1 },
810                         &SocketAddress::TcpIpV6 {..} => { 2 },
811                         &SocketAddress::OnionV2(_) => { 3 },
812                         &SocketAddress::OnionV3 {..} => { 4 },
813                         &SocketAddress::Hostname {..} => { 5 },
814                 }
815         }
816
817         /// Strict byte-length of address descriptor, 1-byte type not recorded
818         fn len(&self) -> u16 {
819                 match self {
820                         &SocketAddress::TcpIpV4 { .. } => { 6 },
821                         &SocketAddress::TcpIpV6 { .. } => { 18 },
822                         &SocketAddress::OnionV2(_) => { 12 },
823                         &SocketAddress::OnionV3 { .. } => { 37 },
824                         // Consists of 1-byte hostname length, hostname bytes, and 2-byte port.
825                         &SocketAddress::Hostname { ref hostname, .. } => { u16::from(hostname.len()) + 3 },
826                 }
827         }
828
829         /// The maximum length of any address descriptor, not including the 1-byte type.
830         /// This maximum length is reached by a hostname address descriptor:
831         /// a hostname with a maximum length of 255, its 1-byte length and a 2-byte port.
832         pub(crate) const MAX_LEN: u16 = 258;
833 }
834
835 impl Writeable for SocketAddress {
836         fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
837                 match self {
838                         &SocketAddress::TcpIpV4 { ref addr, ref port } => {
839                                 1u8.write(writer)?;
840                                 addr.write(writer)?;
841                                 port.write(writer)?;
842                         },
843                         &SocketAddress::TcpIpV6 { ref addr, ref port } => {
844                                 2u8.write(writer)?;
845                                 addr.write(writer)?;
846                                 port.write(writer)?;
847                         },
848                         &SocketAddress::OnionV2(bytes) => {
849                                 3u8.write(writer)?;
850                                 bytes.write(writer)?;
851                         },
852                         &SocketAddress::OnionV3 { ref ed25519_pubkey, ref checksum, ref version, ref port } => {
853                                 4u8.write(writer)?;
854                                 ed25519_pubkey.write(writer)?;
855                                 checksum.write(writer)?;
856                                 version.write(writer)?;
857                                 port.write(writer)?;
858                         },
859                         &SocketAddress::Hostname { ref hostname, ref port } => {
860                                 5u8.write(writer)?;
861                                 hostname.write(writer)?;
862                                 port.write(writer)?;
863                         },
864                 }
865                 Ok(())
866         }
867 }
868
869 impl Readable for Result<SocketAddress, u8> {
870         fn read<R: Read>(reader: &mut R) -> Result<Result<SocketAddress, u8>, DecodeError> {
871                 let byte = <u8 as Readable>::read(reader)?;
872                 match byte {
873                         1 => {
874                                 Ok(Ok(SocketAddress::TcpIpV4 {
875                                         addr: Readable::read(reader)?,
876                                         port: Readable::read(reader)?,
877                                 }))
878                         },
879                         2 => {
880                                 Ok(Ok(SocketAddress::TcpIpV6 {
881                                         addr: Readable::read(reader)?,
882                                         port: Readable::read(reader)?,
883                                 }))
884                         },
885                         3 => Ok(Ok(SocketAddress::OnionV2(Readable::read(reader)?))),
886                         4 => {
887                                 Ok(Ok(SocketAddress::OnionV3 {
888                                         ed25519_pubkey: Readable::read(reader)?,
889                                         checksum: Readable::read(reader)?,
890                                         version: Readable::read(reader)?,
891                                         port: Readable::read(reader)?,
892                                 }))
893                         },
894                         5 => {
895                                 Ok(Ok(SocketAddress::Hostname {
896                                         hostname: Readable::read(reader)?,
897                                         port: Readable::read(reader)?,
898                                 }))
899                         },
900                         _ => return Ok(Err(byte)),
901                 }
902         }
903 }
904
905 impl Readable for SocketAddress {
906         fn read<R: Read>(reader: &mut R) -> Result<SocketAddress, DecodeError> {
907                 match Readable::read(reader) {
908                         Ok(Ok(res)) => Ok(res),
909                         Ok(Err(_)) => Err(DecodeError::UnknownVersion),
910                         Err(e) => Err(e),
911                 }
912         }
913 }
914
915 /// [`SocketAddress`] error variants
916 #[derive(Debug, Eq, PartialEq, Clone)]
917 pub enum SocketAddressParseError {
918         /// Socket address (IPv4/IPv6) parsing error
919         SocketAddrParse,
920         /// Invalid input format
921         InvalidInput,
922         /// Invalid port
923         InvalidPort,
924         /// Invalid onion v3 address
925         InvalidOnionV3,
926 }
927
928 impl fmt::Display for SocketAddressParseError {
929         fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
930                 match self {
931                         SocketAddressParseError::SocketAddrParse => write!(f, "Socket address (IPv4/IPv6) parsing error"),
932                         SocketAddressParseError::InvalidInput => write!(f, "Invalid input format. \
933                                 Expected: \"<ipv4>:<port>\", \"[<ipv6>]:<port>\", \"<onion address>.onion:<port>\" or \"<hostname>:<port>\""),
934                         SocketAddressParseError::InvalidPort => write!(f, "Invalid port"),
935                         SocketAddressParseError::InvalidOnionV3 => write!(f, "Invalid onion v3 address"),
936                 }
937         }
938 }
939
940 #[cfg(feature = "std")]
941 impl From<std::net::SocketAddrV4> for SocketAddress {
942                 fn from(addr: std::net::SocketAddrV4) -> Self {
943                         SocketAddress::TcpIpV4 { addr: addr.ip().octets(), port: addr.port() }
944                 }
945 }
946
947 #[cfg(feature = "std")]
948 impl From<std::net::SocketAddrV6> for SocketAddress {
949                 fn from(addr: std::net::SocketAddrV6) -> Self {
950                         SocketAddress::TcpIpV6 { addr: addr.ip().octets(), port: addr.port() }
951                 }
952 }
953
954 #[cfg(feature = "std")]
955 impl From<std::net::SocketAddr> for SocketAddress {
956                 fn from(addr: std::net::SocketAddr) -> Self {
957                         match addr {
958                                 std::net::SocketAddr::V4(addr) => addr.into(),
959                                 std::net::SocketAddr::V6(addr) => addr.into(),
960                         }
961                 }
962 }
963
964 #[cfg(feature = "std")]
965 impl std::net::ToSocketAddrs for SocketAddress {
966         type Iter = std::vec::IntoIter<std::net::SocketAddr>;
967
968         fn to_socket_addrs(&self) -> std::io::Result<Self::Iter> {
969                 match self {
970                         SocketAddress::TcpIpV4 { addr, port } => {
971                                 let ip_addr = std::net::Ipv4Addr::from(*addr);
972                                 let socket_addr = SocketAddr::new(ip_addr.into(), *port);
973                                 Ok(vec![socket_addr].into_iter())
974                         }
975                         SocketAddress::TcpIpV6 { addr, port } => {
976                                 let ip_addr = std::net::Ipv6Addr::from(*addr);
977                                 let socket_addr = SocketAddr::new(ip_addr.into(), *port);
978                                 Ok(vec![socket_addr].into_iter())
979                         }
980                         SocketAddress::Hostname { ref hostname, port } => {
981                                 (hostname.as_str(), *port).to_socket_addrs()
982                         }
983                         SocketAddress::OnionV2(..) => {
984                                 Err(std::io::Error::new(std::io::ErrorKind::Other, "Resolution of OnionV2 \
985                                 addresses is currently unsupported."))
986                         }
987                         SocketAddress::OnionV3 { .. } => {
988                                 Err(std::io::Error::new(std::io::ErrorKind::Other, "Resolution of OnionV3 \
989                                 addresses is currently unsupported."))
990                         }
991                 }
992         }
993 }
994
995 /// Parses an OnionV3 host and port into a [`SocketAddress::OnionV3`].
996 ///
997 /// The host part must end with ".onion".
998 pub fn parse_onion_address(host: &str, port: u16) -> Result<SocketAddress, SocketAddressParseError> {
999         if host.ends_with(".onion") {
1000                 let domain = &host[..host.len() - ".onion".len()];
1001                 if domain.len() != 56 {
1002                         return Err(SocketAddressParseError::InvalidOnionV3);
1003                 }
1004                 let onion =  base32::Alphabet::RFC4648 { padding: false }.decode(&domain).map_err(|_| SocketAddressParseError::InvalidOnionV3)?;
1005                 if onion.len() != 35 {
1006                         return Err(SocketAddressParseError::InvalidOnionV3);
1007                 }
1008                 let version = onion[0];
1009                 let first_checksum_flag = onion[1];
1010                 let second_checksum_flag = onion[2];
1011                 let mut ed25519_pubkey = [0; 32];
1012                 ed25519_pubkey.copy_from_slice(&onion[3..35]);
1013                 let checksum = u16::from_be_bytes([first_checksum_flag, second_checksum_flag]);
1014                 return Ok(SocketAddress::OnionV3 { ed25519_pubkey, checksum, version, port });
1015
1016         } else {
1017                 return Err(SocketAddressParseError::InvalidInput);
1018         }
1019 }
1020
1021 impl Display for SocketAddress {
1022         fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1023                 match self {
1024                         SocketAddress::TcpIpV4{addr, port} => write!(
1025                                 f, "{}.{}.{}.{}:{}", addr[0], addr[1], addr[2], addr[3], port)?,
1026                         SocketAddress::TcpIpV6{addr, port} => write!(
1027                                 f,
1028                                 "[{:02x}{:02x}:{:02x}{:02x}:{:02x}{:02x}:{:02x}{:02x}:{:02x}{:02x}:{:02x}{:02x}:{:02x}{:02x}:{:02x}{:02x}]:{}",
1029                                 addr[0], addr[1], addr[2], addr[3], addr[4], addr[5], addr[6], addr[7], addr[8], addr[9], addr[10], addr[11], addr[12], addr[13], addr[14], addr[15], port
1030                         )?,
1031                         SocketAddress::OnionV2(bytes) => write!(f, "OnionV2({:?})", bytes)?,
1032                         SocketAddress::OnionV3 {
1033                                 ed25519_pubkey,
1034                                 checksum,
1035                                 version,
1036                                 port,
1037                         } => {
1038                                 let [first_checksum_flag, second_checksum_flag] = checksum.to_be_bytes();
1039                                 let mut addr = vec![*version, first_checksum_flag, second_checksum_flag];
1040                                 addr.extend_from_slice(ed25519_pubkey);
1041                                 let onion = base32::Alphabet::RFC4648 { padding: false }.encode(&addr);
1042                                 write!(f, "{}.onion:{}", onion, port)?
1043                         },
1044                         SocketAddress::Hostname { hostname, port } => write!(f, "{}:{}", hostname, port)?,
1045                 }
1046                 Ok(())
1047         }
1048 }
1049
1050 #[cfg(feature = "std")]
1051 impl FromStr for SocketAddress {
1052         type Err = SocketAddressParseError;
1053
1054         fn from_str(s: &str) -> Result<Self, Self::Err> {
1055                 match std::net::SocketAddr::from_str(s) {
1056                         Ok(addr) => Ok(addr.into()),
1057                         Err(_) => {
1058                                 let trimmed_input = match s.rfind(":") {
1059                                         Some(pos) => pos,
1060                                         None => return Err(SocketAddressParseError::InvalidInput),
1061                                 };
1062                                 let host = &s[..trimmed_input];
1063                                 let port: u16 = s[trimmed_input + 1..].parse().map_err(|_| SocketAddressParseError::InvalidPort)?;
1064                                 if host.ends_with(".onion") {
1065                                         return parse_onion_address(host, port);
1066                                 };
1067                                 if let Ok(hostname) = Hostname::try_from(s[..trimmed_input].to_string()) {
1068                                         return Ok(SocketAddress::Hostname { hostname, port });
1069                                 };
1070                                 return Err(SocketAddressParseError::SocketAddrParse)
1071                         },
1072                 }
1073         }
1074 }
1075
1076 /// Represents the set of gossip messages that require a signature from a node's identity key.
1077 pub enum UnsignedGossipMessage<'a> {
1078         /// An unsigned channel announcement.
1079         ChannelAnnouncement(&'a UnsignedChannelAnnouncement),
1080         /// An unsigned channel update.
1081         ChannelUpdate(&'a UnsignedChannelUpdate),
1082         /// An unsigned node announcement.
1083         NodeAnnouncement(&'a UnsignedNodeAnnouncement)
1084 }
1085
1086 impl<'a> Writeable for UnsignedGossipMessage<'a> {
1087         fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
1088                 match self {
1089                         UnsignedGossipMessage::ChannelAnnouncement(ref msg) => msg.write(writer),
1090                         UnsignedGossipMessage::ChannelUpdate(ref msg) => msg.write(writer),
1091                         UnsignedGossipMessage::NodeAnnouncement(ref msg) => msg.write(writer),
1092                 }
1093         }
1094 }
1095
1096 /// The unsigned part of a [`node_announcement`] message.
1097 ///
1098 /// [`node_announcement`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-node_announcement-message
1099 #[derive(Clone, Debug, PartialEq, Eq)]
1100 pub struct UnsignedNodeAnnouncement {
1101         /// The advertised features
1102         pub features: NodeFeatures,
1103         /// A strictly monotonic announcement counter, with gaps allowed
1104         pub timestamp: u32,
1105         /// The `node_id` this announcement originated from (don't rebroadcast the `node_announcement` back
1106         /// to this node).
1107         pub node_id: NodeId,
1108         /// An RGB color for UI purposes
1109         pub rgb: [u8; 3],
1110         /// An alias, for UI purposes.
1111         ///
1112         /// This should be sanitized before use. There is no guarantee of uniqueness.
1113         pub alias: NodeAlias,
1114         /// List of addresses on which this node is reachable
1115         pub addresses: Vec<SocketAddress>,
1116         pub(crate) excess_address_data: Vec<u8>,
1117         pub(crate) excess_data: Vec<u8>,
1118 }
1119 #[derive(Clone, Debug, PartialEq, Eq)]
1120 /// A [`node_announcement`] message to be sent to or received from a peer.
1121 ///
1122 /// [`node_announcement`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-node_announcement-message
1123 pub struct NodeAnnouncement {
1124         /// The signature by the node key
1125         pub signature: Signature,
1126         /// The actual content of the announcement
1127         pub contents: UnsignedNodeAnnouncement,
1128 }
1129
1130 /// The unsigned part of a [`channel_announcement`] message.
1131 ///
1132 /// [`channel_announcement`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-channel_announcement-message
1133 #[derive(Clone, Debug, PartialEq, Eq)]
1134 pub struct UnsignedChannelAnnouncement {
1135         /// The advertised channel features
1136         pub features: ChannelFeatures,
1137         /// The genesis hash of the blockchain where the channel is to be opened
1138         pub chain_hash: ChainHash,
1139         /// The short channel ID
1140         pub short_channel_id: u64,
1141         /// One of the two `node_id`s which are endpoints of this channel
1142         pub node_id_1: NodeId,
1143         /// The other of the two `node_id`s which are endpoints of this channel
1144         pub node_id_2: NodeId,
1145         /// The funding key for the first node
1146         pub bitcoin_key_1: NodeId,
1147         /// The funding key for the second node
1148         pub bitcoin_key_2: NodeId,
1149         /// Excess data which was signed as a part of the message which we do not (yet) understand how
1150         /// to decode.
1151         ///
1152         /// This is stored to ensure forward-compatibility as new fields are added to the lightning gossip protocol.
1153         pub excess_data: Vec<u8>,
1154 }
1155 /// A [`channel_announcement`] message to be sent to or received from a peer.
1156 ///
1157 /// [`channel_announcement`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-channel_announcement-message
1158 #[derive(Clone, Debug, PartialEq, Eq)]
1159 pub struct ChannelAnnouncement {
1160         /// Authentication of the announcement by the first public node
1161         pub node_signature_1: Signature,
1162         /// Authentication of the announcement by the second public node
1163         pub node_signature_2: Signature,
1164         /// Proof of funding UTXO ownership by the first public node
1165         pub bitcoin_signature_1: Signature,
1166         /// Proof of funding UTXO ownership by the second public node
1167         pub bitcoin_signature_2: Signature,
1168         /// The actual announcement
1169         pub contents: UnsignedChannelAnnouncement,
1170 }
1171
1172 /// The unsigned part of a [`channel_update`] message.
1173 ///
1174 /// [`channel_update`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-channel_update-message
1175 #[derive(Clone, Debug, PartialEq, Eq)]
1176 pub struct UnsignedChannelUpdate {
1177         /// The genesis hash of the blockchain where the channel is to be opened
1178         pub chain_hash: ChainHash,
1179         /// The short channel ID
1180         pub short_channel_id: u64,
1181         /// A strictly monotonic announcement counter, with gaps allowed, specific to this channel
1182         pub timestamp: u32,
1183         /// Channel flags
1184         pub flags: u8,
1185         /// The number of blocks such that if:
1186         /// `incoming_htlc.cltv_expiry < outgoing_htlc.cltv_expiry + cltv_expiry_delta`
1187         /// then we need to fail the HTLC backwards. When forwarding an HTLC, `cltv_expiry_delta` determines
1188         /// the outgoing HTLC's minimum `cltv_expiry` value -- so, if an incoming HTLC comes in with a
1189         /// `cltv_expiry` of 100000, and the node we're forwarding to has a `cltv_expiry_delta` value of 10,
1190         /// then we'll check that the outgoing HTLC's `cltv_expiry` value is at least 100010 before
1191         /// forwarding. Note that the HTLC sender is the one who originally sets this value when
1192         /// constructing the route.
1193         pub cltv_expiry_delta: u16,
1194         /// The minimum HTLC size incoming to sender, in milli-satoshi
1195         pub htlc_minimum_msat: u64,
1196         /// The maximum HTLC value incoming to sender, in milli-satoshi.
1197         ///
1198         /// This used to be optional.
1199         pub htlc_maximum_msat: u64,
1200         /// The base HTLC fee charged by sender, in milli-satoshi
1201         pub fee_base_msat: u32,
1202         /// The amount to fee multiplier, in micro-satoshi
1203         pub fee_proportional_millionths: u32,
1204         /// Excess data which was signed as a part of the message which we do not (yet) understand how
1205         /// to decode.
1206         ///
1207         /// This is stored to ensure forward-compatibility as new fields are added to the lightning gossip protocol.
1208         pub excess_data: Vec<u8>,
1209 }
1210 /// A [`channel_update`] message to be sent to or received from a peer.
1211 ///
1212 /// [`channel_update`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-channel_update-message
1213 #[derive(Clone, Debug, PartialEq, Eq)]
1214 pub struct ChannelUpdate {
1215         /// A signature of the channel update
1216         pub signature: Signature,
1217         /// The actual channel update
1218         pub contents: UnsignedChannelUpdate,
1219 }
1220
1221 /// A [`query_channel_range`] message is used to query a peer for channel
1222 /// UTXOs in a range of blocks. The recipient of a query makes a best
1223 /// effort to reply to the query using one or more [`ReplyChannelRange`]
1224 /// messages.
1225 ///
1226 /// [`query_channel_range`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-query_channel_range-and-reply_channel_range-messages
1227 #[derive(Clone, Debug, PartialEq, Eq)]
1228 pub struct QueryChannelRange {
1229         /// The genesis hash of the blockchain being queried
1230         pub chain_hash: ChainHash,
1231         /// The height of the first block for the channel UTXOs being queried
1232         pub first_blocknum: u32,
1233         /// The number of blocks to include in the query results
1234         pub number_of_blocks: u32,
1235 }
1236
1237 /// A [`reply_channel_range`] message is a reply to a [`QueryChannelRange`]
1238 /// message.
1239 ///
1240 /// Multiple `reply_channel_range` messages can be sent in reply
1241 /// to a single [`QueryChannelRange`] message. The query recipient makes a
1242 /// best effort to respond based on their local network view which may
1243 /// not be a perfect view of the network. The `short_channel_id`s in the
1244 /// reply are encoded. We only support `encoding_type=0` uncompressed
1245 /// serialization and do not support `encoding_type=1` zlib serialization.
1246 ///
1247 /// [`reply_channel_range`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-query_channel_range-and-reply_channel_range-messages
1248 #[derive(Clone, Debug, PartialEq, Eq)]
1249 pub struct ReplyChannelRange {
1250         /// The genesis hash of the blockchain being queried
1251         pub chain_hash: ChainHash,
1252         /// The height of the first block in the range of the reply
1253         pub first_blocknum: u32,
1254         /// The number of blocks included in the range of the reply
1255         pub number_of_blocks: u32,
1256         /// True when this is the final reply for a query
1257         pub sync_complete: bool,
1258         /// The `short_channel_id`s in the channel range
1259         pub short_channel_ids: Vec<u64>,
1260 }
1261
1262 /// A [`query_short_channel_ids`] message is used to query a peer for
1263 /// routing gossip messages related to one or more `short_channel_id`s.
1264 ///
1265 /// The query recipient will reply with the latest, if available,
1266 /// [`ChannelAnnouncement`], [`ChannelUpdate`] and [`NodeAnnouncement`] messages
1267 /// it maintains for the requested `short_channel_id`s followed by a
1268 /// [`ReplyShortChannelIdsEnd`] message. The `short_channel_id`s sent in
1269 /// this query are encoded. We only support `encoding_type=0` uncompressed
1270 /// serialization and do not support `encoding_type=1` zlib serialization.
1271 ///
1272 /// [`query_short_channel_ids`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-query_short_channel_idsreply_short_channel_ids_end-messages
1273 #[derive(Clone, Debug, PartialEq, Eq)]
1274 pub struct QueryShortChannelIds {
1275         /// The genesis hash of the blockchain being queried
1276         pub chain_hash: ChainHash,
1277         /// The short_channel_ids that are being queried
1278         pub short_channel_ids: Vec<u64>,
1279 }
1280
1281 /// A [`reply_short_channel_ids_end`] message is sent as a reply to a
1282 /// message. The query recipient makes a best
1283 /// effort to respond based on their local network view which may not be
1284 /// a perfect view of the network.
1285 ///
1286 /// [`reply_short_channel_ids_end`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-query_short_channel_idsreply_short_channel_ids_end-messages
1287 #[derive(Clone, Debug, PartialEq, Eq)]
1288 pub struct ReplyShortChannelIdsEnd {
1289         /// The genesis hash of the blockchain that was queried
1290         pub chain_hash: ChainHash,
1291         /// Indicates if the query recipient maintains up-to-date channel
1292         /// information for the `chain_hash`
1293         pub full_information: bool,
1294 }
1295
1296 /// A [`gossip_timestamp_filter`] message is used by a node to request
1297 /// gossip relay for messages in the requested time range when the
1298 /// `gossip_queries` feature has been negotiated.
1299 ///
1300 /// [`gossip_timestamp_filter`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-gossip_timestamp_filter-message
1301 #[derive(Clone, Debug, PartialEq, Eq)]
1302 pub struct GossipTimestampFilter {
1303         /// The genesis hash of the blockchain for channel and node information
1304         pub chain_hash: ChainHash,
1305         /// The starting unix timestamp
1306         pub first_timestamp: u32,
1307         /// The range of information in seconds
1308         pub timestamp_range: u32,
1309 }
1310
1311 /// Encoding type for data compression of collections in gossip queries.
1312 ///
1313 /// We do not support `encoding_type=1` zlib serialization [defined in BOLT
1314 /// #7](https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#query-messages).
1315 enum EncodingType {
1316         Uncompressed = 0x00,
1317 }
1318
1319 /// Used to put an error message in a [`LightningError`].
1320 #[derive(Clone, Debug, PartialEq)]
1321 pub enum ErrorAction {
1322         /// The peer took some action which made us think they were useless. Disconnect them.
1323         DisconnectPeer {
1324                 /// An error message which we should make an effort to send before we disconnect.
1325                 msg: Option<ErrorMessage>
1326         },
1327         /// The peer did something incorrect. Tell them without closing any channels and disconnect them.
1328         DisconnectPeerWithWarning {
1329                 /// A warning message which we should make an effort to send before we disconnect.
1330                 msg: WarningMessage,
1331         },
1332         /// The peer did something harmless that we weren't able to process, just log and ignore
1333         // New code should *not* use this. New code must use IgnoreAndLog, below!
1334         IgnoreError,
1335         /// The peer did something harmless that we weren't able to meaningfully process.
1336         /// If the error is logged, log it at the given level.
1337         IgnoreAndLog(logger::Level),
1338         /// The peer provided us with a gossip message which we'd already seen. In most cases this
1339         /// should be ignored, but it may result in the message being forwarded if it is a duplicate of
1340         /// our own channel announcements.
1341         IgnoreDuplicateGossip,
1342         /// The peer did something incorrect. Tell them.
1343         SendErrorMessage {
1344                 /// The message to send.
1345                 msg: ErrorMessage,
1346         },
1347         /// The peer did something incorrect. Tell them without closing any channels.
1348         SendWarningMessage {
1349                 /// The message to send.
1350                 msg: WarningMessage,
1351                 /// The peer may have done something harmless that we weren't able to meaningfully process,
1352                 /// though we should still tell them about it.
1353                 /// If this event is logged, log it at the given level.
1354                 log_level: logger::Level,
1355         },
1356 }
1357
1358 /// An Err type for failure to process messages.
1359 #[derive(Clone, Debug)]
1360 pub struct LightningError {
1361         /// A human-readable message describing the error
1362         pub err: String,
1363         /// The action which should be taken against the offending peer.
1364         pub action: ErrorAction,
1365 }
1366
1367 /// Struct used to return values from [`RevokeAndACK`] messages, containing a bunch of commitment
1368 /// transaction updates if they were pending.
1369 #[derive(Clone, Debug, PartialEq, Eq)]
1370 pub struct CommitmentUpdate {
1371         /// `update_add_htlc` messages which should be sent
1372         pub update_add_htlcs: Vec<UpdateAddHTLC>,
1373         /// `update_fulfill_htlc` messages which should be sent
1374         pub update_fulfill_htlcs: Vec<UpdateFulfillHTLC>,
1375         /// `update_fail_htlc` messages which should be sent
1376         pub update_fail_htlcs: Vec<UpdateFailHTLC>,
1377         /// `update_fail_malformed_htlc` messages which should be sent
1378         pub update_fail_malformed_htlcs: Vec<UpdateFailMalformedHTLC>,
1379         /// An `update_fee` message which should be sent
1380         pub update_fee: Option<UpdateFee>,
1381         /// A `commitment_signed` message which should be sent
1382         pub commitment_signed: CommitmentSigned,
1383 }
1384
1385 /// A trait to describe an object which can receive channel messages.
1386 ///
1387 /// Messages MAY be called in parallel when they originate from different `their_node_ids`, however
1388 /// they MUST NOT be called in parallel when the two calls have the same `their_node_id`.
1389 pub trait ChannelMessageHandler : MessageSendEventsProvider {
1390         // Channel init:
1391         /// Handle an incoming `open_channel` message from the given peer.
1392         fn handle_open_channel(&self, their_node_id: &PublicKey, msg: &OpenChannel);
1393         /// Handle an incoming `open_channel2` message from the given peer.
1394         fn handle_open_channel_v2(&self, their_node_id: &PublicKey, msg: &OpenChannelV2);
1395         /// Handle an incoming `accept_channel` message from the given peer.
1396         fn handle_accept_channel(&self, their_node_id: &PublicKey, msg: &AcceptChannel);
1397         /// Handle an incoming `accept_channel2` message from the given peer.
1398         fn handle_accept_channel_v2(&self, their_node_id: &PublicKey, msg: &AcceptChannelV2);
1399         /// Handle an incoming `funding_created` message from the given peer.
1400         fn handle_funding_created(&self, their_node_id: &PublicKey, msg: &FundingCreated);
1401         /// Handle an incoming `funding_signed` message from the given peer.
1402         fn handle_funding_signed(&self, their_node_id: &PublicKey, msg: &FundingSigned);
1403         /// Handle an incoming `channel_ready` message from the given peer.
1404         fn handle_channel_ready(&self, their_node_id: &PublicKey, msg: &ChannelReady);
1405
1406         // Channel close:
1407         /// Handle an incoming `shutdown` message from the given peer.
1408         fn handle_shutdown(&self, their_node_id: &PublicKey, msg: &Shutdown);
1409         /// Handle an incoming `closing_signed` message from the given peer.
1410         fn handle_closing_signed(&self, their_node_id: &PublicKey, msg: &ClosingSigned);
1411
1412         // Interactive channel construction
1413         /// Handle an incoming `tx_add_input message` from the given peer.
1414         fn handle_tx_add_input(&self, their_node_id: &PublicKey, msg: &TxAddInput);
1415         /// Handle an incoming `tx_add_output` message from the given peer.
1416         fn handle_tx_add_output(&self, their_node_id: &PublicKey, msg: &TxAddOutput);
1417         /// Handle an incoming `tx_remove_input` message from the given peer.
1418         fn handle_tx_remove_input(&self, their_node_id: &PublicKey, msg: &TxRemoveInput);
1419         /// Handle an incoming `tx_remove_output` message from the given peer.
1420         fn handle_tx_remove_output(&self, their_node_id: &PublicKey, msg: &TxRemoveOutput);
1421         /// Handle an incoming `tx_complete message` from the given peer.
1422         fn handle_tx_complete(&self, their_node_id: &PublicKey, msg: &TxComplete);
1423         /// Handle an incoming `tx_signatures` message from the given peer.
1424         fn handle_tx_signatures(&self, their_node_id: &PublicKey, msg: &TxSignatures);
1425         /// Handle an incoming `tx_init_rbf` message from the given peer.
1426         fn handle_tx_init_rbf(&self, their_node_id: &PublicKey, msg: &TxInitRbf);
1427         /// Handle an incoming `tx_ack_rbf` message from the given peer.
1428         fn handle_tx_ack_rbf(&self, their_node_id: &PublicKey, msg: &TxAckRbf);
1429         /// Handle an incoming `tx_abort message` from the given peer.
1430         fn handle_tx_abort(&self, their_node_id: &PublicKey, msg: &TxAbort);
1431
1432         // HTLC handling:
1433         /// Handle an incoming `update_add_htlc` message from the given peer.
1434         fn handle_update_add_htlc(&self, their_node_id: &PublicKey, msg: &UpdateAddHTLC);
1435         /// Handle an incoming `update_fulfill_htlc` message from the given peer.
1436         fn handle_update_fulfill_htlc(&self, their_node_id: &PublicKey, msg: &UpdateFulfillHTLC);
1437         /// Handle an incoming `update_fail_htlc` message from the given peer.
1438         fn handle_update_fail_htlc(&self, their_node_id: &PublicKey, msg: &UpdateFailHTLC);
1439         /// Handle an incoming `update_fail_malformed_htlc` message from the given peer.
1440         fn handle_update_fail_malformed_htlc(&self, their_node_id: &PublicKey, msg: &UpdateFailMalformedHTLC);
1441         /// Handle an incoming `commitment_signed` message from the given peer.
1442         fn handle_commitment_signed(&self, their_node_id: &PublicKey, msg: &CommitmentSigned);
1443         /// Handle an incoming `revoke_and_ack` message from the given peer.
1444         fn handle_revoke_and_ack(&self, their_node_id: &PublicKey, msg: &RevokeAndACK);
1445
1446         /// Handle an incoming `update_fee` message from the given peer.
1447         fn handle_update_fee(&self, their_node_id: &PublicKey, msg: &UpdateFee);
1448
1449         // Channel-to-announce:
1450         /// Handle an incoming `announcement_signatures` message from the given peer.
1451         fn handle_announcement_signatures(&self, their_node_id: &PublicKey, msg: &AnnouncementSignatures);
1452
1453         // Connection loss/reestablish:
1454         /// Indicates a connection to the peer failed/an existing connection was lost.
1455         fn peer_disconnected(&self, their_node_id: &PublicKey);
1456
1457         /// Handle a peer reconnecting, possibly generating `channel_reestablish` message(s).
1458         ///
1459         /// May return an `Err(())` if the features the peer supports are not sufficient to communicate
1460         /// with us. Implementors should be somewhat conservative about doing so, however, as other
1461         /// message handlers may still wish to communicate with this peer.
1462         fn peer_connected(&self, their_node_id: &PublicKey, msg: &Init, inbound: bool) -> Result<(), ()>;
1463         /// Handle an incoming `channel_reestablish` message from the given peer.
1464         fn handle_channel_reestablish(&self, their_node_id: &PublicKey, msg: &ChannelReestablish);
1465
1466         /// Handle an incoming `channel_update` message from the given peer.
1467         fn handle_channel_update(&self, their_node_id: &PublicKey, msg: &ChannelUpdate);
1468
1469         // Error:
1470         /// Handle an incoming `error` message from the given peer.
1471         fn handle_error(&self, their_node_id: &PublicKey, msg: &ErrorMessage);
1472
1473         // Handler information:
1474         /// Gets the node feature flags which this handler itself supports. All available handlers are
1475         /// queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`]
1476         /// which are broadcasted in our [`NodeAnnouncement`] message.
1477         fn provided_node_features(&self) -> NodeFeatures;
1478
1479         /// Gets the init feature flags which should be sent to the given peer. All available handlers
1480         /// are queried similarly and their feature flags are OR'd together to form the [`InitFeatures`]
1481         /// which are sent in our [`Init`] message.
1482         ///
1483         /// Note that this method is called before [`Self::peer_connected`].
1484         fn provided_init_features(&self, their_node_id: &PublicKey) -> InitFeatures;
1485
1486         /// Gets the chain hashes for this `ChannelMessageHandler` indicating which chains it supports.
1487         ///
1488         /// If it's `None`, then no particular network chain hash compatibility will be enforced when
1489         /// connecting to peers.
1490         fn get_chain_hashes(&self) -> Option<Vec<ChainHash>>;
1491 }
1492
1493 /// A trait to describe an object which can receive routing messages.
1494 ///
1495 /// # Implementor DoS Warnings
1496 ///
1497 /// For messages enabled with the `gossip_queries` feature there are potential DoS vectors when
1498 /// handling inbound queries. Implementors using an on-disk network graph should be aware of
1499 /// repeated disk I/O for queries accessing different parts of the network graph.
1500 pub trait RoutingMessageHandler : MessageSendEventsProvider {
1501         /// Handle an incoming `node_announcement` message, returning `true` if it should be forwarded on,
1502         /// `false` or returning an `Err` otherwise.
1503         fn handle_node_announcement(&self, msg: &NodeAnnouncement) -> Result<bool, LightningError>;
1504         /// Handle a `channel_announcement` message, returning `true` if it should be forwarded on, `false`
1505         /// or returning an `Err` otherwise.
1506         fn handle_channel_announcement(&self, msg: &ChannelAnnouncement) -> Result<bool, LightningError>;
1507         /// Handle an incoming `channel_update` message, returning true if it should be forwarded on,
1508         /// `false` or returning an `Err` otherwise.
1509         fn handle_channel_update(&self, msg: &ChannelUpdate) -> Result<bool, LightningError>;
1510         /// Gets channel announcements and updates required to dump our routing table to a remote node,
1511         /// starting at the `short_channel_id` indicated by `starting_point` and including announcements
1512         /// for a single channel.
1513         fn get_next_channel_announcement(&self, starting_point: u64) -> Option<(ChannelAnnouncement, Option<ChannelUpdate>, Option<ChannelUpdate>)>;
1514         /// Gets a node announcement required to dump our routing table to a remote node, starting at
1515         /// the node *after* the provided pubkey and including up to one announcement immediately
1516         /// higher (as defined by `<PublicKey as Ord>::cmp`) than `starting_point`.
1517         /// If `None` is provided for `starting_point`, we start at the first node.
1518         fn get_next_node_announcement(&self, starting_point: Option<&NodeId>) -> Option<NodeAnnouncement>;
1519         /// Called when a connection is established with a peer. This can be used to
1520         /// perform routing table synchronization using a strategy defined by the
1521         /// implementor.
1522         ///
1523         /// May return an `Err(())` if the features the peer supports are not sufficient to communicate
1524         /// with us. Implementors should be somewhat conservative about doing so, however, as other
1525         /// message handlers may still wish to communicate with this peer.
1526         fn peer_connected(&self, their_node_id: &PublicKey, init: &Init, inbound: bool) -> Result<(), ()>;
1527         /// Handles the reply of a query we initiated to learn about channels
1528         /// for a given range of blocks. We can expect to receive one or more
1529         /// replies to a single query.
1530         fn handle_reply_channel_range(&self, their_node_id: &PublicKey, msg: ReplyChannelRange) -> Result<(), LightningError>;
1531         /// Handles the reply of a query we initiated asking for routing gossip
1532         /// messages for a list of channels. We should receive this message when
1533         /// a node has completed its best effort to send us the pertaining routing
1534         /// gossip messages.
1535         fn handle_reply_short_channel_ids_end(&self, their_node_id: &PublicKey, msg: ReplyShortChannelIdsEnd) -> Result<(), LightningError>;
1536         /// Handles when a peer asks us to send a list of `short_channel_id`s
1537         /// for the requested range of blocks.
1538         fn handle_query_channel_range(&self, their_node_id: &PublicKey, msg: QueryChannelRange) -> Result<(), LightningError>;
1539         /// Handles when a peer asks us to send routing gossip messages for a
1540         /// list of `short_channel_id`s.
1541         fn handle_query_short_channel_ids(&self, their_node_id: &PublicKey, msg: QueryShortChannelIds) -> Result<(), LightningError>;
1542
1543         // Handler queueing status:
1544         /// Indicates that there are a large number of [`ChannelAnnouncement`] (or other) messages
1545         /// pending some async action. While there is no guarantee of the rate of future messages, the
1546         /// caller should seek to reduce the rate of new gossip messages handled, especially
1547         /// [`ChannelAnnouncement`]s.
1548         fn processing_queue_high(&self) -> bool;
1549
1550         // Handler information:
1551         /// Gets the node feature flags which this handler itself supports. All available handlers are
1552         /// queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`]
1553         /// which are broadcasted in our [`NodeAnnouncement`] message.
1554         fn provided_node_features(&self) -> NodeFeatures;
1555         /// Gets the init feature flags which should be sent to the given peer. All available handlers
1556         /// are queried similarly and their feature flags are OR'd together to form the [`InitFeatures`]
1557         /// which are sent in our [`Init`] message.
1558         ///
1559         /// Note that this method is called before [`Self::peer_connected`].
1560         fn provided_init_features(&self, their_node_id: &PublicKey) -> InitFeatures;
1561 }
1562
1563 /// A handler for received [`OnionMessage`]s and for providing generated ones to send.
1564 pub trait OnionMessageHandler {
1565         /// Handle an incoming `onion_message` message from the given peer.
1566         fn handle_onion_message(&self, peer_node_id: &PublicKey, msg: &OnionMessage);
1567
1568         /// Returns the next pending onion message for the peer with the given node id.
1569         fn next_onion_message_for_peer(&self, peer_node_id: PublicKey) -> Option<OnionMessage>;
1570
1571         /// Called when a connection is established with a peer. Can be used to track which peers
1572         /// advertise onion message support and are online.
1573         ///
1574         /// May return an `Err(())` if the features the peer supports are not sufficient to communicate
1575         /// with us. Implementors should be somewhat conservative about doing so, however, as other
1576         /// message handlers may still wish to communicate with this peer.
1577         fn peer_connected(&self, their_node_id: &PublicKey, init: &Init, inbound: bool) -> Result<(), ()>;
1578
1579         /// Indicates a connection to the peer failed/an existing connection was lost. Allows handlers to
1580         /// drop and refuse to forward onion messages to this peer.
1581         fn peer_disconnected(&self, their_node_id: &PublicKey);
1582
1583         // Handler information:
1584         /// Gets the node feature flags which this handler itself supports. All available handlers are
1585         /// queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`]
1586         /// which are broadcasted in our [`NodeAnnouncement`] message.
1587         fn provided_node_features(&self) -> NodeFeatures;
1588
1589         /// Gets the init feature flags which should be sent to the given peer. All available handlers
1590         /// are queried similarly and their feature flags are OR'd together to form the [`InitFeatures`]
1591         /// which are sent in our [`Init`] message.
1592         ///
1593         /// Note that this method is called before [`Self::peer_connected`].
1594         fn provided_init_features(&self, their_node_id: &PublicKey) -> InitFeatures;
1595 }
1596
1597 mod fuzzy_internal_msgs {
1598         use bitcoin::secp256k1::PublicKey;
1599         use crate::blinded_path::payment::PaymentConstraints;
1600         use crate::prelude::*;
1601         use crate::ln::{PaymentPreimage, PaymentSecret};
1602
1603         // These types aren't intended to be pub, but are exposed for direct fuzzing (as we deserialize
1604         // them from untrusted input):
1605         #[derive(Clone)]
1606         pub struct FinalOnionHopData {
1607                 pub payment_secret: PaymentSecret,
1608                 /// The total value, in msat, of the payment as received by the ultimate recipient.
1609                 /// Message serialization may panic if this value is more than 21 million Bitcoin.
1610                 pub total_msat: u64,
1611         }
1612
1613         pub enum InboundOnionPayload {
1614                 Forward {
1615                         short_channel_id: u64,
1616                         /// The value, in msat, of the payment after this hop's fee is deducted.
1617                         amt_to_forward: u64,
1618                         outgoing_cltv_value: u32,
1619                 },
1620                 Receive {
1621                         payment_data: Option<FinalOnionHopData>,
1622                         payment_metadata: Option<Vec<u8>>,
1623                         keysend_preimage: Option<PaymentPreimage>,
1624                         custom_tlvs: Vec<(u64, Vec<u8>)>,
1625                         amt_msat: u64,
1626                         outgoing_cltv_value: u32,
1627                 },
1628                 BlindedReceive {
1629                         amt_msat: u64,
1630                         total_msat: u64,
1631                         outgoing_cltv_value: u32,
1632                         payment_secret: PaymentSecret,
1633                         payment_constraints: PaymentConstraints,
1634                         intro_node_blinding_point: PublicKey,
1635                 }
1636         }
1637
1638         pub(crate) enum OutboundOnionPayload {
1639                 Forward {
1640                         short_channel_id: u64,
1641                         /// The value, in msat, of the payment after this hop's fee is deducted.
1642                         amt_to_forward: u64,
1643                         outgoing_cltv_value: u32,
1644                 },
1645                 Receive {
1646                         payment_data: Option<FinalOnionHopData>,
1647                         payment_metadata: Option<Vec<u8>>,
1648                         keysend_preimage: Option<PaymentPreimage>,
1649                         custom_tlvs: Vec<(u64, Vec<u8>)>,
1650                         amt_msat: u64,
1651                         outgoing_cltv_value: u32,
1652                 },
1653                 BlindedForward {
1654                         encrypted_tlvs: Vec<u8>,
1655                         intro_node_blinding_point: Option<PublicKey>,
1656                 },
1657                 BlindedReceive {
1658                         amt_msat: u64,
1659                         total_msat: u64,
1660                         outgoing_cltv_value: u32,
1661                         encrypted_tlvs: Vec<u8>,
1662                         intro_node_blinding_point: Option<PublicKey>, // Set if the introduction node of the blinded path is the final node
1663                 }
1664         }
1665
1666         pub struct DecodedOnionErrorPacket {
1667                 pub(crate) hmac: [u8; 32],
1668                 pub(crate) failuremsg: Vec<u8>,
1669                 pub(crate) pad: Vec<u8>,
1670         }
1671 }
1672 #[cfg(fuzzing)]
1673 pub use self::fuzzy_internal_msgs::*;
1674 #[cfg(not(fuzzing))]
1675 pub(crate) use self::fuzzy_internal_msgs::*;
1676
1677 #[derive(Clone)]
1678 pub(crate) struct OnionPacket {
1679         pub(crate) version: u8,
1680         /// In order to ensure we always return an error on onion decode in compliance with [BOLT
1681         /// #4](https://github.com/lightning/bolts/blob/master/04-onion-routing.md), we have to
1682         /// deserialize `OnionPacket`s contained in [`UpdateAddHTLC`] messages even if the ephemeral
1683         /// public key (here) is bogus, so we hold a [`Result`] instead of a [`PublicKey`] as we'd
1684         /// like.
1685         pub(crate) public_key: Result<PublicKey, secp256k1::Error>,
1686         pub(crate) hop_data: [u8; 20*65],
1687         pub(crate) hmac: [u8; 32],
1688 }
1689
1690 impl onion_utils::Packet for OnionPacket {
1691         type Data = onion_utils::FixedSizeOnionPacket;
1692         fn new(pubkey: PublicKey, hop_data: onion_utils::FixedSizeOnionPacket, hmac: [u8; 32]) -> Self {
1693                 Self {
1694                         version: 0,
1695                         public_key: Ok(pubkey),
1696                         hop_data: hop_data.0,
1697                         hmac,
1698                 }
1699         }
1700 }
1701
1702 impl Eq for OnionPacket { }
1703 impl PartialEq for OnionPacket {
1704         fn eq(&self, other: &OnionPacket) -> bool {
1705                 for (i, j) in self.hop_data.iter().zip(other.hop_data.iter()) {
1706                         if i != j { return false; }
1707                 }
1708                 self.version == other.version &&
1709                         self.public_key == other.public_key &&
1710                         self.hmac == other.hmac
1711         }
1712 }
1713
1714 impl fmt::Debug for OnionPacket {
1715         fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1716                 f.write_fmt(format_args!("OnionPacket version {} with hmac {:?}", self.version, &self.hmac[..]))
1717         }
1718 }
1719
1720 #[derive(Clone, Debug, PartialEq, Eq)]
1721 pub(crate) struct OnionErrorPacket {
1722         // This really should be a constant size slice, but the spec lets these things be up to 128KB?
1723         // (TODO) We limit it in decode to much lower...
1724         pub(crate) data: Vec<u8>,
1725 }
1726
1727 impl fmt::Display for DecodeError {
1728         fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1729                 match *self {
1730                         DecodeError::UnknownVersion => f.write_str("Unknown realm byte in Onion packet"),
1731                         DecodeError::UnknownRequiredFeature => f.write_str("Unknown required feature preventing decode"),
1732                         DecodeError::InvalidValue => f.write_str("Nonsense bytes didn't map to the type they were interpreted as"),
1733                         DecodeError::ShortRead => f.write_str("Packet extended beyond the provided bytes"),
1734                         DecodeError::BadLengthDescriptor => f.write_str("A length descriptor in the packet didn't describe the later data correctly"),
1735                         DecodeError::Io(ref e) => fmt::Debug::fmt(e, f),
1736                         DecodeError::UnsupportedCompression => f.write_str("We don't support receiving messages with zlib-compressed fields"),
1737                 }
1738         }
1739 }
1740
1741 impl From<io::Error> for DecodeError {
1742         fn from(e: io::Error) -> Self {
1743                 if e.kind() == io::ErrorKind::UnexpectedEof {
1744                         DecodeError::ShortRead
1745                 } else {
1746                         DecodeError::Io(e.kind())
1747                 }
1748         }
1749 }
1750
1751 #[cfg(not(taproot))]
1752 impl_writeable_msg!(AcceptChannel, {
1753         temporary_channel_id,
1754         dust_limit_satoshis,
1755         max_htlc_value_in_flight_msat,
1756         channel_reserve_satoshis,
1757         htlc_minimum_msat,
1758         minimum_depth,
1759         to_self_delay,
1760         max_accepted_htlcs,
1761         funding_pubkey,
1762         revocation_basepoint,
1763         payment_point,
1764         delayed_payment_basepoint,
1765         htlc_basepoint,
1766         first_per_commitment_point,
1767 }, {
1768         (0, shutdown_scriptpubkey, (option, encoding: (Script, WithoutLength))), // Don't encode length twice.
1769         (1, channel_type, option),
1770 });
1771
1772 #[cfg(taproot)]
1773 impl_writeable_msg!(AcceptChannel, {
1774         temporary_channel_id,
1775         dust_limit_satoshis,
1776         max_htlc_value_in_flight_msat,
1777         channel_reserve_satoshis,
1778         htlc_minimum_msat,
1779         minimum_depth,
1780         to_self_delay,
1781         max_accepted_htlcs,
1782         funding_pubkey,
1783         revocation_basepoint,
1784         payment_point,
1785         delayed_payment_basepoint,
1786         htlc_basepoint,
1787         first_per_commitment_point,
1788 }, {
1789         (0, shutdown_scriptpubkey, (option, encoding: (Script, WithoutLength))), // Don't encode length twice.
1790         (1, channel_type, option),
1791         (4, next_local_nonce, option),
1792 });
1793
1794 impl_writeable_msg!(AcceptChannelV2, {
1795         temporary_channel_id,
1796         funding_satoshis,
1797         dust_limit_satoshis,
1798         max_htlc_value_in_flight_msat,
1799         htlc_minimum_msat,
1800         minimum_depth,
1801         to_self_delay,
1802         max_accepted_htlcs,
1803         funding_pubkey,
1804         revocation_basepoint,
1805         payment_basepoint,
1806         delayed_payment_basepoint,
1807         htlc_basepoint,
1808         first_per_commitment_point,
1809         second_per_commitment_point,
1810 }, {
1811         (0, shutdown_scriptpubkey, option),
1812         (1, channel_type, option),
1813         (2, require_confirmed_inputs, option),
1814 });
1815
1816 impl_writeable_msg!(TxAddInput, {
1817         channel_id,
1818         serial_id,
1819         prevtx,
1820         prevtx_out,
1821         sequence,
1822 }, {});
1823
1824 impl_writeable_msg!(TxAddOutput, {
1825         channel_id,
1826         serial_id,
1827         sats,
1828         script,
1829 }, {});
1830
1831 impl_writeable_msg!(TxRemoveInput, {
1832         channel_id,
1833         serial_id,
1834 }, {});
1835
1836 impl_writeable_msg!(TxRemoveOutput, {
1837         channel_id,
1838         serial_id,
1839 }, {});
1840
1841 impl_writeable_msg!(TxComplete, {
1842         channel_id,
1843 }, {});
1844
1845 impl_writeable_msg!(TxSignatures, {
1846         channel_id,
1847         tx_hash,
1848         witnesses,
1849 }, {});
1850
1851 impl_writeable_msg!(TxInitRbf, {
1852         channel_id,
1853         locktime,
1854         feerate_sat_per_1000_weight,
1855 }, {
1856         (0, funding_output_contribution, option),
1857 });
1858
1859 impl_writeable_msg!(TxAckRbf, {
1860         channel_id,
1861 }, {
1862         (0, funding_output_contribution, option),
1863 });
1864
1865 impl_writeable_msg!(TxAbort, {
1866         channel_id,
1867         data,
1868 }, {});
1869
1870 impl_writeable_msg!(AnnouncementSignatures, {
1871         channel_id,
1872         short_channel_id,
1873         node_signature,
1874         bitcoin_signature
1875 }, {});
1876
1877 impl_writeable_msg!(ChannelReestablish, {
1878         channel_id,
1879         next_local_commitment_number,
1880         next_remote_commitment_number,
1881         your_last_per_commitment_secret,
1882         my_current_per_commitment_point,
1883 }, {
1884         (0, next_funding_txid, option),
1885 });
1886
1887 impl_writeable_msg!(ClosingSigned,
1888         { channel_id, fee_satoshis, signature },
1889         { (1, fee_range, option) }
1890 );
1891
1892 impl_writeable!(ClosingSignedFeeRange, {
1893         min_fee_satoshis,
1894         max_fee_satoshis
1895 });
1896
1897 #[cfg(not(taproot))]
1898 impl_writeable_msg!(CommitmentSigned, {
1899         channel_id,
1900         signature,
1901         htlc_signatures
1902 }, {});
1903
1904 #[cfg(taproot)]
1905 impl_writeable_msg!(CommitmentSigned, {
1906         channel_id,
1907         signature,
1908         htlc_signatures
1909 }, {
1910         (2, partial_signature_with_nonce, option)
1911 });
1912
1913 impl_writeable!(DecodedOnionErrorPacket, {
1914         hmac,
1915         failuremsg,
1916         pad
1917 });
1918
1919 #[cfg(not(taproot))]
1920 impl_writeable_msg!(FundingCreated, {
1921         temporary_channel_id,
1922         funding_txid,
1923         funding_output_index,
1924         signature
1925 }, {});
1926 #[cfg(taproot)]
1927 impl_writeable_msg!(FundingCreated, {
1928         temporary_channel_id,
1929         funding_txid,
1930         funding_output_index,
1931         signature
1932 }, {
1933         (2, partial_signature_with_nonce, option),
1934         (4, next_local_nonce, option)
1935 });
1936
1937 #[cfg(not(taproot))]
1938 impl_writeable_msg!(FundingSigned, {
1939         channel_id,
1940         signature
1941 }, {});
1942
1943 #[cfg(taproot)]
1944 impl_writeable_msg!(FundingSigned, {
1945         channel_id,
1946         signature
1947 }, {
1948         (2, partial_signature_with_nonce, option)
1949 });
1950
1951 impl_writeable_msg!(ChannelReady, {
1952         channel_id,
1953         next_per_commitment_point,
1954 }, {
1955         (1, short_channel_id_alias, option),
1956 });
1957
1958 impl Writeable for Init {
1959         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
1960                 // global_features gets the bottom 13 bits of our features, and local_features gets all of
1961                 // our relevant feature bits. This keeps us compatible with old nodes.
1962                 self.features.write_up_to_13(w)?;
1963                 self.features.write(w)?;
1964                 encode_tlv_stream!(w, {
1965                         (1, self.networks.as_ref().map(|n| WithoutLength(n)), option),
1966                         (3, self.remote_network_address, option),
1967                 });
1968                 Ok(())
1969         }
1970 }
1971
1972 impl Readable for Init {
1973         fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
1974                 let global_features: InitFeatures = Readable::read(r)?;
1975                 let features: InitFeatures = Readable::read(r)?;
1976                 let mut remote_network_address: Option<SocketAddress> = None;
1977                 let mut networks: Option<WithoutLength<Vec<ChainHash>>> = None;
1978                 decode_tlv_stream!(r, {
1979                         (1, networks, option),
1980                         (3, remote_network_address, option)
1981                 });
1982                 Ok(Init {
1983                         features: features | global_features,
1984                         networks: networks.map(|n| n.0),
1985                         remote_network_address,
1986                 })
1987         }
1988 }
1989
1990 impl_writeable_msg!(OpenChannel, {
1991         chain_hash,
1992         temporary_channel_id,
1993         funding_satoshis,
1994         push_msat,
1995         dust_limit_satoshis,
1996         max_htlc_value_in_flight_msat,
1997         channel_reserve_satoshis,
1998         htlc_minimum_msat,
1999         feerate_per_kw,
2000         to_self_delay,
2001         max_accepted_htlcs,
2002         funding_pubkey,
2003         revocation_basepoint,
2004         payment_point,
2005         delayed_payment_basepoint,
2006         htlc_basepoint,
2007         first_per_commitment_point,
2008         channel_flags,
2009 }, {
2010         (0, shutdown_scriptpubkey, (option, encoding: (Script, WithoutLength))), // Don't encode length twice.
2011         (1, channel_type, option),
2012 });
2013
2014 impl_writeable_msg!(OpenChannelV2, {
2015         chain_hash,
2016         temporary_channel_id,
2017         funding_feerate_sat_per_1000_weight,
2018         commitment_feerate_sat_per_1000_weight,
2019         funding_satoshis,
2020         dust_limit_satoshis,
2021         max_htlc_value_in_flight_msat,
2022         htlc_minimum_msat,
2023         to_self_delay,
2024         max_accepted_htlcs,
2025         locktime,
2026         funding_pubkey,
2027         revocation_basepoint,
2028         payment_basepoint,
2029         delayed_payment_basepoint,
2030         htlc_basepoint,
2031         first_per_commitment_point,
2032         second_per_commitment_point,
2033         channel_flags,
2034 }, {
2035         (0, shutdown_scriptpubkey, option),
2036         (1, channel_type, option),
2037         (2, require_confirmed_inputs, option),
2038 });
2039
2040 #[cfg(not(taproot))]
2041 impl_writeable_msg!(RevokeAndACK, {
2042         channel_id,
2043         per_commitment_secret,
2044         next_per_commitment_point
2045 }, {});
2046
2047 #[cfg(taproot)]
2048 impl_writeable_msg!(RevokeAndACK, {
2049         channel_id,
2050         per_commitment_secret,
2051         next_per_commitment_point
2052 }, {
2053         (4, next_local_nonce, option)
2054 });
2055
2056 impl_writeable_msg!(Shutdown, {
2057         channel_id,
2058         scriptpubkey
2059 }, {});
2060
2061 impl_writeable_msg!(UpdateFailHTLC, {
2062         channel_id,
2063         htlc_id,
2064         reason
2065 }, {});
2066
2067 impl_writeable_msg!(UpdateFailMalformedHTLC, {
2068         channel_id,
2069         htlc_id,
2070         sha256_of_onion,
2071         failure_code
2072 }, {});
2073
2074 impl_writeable_msg!(UpdateFee, {
2075         channel_id,
2076         feerate_per_kw
2077 }, {});
2078
2079 impl_writeable_msg!(UpdateFulfillHTLC, {
2080         channel_id,
2081         htlc_id,
2082         payment_preimage
2083 }, {});
2084
2085 // Note that this is written as a part of ChannelManager objects, and thus cannot change its
2086 // serialization format in a way which assumes we know the total serialized length/message end
2087 // position.
2088 impl_writeable!(OnionErrorPacket, {
2089         data
2090 });
2091
2092 // Note that this is written as a part of ChannelManager objects, and thus cannot change its
2093 // serialization format in a way which assumes we know the total serialized length/message end
2094 // position.
2095 impl Writeable for OnionPacket {
2096         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
2097                 self.version.write(w)?;
2098                 match self.public_key {
2099                         Ok(pubkey) => pubkey.write(w)?,
2100                         Err(_) => [0u8;33].write(w)?,
2101                 }
2102                 w.write_all(&self.hop_data)?;
2103                 self.hmac.write(w)?;
2104                 Ok(())
2105         }
2106 }
2107
2108 impl Readable for OnionPacket {
2109         fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
2110                 Ok(OnionPacket {
2111                         version: Readable::read(r)?,
2112                         public_key: {
2113                                 let mut buf = [0u8;33];
2114                                 r.read_exact(&mut buf)?;
2115                                 PublicKey::from_slice(&buf)
2116                         },
2117                         hop_data: Readable::read(r)?,
2118                         hmac: Readable::read(r)?,
2119                 })
2120         }
2121 }
2122
2123 impl_writeable_msg!(UpdateAddHTLC, {
2124         channel_id,
2125         htlc_id,
2126         amount_msat,
2127         payment_hash,
2128         cltv_expiry,
2129         onion_routing_packet,
2130 }, {
2131         (65537, skimmed_fee_msat, option)
2132 });
2133
2134 impl Readable for OnionMessage {
2135         fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
2136                 let blinding_point: PublicKey = Readable::read(r)?;
2137                 let len: u16 = Readable::read(r)?;
2138                 let mut packet_reader = FixedLengthReader::new(r, len as u64);
2139                 let onion_routing_packet: onion_message::Packet = <onion_message::Packet as LengthReadable>::read(&mut packet_reader)?;
2140                 Ok(Self {
2141                         blinding_point,
2142                         onion_routing_packet,
2143                 })
2144         }
2145 }
2146
2147 impl Writeable for OnionMessage {
2148         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
2149                 self.blinding_point.write(w)?;
2150                 let onion_packet_len = self.onion_routing_packet.serialized_length();
2151                 (onion_packet_len as u16).write(w)?;
2152                 self.onion_routing_packet.write(w)?;
2153                 Ok(())
2154         }
2155 }
2156
2157 impl Writeable for FinalOnionHopData {
2158         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
2159                 self.payment_secret.0.write(w)?;
2160                 HighZeroBytesDroppedBigSize(self.total_msat).write(w)
2161         }
2162 }
2163
2164 impl Readable for FinalOnionHopData {
2165         fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
2166                 let secret: [u8; 32] = Readable::read(r)?;
2167                 let amt: HighZeroBytesDroppedBigSize<u64> = Readable::read(r)?;
2168                 Ok(Self { payment_secret: PaymentSecret(secret), total_msat: amt.0 })
2169         }
2170 }
2171
2172 impl Writeable for OutboundOnionPayload {
2173         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
2174                 match self {
2175                         Self::Forward { short_channel_id, amt_to_forward, outgoing_cltv_value } => {
2176                                 _encode_varint_length_prefixed_tlv!(w, {
2177                                         (2, HighZeroBytesDroppedBigSize(*amt_to_forward), required),
2178                                         (4, HighZeroBytesDroppedBigSize(*outgoing_cltv_value), required),
2179                                         (6, short_channel_id, required)
2180                                 });
2181                         },
2182                         Self::Receive {
2183                                 ref payment_data, ref payment_metadata, ref keysend_preimage, amt_msat,
2184                                 outgoing_cltv_value, ref custom_tlvs,
2185                         } => {
2186                                 // We need to update [`ln::outbound_payment::RecipientOnionFields::with_custom_tlvs`]
2187                                 // to reject any reserved types in the experimental range if new ones are ever
2188                                 // standardized.
2189                                 let keysend_tlv = keysend_preimage.map(|preimage| (5482373484, preimage.encode()));
2190                                 let mut custom_tlvs: Vec<&(u64, Vec<u8>)> = custom_tlvs.iter().chain(keysend_tlv.iter()).collect();
2191                                 custom_tlvs.sort_unstable_by_key(|(typ, _)| *typ);
2192                                 _encode_varint_length_prefixed_tlv!(w, {
2193                                         (2, HighZeroBytesDroppedBigSize(*amt_msat), required),
2194                                         (4, HighZeroBytesDroppedBigSize(*outgoing_cltv_value), required),
2195                                         (8, payment_data, option),
2196                                         (16, payment_metadata.as_ref().map(|m| WithoutLength(m)), option)
2197                                 }, custom_tlvs.iter());
2198                         },
2199                         Self::BlindedForward { encrypted_tlvs, intro_node_blinding_point } => {
2200                                 _encode_varint_length_prefixed_tlv!(w, {
2201                                         (10, *encrypted_tlvs, required_vec),
2202                                         (12, intro_node_blinding_point, option)
2203                                 });
2204                         },
2205                         Self::BlindedReceive {
2206                                 amt_msat, total_msat, outgoing_cltv_value, encrypted_tlvs,
2207                                 intro_node_blinding_point,
2208                         } => {
2209                                 _encode_varint_length_prefixed_tlv!(w, {
2210                                         (2, HighZeroBytesDroppedBigSize(*amt_msat), required),
2211                                         (4, HighZeroBytesDroppedBigSize(*outgoing_cltv_value), required),
2212                                         (10, *encrypted_tlvs, required_vec),
2213                                         (12, intro_node_blinding_point, option),
2214                                         (18, HighZeroBytesDroppedBigSize(*total_msat), required)
2215                                 });
2216                         },
2217                 }
2218                 Ok(())
2219         }
2220 }
2221
2222 impl<NS: Deref> ReadableArgs<&NS> for InboundOnionPayload where NS::Target: NodeSigner {
2223         fn read<R: Read>(r: &mut R, node_signer: &NS) -> Result<Self, DecodeError> {
2224                 let mut amt = None;
2225                 let mut cltv_value = None;
2226                 let mut short_id: Option<u64> = None;
2227                 let mut payment_data: Option<FinalOnionHopData> = None;
2228                 let mut encrypted_tlvs_opt: Option<WithoutLength<Vec<u8>>> = None;
2229                 let mut intro_node_blinding_point = None;
2230                 let mut payment_metadata: Option<WithoutLength<Vec<u8>>> = None;
2231                 let mut total_msat = None;
2232                 let mut keysend_preimage: Option<PaymentPreimage> = None;
2233                 let mut custom_tlvs = Vec::new();
2234
2235                 let tlv_len = BigSize::read(r)?;
2236                 let rd = FixedLengthReader::new(r, tlv_len.0);
2237                 decode_tlv_stream_with_custom_tlv_decode!(rd, {
2238                         (2, amt, (option, encoding: (u64, HighZeroBytesDroppedBigSize))),
2239                         (4, cltv_value, (option, encoding: (u32, HighZeroBytesDroppedBigSize))),
2240                         (6, short_id, option),
2241                         (8, payment_data, option),
2242                         (10, encrypted_tlvs_opt, option),
2243                         (12, intro_node_blinding_point, option),
2244                         (16, payment_metadata, option),
2245                         (18, total_msat, (option, encoding: (u64, HighZeroBytesDroppedBigSize))),
2246                         // See https://github.com/lightning/blips/blob/master/blip-0003.md
2247                         (5482373484, keysend_preimage, option)
2248                 }, |msg_type: u64, msg_reader: &mut FixedLengthReader<_>| -> Result<bool, DecodeError> {
2249                         if msg_type < 1 << 16 { return Ok(false) }
2250                         let mut value = Vec::new();
2251                         msg_reader.read_to_end(&mut value)?;
2252                         custom_tlvs.push((msg_type, value));
2253                         Ok(true)
2254                 });
2255
2256                 if amt.unwrap_or(0) > MAX_VALUE_MSAT { return Err(DecodeError::InvalidValue) }
2257
2258                 if let Some(blinding_point) = intro_node_blinding_point {
2259                         if short_id.is_some() || payment_data.is_some() || payment_metadata.is_some() {
2260                                 return Err(DecodeError::InvalidValue)
2261                         }
2262                         let enc_tlvs = encrypted_tlvs_opt.ok_or(DecodeError::InvalidValue)?.0;
2263                         let enc_tlvs_ss = node_signer.ecdh(Recipient::Node, &blinding_point, None)
2264                                 .map_err(|_| DecodeError::InvalidValue)?;
2265                         let rho = onion_utils::gen_rho_from_shared_secret(&enc_tlvs_ss.secret_bytes());
2266                         let mut s = Cursor::new(&enc_tlvs);
2267                         let mut reader = FixedLengthReader::new(&mut s, enc_tlvs.len() as u64);
2268                         match ChaChaPolyReadAdapter::read(&mut reader, rho)? {
2269                                 ChaChaPolyReadAdapter { readable: ReceiveTlvs { payment_secret, payment_constraints }} => {
2270                                         if total_msat.unwrap_or(0) > MAX_VALUE_MSAT { return Err(DecodeError::InvalidValue) }
2271                                         Ok(Self::BlindedReceive {
2272                                                 amt_msat: amt.ok_or(DecodeError::InvalidValue)?,
2273                                                 total_msat: total_msat.ok_or(DecodeError::InvalidValue)?,
2274                                                 outgoing_cltv_value: cltv_value.ok_or(DecodeError::InvalidValue)?,
2275                                                 payment_secret,
2276                                                 payment_constraints,
2277                                                 intro_node_blinding_point: blinding_point,
2278                                         })
2279                                 },
2280                         }
2281                 } else if let Some(short_channel_id) = short_id {
2282                         if payment_data.is_some() || payment_metadata.is_some() || encrypted_tlvs_opt.is_some() ||
2283                                 total_msat.is_some()
2284                         { return Err(DecodeError::InvalidValue) }
2285                         Ok(Self::Forward {
2286                                 short_channel_id,
2287                                 amt_to_forward: amt.ok_or(DecodeError::InvalidValue)?,
2288                                 outgoing_cltv_value: cltv_value.ok_or(DecodeError::InvalidValue)?,
2289                         })
2290                 } else {
2291                         if encrypted_tlvs_opt.is_some() || total_msat.is_some() {
2292                                 return Err(DecodeError::InvalidValue)
2293                         }
2294                         if let Some(data) = &payment_data {
2295                                 if data.total_msat > MAX_VALUE_MSAT {
2296                                         return Err(DecodeError::InvalidValue);
2297                                 }
2298                         }
2299                         Ok(Self::Receive {
2300                                 payment_data,
2301                                 payment_metadata: payment_metadata.map(|w| w.0),
2302                                 keysend_preimage,
2303                                 amt_msat: amt.ok_or(DecodeError::InvalidValue)?,
2304                                 outgoing_cltv_value: cltv_value.ok_or(DecodeError::InvalidValue)?,
2305                                 custom_tlvs,
2306                         })
2307                 }
2308         }
2309 }
2310
2311 impl Writeable for Ping {
2312         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
2313                 self.ponglen.write(w)?;
2314                 vec![0u8; self.byteslen as usize].write(w)?; // size-unchecked write
2315                 Ok(())
2316         }
2317 }
2318
2319 impl Readable for Ping {
2320         fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
2321                 Ok(Ping {
2322                         ponglen: Readable::read(r)?,
2323                         byteslen: {
2324                                 let byteslen = Readable::read(r)?;
2325                                 r.read_exact(&mut vec![0u8; byteslen as usize][..])?;
2326                                 byteslen
2327                         }
2328                 })
2329         }
2330 }
2331
2332 impl Writeable for Pong {
2333         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
2334                 vec![0u8; self.byteslen as usize].write(w)?; // size-unchecked write
2335                 Ok(())
2336         }
2337 }
2338
2339 impl Readable for Pong {
2340         fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
2341                 Ok(Pong {
2342                         byteslen: {
2343                                 let byteslen = Readable::read(r)?;
2344                                 r.read_exact(&mut vec![0u8; byteslen as usize][..])?;
2345                                 byteslen
2346                         }
2347                 })
2348         }
2349 }
2350
2351 impl Writeable for UnsignedChannelAnnouncement {
2352         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
2353                 self.features.write(w)?;
2354                 self.chain_hash.write(w)?;
2355                 self.short_channel_id.write(w)?;
2356                 self.node_id_1.write(w)?;
2357                 self.node_id_2.write(w)?;
2358                 self.bitcoin_key_1.write(w)?;
2359                 self.bitcoin_key_2.write(w)?;
2360                 w.write_all(&self.excess_data[..])?;
2361                 Ok(())
2362         }
2363 }
2364
2365 impl Readable for UnsignedChannelAnnouncement {
2366         fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
2367                 Ok(Self {
2368                         features: Readable::read(r)?,
2369                         chain_hash: Readable::read(r)?,
2370                         short_channel_id: Readable::read(r)?,
2371                         node_id_1: Readable::read(r)?,
2372                         node_id_2: Readable::read(r)?,
2373                         bitcoin_key_1: Readable::read(r)?,
2374                         bitcoin_key_2: Readable::read(r)?,
2375                         excess_data: read_to_end(r)?,
2376                 })
2377         }
2378 }
2379
2380 impl_writeable!(ChannelAnnouncement, {
2381         node_signature_1,
2382         node_signature_2,
2383         bitcoin_signature_1,
2384         bitcoin_signature_2,
2385         contents
2386 });
2387
2388 impl Writeable for UnsignedChannelUpdate {
2389         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
2390                 // `message_flags` used to indicate presence of `htlc_maximum_msat`, but was deprecated in the spec.
2391                 const MESSAGE_FLAGS: u8 = 1;
2392                 self.chain_hash.write(w)?;
2393                 self.short_channel_id.write(w)?;
2394                 self.timestamp.write(w)?;
2395                 let all_flags = self.flags as u16 | ((MESSAGE_FLAGS as u16) << 8);
2396                 all_flags.write(w)?;
2397                 self.cltv_expiry_delta.write(w)?;
2398                 self.htlc_minimum_msat.write(w)?;
2399                 self.fee_base_msat.write(w)?;
2400                 self.fee_proportional_millionths.write(w)?;
2401                 self.htlc_maximum_msat.write(w)?;
2402                 w.write_all(&self.excess_data[..])?;
2403                 Ok(())
2404         }
2405 }
2406
2407 impl Readable for UnsignedChannelUpdate {
2408         fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
2409                 Ok(Self {
2410                         chain_hash: Readable::read(r)?,
2411                         short_channel_id: Readable::read(r)?,
2412                         timestamp: Readable::read(r)?,
2413                         flags: {
2414                                 let flags: u16 = Readable::read(r)?;
2415                                 // Note: we ignore the `message_flags` for now, since it was deprecated by the spec.
2416                                 flags as u8
2417                         },
2418                         cltv_expiry_delta: Readable::read(r)?,
2419                         htlc_minimum_msat: Readable::read(r)?,
2420                         fee_base_msat: Readable::read(r)?,
2421                         fee_proportional_millionths: Readable::read(r)?,
2422                         htlc_maximum_msat: Readable::read(r)?,
2423                         excess_data: read_to_end(r)?,
2424                 })
2425         }
2426 }
2427
2428 impl_writeable!(ChannelUpdate, {
2429         signature,
2430         contents
2431 });
2432
2433 impl Writeable for ErrorMessage {
2434         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
2435                 self.channel_id.write(w)?;
2436                 (self.data.len() as u16).write(w)?;
2437                 w.write_all(self.data.as_bytes())?;
2438                 Ok(())
2439         }
2440 }
2441
2442 impl Readable for ErrorMessage {
2443         fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
2444                 Ok(Self {
2445                         channel_id: Readable::read(r)?,
2446                         data: {
2447                                 let sz: usize = <u16 as Readable>::read(r)? as usize;
2448                                 let mut data = Vec::with_capacity(sz);
2449                                 data.resize(sz, 0);
2450                                 r.read_exact(&mut data)?;
2451                                 match String::from_utf8(data) {
2452                                         Ok(s) => s,
2453                                         Err(_) => return Err(DecodeError::InvalidValue),
2454                                 }
2455                         }
2456                 })
2457         }
2458 }
2459
2460 impl Writeable for WarningMessage {
2461         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
2462                 self.channel_id.write(w)?;
2463                 (self.data.len() as u16).write(w)?;
2464                 w.write_all(self.data.as_bytes())?;
2465                 Ok(())
2466         }
2467 }
2468
2469 impl Readable for WarningMessage {
2470         fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
2471                 Ok(Self {
2472                         channel_id: Readable::read(r)?,
2473                         data: {
2474                                 let sz: usize = <u16 as Readable>::read(r)? as usize;
2475                                 let mut data = Vec::with_capacity(sz);
2476                                 data.resize(sz, 0);
2477                                 r.read_exact(&mut data)?;
2478                                 match String::from_utf8(data) {
2479                                         Ok(s) => s,
2480                                         Err(_) => return Err(DecodeError::InvalidValue),
2481                                 }
2482                         }
2483                 })
2484         }
2485 }
2486
2487 impl Writeable for UnsignedNodeAnnouncement {
2488         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
2489                 self.features.write(w)?;
2490                 self.timestamp.write(w)?;
2491                 self.node_id.write(w)?;
2492                 w.write_all(&self.rgb)?;
2493                 self.alias.write(w)?;
2494
2495                 let mut addr_len = 0;
2496                 for addr in self.addresses.iter() {
2497                         addr_len += 1 + addr.len();
2498                 }
2499                 (addr_len + self.excess_address_data.len() as u16).write(w)?;
2500                 for addr in self.addresses.iter() {
2501                         addr.write(w)?;
2502                 }
2503                 w.write_all(&self.excess_address_data[..])?;
2504                 w.write_all(&self.excess_data[..])?;
2505                 Ok(())
2506         }
2507 }
2508
2509 impl Readable for UnsignedNodeAnnouncement {
2510         fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
2511                 let features: NodeFeatures = Readable::read(r)?;
2512                 let timestamp: u32 = Readable::read(r)?;
2513                 let node_id: NodeId = Readable::read(r)?;
2514                 let mut rgb = [0; 3];
2515                 r.read_exact(&mut rgb)?;
2516                 let alias: NodeAlias = Readable::read(r)?;
2517
2518                 let addr_len: u16 = Readable::read(r)?;
2519                 let mut addresses: Vec<SocketAddress> = Vec::new();
2520                 let mut addr_readpos = 0;
2521                 let mut excess = false;
2522                 let mut excess_byte = 0;
2523                 loop {
2524                         if addr_len <= addr_readpos { break; }
2525                         match Readable::read(r) {
2526                                 Ok(Ok(addr)) => {
2527                                         if addr_len < addr_readpos + 1 + addr.len() {
2528                                                 return Err(DecodeError::BadLengthDescriptor);
2529                                         }
2530                                         addr_readpos += (1 + addr.len()) as u16;
2531                                         addresses.push(addr);
2532                                 },
2533                                 Ok(Err(unknown_descriptor)) => {
2534                                         excess = true;
2535                                         excess_byte = unknown_descriptor;
2536                                         break;
2537                                 },
2538                                 Err(DecodeError::ShortRead) => return Err(DecodeError::BadLengthDescriptor),
2539                                 Err(e) => return Err(e),
2540                         }
2541                 }
2542
2543                 let mut excess_data = vec![];
2544                 let excess_address_data = if addr_readpos < addr_len {
2545                         let mut excess_address_data = vec![0; (addr_len - addr_readpos) as usize];
2546                         r.read_exact(&mut excess_address_data[if excess { 1 } else { 0 }..])?;
2547                         if excess {
2548                                 excess_address_data[0] = excess_byte;
2549                         }
2550                         excess_address_data
2551                 } else {
2552                         if excess {
2553                                 excess_data.push(excess_byte);
2554                         }
2555                         Vec::new()
2556                 };
2557                 excess_data.extend(read_to_end(r)?.iter());
2558                 Ok(UnsignedNodeAnnouncement {
2559                         features,
2560                         timestamp,
2561                         node_id,
2562                         rgb,
2563                         alias,
2564                         addresses,
2565                         excess_address_data,
2566                         excess_data,
2567                 })
2568         }
2569 }
2570
2571 impl_writeable!(NodeAnnouncement, {
2572         signature,
2573         contents
2574 });
2575
2576 impl Readable for QueryShortChannelIds {
2577         fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
2578                 let chain_hash: ChainHash = Readable::read(r)?;
2579
2580                 let encoding_len: u16 = Readable::read(r)?;
2581                 let encoding_type: u8 = Readable::read(r)?;
2582
2583                 // Must be encoding_type=0 uncompressed serialization. We do not
2584                 // support encoding_type=1 zlib serialization.
2585                 if encoding_type != EncodingType::Uncompressed as u8 {
2586                         return Err(DecodeError::UnsupportedCompression);
2587                 }
2588
2589                 // We expect the encoding_len to always includes the 1-byte
2590                 // encoding_type and that short_channel_ids are 8-bytes each
2591                 if encoding_len == 0 || (encoding_len - 1) % 8 != 0 {
2592                         return Err(DecodeError::InvalidValue);
2593                 }
2594
2595                 // Read short_channel_ids (8-bytes each), for the u16 encoding_len
2596                 // less the 1-byte encoding_type
2597                 let short_channel_id_count: u16 = (encoding_len - 1)/8;
2598                 let mut short_channel_ids = Vec::with_capacity(short_channel_id_count as usize);
2599                 for _ in 0..short_channel_id_count {
2600                         short_channel_ids.push(Readable::read(r)?);
2601                 }
2602
2603                 Ok(QueryShortChannelIds {
2604                         chain_hash,
2605                         short_channel_ids,
2606                 })
2607         }
2608 }
2609
2610 impl Writeable for QueryShortChannelIds {
2611         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
2612                 // Calculated from 1-byte encoding_type plus 8-bytes per short_channel_id
2613                 let encoding_len: u16 = 1 + self.short_channel_ids.len() as u16 * 8;
2614
2615                 self.chain_hash.write(w)?;
2616                 encoding_len.write(w)?;
2617
2618                 // We only support type=0 uncompressed serialization
2619                 (EncodingType::Uncompressed as u8).write(w)?;
2620
2621                 for scid in self.short_channel_ids.iter() {
2622                         scid.write(w)?;
2623                 }
2624
2625                 Ok(())
2626         }
2627 }
2628
2629 impl_writeable_msg!(ReplyShortChannelIdsEnd, {
2630         chain_hash,
2631         full_information,
2632 }, {});
2633
2634 impl QueryChannelRange {
2635         /// Calculates the overflow safe ending block height for the query.
2636         ///
2637         /// Overflow returns `0xffffffff`, otherwise returns `first_blocknum + number_of_blocks`.
2638         pub fn end_blocknum(&self) -> u32 {
2639                 match self.first_blocknum.checked_add(self.number_of_blocks) {
2640                         Some(block) => block,
2641                         None => u32::max_value(),
2642                 }
2643         }
2644 }
2645
2646 impl_writeable_msg!(QueryChannelRange, {
2647         chain_hash,
2648         first_blocknum,
2649         number_of_blocks
2650 }, {});
2651
2652 impl Readable for ReplyChannelRange {
2653         fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
2654                 let chain_hash: ChainHash = Readable::read(r)?;
2655                 let first_blocknum: u32 = Readable::read(r)?;
2656                 let number_of_blocks: u32 = Readable::read(r)?;
2657                 let sync_complete: bool = Readable::read(r)?;
2658
2659                 let encoding_len: u16 = Readable::read(r)?;
2660                 let encoding_type: u8 = Readable::read(r)?;
2661
2662                 // Must be encoding_type=0 uncompressed serialization. We do not
2663                 // support encoding_type=1 zlib serialization.
2664                 if encoding_type != EncodingType::Uncompressed as u8 {
2665                         return Err(DecodeError::UnsupportedCompression);
2666                 }
2667
2668                 // We expect the encoding_len to always includes the 1-byte
2669                 // encoding_type and that short_channel_ids are 8-bytes each
2670                 if encoding_len == 0 || (encoding_len - 1) % 8 != 0 {
2671                         return Err(DecodeError::InvalidValue);
2672                 }
2673
2674                 // Read short_channel_ids (8-bytes each), for the u16 encoding_len
2675                 // less the 1-byte encoding_type
2676                 let short_channel_id_count: u16 = (encoding_len - 1)/8;
2677                 let mut short_channel_ids = Vec::with_capacity(short_channel_id_count as usize);
2678                 for _ in 0..short_channel_id_count {
2679                         short_channel_ids.push(Readable::read(r)?);
2680                 }
2681
2682                 Ok(ReplyChannelRange {
2683                         chain_hash,
2684                         first_blocknum,
2685                         number_of_blocks,
2686                         sync_complete,
2687                         short_channel_ids
2688                 })
2689         }
2690 }
2691
2692 impl Writeable for ReplyChannelRange {
2693         fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
2694                 let encoding_len: u16 = 1 + self.short_channel_ids.len() as u16 * 8;
2695                 self.chain_hash.write(w)?;
2696                 self.first_blocknum.write(w)?;
2697                 self.number_of_blocks.write(w)?;
2698                 self.sync_complete.write(w)?;
2699
2700                 encoding_len.write(w)?;
2701                 (EncodingType::Uncompressed as u8).write(w)?;
2702                 for scid in self.short_channel_ids.iter() {
2703                         scid.write(w)?;
2704                 }
2705
2706                 Ok(())
2707         }
2708 }
2709
2710 impl_writeable_msg!(GossipTimestampFilter, {
2711         chain_hash,
2712         first_timestamp,
2713         timestamp_range,
2714 }, {});
2715
2716 #[cfg(test)]
2717 mod tests {
2718         use std::convert::TryFrom;
2719         use bitcoin::{Transaction, PackedLockTime, TxIn, Script, Sequence, Witness, TxOut};
2720         use hex;
2721         use crate::ln::{PaymentPreimage, PaymentHash, PaymentSecret};
2722         use crate::ln::ChannelId;
2723         use crate::ln::features::{ChannelFeatures, ChannelTypeFeatures, InitFeatures, NodeFeatures};
2724         use crate::ln::msgs::{self, FinalOnionHopData, OnionErrorPacket};
2725         use crate::ln::msgs::SocketAddress;
2726         use crate::routing::gossip::{NodeAlias, NodeId};
2727         use crate::util::ser::{Writeable, Readable, ReadableArgs, Hostname, TransactionU16LenLimited};
2728         use crate::util::test_utils;
2729
2730         use bitcoin::hashes::hex::FromHex;
2731         use bitcoin::util::address::Address;
2732         use bitcoin::network::constants::Network;
2733         use bitcoin::blockdata::constants::ChainHash;
2734         use bitcoin::blockdata::script::Builder;
2735         use bitcoin::blockdata::opcodes;
2736         use bitcoin::hash_types::Txid;
2737
2738         use bitcoin::secp256k1::{PublicKey,SecretKey};
2739         use bitcoin::secp256k1::{Secp256k1, Message};
2740
2741         use crate::io::{self, Cursor};
2742         use crate::prelude::*;
2743         use core::str::FromStr;
2744         use crate::chain::transaction::OutPoint;
2745
2746         #[cfg(feature = "std")]
2747         use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6, ToSocketAddrs};
2748         use crate::ln::msgs::SocketAddressParseError;
2749
2750         #[test]
2751         fn encoding_channel_reestablish() {
2752                 let public_key = {
2753                         let secp_ctx = Secp256k1::new();
2754                         PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap()[..]).unwrap())
2755                 };
2756
2757                 let cr = msgs::ChannelReestablish {
2758                         channel_id: ChannelId::from_bytes([4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0]),
2759                         next_local_commitment_number: 3,
2760                         next_remote_commitment_number: 4,
2761                         your_last_per_commitment_secret: [9;32],
2762                         my_current_per_commitment_point: public_key,
2763                         next_funding_txid: None,
2764                 };
2765
2766                 let encoded_value = cr.encode();
2767                 assert_eq!(
2768                         encoded_value,
2769                         vec![
2770                                 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, // channel_id
2771                                 0, 0, 0, 0, 0, 0, 0, 3, // next_local_commitment_number
2772                                 0, 0, 0, 0, 0, 0, 0, 4, // next_remote_commitment_number
2773                                 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // your_last_per_commitment_secret
2774                                 3, 27, 132, 197, 86, 123, 18, 100, 64, 153, 93, 62, 213, 170, 186, 5, 101, 215, 30, 24, 52, 96, 72, 25, 255, 156, 23, 245, 233, 213, 221, 7, 143, // my_current_per_commitment_point
2775                         ]
2776                 );
2777         }
2778
2779         #[test]
2780         fn encoding_channel_reestablish_with_next_funding_txid() {
2781                 let public_key = {
2782                         let secp_ctx = Secp256k1::new();
2783                         PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap()[..]).unwrap())
2784                 };
2785
2786                 let cr = msgs::ChannelReestablish {
2787                         channel_id: ChannelId::from_bytes([4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0]),
2788                         next_local_commitment_number: 3,
2789                         next_remote_commitment_number: 4,
2790                         your_last_per_commitment_secret: [9;32],
2791                         my_current_per_commitment_point: public_key,
2792                         next_funding_txid: Some(Txid::from_hash(bitcoin::hashes::Hash::from_slice(&[
2793                                 48, 167, 250, 69, 152, 48, 103, 172, 164, 99, 59, 19, 23, 11, 92, 84, 15, 80, 4, 12, 98, 82, 75, 31, 201, 11, 91, 23, 98, 23, 53, 124,
2794                         ]).unwrap())),
2795                 };
2796
2797                 let encoded_value = cr.encode();
2798                 assert_eq!(
2799                         encoded_value,
2800                         vec![
2801                                 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, // channel_id
2802                                 0, 0, 0, 0, 0, 0, 0, 3, // next_local_commitment_number
2803                                 0, 0, 0, 0, 0, 0, 0, 4, // next_remote_commitment_number
2804                                 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // your_last_per_commitment_secret
2805                                 3, 27, 132, 197, 86, 123, 18, 100, 64, 153, 93, 62, 213, 170, 186, 5, 101, 215, 30, 24, 52, 96, 72, 25, 255, 156, 23, 245, 233, 213, 221, 7, 143, // my_current_per_commitment_point
2806                                 0, // Type (next_funding_txid)
2807                                 32, // Length
2808                                 48, 167, 250, 69, 152, 48, 103, 172, 164, 99, 59, 19, 23, 11, 92, 84, 15, 80, 4, 12, 98, 82, 75, 31, 201, 11, 91, 23, 98, 23, 53, 124, // Value
2809                         ]
2810                 );
2811         }
2812
2813         macro_rules! get_keys_from {
2814                 ($slice: expr, $secp_ctx: expr) => {
2815                         {
2816                                 let privkey = SecretKey::from_slice(&hex::decode($slice).unwrap()[..]).unwrap();
2817                                 let pubkey = PublicKey::from_secret_key(&$secp_ctx, &privkey);
2818                                 (privkey, pubkey)
2819                         }
2820                 }
2821         }
2822
2823         macro_rules! get_sig_on {
2824                 ($privkey: expr, $ctx: expr, $string: expr) => {
2825                         {
2826                                 let sighash = Message::from_slice(&$string.into_bytes()[..]).unwrap();
2827                                 $ctx.sign_ecdsa(&sighash, &$privkey)
2828                         }
2829                 }
2830         }
2831
2832         #[test]
2833         fn encoding_announcement_signatures() {
2834                 let secp_ctx = Secp256k1::new();
2835                 let (privkey, _) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
2836                 let sig_1 = get_sig_on!(privkey, secp_ctx, String::from("01010101010101010101010101010101"));
2837                 let sig_2 = get_sig_on!(privkey, secp_ctx, String::from("02020202020202020202020202020202"));
2838                 let announcement_signatures = msgs::AnnouncementSignatures {
2839                         channel_id: ChannelId::from_bytes([4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0]),
2840                         short_channel_id: 2316138423780173,
2841                         node_signature: sig_1,
2842                         bitcoin_signature: sig_2,
2843                 };
2844
2845                 let encoded_value = announcement_signatures.encode();
2846                 assert_eq!(encoded_value, hex::decode("040000000000000005000000000000000600000000000000070000000000000000083a840000034dd977cb9b53d93a6ff64bb5f1e158b4094b66e798fb12911168a3ccdf80a83096340a6a95da0ae8d9f776528eecdbb747eb6b545495a4319ed5378e35b21e073acf9953cef4700860f5967838eba2bae89288ad188ebf8b20bf995c3ea53a26df1876d0a3a0e13172ba286a673140190c02ba9da60a2e43a745188c8a83c7f3ef").unwrap());
2847         }
2848
2849         fn do_encoding_channel_announcement(unknown_features_bits: bool, excess_data: bool) {
2850                 let secp_ctx = Secp256k1::new();
2851                 let (privkey_1, pubkey_1) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
2852                 let (privkey_2, pubkey_2) = get_keys_from!("0202020202020202020202020202020202020202020202020202020202020202", secp_ctx);
2853                 let (privkey_3, pubkey_3) = get_keys_from!("0303030303030303030303030303030303030303030303030303030303030303", secp_ctx);
2854                 let (privkey_4, pubkey_4) = get_keys_from!("0404040404040404040404040404040404040404040404040404040404040404", secp_ctx);
2855                 let sig_1 = get_sig_on!(privkey_1, secp_ctx, String::from("01010101010101010101010101010101"));
2856                 let sig_2 = get_sig_on!(privkey_2, secp_ctx, String::from("01010101010101010101010101010101"));
2857                 let sig_3 = get_sig_on!(privkey_3, secp_ctx, String::from("01010101010101010101010101010101"));
2858                 let sig_4 = get_sig_on!(privkey_4, secp_ctx, String::from("01010101010101010101010101010101"));
2859                 let mut features = ChannelFeatures::empty();
2860                 if unknown_features_bits {
2861                         features = ChannelFeatures::from_le_bytes(vec![0xFF, 0xFF]);
2862                 }
2863                 let unsigned_channel_announcement = msgs::UnsignedChannelAnnouncement {
2864                         features,
2865                         chain_hash: ChainHash::using_genesis_block(Network::Bitcoin),
2866                         short_channel_id: 2316138423780173,
2867                         node_id_1: NodeId::from_pubkey(&pubkey_1),
2868                         node_id_2: NodeId::from_pubkey(&pubkey_2),
2869                         bitcoin_key_1: NodeId::from_pubkey(&pubkey_3),
2870                         bitcoin_key_2: NodeId::from_pubkey(&pubkey_4),
2871                         excess_data: if excess_data { vec![10, 0, 0, 20, 0, 0, 30, 0, 0, 40] } else { Vec::new() },
2872                 };
2873                 let channel_announcement = msgs::ChannelAnnouncement {
2874                         node_signature_1: sig_1,
2875                         node_signature_2: sig_2,
2876                         bitcoin_signature_1: sig_3,
2877                         bitcoin_signature_2: sig_4,
2878                         contents: unsigned_channel_announcement,
2879                 };
2880                 let encoded_value = channel_announcement.encode();
2881                 let mut target_value = hex::decode("d977cb9b53d93a6ff64bb5f1e158b4094b66e798fb12911168a3ccdf80a83096340a6a95da0ae8d9f776528eecdbb747eb6b545495a4319ed5378e35b21e073a1735b6a427e80d5fe7cd90a2f4ee08dc9c27cda7c35a4172e5d85b12c49d4232537e98f9b1f3c5e6989a8b9644e90e8918127680dbd0d4043510840fc0f1e11a216c280b5395a2546e7e4b2663e04f811622f15a4f91e83aa2e92ba2a573c139142c54ae63072a1ec1ee7dc0c04bde5c847806172aa05c92c22ae8e308d1d2692b12cc195ce0a2d1bda6a88befa19fa07f51caa75ce83837f28965600b8aacab0855ffb0e741ec5f7c41421e9829a9d48611c8c831f71be5ea73e66594977ffd").unwrap();
2882                 if unknown_features_bits {
2883                         target_value.append(&mut hex::decode("0002ffff").unwrap());
2884                 } else {
2885                         target_value.append(&mut hex::decode("0000").unwrap());
2886                 }
2887                 target_value.append(&mut hex::decode("6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000").unwrap());
2888                 target_value.append(&mut hex::decode("00083a840000034d031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f024d4b6cd1361032ca9bd2aeb9d900aa4d45d9ead80ac9423374c451a7254d076602531fe6068134503d2723133227c867ac8fa6c83c537e9a44c3c5bdbdcb1fe33703462779ad4aad39514614751a71085f2f10e1c7a593e4e030efb5b8721ce55b0b").unwrap());
2889                 if excess_data {
2890                         target_value.append(&mut hex::decode("0a00001400001e000028").unwrap());
2891                 }
2892                 assert_eq!(encoded_value, target_value);
2893         }
2894
2895         #[test]
2896         fn encoding_channel_announcement() {
2897                 do_encoding_channel_announcement(true, false);
2898                 do_encoding_channel_announcement(false, true);
2899                 do_encoding_channel_announcement(false, false);
2900                 do_encoding_channel_announcement(true, true);
2901         }
2902
2903         fn do_encoding_node_announcement(unknown_features_bits: bool, ipv4: bool, ipv6: bool, onionv2: bool, onionv3: bool, hostname: bool, excess_address_data: bool, excess_data: bool) {
2904                 let secp_ctx = Secp256k1::new();
2905                 let (privkey_1, pubkey_1) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
2906                 let sig_1 = get_sig_on!(privkey_1, secp_ctx, String::from("01010101010101010101010101010101"));
2907                 let features = if unknown_features_bits {
2908                         NodeFeatures::from_le_bytes(vec![0xFF, 0xFF])
2909                 } else {
2910                         // Set to some features we may support
2911                         NodeFeatures::from_le_bytes(vec![2 | 1 << 5])
2912                 };
2913                 let mut addresses = Vec::new();
2914                 if ipv4 {
2915                         addresses.push(SocketAddress::TcpIpV4 {
2916                                 addr: [255, 254, 253, 252],
2917                                 port: 9735
2918                         });
2919                 }
2920                 if ipv6 {
2921                         addresses.push(SocketAddress::TcpIpV6 {
2922                                 addr: [255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240],
2923                                 port: 9735
2924                         });
2925                 }
2926                 if onionv2 {
2927                         addresses.push(msgs::SocketAddress::OnionV2(
2928                                 [255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 38, 7]
2929                         ));
2930                 }
2931                 if onionv3 {
2932                         addresses.push(msgs::SocketAddress::OnionV3 {
2933                                 ed25519_pubkey: [255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240, 239, 238, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224],
2934                                 checksum: 32,
2935                                 version: 16,
2936                                 port: 9735
2937                         });
2938                 }
2939                 if hostname {
2940                         addresses.push(SocketAddress::Hostname {
2941                                 hostname: Hostname::try_from(String::from("host")).unwrap(),
2942                                 port: 9735,
2943                         });
2944                 }
2945                 let mut addr_len = 0;
2946                 for addr in &addresses {
2947                         addr_len += addr.len() + 1;
2948                 }
2949                 let unsigned_node_announcement = msgs::UnsignedNodeAnnouncement {
2950                         features,
2951                         timestamp: 20190119,
2952                         node_id: NodeId::from_pubkey(&pubkey_1),
2953                         rgb: [32; 3],
2954                         alias: NodeAlias([16;32]),
2955                         addresses,
2956                         excess_address_data: if excess_address_data { vec![33, 108, 40, 11, 83, 149, 162, 84, 110, 126, 75, 38, 99, 224, 79, 129, 22, 34, 241, 90, 79, 146, 232, 58, 162, 233, 43, 162, 165, 115, 193, 57, 20, 44, 84, 174, 99, 7, 42, 30, 193, 238, 125, 192, 192, 75, 222, 92, 132, 120, 6, 23, 42, 160, 92, 146, 194, 42, 232, 227, 8, 209, 210, 105] } else { Vec::new() },
2957                         excess_data: if excess_data { vec![59, 18, 204, 25, 92, 224, 162, 209, 189, 166, 168, 139, 239, 161, 159, 160, 127, 81, 202, 167, 92, 232, 56, 55, 242, 137, 101, 96, 11, 138, 172, 171, 8, 85, 255, 176, 231, 65, 236, 95, 124, 65, 66, 30, 152, 41, 169, 212, 134, 17, 200, 200, 49, 247, 27, 229, 234, 115, 230, 101, 148, 151, 127, 253] } else { Vec::new() },
2958                 };
2959                 addr_len += unsigned_node_announcement.excess_address_data.len() as u16;
2960                 let node_announcement = msgs::NodeAnnouncement {
2961                         signature: sig_1,
2962                         contents: unsigned_node_announcement,
2963                 };
2964                 let encoded_value = node_announcement.encode();
2965                 let mut target_value = hex::decode("d977cb9b53d93a6ff64bb5f1e158b4094b66e798fb12911168a3ccdf80a83096340a6a95da0ae8d9f776528eecdbb747eb6b545495a4319ed5378e35b21e073a").unwrap();
2966                 if unknown_features_bits {
2967                         target_value.append(&mut hex::decode("0002ffff").unwrap());
2968                 } else {
2969                         target_value.append(&mut hex::decode("000122").unwrap());
2970                 }
2971                 target_value.append(&mut hex::decode("013413a7031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f2020201010101010101010101010101010101010101010101010101010101010101010").unwrap());
2972                 target_value.append(&mut vec![(addr_len >> 8) as u8, addr_len as u8]);
2973                 if ipv4 {
2974                         target_value.append(&mut hex::decode("01fffefdfc2607").unwrap());
2975                 }
2976                 if ipv6 {
2977                         target_value.append(&mut hex::decode("02fffefdfcfbfaf9f8f7f6f5f4f3f2f1f02607").unwrap());
2978                 }
2979                 if onionv2 {
2980                         target_value.append(&mut hex::decode("03fffefdfcfbfaf9f8f7f62607").unwrap());
2981                 }
2982                 if onionv3 {
2983                         target_value.append(&mut hex::decode("04fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e00020102607").unwrap());
2984                 }
2985                 if hostname {
2986                         target_value.append(&mut hex::decode("0504686f73742607").unwrap());
2987                 }
2988                 if excess_address_data {
2989                         target_value.append(&mut hex::decode("216c280b5395a2546e7e4b2663e04f811622f15a4f92e83aa2e92ba2a573c139142c54ae63072a1ec1ee7dc0c04bde5c847806172aa05c92c22ae8e308d1d269").unwrap());
2990                 }
2991                 if excess_data {
2992                         target_value.append(&mut hex::decode("3b12cc195ce0a2d1bda6a88befa19fa07f51caa75ce83837f28965600b8aacab0855ffb0e741ec5f7c41421e9829a9d48611c8c831f71be5ea73e66594977ffd").unwrap());
2993                 }
2994                 assert_eq!(encoded_value, target_value);
2995         }
2996
2997         #[test]
2998         fn encoding_node_announcement() {
2999                 do_encoding_node_announcement(true, true, true, true, true, true, true, true);
3000                 do_encoding_node_announcement(false, false, false, false, false, false, false, false);
3001                 do_encoding_node_announcement(false, true, false, false, false, false, false, false);
3002                 do_encoding_node_announcement(false, false, true, false, false, false, false, false);
3003                 do_encoding_node_announcement(false, false, false, true, false, false, false, false);
3004                 do_encoding_node_announcement(false, false, false, false, true, false, false, false);
3005                 do_encoding_node_announcement(false, false, false, false, false, true, false, false);
3006                 do_encoding_node_announcement(false, false, false, false, false, false, true, false);
3007                 do_encoding_node_announcement(false, true, false, true, false, false, true, false);
3008                 do_encoding_node_announcement(false, false, true, false, true, false, false, false);
3009         }
3010
3011         fn do_encoding_channel_update(direction: bool, disable: bool, excess_data: bool) {
3012                 let secp_ctx = Secp256k1::new();
3013                 let (privkey_1, _) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
3014                 let sig_1 = get_sig_on!(privkey_1, secp_ctx, String::from("01010101010101010101010101010101"));
3015                 let unsigned_channel_update = msgs::UnsignedChannelUpdate {
3016                         chain_hash: ChainHash::using_genesis_block(Network::Bitcoin),
3017                         short_channel_id: 2316138423780173,
3018                         timestamp: 20190119,
3019                         flags: if direction { 1 } else { 0 } | if disable { 1 << 1 } else { 0 },
3020                         cltv_expiry_delta: 144,
3021                         htlc_minimum_msat: 1000000,
3022                         htlc_maximum_msat: 131355275467161,
3023                         fee_base_msat: 10000,
3024                         fee_proportional_millionths: 20,
3025                         excess_data: if excess_data { vec![0, 0, 0, 0, 59, 154, 202, 0] } else { Vec::new() }
3026                 };
3027                 let channel_update = msgs::ChannelUpdate {
3028                         signature: sig_1,
3029                         contents: unsigned_channel_update
3030                 };
3031                 let encoded_value = channel_update.encode();
3032                 let mut target_value = hex::decode("d977cb9b53d93a6ff64bb5f1e158b4094b66e798fb12911168a3ccdf80a83096340a6a95da0ae8d9f776528eecdbb747eb6b545495a4319ed5378e35b21e073a").unwrap();
3033                 target_value.append(&mut hex::decode("6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000").unwrap());
3034                 target_value.append(&mut hex::decode("00083a840000034d013413a7").unwrap());
3035                 target_value.append(&mut hex::decode("01").unwrap());
3036                 target_value.append(&mut hex::decode("00").unwrap());
3037                 if direction {
3038                         let flag = target_value.last_mut().unwrap();
3039                         *flag = 1;
3040                 }
3041                 if disable {
3042                         let flag = target_value.last_mut().unwrap();
3043                         *flag = *flag | 1 << 1;
3044                 }
3045                 target_value.append(&mut hex::decode("009000000000000f42400000271000000014").unwrap());
3046                 target_value.append(&mut hex::decode("0000777788889999").unwrap());
3047                 if excess_data {
3048                         target_value.append(&mut hex::decode("000000003b9aca00").unwrap());
3049                 }
3050                 assert_eq!(encoded_value, target_value);
3051         }
3052
3053         #[test]
3054         fn encoding_channel_update() {
3055                 do_encoding_channel_update(false, false, false);
3056                 do_encoding_channel_update(false, false, true);
3057                 do_encoding_channel_update(true, false, false);
3058                 do_encoding_channel_update(true, false, true);
3059                 do_encoding_channel_update(false, true, false);
3060                 do_encoding_channel_update(false, true, true);
3061                 do_encoding_channel_update(true, true, false);
3062                 do_encoding_channel_update(true, true, true);
3063         }
3064
3065         fn do_encoding_open_channel(random_bit: bool, shutdown: bool, incl_chan_type: bool) {
3066                 let secp_ctx = Secp256k1::new();
3067                 let (_, pubkey_1) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
3068                 let (_, pubkey_2) = get_keys_from!("0202020202020202020202020202020202020202020202020202020202020202", secp_ctx);
3069                 let (_, pubkey_3) = get_keys_from!("0303030303030303030303030303030303030303030303030303030303030303", secp_ctx);
3070                 let (_, pubkey_4) = get_keys_from!("0404040404040404040404040404040404040404040404040404040404040404", secp_ctx);
3071                 let (_, pubkey_5) = get_keys_from!("0505050505050505050505050505050505050505050505050505050505050505", secp_ctx);
3072                 let (_, pubkey_6) = get_keys_from!("0606060606060606060606060606060606060606060606060606060606060606", secp_ctx);
3073                 let open_channel = msgs::OpenChannel {
3074                         chain_hash: ChainHash::using_genesis_block(Network::Bitcoin),
3075                         temporary_channel_id: ChannelId::from_bytes([2; 32]),
3076                         funding_satoshis: 1311768467284833366,
3077                         push_msat: 2536655962884945560,
3078                         dust_limit_satoshis: 3608586615801332854,
3079                         max_htlc_value_in_flight_msat: 8517154655701053848,
3080                         channel_reserve_satoshis: 8665828695742877976,
3081                         htlc_minimum_msat: 2316138423780173,
3082                         feerate_per_kw: 821716,
3083                         to_self_delay: 49340,
3084                         max_accepted_htlcs: 49340,
3085                         funding_pubkey: pubkey_1,
3086                         revocation_basepoint: pubkey_2,
3087                         payment_point: pubkey_3,
3088                         delayed_payment_basepoint: pubkey_4,
3089                         htlc_basepoint: pubkey_5,
3090                         first_per_commitment_point: pubkey_6,
3091                         channel_flags: if random_bit { 1 << 5 } else { 0 },
3092                         shutdown_scriptpubkey: if shutdown { Some(Address::p2pkh(&::bitcoin::PublicKey{compressed: true, inner: pubkey_1}, Network::Testnet).script_pubkey()) } else { None },
3093                         channel_type: if incl_chan_type { Some(ChannelTypeFeatures::empty()) } else { None },
3094                 };
3095                 let encoded_value = open_channel.encode();
3096                 let mut target_value = Vec::new();
3097                 target_value.append(&mut hex::decode("6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000").unwrap());
3098                 target_value.append(&mut hex::decode("02020202020202020202020202020202020202020202020202020202020202021234567890123456233403289122369832144668701144767633030896203198784335490624111800083a840000034d000c89d4c0bcc0bc031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f024d4b6cd1361032ca9bd2aeb9d900aa4d45d9ead80ac9423374c451a7254d076602531fe6068134503d2723133227c867ac8fa6c83c537e9a44c3c5bdbdcb1fe33703462779ad4aad39514614751a71085f2f10e1c7a593e4e030efb5b8721ce55b0b0362c0a046dacce86ddd0343c6d3c7c79c2208ba0d9c9cf24a6d046d21d21f90f703f006a18d5653c4edf5391ff23a61f03ff83d237e880ee61187fa9f379a028e0a").unwrap());
3099                 if random_bit {
3100                         target_value.append(&mut hex::decode("20").unwrap());
3101                 } else {
3102                         target_value.append(&mut hex::decode("00").unwrap());
3103                 }
3104                 if shutdown {
3105                         target_value.append(&mut hex::decode("001976a91479b000887626b294a914501a4cd226b58b23598388ac").unwrap());
3106                 }
3107                 if incl_chan_type {
3108                         target_value.append(&mut hex::decode("0100").unwrap());
3109                 }
3110                 assert_eq!(encoded_value, target_value);
3111         }
3112
3113         #[test]
3114         fn encoding_open_channel() {
3115                 do_encoding_open_channel(false, false, false);
3116                 do_encoding_open_channel(false, false, true);
3117                 do_encoding_open_channel(false, true, false);
3118                 do_encoding_open_channel(false, true, true);
3119                 do_encoding_open_channel(true, false, false);
3120                 do_encoding_open_channel(true, false, true);
3121                 do_encoding_open_channel(true, true, false);
3122                 do_encoding_open_channel(true, true, true);
3123         }
3124
3125         fn do_encoding_open_channelv2(random_bit: bool, shutdown: bool, incl_chan_type: bool, require_confirmed_inputs: bool) {
3126                 let secp_ctx = Secp256k1::new();
3127                 let (_, pubkey_1) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
3128                 let (_, pubkey_2) = get_keys_from!("0202020202020202020202020202020202020202020202020202020202020202", secp_ctx);
3129                 let (_, pubkey_3) = get_keys_from!("0303030303030303030303030303030303030303030303030303030303030303", secp_ctx);
3130                 let (_, pubkey_4) = get_keys_from!("0404040404040404040404040404040404040404040404040404040404040404", secp_ctx);
3131                 let (_, pubkey_5) = get_keys_from!("0505050505050505050505050505050505050505050505050505050505050505", secp_ctx);
3132                 let (_, pubkey_6) = get_keys_from!("0606060606060606060606060606060606060606060606060606060606060606", secp_ctx);
3133                 let (_, pubkey_7) = get_keys_from!("0707070707070707070707070707070707070707070707070707070707070707", secp_ctx);
3134                 let open_channelv2 = msgs::OpenChannelV2 {
3135                         chain_hash: ChainHash::using_genesis_block(Network::Bitcoin),
3136                         temporary_channel_id: ChannelId::from_bytes([2; 32]),
3137                         funding_feerate_sat_per_1000_weight: 821716,
3138                         commitment_feerate_sat_per_1000_weight: 821716,
3139                         funding_satoshis: 1311768467284833366,
3140                         dust_limit_satoshis: 3608586615801332854,
3141                         max_htlc_value_in_flight_msat: 8517154655701053848,
3142                         htlc_minimum_msat: 2316138423780173,
3143                         to_self_delay: 49340,
3144                         max_accepted_htlcs: 49340,
3145                         locktime: 305419896,
3146                         funding_pubkey: pubkey_1,
3147                         revocation_basepoint: pubkey_2,
3148                         payment_basepoint: pubkey_3,
3149                         delayed_payment_basepoint: pubkey_4,
3150                         htlc_basepoint: pubkey_5,
3151                         first_per_commitment_point: pubkey_6,
3152                         second_per_commitment_point: pubkey_7,
3153                         channel_flags: if random_bit { 1 << 5 } else { 0 },
3154                         shutdown_scriptpubkey: if shutdown { Some(Address::p2pkh(&::bitcoin::PublicKey{compressed: true, inner: pubkey_1}, Network::Testnet).script_pubkey()) } else { None },
3155                         channel_type: if incl_chan_type { Some(ChannelTypeFeatures::empty()) } else { None },
3156                         require_confirmed_inputs: if require_confirmed_inputs { Some(()) } else { None },
3157                 };
3158                 let encoded_value = open_channelv2.encode();
3159                 let mut target_value = Vec::new();
3160                 target_value.append(&mut hex::decode("6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000").unwrap());
3161                 target_value.append(&mut hex::decode("0202020202020202020202020202020202020202020202020202020202020202").unwrap());
3162                 target_value.append(&mut hex::decode("000c89d4").unwrap());
3163                 target_value.append(&mut hex::decode("000c89d4").unwrap());
3164                 target_value.append(&mut hex::decode("1234567890123456").unwrap());
3165                 target_value.append(&mut hex::decode("3214466870114476").unwrap());
3166                 target_value.append(&mut hex::decode("7633030896203198").unwrap());
3167                 target_value.append(&mut hex::decode("00083a840000034d").unwrap());
3168                 target_value.append(&mut hex::decode("c0bc").unwrap());
3169                 target_value.append(&mut hex::decode("c0bc").unwrap());
3170                 target_value.append(&mut hex::decode("12345678").unwrap());
3171                 target_value.append(&mut hex::decode("031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f").unwrap());
3172                 target_value.append(&mut hex::decode("024d4b6cd1361032ca9bd2aeb9d900aa4d45d9ead80ac9423374c451a7254d0766").unwrap());
3173                 target_value.append(&mut hex::decode("02531fe6068134503d2723133227c867ac8fa6c83c537e9a44c3c5bdbdcb1fe337").unwrap());
3174                 target_value.append(&mut hex::decode("03462779ad4aad39514614751a71085f2f10e1c7a593e4e030efb5b8721ce55b0b").unwrap());
3175                 target_value.append(&mut hex::decode("0362c0a046dacce86ddd0343c6d3c7c79c2208ba0d9c9cf24a6d046d21d21f90f7").unwrap());
3176                 target_value.append(&mut hex::decode("03f006a18d5653c4edf5391ff23a61f03ff83d237e880ee61187fa9f379a028e0a").unwrap());
3177                 target_value.append(&mut hex::decode("02989c0b76cb563971fdc9bef31ec06c3560f3249d6ee9e5d83c57625596e05f6f").unwrap());
3178
3179                 if random_bit {
3180                         target_value.append(&mut hex::decode("20").unwrap());
3181                 } else {
3182                         target_value.append(&mut hex::decode("00").unwrap());
3183                 }
3184                 if shutdown {
3185                         target_value.append(&mut hex::decode("001b").unwrap()); // Type 0 + Length 27
3186                         target_value.append(&mut hex::decode("001976a91479b000887626b294a914501a4cd226b58b23598388ac").unwrap());
3187                 }
3188                 if incl_chan_type {
3189                         target_value.append(&mut hex::decode("0100").unwrap());
3190                 }
3191                 if require_confirmed_inputs {
3192                         target_value.append(&mut hex::decode("0200").unwrap());
3193                 }
3194                 assert_eq!(encoded_value, target_value);
3195         }
3196
3197         #[test]
3198         fn encoding_open_channelv2() {
3199                 do_encoding_open_channelv2(false, false, false, false);
3200                 do_encoding_open_channelv2(false, false, false, true);
3201                 do_encoding_open_channelv2(false, false, true, false);
3202                 do_encoding_open_channelv2(false, false, true, true);
3203                 do_encoding_open_channelv2(false, true, false, false);
3204                 do_encoding_open_channelv2(false, true, false, true);
3205                 do_encoding_open_channelv2(false, true, true, false);
3206                 do_encoding_open_channelv2(false, true, true, true);
3207                 do_encoding_open_channelv2(true, false, false, false);
3208                 do_encoding_open_channelv2(true, false, false, true);
3209                 do_encoding_open_channelv2(true, false, true, false);
3210                 do_encoding_open_channelv2(true, false, true, true);
3211                 do_encoding_open_channelv2(true, true, false, false);
3212                 do_encoding_open_channelv2(true, true, false, true);
3213                 do_encoding_open_channelv2(true, true, true, false);
3214                 do_encoding_open_channelv2(true, true, true, true);
3215         }
3216
3217         fn do_encoding_accept_channel(shutdown: bool) {
3218                 let secp_ctx = Secp256k1::new();
3219                 let (_, pubkey_1) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
3220                 let (_, pubkey_2) = get_keys_from!("0202020202020202020202020202020202020202020202020202020202020202", secp_ctx);
3221                 let (_, pubkey_3) = get_keys_from!("0303030303030303030303030303030303030303030303030303030303030303", secp_ctx);
3222                 let (_, pubkey_4) = get_keys_from!("0404040404040404040404040404040404040404040404040404040404040404", secp_ctx);
3223                 let (_, pubkey_5) = get_keys_from!("0505050505050505050505050505050505050505050505050505050505050505", secp_ctx);
3224                 let (_, pubkey_6) = get_keys_from!("0606060606060606060606060606060606060606060606060606060606060606", secp_ctx);
3225                 let accept_channel = msgs::AcceptChannel {
3226                         temporary_channel_id: ChannelId::from_bytes([2; 32]),
3227                         dust_limit_satoshis: 1311768467284833366,
3228                         max_htlc_value_in_flight_msat: 2536655962884945560,
3229                         channel_reserve_satoshis: 3608586615801332854,
3230                         htlc_minimum_msat: 2316138423780173,
3231                         minimum_depth: 821716,
3232                         to_self_delay: 49340,
3233                         max_accepted_htlcs: 49340,
3234                         funding_pubkey: pubkey_1,
3235                         revocation_basepoint: pubkey_2,
3236                         payment_point: pubkey_3,
3237                         delayed_payment_basepoint: pubkey_4,
3238                         htlc_basepoint: pubkey_5,
3239                         first_per_commitment_point: pubkey_6,
3240                         shutdown_scriptpubkey: if shutdown { Some(Address::p2pkh(&::bitcoin::PublicKey{compressed: true, inner: pubkey_1}, Network::Testnet).script_pubkey()) } else { None },
3241                         channel_type: None,
3242                         #[cfg(taproot)]
3243                         next_local_nonce: None,
3244                 };
3245                 let encoded_value = accept_channel.encode();
3246                 let mut target_value = hex::decode("020202020202020202020202020202020202020202020202020202020202020212345678901234562334032891223698321446687011447600083a840000034d000c89d4c0bcc0bc031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f024d4b6cd1361032ca9bd2aeb9d900aa4d45d9ead80ac9423374c451a7254d076602531fe6068134503d2723133227c867ac8fa6c83c537e9a44c3c5bdbdcb1fe33703462779ad4aad39514614751a71085f2f10e1c7a593e4e030efb5b8721ce55b0b0362c0a046dacce86ddd0343c6d3c7c79c2208ba0d9c9cf24a6d046d21d21f90f703f006a18d5653c4edf5391ff23a61f03ff83d237e880ee61187fa9f379a028e0a").unwrap();
3247                 if shutdown {
3248                         target_value.append(&mut hex::decode("001976a91479b000887626b294a914501a4cd226b58b23598388ac").unwrap());
3249                 }
3250                 assert_eq!(encoded_value, target_value);
3251         }
3252
3253         #[test]
3254         fn encoding_accept_channel() {
3255                 do_encoding_accept_channel(false);
3256                 do_encoding_accept_channel(true);
3257         }
3258
3259         fn do_encoding_accept_channelv2(shutdown: bool) {
3260                 let secp_ctx = Secp256k1::new();
3261                 let (_, pubkey_1) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
3262                 let (_, pubkey_2) = get_keys_from!("0202020202020202020202020202020202020202020202020202020202020202", secp_ctx);
3263                 let (_, pubkey_3) = get_keys_from!("0303030303030303030303030303030303030303030303030303030303030303", secp_ctx);
3264                 let (_, pubkey_4) = get_keys_from!("0404040404040404040404040404040404040404040404040404040404040404", secp_ctx);
3265                 let (_, pubkey_5) = get_keys_from!("0505050505050505050505050505050505050505050505050505050505050505", secp_ctx);
3266                 let (_, pubkey_6) = get_keys_from!("0606060606060606060606060606060606060606060606060606060606060606", secp_ctx);
3267                 let (_, pubkey_7) = get_keys_from!("0707070707070707070707070707070707070707070707070707070707070707", secp_ctx);
3268                 let accept_channelv2 = msgs::AcceptChannelV2 {
3269                         temporary_channel_id: ChannelId::from_bytes([2; 32]),
3270                         funding_satoshis: 1311768467284833366,
3271                         dust_limit_satoshis: 1311768467284833366,
3272                         max_htlc_value_in_flight_msat: 2536655962884945560,
3273                         htlc_minimum_msat: 2316138423780173,
3274                         minimum_depth: 821716,
3275                         to_self_delay: 49340,
3276                         max_accepted_htlcs: 49340,
3277                         funding_pubkey: pubkey_1,
3278                         revocation_basepoint: pubkey_2,
3279                         payment_basepoint: pubkey_3,
3280                         delayed_payment_basepoint: pubkey_4,
3281                         htlc_basepoint: pubkey_5,
3282                         first_per_commitment_point: pubkey_6,
3283                         second_per_commitment_point: pubkey_7,
3284                         shutdown_scriptpubkey: if shutdown { Some(Address::p2pkh(&::bitcoin::PublicKey{compressed: true, inner: pubkey_1}, Network::Testnet).script_pubkey()) } else { None },
3285                         channel_type: None,
3286                         require_confirmed_inputs: None,
3287                 };
3288                 let encoded_value = accept_channelv2.encode();
3289                 let mut target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202").unwrap(); // temporary_channel_id
3290                 target_value.append(&mut hex::decode("1234567890123456").unwrap()); // funding_satoshis
3291                 target_value.append(&mut hex::decode("1234567890123456").unwrap()); // dust_limit_satoshis
3292                 target_value.append(&mut hex::decode("2334032891223698").unwrap()); // max_htlc_value_in_flight_msat
3293                 target_value.append(&mut hex::decode("00083a840000034d").unwrap()); // htlc_minimum_msat
3294                 target_value.append(&mut hex::decode("000c89d4").unwrap()); //  minimum_depth
3295                 target_value.append(&mut hex::decode("c0bc").unwrap()); // to_self_delay
3296                 target_value.append(&mut hex::decode("c0bc").unwrap()); // max_accepted_htlcs
3297                 target_value.append(&mut hex::decode("031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f").unwrap()); // funding_pubkey
3298                 target_value.append(&mut hex::decode("024d4b6cd1361032ca9bd2aeb9d900aa4d45d9ead80ac9423374c451a7254d0766").unwrap()); // revocation_basepoint
3299                 target_value.append(&mut hex::decode("02531fe6068134503d2723133227c867ac8fa6c83c537e9a44c3c5bdbdcb1fe337").unwrap()); // payment_basepoint
3300                 target_value.append(&mut hex::decode("03462779ad4aad39514614751a71085f2f10e1c7a593e4e030efb5b8721ce55b0b").unwrap()); // delayed_payment_basepoint
3301                 target_value.append(&mut hex::decode("0362c0a046dacce86ddd0343c6d3c7c79c2208ba0d9c9cf24a6d046d21d21f90f7").unwrap()); // htlc_basepoint
3302                 target_value.append(&mut hex::decode("03f006a18d5653c4edf5391ff23a61f03ff83d237e880ee61187fa9f379a028e0a").unwrap()); // first_per_commitment_point
3303                 target_value.append(&mut hex::decode("02989c0b76cb563971fdc9bef31ec06c3560f3249d6ee9e5d83c57625596e05f6f").unwrap()); // second_per_commitment_point
3304                 if shutdown {
3305                         target_value.append(&mut hex::decode("001b").unwrap()); // Type 0 + Length 27
3306                         target_value.append(&mut hex::decode("001976a91479b000887626b294a914501a4cd226b58b23598388ac").unwrap());
3307                 }
3308                 assert_eq!(encoded_value, target_value);
3309         }
3310
3311         #[test]
3312         fn encoding_accept_channelv2() {
3313                 do_encoding_accept_channelv2(false);
3314                 do_encoding_accept_channelv2(true);
3315         }
3316
3317         #[test]
3318         fn encoding_funding_created() {
3319                 let secp_ctx = Secp256k1::new();
3320                 let (privkey_1, _) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
3321                 let sig_1 = get_sig_on!(privkey_1, secp_ctx, String::from("01010101010101010101010101010101"));
3322                 let funding_created = msgs::FundingCreated {
3323                         temporary_channel_id: ChannelId::from_bytes([2; 32]),
3324                         funding_txid: Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap(),
3325                         funding_output_index: 255,
3326                         signature: sig_1,
3327                         #[cfg(taproot)]
3328                         partial_signature_with_nonce: None,
3329                         #[cfg(taproot)]
3330                         next_local_nonce: None,
3331                 };
3332                 let encoded_value = funding_created.encode();
3333                 let target_value = hex::decode("02020202020202020202020202020202020202020202020202020202020202026e96fe9f8b0ddcd729ba03cfafa5a27b050b39d354dd980814268dfa9a44d4c200ffd977cb9b53d93a6ff64bb5f1e158b4094b66e798fb12911168a3ccdf80a83096340a6a95da0ae8d9f776528eecdbb747eb6b545495a4319ed5378e35b21e073a").unwrap();
3334                 assert_eq!(encoded_value, target_value);
3335         }
3336
3337         #[test]
3338         fn encoding_funding_signed() {
3339                 let secp_ctx = Secp256k1::new();
3340                 let (privkey_1, _) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
3341                 let sig_1 = get_sig_on!(privkey_1, secp_ctx, String::from("01010101010101010101010101010101"));
3342                 let funding_signed = msgs::FundingSigned {
3343                         channel_id: ChannelId::from_bytes([2; 32]),
3344                         signature: sig_1,
3345                         #[cfg(taproot)]
3346                         partial_signature_with_nonce: None,
3347                 };
3348                 let encoded_value = funding_signed.encode();
3349                 let target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202d977cb9b53d93a6ff64bb5f1e158b4094b66e798fb12911168a3ccdf80a83096340a6a95da0ae8d9f776528eecdbb747eb6b545495a4319ed5378e35b21e073a").unwrap();
3350                 assert_eq!(encoded_value, target_value);
3351         }
3352
3353         #[test]
3354         fn encoding_channel_ready() {
3355                 let secp_ctx = Secp256k1::new();
3356                 let (_, pubkey_1,) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
3357                 let channel_ready = msgs::ChannelReady {
3358                         channel_id: ChannelId::from_bytes([2; 32]),
3359                         next_per_commitment_point: pubkey_1,
3360                         short_channel_id_alias: None,
3361                 };
3362                 let encoded_value = channel_ready.encode();
3363                 let target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f").unwrap();
3364                 assert_eq!(encoded_value, target_value);
3365         }
3366
3367         #[test]
3368         fn encoding_tx_add_input() {
3369                 let tx_add_input = msgs::TxAddInput {
3370                         channel_id: ChannelId::from_bytes([2; 32]),
3371                         serial_id: 4886718345,
3372                         prevtx: TransactionU16LenLimited::new(Transaction {
3373                                 version: 2,
3374                                 lock_time: PackedLockTime(0),
3375                                 input: vec![TxIn {
3376                                         previous_output: OutPoint { txid: Txid::from_hex("305bab643ee297b8b6b76b320792c8223d55082122cb606bf89382146ced9c77").unwrap(), index: 2 }.into_bitcoin_outpoint(),
3377                                         script_sig: Script::new(),
3378                                         sequence: Sequence(0xfffffffd),
3379                                         witness: Witness::from_vec(vec![
3380                                                 hex::decode("304402206af85b7dd67450ad12c979302fac49dfacbc6a8620f49c5da2b5721cf9565ca502207002b32fed9ce1bf095f57aeb10c36928ac60b12e723d97d2964a54640ceefa701").unwrap(),
3381                                                 hex::decode("0301ab7dc16488303549bfcdd80f6ae5ee4c20bf97ab5410bbd6b1bfa85dcd6944").unwrap()]),
3382                                 }],
3383                                 output: vec![
3384                                         TxOut {
3385                                                 value: 12704566,
3386                                                 script_pubkey: Address::from_str("bc1qzlffunw52jav8vwdu5x3jfk6sr8u22rmq3xzw2").unwrap().script_pubkey(),
3387                                         },
3388                                         TxOut {
3389                                                 value: 245148,
3390                                                 script_pubkey: Address::from_str("bc1qxmk834g5marzm227dgqvynd23y2nvt2ztwcw2z").unwrap().script_pubkey(),
3391                                         },
3392                                 ],
3393                         }).unwrap(),
3394                         prevtx_out: 305419896,
3395                         sequence: 305419896,
3396                 };
3397                 let encoded_value = tx_add_input.encode();
3398                 let target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202000000012345678900de02000000000101779ced6c148293f86b60cb222108553d22c89207326bb7b6b897e23e64ab5b300200000000fdffffff0236dbc1000000000016001417d29e4dd454bac3b1cde50d1926da80cfc5287b9cbd03000000000016001436ec78d514df462da95e6a00c24daa8915362d420247304402206af85b7dd67450ad12c979302fac49dfacbc6a8620f49c5da2b5721cf9565ca502207002b32fed9ce1bf095f57aeb10c36928ac60b12e723d97d2964a54640ceefa701210301ab7dc16488303549bfcdd80f6ae5ee4c20bf97ab5410bbd6b1bfa85dcd6944000000001234567812345678").unwrap();
3399                 assert_eq!(encoded_value, target_value);
3400         }
3401
3402         #[test]
3403         fn encoding_tx_add_output() {
3404                 let tx_add_output = msgs::TxAddOutput {
3405                         channel_id: ChannelId::from_bytes([2; 32]),
3406                         serial_id: 4886718345,
3407                         sats: 4886718345,
3408                         script: Address::from_str("bc1qxmk834g5marzm227dgqvynd23y2nvt2ztwcw2z").unwrap().script_pubkey(),
3409                 };
3410                 let encoded_value = tx_add_output.encode();
3411                 let target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202000000012345678900000001234567890016001436ec78d514df462da95e6a00c24daa8915362d42").unwrap();
3412                 assert_eq!(encoded_value, target_value);
3413         }
3414
3415         #[test]
3416         fn encoding_tx_remove_input() {
3417                 let tx_remove_input = msgs::TxRemoveInput {
3418                         channel_id: ChannelId::from_bytes([2; 32]),
3419                         serial_id: 4886718345,
3420                 };
3421                 let encoded_value = tx_remove_input.encode();
3422                 let target_value = hex::decode("02020202020202020202020202020202020202020202020202020202020202020000000123456789").unwrap();
3423                 assert_eq!(encoded_value, target_value);
3424         }
3425
3426         #[test]
3427         fn encoding_tx_remove_output() {
3428                 let tx_remove_output = msgs::TxRemoveOutput {
3429                         channel_id: ChannelId::from_bytes([2; 32]),
3430                         serial_id: 4886718345,
3431                 };
3432                 let encoded_value = tx_remove_output.encode();
3433                 let target_value = hex::decode("02020202020202020202020202020202020202020202020202020202020202020000000123456789").unwrap();
3434                 assert_eq!(encoded_value, target_value);
3435         }
3436
3437         #[test]
3438         fn encoding_tx_complete() {
3439                 let tx_complete = msgs::TxComplete {
3440                         channel_id: ChannelId::from_bytes([2; 32]),
3441                 };
3442                 let encoded_value = tx_complete.encode();
3443                 let target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202").unwrap();
3444                 assert_eq!(encoded_value, target_value);
3445         }
3446
3447         #[test]
3448         fn encoding_tx_signatures() {
3449                 let tx_signatures = msgs::TxSignatures {
3450                         channel_id: ChannelId::from_bytes([2; 32]),
3451                         tx_hash: Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap(),
3452                         witnesses: vec![
3453                                 Witness::from_vec(vec![
3454                                         hex::decode("304402206af85b7dd67450ad12c979302fac49dfacbc6a8620f49c5da2b5721cf9565ca502207002b32fed9ce1bf095f57aeb10c36928ac60b12e723d97d2964a54640ceefa701").unwrap(),
3455                                         hex::decode("0301ab7dc16488303549bfcdd80f6ae5ee4c20bf97ab5410bbd6b1bfa85dcd6944").unwrap()]),
3456                                 Witness::from_vec(vec![
3457                                         hex::decode("3045022100ee00dbf4a862463e837d7c08509de814d620e4d9830fa84818713e0fa358f145022021c3c7060c4d53fe84fd165d60208451108a778c13b92ca4c6bad439236126cc01").unwrap(),
3458                                         hex::decode("028fbbf0b16f5ba5bcb5dd37cd4047ce6f726a21c06682f9ec2f52b057de1dbdb5").unwrap()]),
3459                         ],
3460                 };
3461                 let encoded_value = tx_signatures.encode();
3462                 let mut target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202").unwrap(); // channel_id
3463                 target_value.append(&mut hex::decode("6e96fe9f8b0ddcd729ba03cfafa5a27b050b39d354dd980814268dfa9a44d4c2").unwrap()); // tx_hash (sha256) (big endian byte order)
3464                 target_value.append(&mut hex::decode("0002").unwrap()); // num_witnesses (u16)
3465                 // Witness 1
3466                 target_value.append(&mut hex::decode("006b").unwrap()); // len of witness_data
3467                 target_value.append(&mut hex::decode("02").unwrap()); // num_witness_elements (VarInt)
3468                 target_value.append(&mut hex::decode("47").unwrap()); // len of witness element data (VarInt)
3469                 target_value.append(&mut hex::decode("304402206af85b7dd67450ad12c979302fac49dfacbc6a8620f49c5da2b5721cf9565ca502207002b32fed9ce1bf095f57aeb10c36928ac60b12e723d97d2964a54640ceefa701").unwrap());
3470                 target_value.append(&mut hex::decode("21").unwrap()); // len of witness element data (VarInt)
3471                 target_value.append(&mut hex::decode("0301ab7dc16488303549bfcdd80f6ae5ee4c20bf97ab5410bbd6b1bfa85dcd6944").unwrap());
3472                 // Witness 2
3473                 target_value.append(&mut hex::decode("006c").unwrap()); // len of witness_data
3474                 target_value.append(&mut hex::decode("02").unwrap()); // num_witness_elements (VarInt)
3475                 target_value.append(&mut hex::decode("48").unwrap()); // len of witness element data (VarInt)
3476                 target_value.append(&mut hex::decode("3045022100ee00dbf4a862463e837d7c08509de814d620e4d9830fa84818713e0fa358f145022021c3c7060c4d53fe84fd165d60208451108a778c13b92ca4c6bad439236126cc01").unwrap());
3477                 target_value.append(&mut hex::decode("21").unwrap()); // len of witness element data (VarInt)
3478                 target_value.append(&mut hex::decode("028fbbf0b16f5ba5bcb5dd37cd4047ce6f726a21c06682f9ec2f52b057de1dbdb5").unwrap());
3479                 assert_eq!(encoded_value, target_value);
3480         }
3481
3482         fn do_encoding_tx_init_rbf(funding_value_with_hex_target: Option<(i64, &str)>) {
3483                 let tx_init_rbf = msgs::TxInitRbf {
3484                         channel_id: ChannelId::from_bytes([2; 32]),
3485                         locktime: 305419896,
3486                         feerate_sat_per_1000_weight: 20190119,
3487                         funding_output_contribution: if let Some((value, _)) = funding_value_with_hex_target { Some(value) } else { None },
3488                 };
3489                 let encoded_value = tx_init_rbf.encode();
3490                 let mut target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202").unwrap(); // channel_id
3491                 target_value.append(&mut hex::decode("12345678").unwrap()); // locktime
3492                 target_value.append(&mut hex::decode("013413a7").unwrap()); // feerate_sat_per_1000_weight
3493                 if let Some((_, target)) = funding_value_with_hex_target {
3494                         target_value.push(0x00); // Type
3495                         target_value.push(target.len() as u8 / 2); // Length
3496                         target_value.append(&mut hex::decode(target).unwrap()); // Value (i64)
3497                 }
3498                 assert_eq!(encoded_value, target_value);
3499         }
3500
3501         #[test]
3502         fn encoding_tx_init_rbf() {
3503                 do_encoding_tx_init_rbf(Some((1311768467284833366, "1234567890123456")));
3504                 do_encoding_tx_init_rbf(Some((13117684672, "000000030DDFFBC0")));
3505                 do_encoding_tx_init_rbf(None);
3506         }
3507
3508         fn do_encoding_tx_ack_rbf(funding_value_with_hex_target: Option<(i64, &str)>) {
3509                 let tx_ack_rbf = msgs::TxAckRbf {
3510                         channel_id: ChannelId::from_bytes([2; 32]),
3511                         funding_output_contribution: if let Some((value, _)) = funding_value_with_hex_target { Some(value) } else { None },
3512                 };
3513                 let encoded_value = tx_ack_rbf.encode();
3514                 let mut target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202").unwrap();
3515                 if let Some((_, target)) = funding_value_with_hex_target {
3516                         target_value.push(0x00); // Type
3517                         target_value.push(target.len() as u8 / 2); // Length
3518                         target_value.append(&mut hex::decode(target).unwrap()); // Value (i64)
3519                 }
3520                 assert_eq!(encoded_value, target_value);
3521         }
3522
3523         #[test]
3524         fn encoding_tx_ack_rbf() {
3525                 do_encoding_tx_ack_rbf(Some((1311768467284833366, "1234567890123456")));
3526                 do_encoding_tx_ack_rbf(Some((13117684672, "000000030DDFFBC0")));
3527                 do_encoding_tx_ack_rbf(None);
3528         }
3529
3530         #[test]
3531         fn encoding_tx_abort() {
3532                 let tx_abort = msgs::TxAbort {
3533                         channel_id: ChannelId::from_bytes([2; 32]),
3534                         data: hex::decode("54686520717569636B2062726F776E20666F78206A756D7073206F76657220746865206C617A7920646F672E").unwrap(),
3535                 };
3536                 let encoded_value = tx_abort.encode();
3537                 let target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202002C54686520717569636B2062726F776E20666F78206A756D7073206F76657220746865206C617A7920646F672E").unwrap();
3538                 assert_eq!(encoded_value, target_value);
3539         }
3540
3541         fn do_encoding_shutdown(script_type: u8) {
3542                 let secp_ctx = Secp256k1::new();
3543                 let (_, pubkey_1) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
3544                 let script = Builder::new().push_opcode(opcodes::OP_TRUE).into_script();
3545                 let shutdown = msgs::Shutdown {
3546                         channel_id: ChannelId::from_bytes([2; 32]),
3547                         scriptpubkey:
3548                                 if script_type == 1 { Address::p2pkh(&::bitcoin::PublicKey{compressed: true, inner: pubkey_1}, Network::Testnet).script_pubkey() }
3549                                 else if script_type == 2 { Address::p2sh(&script, Network::Testnet).unwrap().script_pubkey() }
3550                                 else if script_type == 3 { Address::p2wpkh(&::bitcoin::PublicKey{compressed: true, inner: pubkey_1}, Network::Testnet).unwrap().script_pubkey() }
3551                                 else { Address::p2wsh(&script, Network::Testnet).script_pubkey() },
3552                 };
3553                 let encoded_value = shutdown.encode();
3554                 let mut target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202").unwrap();
3555                 if script_type == 1 {
3556                         target_value.append(&mut hex::decode("001976a91479b000887626b294a914501a4cd226b58b23598388ac").unwrap());
3557                 } else if script_type == 2 {
3558                         target_value.append(&mut hex::decode("0017a914da1745e9b549bd0bfa1a569971c77eba30cd5a4b87").unwrap());
3559                 } else if script_type == 3 {
3560                         target_value.append(&mut hex::decode("0016001479b000887626b294a914501a4cd226b58b235983").unwrap());
3561                 } else if script_type == 4 {
3562                         target_value.append(&mut hex::decode("002200204ae81572f06e1b88fd5ced7a1a000945432e83e1551e6f721ee9c00b8cc33260").unwrap());
3563                 }
3564                 assert_eq!(encoded_value, target_value);
3565         }
3566
3567         #[test]
3568         fn encoding_shutdown() {
3569                 do_encoding_shutdown(1);
3570                 do_encoding_shutdown(2);
3571                 do_encoding_shutdown(3);
3572                 do_encoding_shutdown(4);
3573         }
3574
3575         #[test]
3576         fn encoding_closing_signed() {
3577                 let secp_ctx = Secp256k1::new();
3578                 let (privkey_1, _) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
3579                 let sig_1 = get_sig_on!(privkey_1, secp_ctx, String::from("01010101010101010101010101010101"));
3580                 let closing_signed = msgs::ClosingSigned {
3581                         channel_id: ChannelId::from_bytes([2; 32]),
3582                         fee_satoshis: 2316138423780173,
3583                         signature: sig_1,
3584                         fee_range: None,
3585                 };
3586                 let encoded_value = closing_signed.encode();
3587                 let target_value = hex::decode("020202020202020202020202020202020202020202020202020202020202020200083a840000034dd977cb9b53d93a6ff64bb5f1e158b4094b66e798fb12911168a3ccdf80a83096340a6a95da0ae8d9f776528eecdbb747eb6b545495a4319ed5378e35b21e073a").unwrap();
3588                 assert_eq!(encoded_value, target_value);
3589                 assert_eq!(msgs::ClosingSigned::read(&mut Cursor::new(&target_value)).unwrap(), closing_signed);
3590
3591                 let closing_signed_with_range = msgs::ClosingSigned {
3592                         channel_id: ChannelId::from_bytes([2; 32]),
3593                         fee_satoshis: 2316138423780173,
3594                         signature: sig_1,
3595                         fee_range: Some(msgs::ClosingSignedFeeRange {
3596                                 min_fee_satoshis: 0xdeadbeef,
3597                                 max_fee_satoshis: 0x1badcafe01234567,
3598                         }),
3599                 };
3600                 let encoded_value_with_range = closing_signed_with_range.encode();
3601                 let target_value_with_range = hex::decode("020202020202020202020202020202020202020202020202020202020202020200083a840000034dd977cb9b53d93a6ff64bb5f1e158b4094b66e798fb12911168a3ccdf80a83096340a6a95da0ae8d9f776528eecdbb747eb6b545495a4319ed5378e35b21e073a011000000000deadbeef1badcafe01234567").unwrap();
3602                 assert_eq!(encoded_value_with_range, target_value_with_range);
3603                 assert_eq!(msgs::ClosingSigned::read(&mut Cursor::new(&target_value_with_range)).unwrap(),
3604                         closing_signed_with_range);
3605         }
3606
3607         #[test]
3608         fn encoding_update_add_htlc() {
3609                 let secp_ctx = Secp256k1::new();
3610                 let (_, pubkey_1) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
3611                 let onion_routing_packet = msgs::OnionPacket {
3612                         version: 255,
3613                         public_key: Ok(pubkey_1),
3614                         hop_data: [1; 20*65],
3615                         hmac: [2; 32]
3616                 };
3617                 let update_add_htlc = msgs::UpdateAddHTLC {
3618                         channel_id: ChannelId::from_bytes([2; 32]),
3619                         htlc_id: 2316138423780173,
3620                         amount_msat: 3608586615801332854,
3621                         payment_hash: PaymentHash([1; 32]),
3622                         cltv_expiry: 821716,
3623                         onion_routing_packet,
3624                         skimmed_fee_msat: None,
3625                 };
3626                 let encoded_value = update_add_htlc.encode();
3627                 let target_value = hex::decode("020202020202020202020202020202020202020202020202020202020202020200083a840000034d32144668701144760101010101010101010101010101010101010101010101010101010101010101000c89d4ff031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010202020202020202020202020202020202020202020202020202020202020202").unwrap();
3628                 assert_eq!(encoded_value, target_value);
3629         }
3630
3631         #[test]
3632         fn encoding_update_fulfill_htlc() {
3633                 let update_fulfill_htlc = msgs::UpdateFulfillHTLC {
3634                         channel_id: ChannelId::from_bytes([2; 32]),
3635                         htlc_id: 2316138423780173,
3636                         payment_preimage: PaymentPreimage([1; 32]),
3637                 };
3638                 let encoded_value = update_fulfill_htlc.encode();
3639                 let target_value = hex::decode("020202020202020202020202020202020202020202020202020202020202020200083a840000034d0101010101010101010101010101010101010101010101010101010101010101").unwrap();
3640                 assert_eq!(encoded_value, target_value);
3641         }
3642
3643         #[test]
3644         fn encoding_update_fail_htlc() {
3645                 let reason = OnionErrorPacket {
3646                         data: [1; 32].to_vec(),
3647                 };
3648                 let update_fail_htlc = msgs::UpdateFailHTLC {
3649                         channel_id: ChannelId::from_bytes([2; 32]),
3650                         htlc_id: 2316138423780173,
3651                         reason
3652                 };
3653                 let encoded_value = update_fail_htlc.encode();
3654                 let target_value = hex::decode("020202020202020202020202020202020202020202020202020202020202020200083a840000034d00200101010101010101010101010101010101010101010101010101010101010101").unwrap();
3655                 assert_eq!(encoded_value, target_value);
3656         }
3657
3658         #[test]
3659         fn encoding_update_fail_malformed_htlc() {
3660                 let update_fail_malformed_htlc = msgs::UpdateFailMalformedHTLC {
3661                         channel_id: ChannelId::from_bytes([2; 32]),
3662                         htlc_id: 2316138423780173,
3663                         sha256_of_onion: [1; 32],
3664                         failure_code: 255
3665                 };
3666                 let encoded_value = update_fail_malformed_htlc.encode();
3667                 let target_value = hex::decode("020202020202020202020202020202020202020202020202020202020202020200083a840000034d010101010101010101010101010101010101010101010101010101010101010100ff").unwrap();
3668                 assert_eq!(encoded_value, target_value);
3669         }
3670
3671         fn do_encoding_commitment_signed(htlcs: bool) {
3672                 let secp_ctx = Secp256k1::new();
3673                 let (privkey_1, _) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
3674                 let (privkey_2, _) = get_keys_from!("0202020202020202020202020202020202020202020202020202020202020202", secp_ctx);
3675                 let (privkey_3, _) = get_keys_from!("0303030303030303030303030303030303030303030303030303030303030303", secp_ctx);
3676                 let (privkey_4, _) = get_keys_from!("0404040404040404040404040404040404040404040404040404040404040404", secp_ctx);
3677                 let sig_1 = get_sig_on!(privkey_1, secp_ctx, String::from("01010101010101010101010101010101"));
3678                 let sig_2 = get_sig_on!(privkey_2, secp_ctx, String::from("01010101010101010101010101010101"));
3679                 let sig_3 = get_sig_on!(privkey_3, secp_ctx, String::from("01010101010101010101010101010101"));
3680                 let sig_4 = get_sig_on!(privkey_4, secp_ctx, String::from("01010101010101010101010101010101"));
3681                 let commitment_signed = msgs::CommitmentSigned {
3682                         channel_id: ChannelId::from_bytes([2; 32]),
3683                         signature: sig_1,
3684                         htlc_signatures: if htlcs { vec![sig_2, sig_3, sig_4] } else { Vec::new() },
3685                         #[cfg(taproot)]
3686                         partial_signature_with_nonce: None,
3687                 };
3688                 let encoded_value = commitment_signed.encode();
3689                 let mut target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202d977cb9b53d93a6ff64bb5f1e158b4094b66e798fb12911168a3ccdf80a83096340a6a95da0ae8d9f776528eecdbb747eb6b545495a4319ed5378e35b21e073a").unwrap();
3690                 if htlcs {
3691                         target_value.append(&mut hex::decode("00031735b6a427e80d5fe7cd90a2f4ee08dc9c27cda7c35a4172e5d85b12c49d4232537e98f9b1f3c5e6989a8b9644e90e8918127680dbd0d4043510840fc0f1e11a216c280b5395a2546e7e4b2663e04f811622f15a4f91e83aa2e92ba2a573c139142c54ae63072a1ec1ee7dc0c04bde5c847806172aa05c92c22ae8e308d1d2692b12cc195ce0a2d1bda6a88befa19fa07f51caa75ce83837f28965600b8aacab0855ffb0e741ec5f7c41421e9829a9d48611c8c831f71be5ea73e66594977ffd").unwrap());
3692                 } else {
3693                         target_value.append(&mut hex::decode("0000").unwrap());
3694                 }
3695                 assert_eq!(encoded_value, target_value);
3696         }
3697
3698         #[test]
3699         fn encoding_commitment_signed() {
3700                 do_encoding_commitment_signed(true);
3701                 do_encoding_commitment_signed(false);
3702         }
3703
3704         #[test]
3705         fn encoding_revoke_and_ack() {
3706                 let secp_ctx = Secp256k1::new();
3707                 let (_, pubkey_1) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
3708                 let raa = msgs::RevokeAndACK {
3709                         channel_id: ChannelId::from_bytes([2; 32]),
3710                         per_commitment_secret: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
3711                         next_per_commitment_point: pubkey_1,
3712                         #[cfg(taproot)]
3713                         next_local_nonce: None,
3714                 };
3715                 let encoded_value = raa.encode();
3716                 let target_value = hex::decode("02020202020202020202020202020202020202020202020202020202020202020101010101010101010101010101010101010101010101010101010101010101031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f").unwrap();
3717                 assert_eq!(encoded_value, target_value);
3718         }
3719
3720         #[test]
3721         fn encoding_update_fee() {
3722                 let update_fee = msgs::UpdateFee {
3723                         channel_id: ChannelId::from_bytes([2; 32]),
3724                         feerate_per_kw: 20190119,
3725                 };
3726                 let encoded_value = update_fee.encode();
3727                 let target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202013413a7").unwrap();
3728                 assert_eq!(encoded_value, target_value);
3729         }
3730
3731         #[test]
3732         fn encoding_init() {
3733                 let mainnet_hash = ChainHash::using_genesis_block(Network::Bitcoin);
3734                 assert_eq!(msgs::Init {
3735                         features: InitFeatures::from_le_bytes(vec![0xFF, 0xFF, 0xFF]),
3736                         networks: Some(vec![mainnet_hash]),
3737                         remote_network_address: None,
3738                 }.encode(), hex::decode("00023fff0003ffffff01206fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000").unwrap());
3739                 assert_eq!(msgs::Init {
3740                         features: InitFeatures::from_le_bytes(vec![0xFF]),
3741                         networks: None,
3742                         remote_network_address: None,
3743                 }.encode(), hex::decode("0001ff0001ff").unwrap());
3744                 assert_eq!(msgs::Init {
3745                         features: InitFeatures::from_le_bytes(vec![]),
3746                         networks: Some(vec![mainnet_hash]),
3747                         remote_network_address: None,
3748                 }.encode(), hex::decode("0000000001206fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000").unwrap());
3749                 assert_eq!(msgs::Init {
3750                         features: InitFeatures::from_le_bytes(vec![]),
3751                         networks: Some(vec![ChainHash::from(&[1; 32][..]), ChainHash::from(&[2; 32][..])]),
3752                         remote_network_address: None,
3753                 }.encode(), hex::decode("00000000014001010101010101010101010101010101010101010101010101010101010101010202020202020202020202020202020202020202020202020202020202020202").unwrap());
3754                 let init_msg = msgs::Init { features: InitFeatures::from_le_bytes(vec![]),
3755                         networks: Some(vec![mainnet_hash]),
3756                         remote_network_address: Some(SocketAddress::TcpIpV4 {
3757                                 addr: [127, 0, 0, 1],
3758                                 port: 1000,
3759                         }),
3760                 };
3761                 let encoded_value = init_msg.encode();
3762                 let target_value = hex::decode("0000000001206fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d61900000000000307017f00000103e8").unwrap();
3763                 assert_eq!(encoded_value, target_value);
3764                 assert_eq!(msgs::Init::read(&mut Cursor::new(&target_value)).unwrap(), init_msg);
3765         }
3766
3767         #[test]
3768         fn encoding_error() {
3769                 let error = msgs::ErrorMessage {
3770                         channel_id: ChannelId::from_bytes([2; 32]),
3771                         data: String::from("rust-lightning"),
3772                 };
3773                 let encoded_value = error.encode();
3774                 let target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202000e727573742d6c696768746e696e67").unwrap();
3775                 assert_eq!(encoded_value, target_value);
3776         }
3777
3778         #[test]
3779         fn encoding_warning() {
3780                 let error = msgs::WarningMessage {
3781                         channel_id: ChannelId::from_bytes([2; 32]),
3782                         data: String::from("rust-lightning"),
3783                 };
3784                 let encoded_value = error.encode();
3785                 let target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202000e727573742d6c696768746e696e67").unwrap();
3786                 assert_eq!(encoded_value, target_value);
3787         }
3788
3789         #[test]
3790         fn encoding_ping() {
3791                 let ping = msgs::Ping {
3792                         ponglen: 64,
3793                         byteslen: 64
3794                 };
3795                 let encoded_value = ping.encode();
3796                 let target_value = hex::decode("0040004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000").unwrap();
3797                 assert_eq!(encoded_value, target_value);
3798         }
3799
3800         #[test]
3801         fn encoding_pong() {
3802                 let pong = msgs::Pong {
3803                         byteslen: 64
3804                 };
3805                 let encoded_value = pong.encode();
3806                 let target_value = hex::decode("004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000").unwrap();
3807                 assert_eq!(encoded_value, target_value);
3808         }
3809
3810         #[test]
3811         fn encoding_nonfinal_onion_hop_data() {
3812                 let outbound_msg = msgs::OutboundOnionPayload::Forward {
3813                         short_channel_id: 0xdeadbeef1bad1dea,
3814                         amt_to_forward: 0x0badf00d01020304,
3815                         outgoing_cltv_value: 0xffffffff,
3816                 };
3817                 let encoded_value = outbound_msg.encode();
3818                 let target_value = hex::decode("1a02080badf00d010203040404ffffffff0608deadbeef1bad1dea").unwrap();
3819                 assert_eq!(encoded_value, target_value);
3820
3821                 let node_signer = test_utils::TestKeysInterface::new(&[42; 32], Network::Testnet);
3822                 let inbound_msg = ReadableArgs::read(&mut Cursor::new(&target_value[..]), &&node_signer).unwrap();
3823                 if let msgs::InboundOnionPayload::Forward {
3824                         short_channel_id, amt_to_forward, outgoing_cltv_value
3825                 } = inbound_msg {
3826                         assert_eq!(short_channel_id, 0xdeadbeef1bad1dea);
3827                         assert_eq!(amt_to_forward, 0x0badf00d01020304);
3828                         assert_eq!(outgoing_cltv_value, 0xffffffff);
3829                 } else { panic!(); }
3830         }
3831
3832         #[test]
3833         fn encoding_final_onion_hop_data() {
3834                 let outbound_msg = msgs::OutboundOnionPayload::Receive {
3835                         payment_data: None,
3836                         payment_metadata: None,
3837                         keysend_preimage: None,
3838                         amt_msat: 0x0badf00d01020304,
3839                         outgoing_cltv_value: 0xffffffff,
3840                         custom_tlvs: vec![],
3841                 };
3842                 let encoded_value = outbound_msg.encode();
3843                 let target_value = hex::decode("1002080badf00d010203040404ffffffff").unwrap();
3844                 assert_eq!(encoded_value, target_value);
3845
3846                 let node_signer = test_utils::TestKeysInterface::new(&[42; 32], Network::Testnet);
3847                 let inbound_msg = ReadableArgs::read(&mut Cursor::new(&target_value[..]), &&node_signer).unwrap();
3848                 if let msgs::InboundOnionPayload::Receive {
3849                         payment_data: None, amt_msat, outgoing_cltv_value, ..
3850                 } = inbound_msg {
3851                         assert_eq!(amt_msat, 0x0badf00d01020304);
3852                         assert_eq!(outgoing_cltv_value, 0xffffffff);
3853                 } else { panic!(); }
3854         }
3855
3856         #[test]
3857         fn encoding_final_onion_hop_data_with_secret() {
3858                 let expected_payment_secret = PaymentSecret([0x42u8; 32]);
3859                 let outbound_msg = msgs::OutboundOnionPayload::Receive {
3860                         payment_data: Some(FinalOnionHopData {
3861                                 payment_secret: expected_payment_secret,
3862                                 total_msat: 0x1badca1f
3863                         }),
3864                         payment_metadata: None,
3865                         keysend_preimage: None,
3866                         amt_msat: 0x0badf00d01020304,
3867                         outgoing_cltv_value: 0xffffffff,
3868                         custom_tlvs: vec![],
3869                 };
3870                 let encoded_value = outbound_msg.encode();
3871                 let target_value = hex::decode("3602080badf00d010203040404ffffffff082442424242424242424242424242424242424242424242424242424242424242421badca1f").unwrap();
3872                 assert_eq!(encoded_value, target_value);
3873
3874                 let node_signer = test_utils::TestKeysInterface::new(&[42; 32], Network::Testnet);
3875                 let inbound_msg = ReadableArgs::read(&mut Cursor::new(&target_value[..]), &&node_signer).unwrap();
3876                 if let msgs::InboundOnionPayload::Receive {
3877                         payment_data: Some(FinalOnionHopData {
3878                                 payment_secret,
3879                                 total_msat: 0x1badca1f
3880                         }),
3881                         amt_msat, outgoing_cltv_value,
3882                         payment_metadata: None,
3883                         keysend_preimage: None,
3884                         custom_tlvs,
3885                 } = inbound_msg  {
3886                         assert_eq!(payment_secret, expected_payment_secret);
3887                         assert_eq!(amt_msat, 0x0badf00d01020304);
3888                         assert_eq!(outgoing_cltv_value, 0xffffffff);
3889                         assert_eq!(custom_tlvs, vec![]);
3890                 } else { panic!(); }
3891         }
3892
3893         #[test]
3894         fn encoding_final_onion_hop_data_with_bad_custom_tlvs() {
3895                 // If custom TLVs have type number within the range reserved for protocol, treat them as if
3896                 // they're unknown
3897                 let bad_type_range_tlvs = vec![
3898                         ((1 << 16) - 4, vec![42]),
3899                         ((1 << 16) - 2, vec![42; 32]),
3900                 ];
3901                 let mut msg = msgs::OutboundOnionPayload::Receive {
3902                         payment_data: None,
3903                         payment_metadata: None,
3904                         keysend_preimage: None,
3905                         custom_tlvs: bad_type_range_tlvs,
3906                         amt_msat: 0x0badf00d01020304,
3907                         outgoing_cltv_value: 0xffffffff,
3908                 };
3909                 let encoded_value = msg.encode();
3910                 let node_signer = test_utils::TestKeysInterface::new(&[42; 32], Network::Testnet);
3911                 assert!(msgs::InboundOnionPayload::read(&mut Cursor::new(&encoded_value[..]), &&node_signer).is_err());
3912                 let good_type_range_tlvs = vec![
3913                         ((1 << 16) - 3, vec![42]),
3914                         ((1 << 16) - 1, vec![42; 32]),
3915                 ];
3916                 if let msgs::OutboundOnionPayload::Receive { ref mut custom_tlvs, .. } = msg {
3917                         *custom_tlvs = good_type_range_tlvs.clone();
3918                 }
3919                 let encoded_value = msg.encode();
3920                 let inbound_msg = ReadableArgs::read(&mut Cursor::new(&encoded_value[..]), &&node_signer).unwrap();
3921                 match inbound_msg {
3922                         msgs::InboundOnionPayload::Receive { custom_tlvs, .. } => assert!(custom_tlvs.is_empty()),
3923                         _ => panic!(),
3924                 }
3925         }
3926
3927         #[test]
3928         fn encoding_final_onion_hop_data_with_custom_tlvs() {
3929                 let expected_custom_tlvs = vec![
3930                         (5482373483, vec![0x12, 0x34]),
3931                         (5482373487, vec![0x42u8; 8]),
3932                 ];
3933                 let msg = msgs::OutboundOnionPayload::Receive {
3934                         payment_data: None,
3935                         payment_metadata: None,
3936                         keysend_preimage: None,
3937                         custom_tlvs: expected_custom_tlvs.clone(),
3938                         amt_msat: 0x0badf00d01020304,
3939                         outgoing_cltv_value: 0xffffffff,
3940                 };
3941                 let encoded_value = msg.encode();
3942                 let target_value = hex::decode("2e02080badf00d010203040404ffffffffff0000000146c6616b021234ff0000000146c6616f084242424242424242").unwrap();
3943                 assert_eq!(encoded_value, target_value);
3944                 let node_signer = test_utils::TestKeysInterface::new(&[42; 32], Network::Testnet);
3945                 let inbound_msg: msgs::InboundOnionPayload = ReadableArgs::read(&mut Cursor::new(&target_value[..]), &&node_signer).unwrap();
3946                 if let msgs::InboundOnionPayload::Receive {
3947                         payment_data: None,
3948                         payment_metadata: None,
3949                         keysend_preimage: None,
3950                         custom_tlvs,
3951                         amt_msat,
3952                         outgoing_cltv_value,
3953                         ..
3954                 } = inbound_msg {
3955                         assert_eq!(custom_tlvs, expected_custom_tlvs);
3956                         assert_eq!(amt_msat, 0x0badf00d01020304);
3957                         assert_eq!(outgoing_cltv_value, 0xffffffff);
3958                 } else { panic!(); }
3959         }
3960
3961         #[test]
3962         fn query_channel_range_end_blocknum() {
3963                 let tests: Vec<(u32, u32, u32)> = vec![
3964                         (10000, 1500, 11500),
3965                         (0, 0xffffffff, 0xffffffff),
3966                         (1, 0xffffffff, 0xffffffff),
3967                 ];
3968
3969                 for (first_blocknum, number_of_blocks, expected) in tests.into_iter() {
3970                         let sut = msgs::QueryChannelRange {
3971                                 chain_hash: ChainHash::using_genesis_block(Network::Regtest),
3972                                 first_blocknum,
3973                                 number_of_blocks,
3974                         };
3975                         assert_eq!(sut.end_blocknum(), expected);
3976                 }
3977         }
3978
3979         #[test]
3980         fn encoding_query_channel_range() {
3981                 let mut query_channel_range = msgs::QueryChannelRange {
3982                         chain_hash: ChainHash::using_genesis_block(Network::Regtest),
3983                         first_blocknum: 100000,
3984                         number_of_blocks: 1500,
3985                 };
3986                 let encoded_value = query_channel_range.encode();
3987                 let target_value = hex::decode("06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f000186a0000005dc").unwrap();
3988                 assert_eq!(encoded_value, target_value);
3989
3990                 query_channel_range = Readable::read(&mut Cursor::new(&target_value[..])).unwrap();
3991                 assert_eq!(query_channel_range.first_blocknum, 100000);
3992                 assert_eq!(query_channel_range.number_of_blocks, 1500);
3993         }
3994
3995         #[test]
3996         fn encoding_reply_channel_range() {
3997                 do_encoding_reply_channel_range(0);
3998                 do_encoding_reply_channel_range(1);
3999         }
4000
4001         fn do_encoding_reply_channel_range(encoding_type: u8) {
4002                 let mut target_value = hex::decode("06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f000b8a06000005dc01").unwrap();
4003                 let expected_chain_hash = ChainHash::using_genesis_block(Network::Regtest);
4004                 let mut reply_channel_range = msgs::ReplyChannelRange {
4005                         chain_hash: expected_chain_hash,
4006                         first_blocknum: 756230,
4007                         number_of_blocks: 1500,
4008                         sync_complete: true,
4009                         short_channel_ids: vec![0x000000000000008e, 0x0000000000003c69, 0x000000000045a6c4],
4010                 };
4011
4012                 if encoding_type == 0 {
4013                         target_value.append(&mut hex::decode("001900000000000000008e0000000000003c69000000000045a6c4").unwrap());
4014                         let encoded_value = reply_channel_range.encode();
4015                         assert_eq!(encoded_value, target_value);
4016
4017                         reply_channel_range = Readable::read(&mut Cursor::new(&target_value[..])).unwrap();
4018                         assert_eq!(reply_channel_range.chain_hash, expected_chain_hash);
4019                         assert_eq!(reply_channel_range.first_blocknum, 756230);
4020                         assert_eq!(reply_channel_range.number_of_blocks, 1500);
4021                         assert_eq!(reply_channel_range.sync_complete, true);
4022                         assert_eq!(reply_channel_range.short_channel_ids[0], 0x000000000000008e);
4023                         assert_eq!(reply_channel_range.short_channel_ids[1], 0x0000000000003c69);
4024                         assert_eq!(reply_channel_range.short_channel_ids[2], 0x000000000045a6c4);
4025                 } else {
4026                         target_value.append(&mut hex::decode("001601789c636000833e08659309a65878be010010a9023a").unwrap());
4027                         let result: Result<msgs::ReplyChannelRange, msgs::DecodeError> = Readable::read(&mut Cursor::new(&target_value[..]));
4028                         assert!(result.is_err(), "Expected decode failure with unsupported zlib encoding");
4029                 }
4030         }
4031
4032         #[test]
4033         fn encoding_query_short_channel_ids() {
4034                 do_encoding_query_short_channel_ids(0);
4035                 do_encoding_query_short_channel_ids(1);
4036         }
4037
4038         fn do_encoding_query_short_channel_ids(encoding_type: u8) {
4039                 let mut target_value = hex::decode("06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f").unwrap();
4040                 let expected_chain_hash = ChainHash::using_genesis_block(Network::Regtest);
4041                 let mut query_short_channel_ids = msgs::QueryShortChannelIds {
4042                         chain_hash: expected_chain_hash,
4043                         short_channel_ids: vec![0x0000000000008e, 0x0000000000003c69, 0x000000000045a6c4],
4044                 };
4045
4046                 if encoding_type == 0 {
4047                         target_value.append(&mut hex::decode("001900000000000000008e0000000000003c69000000000045a6c4").unwrap());
4048                         let encoded_value = query_short_channel_ids.encode();
4049                         assert_eq!(encoded_value, target_value);
4050
4051                         query_short_channel_ids = Readable::read(&mut Cursor::new(&target_value[..])).unwrap();
4052                         assert_eq!(query_short_channel_ids.chain_hash, expected_chain_hash);
4053                         assert_eq!(query_short_channel_ids.short_channel_ids[0], 0x000000000000008e);
4054                         assert_eq!(query_short_channel_ids.short_channel_ids[1], 0x0000000000003c69);
4055                         assert_eq!(query_short_channel_ids.short_channel_ids[2], 0x000000000045a6c4);
4056                 } else {
4057                         target_value.append(&mut hex::decode("001601789c636000833e08659309a65878be010010a9023a").unwrap());
4058                         let result: Result<msgs::QueryShortChannelIds, msgs::DecodeError> = Readable::read(&mut Cursor::new(&target_value[..]));
4059                         assert!(result.is_err(), "Expected decode failure with unsupported zlib encoding");
4060                 }
4061         }
4062
4063         #[test]
4064         fn encoding_reply_short_channel_ids_end() {
4065                 let expected_chain_hash = ChainHash::using_genesis_block(Network::Regtest);
4066                 let mut reply_short_channel_ids_end = msgs::ReplyShortChannelIdsEnd {
4067                         chain_hash: expected_chain_hash,
4068                         full_information: true,
4069                 };
4070                 let encoded_value = reply_short_channel_ids_end.encode();
4071                 let target_value = hex::decode("06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f01").unwrap();
4072                 assert_eq!(encoded_value, target_value);
4073
4074                 reply_short_channel_ids_end = Readable::read(&mut Cursor::new(&target_value[..])).unwrap();
4075                 assert_eq!(reply_short_channel_ids_end.chain_hash, expected_chain_hash);
4076                 assert_eq!(reply_short_channel_ids_end.full_information, true);
4077         }
4078
4079         #[test]
4080         fn encoding_gossip_timestamp_filter(){
4081                 let expected_chain_hash = ChainHash::using_genesis_block(Network::Regtest);
4082                 let mut gossip_timestamp_filter = msgs::GossipTimestampFilter {
4083                         chain_hash: expected_chain_hash,
4084                         first_timestamp: 1590000000,
4085                         timestamp_range: 0xffff_ffff,
4086                 };
4087                 let encoded_value = gossip_timestamp_filter.encode();
4088                 let target_value = hex::decode("06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f5ec57980ffffffff").unwrap();
4089                 assert_eq!(encoded_value, target_value);
4090
4091                 gossip_timestamp_filter = Readable::read(&mut Cursor::new(&target_value[..])).unwrap();
4092                 assert_eq!(gossip_timestamp_filter.chain_hash, expected_chain_hash);
4093                 assert_eq!(gossip_timestamp_filter.first_timestamp, 1590000000);
4094                 assert_eq!(gossip_timestamp_filter.timestamp_range, 0xffff_ffff);
4095         }
4096
4097         #[test]
4098         fn decode_onion_hop_data_len_as_bigsize() {
4099                 // Tests that we can decode an onion payload that is >253 bytes.
4100                 // Previously, receiving a payload of this size could've caused us to fail to decode a valid
4101                 // payload, because we were decoding the length (a BigSize, big-endian) as a VarInt
4102                 // (little-endian).
4103
4104                 // Encode a test onion payload with a big custom TLV such that it's >253 bytes, forcing the
4105                 // payload length to be encoded over multiple bytes rather than a single u8.
4106                 let big_payload = encode_big_payload().unwrap();
4107                 let mut rd = Cursor::new(&big_payload[..]);
4108
4109                 let node_signer = test_utils::TestKeysInterface::new(&[42; 32], Network::Testnet);
4110                 <msgs::InboundOnionPayload as ReadableArgs<&&test_utils::TestKeysInterface>>
4111                         ::read(&mut rd, &&node_signer).unwrap();
4112         }
4113         // see above test, needs to be a separate method for use of the serialization macros.
4114         fn encode_big_payload() -> Result<Vec<u8>, io::Error> {
4115                 use crate::util::ser::HighZeroBytesDroppedBigSize;
4116                 let payload = msgs::OutboundOnionPayload::Forward {
4117                         short_channel_id: 0xdeadbeef1bad1dea,
4118                         amt_to_forward: 1000,
4119                         outgoing_cltv_value: 0xffffffff,
4120                 };
4121                 let mut encoded_payload = Vec::new();
4122                 let test_bytes = vec![42u8; 1000];
4123                 if let msgs::OutboundOnionPayload::Forward { short_channel_id, amt_to_forward, outgoing_cltv_value } = payload {
4124                         _encode_varint_length_prefixed_tlv!(&mut encoded_payload, {
4125                                 (1, test_bytes, required_vec),
4126                                 (2, HighZeroBytesDroppedBigSize(amt_to_forward), required),
4127                                 (4, HighZeroBytesDroppedBigSize(outgoing_cltv_value), required),
4128                                 (6, short_channel_id, required)
4129                         });
4130                 }
4131                 Ok(encoded_payload)
4132         }
4133
4134         #[test]
4135         #[cfg(feature = "std")]
4136         fn test_socket_address_from_str() {
4137                 let tcpip_v4 = SocketAddress::TcpIpV4 {
4138                         addr: Ipv4Addr::new(127, 0, 0, 1).octets(),
4139                         port: 1234,
4140                 };
4141                 assert_eq!(tcpip_v4, SocketAddress::from_str("127.0.0.1:1234").unwrap());
4142                 assert_eq!(tcpip_v4, SocketAddress::from_str(&tcpip_v4.to_string()).unwrap());
4143
4144                 let tcpip_v6 = SocketAddress::TcpIpV6 {
4145                         addr: Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1).octets(),
4146                         port: 1234,
4147                 };
4148                 assert_eq!(tcpip_v6, SocketAddress::from_str("[0:0:0:0:0:0:0:1]:1234").unwrap());
4149                 assert_eq!(tcpip_v6, SocketAddress::from_str(&tcpip_v6.to_string()).unwrap());
4150
4151                 let hostname = SocketAddress::Hostname {
4152                                 hostname: Hostname::try_from("lightning-node.mydomain.com".to_string()).unwrap(),
4153                                 port: 1234,
4154                 };
4155                 assert_eq!(hostname, SocketAddress::from_str("lightning-node.mydomain.com:1234").unwrap());
4156                 assert_eq!(hostname, SocketAddress::from_str(&hostname.to_string()).unwrap());
4157
4158                 let onion_v2 = SocketAddress::OnionV2 ([40, 4, 64, 185, 202, 19, 162, 75, 90, 200, 38, 7],);
4159                 assert_eq!("OnionV2([40, 4, 64, 185, 202, 19, 162, 75, 90, 200, 38, 7])", &onion_v2.to_string());
4160                 assert_eq!(Err(SocketAddressParseError::InvalidOnionV3), SocketAddress::from_str("FACEBOOKCOREWWWI.onion:9735"));
4161
4162                 let onion_v3 = SocketAddress::OnionV3 {
4163                         ed25519_pubkey: [37, 24, 75, 5, 25, 73, 117, 194, 139, 102, 182, 107, 4, 105, 247, 246, 85,
4164                         111, 177, 172, 49, 137, 167, 155, 64, 221, 163, 47, 31, 33, 71, 3],
4165                         checksum: 48326,
4166                         version: 121,
4167                         port: 1234
4168                 };
4169                 assert_eq!(onion_v3, SocketAddress::from_str("pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion:1234").unwrap());
4170                 assert_eq!(onion_v3, SocketAddress::from_str(&onion_v3.to_string()).unwrap());
4171
4172                 assert_eq!(Err(SocketAddressParseError::InvalidOnionV3), SocketAddress::from_str("pg6mmjiyjmcrsslvykfwnntlaru7p5svn6.onion:1234"));
4173                 assert_eq!(Err(SocketAddressParseError::InvalidInput), SocketAddress::from_str("127.0.0.1@1234"));
4174                 assert_eq!(Err(SocketAddressParseError::InvalidInput), "".parse::<SocketAddress>());
4175                 assert!(SocketAddress::from_str("pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion.onion:9735:94").is_err());
4176                 assert!(SocketAddress::from_str("wrong$%#.com:1234").is_err());
4177                 assert_eq!(Err(SocketAddressParseError::InvalidPort), SocketAddress::from_str("example.com:wrong"));
4178                 assert!("localhost".parse::<SocketAddress>().is_err());
4179                 assert!("localhost:invalid-port".parse::<SocketAddress>().is_err());
4180                 assert!( "invalid-onion-v3-hostname.onion:8080".parse::<SocketAddress>().is_err());
4181                 assert!("b32.example.onion:invalid-port".parse::<SocketAddress>().is_err());
4182                 assert!("invalid-address".parse::<SocketAddress>().is_err());
4183                 assert!(SocketAddress::from_str("pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion.onion:1234").is_err());
4184         }
4185
4186         #[test]
4187         #[cfg(feature = "std")]
4188         fn test_socket_address_to_socket_addrs() {
4189                 assert_eq!(SocketAddress::TcpIpV4 {addr:[0u8; 4], port: 1337,}.to_socket_addrs().unwrap().next().unwrap(),
4190                                    SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(0,0,0,0), 1337)));
4191                 assert_eq!(SocketAddress::TcpIpV6 {addr:[0u8; 16], port: 1337,}.to_socket_addrs().unwrap().next().unwrap(),
4192                                    SocketAddr::V6(SocketAddrV6::new(Ipv6Addr::from([0u8; 16]), 1337, 0, 0)));
4193                 assert_eq!(SocketAddress::Hostname { hostname: Hostname::try_from("0.0.0.0".to_string()).unwrap(), port: 0 }
4194                                            .to_socket_addrs().unwrap().next().unwrap(), SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::from([0u8; 4]),0)));
4195                 assert!(SocketAddress::OnionV2([0u8; 12]).to_socket_addrs().is_err());
4196                 assert!(SocketAddress::OnionV3{ ed25519_pubkey: [37, 24, 75, 5, 25, 73, 117, 194, 139, 102,
4197                         182, 107, 4, 105, 247, 246, 85, 111, 177, 172, 49, 137, 167, 155, 64, 221, 163, 47, 31,
4198                         33, 71, 3],
4199                         checksum: 48326,
4200                         version: 121,
4201                         port: 1234 }.to_socket_addrs().is_err());
4202         }
4203 }