33a46084abb4d1bba4bf3de72168c4d1b3933b7d
[rust-lightning] / lightning / src / ln / channel.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 use bitcoin::blockdata::constants::ChainHash;
11 use bitcoin::blockdata::script::{Script,Builder};
12 use bitcoin::blockdata::transaction::{Transaction, EcdsaSighashType};
13 use bitcoin::util::sighash;
14 use bitcoin::consensus::encode;
15
16 use bitcoin::hashes::Hash;
17 use bitcoin::hashes::sha256::Hash as Sha256;
18 use bitcoin::hashes::sha256d::Hash as Sha256d;
19 use bitcoin::hash_types::{Txid, BlockHash};
20
21 use bitcoin::secp256k1::constants::PUBLIC_KEY_SIZE;
22 use bitcoin::secp256k1::{PublicKey,SecretKey};
23 use bitcoin::secp256k1::{Secp256k1,ecdsa::Signature};
24 use bitcoin::secp256k1;
25
26 use crate::ln::{ChannelId, PaymentPreimage, PaymentHash};
27 use crate::ln::features::{ChannelTypeFeatures, InitFeatures};
28 use crate::ln::msgs;
29 use crate::ln::msgs::DecodeError;
30 use crate::ln::script::{self, ShutdownScript};
31 use crate::ln::channelmanager::{self, CounterpartyForwardingInfo, PendingHTLCStatus, HTLCSource, SentHTLCId, HTLCFailureMsg, PendingHTLCInfo, RAACommitmentOrder, BREAKDOWN_TIMEOUT, MIN_CLTV_EXPIRY_DELTA, MAX_LOCAL_BREAKDOWN_TIMEOUT, ChannelShutdownState};
32 use crate::ln::chan_utils::{CounterpartyCommitmentSecrets, TxCreationKeys, HTLCOutputInCommitment, htlc_success_tx_weight, htlc_timeout_tx_weight, make_funding_redeemscript, ChannelPublicKeys, CommitmentTransaction, HolderCommitmentTransaction, ChannelTransactionParameters, CounterpartyChannelTransactionParameters, MAX_HTLCS, get_commitment_transaction_number_obscure_factor, ClosingTransaction};
33 use crate::ln::chan_utils;
34 use crate::ln::onion_utils::HTLCFailReason;
35 use crate::chain::BestBlock;
36 use crate::chain::chaininterface::{FeeEstimator, ConfirmationTarget, LowerBoundedFeeEstimator};
37 use crate::chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, ChannelMonitorUpdateStep, LATENCY_GRACE_PERIOD_BLOCKS, CLOSED_CHANNEL_UPDATE_ID};
38 use crate::chain::transaction::{OutPoint, TransactionData};
39 use crate::sign::{EcdsaChannelSigner, WriteableEcdsaChannelSigner, EntropySource, ChannelSigner, SignerProvider, NodeSigner, Recipient};
40 use crate::events::ClosureReason;
41 use crate::routing::gossip::NodeId;
42 use crate::util::ser::{Readable, ReadableArgs, Writeable, Writer, VecWriter};
43 use crate::util::logger::Logger;
44 use crate::util::errors::APIError;
45 use crate::util::config::{UserConfig, ChannelConfig, LegacyChannelConfig, ChannelHandshakeConfig, ChannelHandshakeLimits, MaxDustHTLCExposure};
46 use crate::util::scid_utils::scid_from_parts;
47
48 use crate::io;
49 use crate::prelude::*;
50 use core::{cmp,mem,fmt};
51 use core::ops::Deref;
52 #[cfg(any(test, fuzzing, debug_assertions))]
53 use crate::sync::Mutex;
54 use bitcoin::hashes::hex::ToHex;
55 use crate::sign::type_resolver::ChannelSignerType;
56
57 #[cfg(test)]
58 pub struct ChannelValueStat {
59         pub value_to_self_msat: u64,
60         pub channel_value_msat: u64,
61         pub channel_reserve_msat: u64,
62         pub pending_outbound_htlcs_amount_msat: u64,
63         pub pending_inbound_htlcs_amount_msat: u64,
64         pub holding_cell_outbound_amount_msat: u64,
65         pub counterparty_max_htlc_value_in_flight_msat: u64, // outgoing
66         pub counterparty_dust_limit_msat: u64,
67 }
68
69 pub struct AvailableBalances {
70         /// The amount that would go to us if we close the channel, ignoring any on-chain fees.
71         pub balance_msat: u64,
72         /// Total amount available for our counterparty to send to us.
73         pub inbound_capacity_msat: u64,
74         /// Total amount available for us to send to our counterparty.
75         pub outbound_capacity_msat: u64,
76         /// The maximum value we can assign to the next outbound HTLC
77         pub next_outbound_htlc_limit_msat: u64,
78         /// The minimum value we can assign to the next outbound HTLC
79         pub next_outbound_htlc_minimum_msat: u64,
80 }
81
82 #[derive(Debug, Clone, Copy, PartialEq)]
83 enum FeeUpdateState {
84         // Inbound states mirroring InboundHTLCState
85         RemoteAnnounced,
86         AwaitingRemoteRevokeToAnnounce,
87         // Note that we do not have a AwaitingAnnouncedRemoteRevoke variant here as it is universally
88         // handled the same as `Committed`, with the only exception in `InboundHTLCState` being the
89         // distinction of when we allow ourselves to forward the HTLC. Because we aren't "forwarding"
90         // the fee update anywhere, we can simply consider the fee update `Committed` immediately
91         // instead of setting it to AwaitingAnnouncedRemoteRevoke.
92
93         // Outbound state can only be `LocalAnnounced` or `Committed`
94         Outbound,
95 }
96
97 enum InboundHTLCRemovalReason {
98         FailRelay(msgs::OnionErrorPacket),
99         FailMalformed(([u8; 32], u16)),
100         Fulfill(PaymentPreimage),
101 }
102
103 enum InboundHTLCState {
104         /// Offered by remote, to be included in next local commitment tx. I.e., the remote sent an
105         /// update_add_htlc message for this HTLC.
106         RemoteAnnounced(PendingHTLCStatus),
107         /// Included in a received commitment_signed message (implying we've
108         /// revoke_and_ack'd it), but the remote hasn't yet revoked their previous
109         /// state (see the example below). We have not yet included this HTLC in a
110         /// commitment_signed message because we are waiting on the remote's
111         /// aforementioned state revocation. One reason this missing remote RAA
112         /// (revoke_and_ack) blocks us from constructing a commitment_signed message
113         /// is because every time we create a new "state", i.e. every time we sign a
114         /// new commitment tx (see [BOLT #2]), we need a new per_commitment_point,
115         /// which are provided one-at-a-time in each RAA. E.g., the last RAA they
116         /// sent provided the per_commitment_point for our current commitment tx.
117         /// The other reason we should not send a commitment_signed without their RAA
118         /// is because their RAA serves to ACK our previous commitment_signed.
119         ///
120         /// Here's an example of how an HTLC could come to be in this state:
121         /// remote --> update_add_htlc(prev_htlc)   --> local
122         /// remote --> commitment_signed(prev_htlc) --> local
123         /// remote <-- revoke_and_ack               <-- local
124         /// remote <-- commitment_signed(prev_htlc) <-- local
125         /// [note that here, the remote does not respond with a RAA]
126         /// remote --> update_add_htlc(this_htlc)   --> local
127         /// remote --> commitment_signed(prev_htlc, this_htlc) --> local
128         /// Now `this_htlc` will be assigned this state. It's unable to be officially
129         /// accepted, i.e. included in a commitment_signed, because we're missing the
130         /// RAA that provides our next per_commitment_point. The per_commitment_point
131         /// is used to derive commitment keys, which are used to construct the
132         /// signatures in a commitment_signed message.
133         /// Implies AwaitingRemoteRevoke.
134         ///
135         /// [BOLT #2]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md
136         AwaitingRemoteRevokeToAnnounce(PendingHTLCStatus),
137         /// Included in a received commitment_signed message (implying we've revoke_and_ack'd it).
138         /// We have also included this HTLC in our latest commitment_signed and are now just waiting
139         /// on the remote's revoke_and_ack to make this HTLC an irrevocable part of the state of the
140         /// channel (before it can then get forwarded and/or removed).
141         /// Implies AwaitingRemoteRevoke.
142         AwaitingAnnouncedRemoteRevoke(PendingHTLCStatus),
143         Committed,
144         /// Removed by us and a new commitment_signed was sent (if we were AwaitingRemoteRevoke when we
145         /// created it we would have put it in the holding cell instead). When they next revoke_and_ack
146         /// we'll drop it.
147         /// Note that we have to keep an eye on the HTLC until we've received a broadcastable
148         /// commitment transaction without it as otherwise we'll have to force-close the channel to
149         /// claim it before the timeout (obviously doesn't apply to revoked HTLCs that we can't claim
150         /// anyway). That said, ChannelMonitor does this for us (see
151         /// ChannelMonitor::should_broadcast_holder_commitment_txn) so we actually remove the HTLC from
152         /// our own local state before then, once we're sure that the next commitment_signed and
153         /// ChannelMonitor::provide_latest_local_commitment_tx will not include this HTLC.
154         LocalRemoved(InboundHTLCRemovalReason),
155 }
156
157 struct InboundHTLCOutput {
158         htlc_id: u64,
159         amount_msat: u64,
160         cltv_expiry: u32,
161         payment_hash: PaymentHash,
162         state: InboundHTLCState,
163 }
164
165 enum OutboundHTLCState {
166         /// Added by us and included in a commitment_signed (if we were AwaitingRemoteRevoke when we
167         /// created it we would have put it in the holding cell instead). When they next revoke_and_ack
168         /// we will promote to Committed (note that they may not accept it until the next time we
169         /// revoke, but we don't really care about that:
170         ///  * they've revoked, so worst case we can announce an old state and get our (option on)
171         ///    money back (though we won't), and,
172         ///  * we'll send them a revoke when they send a commitment_signed, and since only they're
173         ///    allowed to remove it, the "can only be removed once committed on both sides" requirement
174         ///    doesn't matter to us and it's up to them to enforce it, worst-case they jump ahead but
175         ///    we'll never get out of sync).
176         /// Note that we Box the OnionPacket as it's rather large and we don't want to blow up
177         /// OutboundHTLCOutput's size just for a temporary bit
178         LocalAnnounced(Box<msgs::OnionPacket>),
179         Committed,
180         /// Remote removed this (outbound) HTLC. We're waiting on their commitment_signed to finalize
181         /// the change (though they'll need to revoke before we fail the payment).
182         RemoteRemoved(OutboundHTLCOutcome),
183         /// Remote removed this and sent a commitment_signed (implying we've revoke_and_ack'ed it), but
184         /// the remote side hasn't yet revoked their previous state, which we need them to do before we
185         /// can do any backwards failing. Implies AwaitingRemoteRevoke.
186         /// We also have not yet removed this HTLC in a commitment_signed message, and are waiting on a
187         /// remote revoke_and_ack on a previous state before we can do so.
188         AwaitingRemoteRevokeToRemove(OutboundHTLCOutcome),
189         /// Remote removed this and sent a commitment_signed (implying we've revoke_and_ack'ed it), but
190         /// the remote side hasn't yet revoked their previous state, which we need them to do before we
191         /// can do any backwards failing. Implies AwaitingRemoteRevoke.
192         /// We have removed this HTLC in our latest commitment_signed and are now just waiting on a
193         /// revoke_and_ack to drop completely.
194         AwaitingRemovedRemoteRevoke(OutboundHTLCOutcome),
195 }
196
197 #[derive(Clone)]
198 enum OutboundHTLCOutcome {
199         /// LDK version 0.0.105+ will always fill in the preimage here.
200         Success(Option<PaymentPreimage>),
201         Failure(HTLCFailReason),
202 }
203
204 impl From<Option<HTLCFailReason>> for OutboundHTLCOutcome {
205         fn from(o: Option<HTLCFailReason>) -> Self {
206                 match o {
207                         None => OutboundHTLCOutcome::Success(None),
208                         Some(r) => OutboundHTLCOutcome::Failure(r)
209                 }
210         }
211 }
212
213 impl<'a> Into<Option<&'a HTLCFailReason>> for &'a OutboundHTLCOutcome {
214         fn into(self) -> Option<&'a HTLCFailReason> {
215                 match self {
216                         OutboundHTLCOutcome::Success(_) => None,
217                         OutboundHTLCOutcome::Failure(ref r) => Some(r)
218                 }
219         }
220 }
221
222 struct OutboundHTLCOutput {
223         htlc_id: u64,
224         amount_msat: u64,
225         cltv_expiry: u32,
226         payment_hash: PaymentHash,
227         state: OutboundHTLCState,
228         source: HTLCSource,
229         skimmed_fee_msat: Option<u64>,
230 }
231
232 /// See AwaitingRemoteRevoke ChannelState for more info
233 enum HTLCUpdateAwaitingACK {
234         AddHTLC { // TODO: Time out if we're getting close to cltv_expiry
235                 // always outbound
236                 amount_msat: u64,
237                 cltv_expiry: u32,
238                 payment_hash: PaymentHash,
239                 source: HTLCSource,
240                 onion_routing_packet: msgs::OnionPacket,
241                 // The extra fee we're skimming off the top of this HTLC.
242                 skimmed_fee_msat: Option<u64>,
243         },
244         ClaimHTLC {
245                 payment_preimage: PaymentPreimage,
246                 htlc_id: u64,
247         },
248         FailHTLC {
249                 htlc_id: u64,
250                 err_packet: msgs::OnionErrorPacket,
251         },
252 }
253
254 /// There are a few "states" and then a number of flags which can be applied:
255 /// We first move through init with `OurInitSent` -> `TheirInitSent` -> `FundingCreated` -> `FundingSent`.
256 /// `TheirChannelReady` and `OurChannelReady` then get set on `FundingSent`, and when both are set we
257 /// move on to `ChannelReady`.
258 /// Note that `PeerDisconnected` can be set on both `ChannelReady` and `FundingSent`.
259 /// `ChannelReady` can then get all remaining flags set on it, until we finish shutdown, then we
260 /// move on to `ShutdownComplete`, at which point most calls into this channel are disallowed.
261 enum ChannelState {
262         /// Implies we have (or are prepared to) send our open_channel/accept_channel message
263         OurInitSent = 1 << 0,
264         /// Implies we have received their `open_channel`/`accept_channel` message
265         TheirInitSent = 1 << 1,
266         /// We have sent `funding_created` and are awaiting a `funding_signed` to advance to `FundingSent`.
267         /// Note that this is nonsense for an inbound channel as we immediately generate `funding_signed`
268         /// upon receipt of `funding_created`, so simply skip this state.
269         FundingCreated = 4,
270         /// Set when we have received/sent `funding_created` and `funding_signed` and are thus now waiting
271         /// on the funding transaction to confirm. The `ChannelReady` flags are set to indicate when we
272         /// and our counterparty consider the funding transaction confirmed.
273         FundingSent = 8,
274         /// Flag which can be set on `FundingSent` to indicate they sent us a `channel_ready` message.
275         /// Once both `TheirChannelReady` and `OurChannelReady` are set, state moves on to `ChannelReady`.
276         TheirChannelReady = 1 << 4,
277         /// Flag which can be set on `FundingSent` to indicate we sent them a `channel_ready` message.
278         /// Once both `TheirChannelReady` and `OurChannelReady` are set, state moves on to `ChannelReady`.
279         OurChannelReady = 1 << 5,
280         ChannelReady = 64,
281         /// Flag which is set on `ChannelReady` and `FundingSent` indicating remote side is considered
282         /// "disconnected" and no updates are allowed until after we've done a `channel_reestablish`
283         /// dance.
284         PeerDisconnected = 1 << 7,
285         /// Flag which is set on `ChannelReady`, FundingCreated, and `FundingSent` indicating the user has
286         /// told us a `ChannelMonitor` update is pending async persistence somewhere and we should pause
287         /// sending any outbound messages until they've managed to finish.
288         MonitorUpdateInProgress = 1 << 8,
289         /// Flag which implies that we have sent a commitment_signed but are awaiting the responding
290         /// revoke_and_ack message. During this time period, we can't generate new commitment_signed
291         /// messages as then we will be unable to determine which HTLCs they included in their
292         /// revoke_and_ack implicit ACK, so instead we have to hold them away temporarily to be sent
293         /// later.
294         /// Flag is set on `ChannelReady`.
295         AwaitingRemoteRevoke = 1 << 9,
296         /// Flag which is set on `ChannelReady` or `FundingSent` after receiving a shutdown message from
297         /// the remote end. If set, they may not add any new HTLCs to the channel, and we are expected
298         /// to respond with our own shutdown message when possible.
299         RemoteShutdownSent = 1 << 10,
300         /// Flag which is set on `ChannelReady` or `FundingSent` after sending a shutdown message. At this
301         /// point, we may not add any new HTLCs to the channel.
302         LocalShutdownSent = 1 << 11,
303         /// We've successfully negotiated a closing_signed dance. At this point ChannelManager is about
304         /// to drop us, but we store this anyway.
305         ShutdownComplete = 4096,
306         /// Flag which is set on `FundingSent` to indicate this channel is funded in a batch and the
307         /// broadcasting of the funding transaction is being held until all channels in the batch
308         /// have received funding_signed and have their monitors persisted.
309         WaitingForBatch = 1 << 13,
310 }
311 const BOTH_SIDES_SHUTDOWN_MASK: u32 =
312         ChannelState::LocalShutdownSent as u32 |
313         ChannelState::RemoteShutdownSent as u32;
314 const MULTI_STATE_FLAGS: u32 =
315         BOTH_SIDES_SHUTDOWN_MASK |
316         ChannelState::PeerDisconnected as u32 |
317         ChannelState::MonitorUpdateInProgress as u32;
318 const STATE_FLAGS: u32 =
319         MULTI_STATE_FLAGS |
320         ChannelState::TheirChannelReady as u32 |
321         ChannelState::OurChannelReady as u32 |
322         ChannelState::AwaitingRemoteRevoke as u32 |
323         ChannelState::WaitingForBatch as u32;
324
325 pub const INITIAL_COMMITMENT_NUMBER: u64 = (1 << 48) - 1;
326
327 pub const DEFAULT_MAX_HTLCS: u16 = 50;
328
329 pub(crate) fn commitment_tx_base_weight(channel_type_features: &ChannelTypeFeatures) -> u64 {
330         const COMMITMENT_TX_BASE_WEIGHT: u64 = 724;
331         const COMMITMENT_TX_BASE_ANCHOR_WEIGHT: u64 = 1124;
332         if channel_type_features.supports_anchors_zero_fee_htlc_tx() { COMMITMENT_TX_BASE_ANCHOR_WEIGHT } else { COMMITMENT_TX_BASE_WEIGHT }
333 }
334
335 #[cfg(not(test))]
336 const COMMITMENT_TX_WEIGHT_PER_HTLC: u64 = 172;
337 #[cfg(test)]
338 pub const COMMITMENT_TX_WEIGHT_PER_HTLC: u64 = 172;
339
340 pub const ANCHOR_OUTPUT_VALUE_SATOSHI: u64 = 330;
341
342 /// The percentage of the channel value `holder_max_htlc_value_in_flight_msat` used to be set to,
343 /// before this was made configurable. The percentage was made configurable in LDK 0.0.107,
344 /// although LDK 0.0.104+ enabled serialization of channels with a different value set for
345 /// `holder_max_htlc_value_in_flight_msat`.
346 pub const MAX_IN_FLIGHT_PERCENT_LEGACY: u8 = 10;
347
348 /// Maximum `funding_satoshis` value according to the BOLT #2 specification, if
349 /// `option_support_large_channel` (aka wumbo channels) is not supported.
350 /// It's 2^24 - 1.
351 pub const MAX_FUNDING_SATOSHIS_NO_WUMBO: u64 = (1 << 24) - 1;
352
353 /// Total bitcoin supply in satoshis.
354 pub const TOTAL_BITCOIN_SUPPLY_SATOSHIS: u64 = 21_000_000 * 1_0000_0000;
355
356 /// The maximum network dust limit for standard script formats. This currently represents the
357 /// minimum output value for a P2SH output before Bitcoin Core 22 considers the entire
358 /// transaction non-standard and thus refuses to relay it.
359 /// We also use this as the maximum counterparty `dust_limit_satoshis` allowed, given many
360 /// implementations use this value for their dust limit today.
361 pub const MAX_STD_OUTPUT_DUST_LIMIT_SATOSHIS: u64 = 546;
362
363 /// The maximum channel dust limit we will accept from our counterparty.
364 pub const MAX_CHAN_DUST_LIMIT_SATOSHIS: u64 = MAX_STD_OUTPUT_DUST_LIMIT_SATOSHIS;
365
366 /// The dust limit is used for both the commitment transaction outputs as well as the closing
367 /// transactions. For cooperative closing transactions, we require segwit outputs, though accept
368 /// *any* segwit scripts, which are allowed to be up to 42 bytes in length.
369 /// In order to avoid having to concern ourselves with standardness during the closing process, we
370 /// simply require our counterparty to use a dust limit which will leave any segwit output
371 /// standard.
372 /// See <https://github.com/lightning/bolts/issues/905> for more details.
373 pub const MIN_CHAN_DUST_LIMIT_SATOSHIS: u64 = 354;
374
375 // Just a reasonable implementation-specific safe lower bound, higher than the dust limit.
376 pub const MIN_THEIR_CHAN_RESERVE_SATOSHIS: u64 = 1000;
377
378 /// Used to return a simple Error back to ChannelManager. Will get converted to a
379 /// msgs::ErrorAction::SendErrorMessage or msgs::ErrorAction::IgnoreError as appropriate with our
380 /// channel_id in ChannelManager.
381 pub(super) enum ChannelError {
382         Ignore(String),
383         Warn(String),
384         Close(String),
385 }
386
387 impl fmt::Debug for ChannelError {
388         fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
389                 match self {
390                         &ChannelError::Ignore(ref e) => write!(f, "Ignore : {}", e),
391                         &ChannelError::Warn(ref e) => write!(f, "Warn : {}", e),
392                         &ChannelError::Close(ref e) => write!(f, "Close : {}", e),
393                 }
394         }
395 }
396
397 impl fmt::Display for ChannelError {
398         fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
399                 match self {
400                         &ChannelError::Ignore(ref e) => write!(f, "{}", e),
401                         &ChannelError::Warn(ref e) => write!(f, "{}", e),
402                         &ChannelError::Close(ref e) => write!(f, "{}", e),
403                 }
404         }
405 }
406
407 macro_rules! secp_check {
408         ($res: expr, $err: expr) => {
409                 match $res {
410                         Ok(thing) => thing,
411                         Err(_) => return Err(ChannelError::Close($err)),
412                 }
413         };
414 }
415
416 /// The "channel disabled" bit in channel_update must be set based on whether we are connected to
417 /// our counterparty or not. However, we don't want to announce updates right away to avoid
418 /// spamming the network with updates if the connection is flapping. Instead, we "stage" updates to
419 /// our channel_update message and track the current state here.
420 /// See implementation at [`super::channelmanager::ChannelManager::timer_tick_occurred`].
421 #[derive(Clone, Copy, PartialEq)]
422 pub(super) enum ChannelUpdateStatus {
423         /// We've announced the channel as enabled and are connected to our peer.
424         Enabled,
425         /// Our channel is no longer live, but we haven't announced the channel as disabled yet.
426         DisabledStaged(u8),
427         /// Our channel is live again, but we haven't announced the channel as enabled yet.
428         EnabledStaged(u8),
429         /// We've announced the channel as disabled.
430         Disabled,
431 }
432
433 /// We track when we sent an `AnnouncementSignatures` to our peer in a few states, described here.
434 #[derive(PartialEq)]
435 pub enum AnnouncementSigsState {
436         /// We have not sent our peer an `AnnouncementSignatures` yet, or our peer disconnected since
437         /// we sent the last `AnnouncementSignatures`.
438         NotSent,
439         /// We sent an `AnnouncementSignatures` to our peer since the last time our peer disconnected.
440         /// This state never appears on disk - instead we write `NotSent`.
441         MessageSent,
442         /// We sent a `CommitmentSigned` after the last `AnnouncementSignatures` we sent. Because we
443         /// only ever have a single `CommitmentSigned` pending at once, if we sent one after sending
444         /// `AnnouncementSignatures` then we know the peer received our `AnnouncementSignatures` if
445         /// they send back a `RevokeAndACK`.
446         /// This state never appears on disk - instead we write `NotSent`.
447         Committed,
448         /// We received a `RevokeAndACK`, effectively ack-ing our `AnnouncementSignatures`, at this
449         /// point we no longer need to re-send our `AnnouncementSignatures` again on reconnect.
450         PeerReceived,
451 }
452
453 /// An enum indicating whether the local or remote side offered a given HTLC.
454 enum HTLCInitiator {
455         LocalOffered,
456         RemoteOffered,
457 }
458
459 /// An enum gathering stats on pending HTLCs, either inbound or outbound side.
460 struct HTLCStats {
461         pending_htlcs: u32,
462         pending_htlcs_value_msat: u64,
463         on_counterparty_tx_dust_exposure_msat: u64,
464         on_holder_tx_dust_exposure_msat: u64,
465         holding_cell_msat: u64,
466         on_holder_tx_holding_cell_htlcs_count: u32, // dust HTLCs *non*-included
467 }
468
469 /// An enum gathering stats on commitment transaction, either local or remote.
470 struct CommitmentStats<'a> {
471         tx: CommitmentTransaction, // the transaction info
472         feerate_per_kw: u32, // the feerate included to build the transaction
473         total_fee_sat: u64, // the total fee included in the transaction
474         num_nondust_htlcs: usize,  // the number of HTLC outputs (dust HTLCs *non*-included)
475         htlcs_included: Vec<(HTLCOutputInCommitment, Option<&'a HTLCSource>)>, // the list of HTLCs (dust HTLCs *included*) which were not ignored when building the transaction
476         local_balance_msat: u64, // local balance before fees but considering dust limits
477         remote_balance_msat: u64, // remote balance before fees but considering dust limits
478         preimages: Vec<PaymentPreimage>, // preimages for successful offered HTLCs since last commitment
479 }
480
481 /// Used when calculating whether we or the remote can afford an additional HTLC.
482 struct HTLCCandidate {
483         amount_msat: u64,
484         origin: HTLCInitiator,
485 }
486
487 impl HTLCCandidate {
488         fn new(amount_msat: u64, origin: HTLCInitiator) -> Self {
489                 Self {
490                         amount_msat,
491                         origin,
492                 }
493         }
494 }
495
496 /// A return value enum for get_update_fulfill_htlc. See UpdateFulfillCommitFetch variants for
497 /// description
498 enum UpdateFulfillFetch {
499         NewClaim {
500                 monitor_update: ChannelMonitorUpdate,
501                 htlc_value_msat: u64,
502                 msg: Option<msgs::UpdateFulfillHTLC>,
503         },
504         DuplicateClaim {},
505 }
506
507 /// The return type of get_update_fulfill_htlc_and_commit.
508 pub enum UpdateFulfillCommitFetch {
509         /// Indicates the HTLC fulfill is new, and either generated an update_fulfill message, placed
510         /// it in the holding cell, or re-generated the update_fulfill message after the same claim was
511         /// previously placed in the holding cell (and has since been removed).
512         NewClaim {
513                 /// The ChannelMonitorUpdate which places the new payment preimage in the channel monitor
514                 monitor_update: ChannelMonitorUpdate,
515                 /// The value of the HTLC which was claimed, in msat.
516                 htlc_value_msat: u64,
517         },
518         /// Indicates the HTLC fulfill is duplicative and already existed either in the holding cell
519         /// or has been forgotten (presumably previously claimed).
520         DuplicateClaim {},
521 }
522
523 /// The return value of `monitor_updating_restored`
524 pub(super) struct MonitorRestoreUpdates {
525         pub raa: Option<msgs::RevokeAndACK>,
526         pub commitment_update: Option<msgs::CommitmentUpdate>,
527         pub order: RAACommitmentOrder,
528         pub accepted_htlcs: Vec<(PendingHTLCInfo, u64)>,
529         pub failed_htlcs: Vec<(HTLCSource, PaymentHash, HTLCFailReason)>,
530         pub finalized_claimed_htlcs: Vec<HTLCSource>,
531         pub funding_broadcastable: Option<Transaction>,
532         pub channel_ready: Option<msgs::ChannelReady>,
533         pub announcement_sigs: Option<msgs::AnnouncementSignatures>,
534 }
535
536 /// The return value of `channel_reestablish`
537 pub(super) struct ReestablishResponses {
538         pub channel_ready: Option<msgs::ChannelReady>,
539         pub raa: Option<msgs::RevokeAndACK>,
540         pub commitment_update: Option<msgs::CommitmentUpdate>,
541         pub order: RAACommitmentOrder,
542         pub announcement_sigs: Option<msgs::AnnouncementSignatures>,
543         pub shutdown_msg: Option<msgs::Shutdown>,
544 }
545
546 /// The result of a shutdown that should be handled.
547 #[must_use]
548 pub(crate) struct ShutdownResult {
549         /// A channel monitor update to apply.
550         pub(crate) monitor_update: Option<(PublicKey, OutPoint, ChannelMonitorUpdate)>,
551         /// A list of dropped outbound HTLCs that can safely be failed backwards immediately.
552         pub(crate) dropped_outbound_htlcs: Vec<(HTLCSource, PaymentHash, PublicKey, ChannelId)>,
553         /// An unbroadcasted batch funding transaction id. The closure of this channel should be
554         /// propagated to the remainder of the batch.
555         pub(crate) unbroadcasted_batch_funding_txid: Option<Txid>,
556 }
557
558 /// If the majority of the channels funds are to the fundee and the initiator holds only just
559 /// enough funds to cover their reserve value, channels are at risk of getting "stuck". Because the
560 /// initiator controls the feerate, if they then go to increase the channel fee, they may have no
561 /// balance but the fundee is unable to send a payment as the increase in fee more than drains
562 /// their reserve value. Thus, neither side can send a new HTLC and the channel becomes useless.
563 /// Thus, before sending an HTLC when we are the initiator, we check that the feerate can increase
564 /// by this multiple without hitting this case, before sending.
565 /// This multiple is effectively the maximum feerate "jump" we expect until more HTLCs flow over
566 /// the channel. Sadly, there isn't really a good number for this - if we expect to have no new
567 /// HTLCs for days we may need this to suffice for feerate increases across days, but that may
568 /// leave the channel less usable as we hold a bigger reserve.
569 #[cfg(any(fuzzing, test))]
570 pub const FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE: u64 = 2;
571 #[cfg(not(any(fuzzing, test)))]
572 const FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE: u64 = 2;
573
574 /// If we fail to see a funding transaction confirmed on-chain within this many blocks after the
575 /// channel creation on an inbound channel, we simply force-close and move on.
576 /// This constant is the one suggested in BOLT 2.
577 pub(crate) const FUNDING_CONF_DEADLINE_BLOCKS: u32 = 2016;
578
579 /// In case of a concurrent update_add_htlc proposed by our counterparty, we might
580 /// not have enough balance value remaining to cover the onchain cost of this new
581 /// HTLC weight. If this happens, our counterparty fails the reception of our
582 /// commitment_signed including this new HTLC due to infringement on the channel
583 /// reserve.
584 /// To prevent this case, we compute our outbound update_fee with an HTLC buffer of
585 /// size 2. However, if the number of concurrent update_add_htlc is higher, this still
586 /// leads to a channel force-close. Ultimately, this is an issue coming from the
587 /// design of LN state machines, allowing asynchronous updates.
588 pub(crate) const CONCURRENT_INBOUND_HTLC_FEE_BUFFER: u32 = 2;
589
590 /// When a channel is opened, we check that the funding amount is enough to pay for relevant
591 /// commitment transaction fees, with at least this many HTLCs present on the commitment
592 /// transaction (not counting the value of the HTLCs themselves).
593 pub(crate) const MIN_AFFORDABLE_HTLC_COUNT: usize = 4;
594
595 /// When a [`Channel`] has its [`ChannelConfig`] updated, its existing one is stashed for up to this
596 /// number of ticks to allow forwarding HTLCs by nodes that have yet to receive the new
597 /// ChannelUpdate prompted by the config update. This value was determined as follows:
598 ///
599 ///   * The expected interval between ticks (1 minute).
600 ///   * The average convergence delay of updates across the network, i.e., ~300 seconds on average
601 ///      for a node to see an update as seen on `<https://arxiv.org/pdf/2205.12737.pdf>`.
602 ///   * `EXPIRE_PREV_CONFIG_TICKS` = convergence_delay / tick_interval
603 pub(crate) const EXPIRE_PREV_CONFIG_TICKS: usize = 5;
604
605 /// The number of ticks that may elapse while we're waiting for a response to a
606 /// [`msgs::RevokeAndACK`] or [`msgs::ChannelReestablish`] message before we attempt to disconnect
607 /// them.
608 ///
609 /// See [`ChannelContext::sent_message_awaiting_response`] for more information.
610 pub(crate) const DISCONNECT_PEER_AWAITING_RESPONSE_TICKS: usize = 2;
611
612 /// The number of ticks that may elapse while we're waiting for an unfunded outbound/inbound channel
613 /// to be promoted to a [`Channel`] since the unfunded channel was created. An unfunded channel
614 /// exceeding this age limit will be force-closed and purged from memory.
615 pub(crate) const UNFUNDED_CHANNEL_AGE_LIMIT_TICKS: usize = 60;
616
617 /// Number of blocks needed for an output from a coinbase transaction to be spendable.
618 pub(crate) const COINBASE_MATURITY: u32 = 100;
619
620 struct PendingChannelMonitorUpdate {
621         update: ChannelMonitorUpdate,
622 }
623
624 impl_writeable_tlv_based!(PendingChannelMonitorUpdate, {
625         (0, update, required),
626 });
627
628 /// The `ChannelPhase` enum describes the current phase in life of a lightning channel with each of
629 /// its variants containing an appropriate channel struct.
630 pub(super) enum ChannelPhase<SP: Deref> where SP::Target: SignerProvider {
631         UnfundedOutboundV1(OutboundV1Channel<SP>),
632         UnfundedInboundV1(InboundV1Channel<SP>),
633         Funded(Channel<SP>),
634 }
635
636 impl<'a, SP: Deref> ChannelPhase<SP> where
637         SP::Target: SignerProvider,
638         <SP::Target as SignerProvider>::Signer: ChannelSigner,
639 {
640         pub fn context(&'a self) -> &'a ChannelContext<SP> {
641                 match self {
642                         ChannelPhase::Funded(chan) => &chan.context,
643                         ChannelPhase::UnfundedOutboundV1(chan) => &chan.context,
644                         ChannelPhase::UnfundedInboundV1(chan) => &chan.context,
645                 }
646         }
647
648         pub fn context_mut(&'a mut self) -> &'a mut ChannelContext<SP> {
649                 match self {
650                         ChannelPhase::Funded(ref mut chan) => &mut chan.context,
651                         ChannelPhase::UnfundedOutboundV1(ref mut chan) => &mut chan.context,
652                         ChannelPhase::UnfundedInboundV1(ref mut chan) => &mut chan.context,
653                 }
654         }
655 }
656
657 /// Contains all state common to unfunded inbound/outbound channels.
658 pub(super) struct UnfundedChannelContext {
659         /// A counter tracking how many ticks have elapsed since this unfunded channel was
660         /// created. If this unfunded channel reaches peer has yet to respond after reaching
661         /// `UNFUNDED_CHANNEL_AGE_LIMIT_TICKS`, it will be force-closed and purged from memory.
662         ///
663         /// This is so that we don't keep channels around that haven't progressed to a funded state
664         /// in a timely manner.
665         unfunded_channel_age_ticks: usize,
666 }
667
668 impl UnfundedChannelContext {
669         /// Determines whether we should force-close and purge this unfunded channel from memory due to it
670         /// having reached the unfunded channel age limit.
671         ///
672         /// This should be called on every [`super::channelmanager::ChannelManager::timer_tick_occurred`].
673         pub fn should_expire_unfunded_channel(&mut self) -> bool {
674                 self.unfunded_channel_age_ticks += 1;
675                 self.unfunded_channel_age_ticks >= UNFUNDED_CHANNEL_AGE_LIMIT_TICKS
676         }
677 }
678
679 /// Contains everything about the channel including state, and various flags.
680 pub(super) struct ChannelContext<SP: Deref> where SP::Target: SignerProvider {
681         config: LegacyChannelConfig,
682
683         // Track the previous `ChannelConfig` so that we can continue forwarding HTLCs that were
684         // constructed using it. The second element in the tuple corresponds to the number of ticks that
685         // have elapsed since the update occurred.
686         prev_config: Option<(ChannelConfig, usize)>,
687
688         inbound_handshake_limits_override: Option<ChannelHandshakeLimits>,
689
690         user_id: u128,
691
692         /// The current channel ID.
693         channel_id: ChannelId,
694         /// The temporary channel ID used during channel setup. Value kept even after transitioning to a final channel ID.
695         /// Will be `None` for channels created prior to 0.0.115.
696         temporary_channel_id: Option<ChannelId>,
697         channel_state: u32,
698
699         // When we reach max(6 blocks, minimum_depth), we need to send an AnnouncementSigs message to
700         // our peer. However, we want to make sure they received it, or else rebroadcast it when we
701         // next connect.
702         // We do so here, see `AnnouncementSigsSent` for more details on the state(s).
703         // Note that a number of our tests were written prior to the behavior here which retransmits
704         // AnnouncementSignatures until after an RAA completes, so the behavior is short-circuited in
705         // many tests.
706         #[cfg(any(test, feature = "_test_utils"))]
707         pub(crate) announcement_sigs_state: AnnouncementSigsState,
708         #[cfg(not(any(test, feature = "_test_utils")))]
709         announcement_sigs_state: AnnouncementSigsState,
710
711         secp_ctx: Secp256k1<secp256k1::All>,
712         channel_value_satoshis: u64,
713
714         latest_monitor_update_id: u64,
715
716         holder_signer: ChannelSignerType<<SP::Target as SignerProvider>::Signer>,
717         shutdown_scriptpubkey: Option<ShutdownScript>,
718         destination_script: Script,
719
720         // Our commitment numbers start at 2^48-1 and count down, whereas the ones used in transaction
721         // generation start at 0 and count up...this simplifies some parts of implementation at the
722         // cost of others, but should really just be changed.
723
724         cur_holder_commitment_transaction_number: u64,
725         cur_counterparty_commitment_transaction_number: u64,
726         value_to_self_msat: u64, // Excluding all pending_htlcs, fees, and anchor outputs
727         pending_inbound_htlcs: Vec<InboundHTLCOutput>,
728         pending_outbound_htlcs: Vec<OutboundHTLCOutput>,
729         holding_cell_htlc_updates: Vec<HTLCUpdateAwaitingACK>,
730
731         /// When resending CS/RAA messages on channel monitor restoration or on reconnect, we always
732         /// need to ensure we resend them in the order we originally generated them. Note that because
733         /// there can only ever be one in-flight CS and/or one in-flight RAA at any time, it is
734         /// sufficient to simply set this to the opposite of any message we are generating as we
735         /// generate it. ie when we generate a CS, we set this to RAAFirst as, if there is a pending
736         /// in-flight RAA to resend, it will have been the first thing we generated, and thus we should
737         /// send it first.
738         resend_order: RAACommitmentOrder,
739
740         monitor_pending_channel_ready: bool,
741         monitor_pending_revoke_and_ack: bool,
742         monitor_pending_commitment_signed: bool,
743
744         // TODO: If a channel is drop'd, we don't know whether the `ChannelMonitor` is ultimately
745         // responsible for some of the HTLCs here or not - we don't know whether the update in question
746         // completed or not. We currently ignore these fields entirely when force-closing a channel,
747         // but need to handle this somehow or we run the risk of losing HTLCs!
748         monitor_pending_forwards: Vec<(PendingHTLCInfo, u64)>,
749         monitor_pending_failures: Vec<(HTLCSource, PaymentHash, HTLCFailReason)>,
750         monitor_pending_finalized_fulfills: Vec<HTLCSource>,
751
752         // pending_update_fee is filled when sending and receiving update_fee.
753         //
754         // Because it follows the same commitment flow as HTLCs, `FeeUpdateState` is either `Outbound`
755         // or matches a subset of the `InboundHTLCOutput` variants. It is then updated/used when
756         // generating new commitment transactions with exactly the same criteria as inbound/outbound
757         // HTLCs with similar state.
758         pending_update_fee: Option<(u32, FeeUpdateState)>,
759         // If a `send_update_fee()` call is made with ChannelState::AwaitingRemoteRevoke set, we place
760         // it here instead of `pending_update_fee` in the same way as we place outbound HTLC updates in
761         // `holding_cell_htlc_updates` instead of `pending_outbound_htlcs`. It is released into
762         // `pending_update_fee` with the same criteria as outbound HTLC updates but can be updated by
763         // further `send_update_fee` calls, dropping the previous holding cell update entirely.
764         holding_cell_update_fee: Option<u32>,
765         next_holder_htlc_id: u64,
766         next_counterparty_htlc_id: u64,
767         feerate_per_kw: u32,
768
769         /// The timestamp set on our latest `channel_update` message for this channel. It is updated
770         /// when the channel is updated in ways which may impact the `channel_update` message or when a
771         /// new block is received, ensuring it's always at least moderately close to the current real
772         /// time.
773         update_time_counter: u32,
774
775         #[cfg(debug_assertions)]
776         /// Max to_local and to_remote outputs in a locally-generated commitment transaction
777         holder_max_commitment_tx_output: Mutex<(u64, u64)>,
778         #[cfg(debug_assertions)]
779         /// Max to_local and to_remote outputs in a remote-generated commitment transaction
780         counterparty_max_commitment_tx_output: Mutex<(u64, u64)>,
781
782         last_sent_closing_fee: Option<(u64, Signature)>, // (fee, holder_sig)
783         target_closing_feerate_sats_per_kw: Option<u32>,
784
785         /// If our counterparty sent us a closing_signed while we were waiting for a `ChannelMonitor`
786         /// update, we need to delay processing it until later. We do that here by simply storing the
787         /// closing_signed message and handling it in `maybe_propose_closing_signed`.
788         pending_counterparty_closing_signed: Option<msgs::ClosingSigned>,
789
790         /// The minimum and maximum absolute fee, in satoshis, we are willing to place on the closing
791         /// transaction. These are set once we reach `closing_negotiation_ready`.
792         #[cfg(test)]
793         pub(crate) closing_fee_limits: Option<(u64, u64)>,
794         #[cfg(not(test))]
795         closing_fee_limits: Option<(u64, u64)>,
796
797         /// The hash of the block in which the funding transaction was included.
798         funding_tx_confirmed_in: Option<BlockHash>,
799         funding_tx_confirmation_height: u32,
800         short_channel_id: Option<u64>,
801         /// Either the height at which this channel was created or the height at which it was last
802         /// serialized if it was serialized by versions prior to 0.0.103.
803         /// We use this to close if funding is never broadcasted.
804         channel_creation_height: u32,
805
806         counterparty_dust_limit_satoshis: u64,
807
808         #[cfg(test)]
809         pub(super) holder_dust_limit_satoshis: u64,
810         #[cfg(not(test))]
811         holder_dust_limit_satoshis: u64,
812
813         #[cfg(test)]
814         pub(super) counterparty_max_htlc_value_in_flight_msat: u64,
815         #[cfg(not(test))]
816         counterparty_max_htlc_value_in_flight_msat: u64,
817
818         #[cfg(test)]
819         pub(super) holder_max_htlc_value_in_flight_msat: u64,
820         #[cfg(not(test))]
821         holder_max_htlc_value_in_flight_msat: u64,
822
823         /// minimum channel reserve for self to maintain - set by them.
824         counterparty_selected_channel_reserve_satoshis: Option<u64>,
825
826         #[cfg(test)]
827         pub(super) holder_selected_channel_reserve_satoshis: u64,
828         #[cfg(not(test))]
829         holder_selected_channel_reserve_satoshis: u64,
830
831         counterparty_htlc_minimum_msat: u64,
832         holder_htlc_minimum_msat: u64,
833         #[cfg(test)]
834         pub counterparty_max_accepted_htlcs: u16,
835         #[cfg(not(test))]
836         counterparty_max_accepted_htlcs: u16,
837         holder_max_accepted_htlcs: u16,
838         minimum_depth: Option<u32>,
839
840         counterparty_forwarding_info: Option<CounterpartyForwardingInfo>,
841
842         pub(crate) channel_transaction_parameters: ChannelTransactionParameters,
843         funding_transaction: Option<Transaction>,
844         is_batch_funding: Option<()>,
845
846         counterparty_cur_commitment_point: Option<PublicKey>,
847         counterparty_prev_commitment_point: Option<PublicKey>,
848         counterparty_node_id: PublicKey,
849
850         counterparty_shutdown_scriptpubkey: Option<Script>,
851
852         commitment_secrets: CounterpartyCommitmentSecrets,
853
854         channel_update_status: ChannelUpdateStatus,
855         /// Once we reach `closing_negotiation_ready`, we set this, indicating if closing_signed does
856         /// not complete within a single timer tick (one minute), we should force-close the channel.
857         /// This prevents us from keeping unusable channels around forever if our counterparty wishes
858         /// to DoS us.
859         /// Note that this field is reset to false on deserialization to give us a chance to connect to
860         /// our peer and start the closing_signed negotiation fresh.
861         closing_signed_in_flight: bool,
862
863         /// Our counterparty's channel_announcement signatures provided in announcement_signatures.
864         /// This can be used to rebroadcast the channel_announcement message later.
865         announcement_sigs: Option<(Signature, Signature)>,
866
867         // We save these values so we can make sure `next_local_commit_tx_fee_msat` and
868         // `next_remote_commit_tx_fee_msat` properly predict what the next commitment transaction fee will
869         // be, by comparing the cached values to the fee of the tranaction generated by
870         // `build_commitment_transaction`.
871         #[cfg(any(test, fuzzing))]
872         next_local_commitment_tx_fee_info_cached: Mutex<Option<CommitmentTxInfoCached>>,
873         #[cfg(any(test, fuzzing))]
874         next_remote_commitment_tx_fee_info_cached: Mutex<Option<CommitmentTxInfoCached>>,
875
876         /// lnd has a long-standing bug where, upon reconnection, if the channel is not yet confirmed
877         /// they will not send a channel_reestablish until the channel locks in. Then, they will send a
878         /// channel_ready *before* sending the channel_reestablish (which is clearly a violation of
879         /// the BOLT specs). We copy c-lightning's workaround here and simply store the channel_ready
880         /// message until we receive a channel_reestablish.
881         ///
882         /// See-also <https://github.com/lightningnetwork/lnd/issues/4006>
883         pub workaround_lnd_bug_4006: Option<msgs::ChannelReady>,
884
885         /// An option set when we wish to track how many ticks have elapsed while waiting for a response
886         /// from our counterparty after sending a message. If the peer has yet to respond after reaching
887         /// `DISCONNECT_PEER_AWAITING_RESPONSE_TICKS`, a reconnection should be attempted to try to
888         /// unblock the state machine.
889         ///
890         /// This behavior is mostly motivated by a lnd bug in which we don't receive a message we expect
891         /// to in a timely manner, which may lead to channels becoming unusable and/or force-closed. An
892         /// example of such can be found at <https://github.com/lightningnetwork/lnd/issues/7682>.
893         ///
894         /// This is currently only used when waiting for a [`msgs::ChannelReestablish`] or
895         /// [`msgs::RevokeAndACK`] message from the counterparty.
896         sent_message_awaiting_response: Option<usize>,
897
898         #[cfg(any(test, fuzzing))]
899         // When we receive an HTLC fulfill on an outbound path, we may immediately fulfill the
900         // corresponding HTLC on the inbound path. If, then, the outbound path channel is
901         // disconnected and reconnected (before we've exchange commitment_signed and revoke_and_ack
902         // messages), they may re-broadcast their update_fulfill_htlc, causing a duplicate claim. This
903         // is fine, but as a sanity check in our failure to generate the second claim, we check here
904         // that the original was a claim, and that we aren't now trying to fulfill a failed HTLC.
905         historical_inbound_htlc_fulfills: HashSet<u64>,
906
907         /// This channel's type, as negotiated during channel open
908         channel_type: ChannelTypeFeatures,
909
910         // Our counterparty can offer us SCID aliases which they will map to this channel when routing
911         // outbound payments. These can be used in invoice route hints to avoid explicitly revealing
912         // the channel's funding UTXO.
913         //
914         // We also use this when sending our peer a channel_update that isn't to be broadcasted
915         // publicly - allowing them to re-use their map of SCID -> channel for channel_update ->
916         // associated channel mapping.
917         //
918         // We only bother storing the most recent SCID alias at any time, though our counterparty has
919         // to store all of them.
920         latest_inbound_scid_alias: Option<u64>,
921
922         // We always offer our counterparty a static SCID alias, which we recognize as for this channel
923         // if we see it in HTLC forwarding instructions. We don't bother rotating the alias given we
924         // don't currently support node id aliases and eventually privacy should be provided with
925         // blinded paths instead of simple scid+node_id aliases.
926         outbound_scid_alias: u64,
927
928         // We track whether we already emitted a `ChannelPending` event.
929         channel_pending_event_emitted: bool,
930
931         // We track whether we already emitted a `ChannelReady` event.
932         channel_ready_event_emitted: bool,
933
934         /// The unique identifier used to re-derive the private key material for the channel through
935         /// [`SignerProvider::derive_channel_signer`].
936         channel_keys_id: [u8; 32],
937
938         /// If we can't release a [`ChannelMonitorUpdate`] until some external action completes, we
939         /// store it here and only release it to the `ChannelManager` once it asks for it.
940         blocked_monitor_updates: Vec<PendingChannelMonitorUpdate>,
941 }
942
943 impl<SP: Deref> ChannelContext<SP> where SP::Target: SignerProvider  {
944         /// Allowed in any state (including after shutdown)
945         pub fn get_update_time_counter(&self) -> u32 {
946                 self.update_time_counter
947         }
948
949         pub fn get_latest_monitor_update_id(&self) -> u64 {
950                 self.latest_monitor_update_id
951         }
952
953         pub fn should_announce(&self) -> bool {
954                 self.config.announced_channel
955         }
956
957         pub fn is_outbound(&self) -> bool {
958                 self.channel_transaction_parameters.is_outbound_from_holder
959         }
960
961         /// Gets the fee we'd want to charge for adding an HTLC output to this Channel
962         /// Allowed in any state (including after shutdown)
963         pub fn get_outbound_forwarding_fee_base_msat(&self) -> u32 {
964                 self.config.options.forwarding_fee_base_msat
965         }
966
967         /// Returns true if we've ever received a message from the remote end for this Channel
968         pub fn have_received_message(&self) -> bool {
969                 self.channel_state & !STATE_FLAGS > (ChannelState::OurInitSent as u32)
970         }
971
972         /// Returns true if this channel is fully established and not known to be closing.
973         /// Allowed in any state (including after shutdown)
974         pub fn is_usable(&self) -> bool {
975                 let mask = ChannelState::ChannelReady as u32 | BOTH_SIDES_SHUTDOWN_MASK;
976                 (self.channel_state & mask) == (ChannelState::ChannelReady as u32) && !self.monitor_pending_channel_ready
977         }
978
979         /// shutdown state returns the state of the channel in its various stages of shutdown
980         pub fn shutdown_state(&self) -> ChannelShutdownState {
981                 if self.channel_state & (ChannelState::ShutdownComplete as u32) != 0 {
982                         return ChannelShutdownState::ShutdownComplete;
983                 }
984                 if self.channel_state & (ChannelState::LocalShutdownSent as u32) != 0 &&  self.channel_state & (ChannelState::RemoteShutdownSent as u32) == 0 {
985                         return ChannelShutdownState::ShutdownInitiated;
986                 }
987                 if (self.channel_state & BOTH_SIDES_SHUTDOWN_MASK != 0) && !self.closing_negotiation_ready() {
988                         return ChannelShutdownState::ResolvingHTLCs;
989                 }
990                 if (self.channel_state & BOTH_SIDES_SHUTDOWN_MASK != 0) && self.closing_negotiation_ready() {
991                         return ChannelShutdownState::NegotiatingClosingFee;
992                 }
993                 return ChannelShutdownState::NotShuttingDown;
994         }
995
996         fn closing_negotiation_ready(&self) -> bool {
997                 self.pending_inbound_htlcs.is_empty() &&
998                 self.pending_outbound_htlcs.is_empty() &&
999                 self.pending_update_fee.is_none() &&
1000                 self.channel_state &
1001                 (BOTH_SIDES_SHUTDOWN_MASK |
1002                         ChannelState::AwaitingRemoteRevoke as u32 |
1003                         ChannelState::PeerDisconnected as u32 |
1004                         ChannelState::MonitorUpdateInProgress as u32) == BOTH_SIDES_SHUTDOWN_MASK
1005         }
1006
1007         /// Returns true if this channel is currently available for use. This is a superset of
1008         /// is_usable() and considers things like the channel being temporarily disabled.
1009         /// Allowed in any state (including after shutdown)
1010         pub fn is_live(&self) -> bool {
1011                 self.is_usable() && (self.channel_state & (ChannelState::PeerDisconnected as u32) == 0)
1012         }
1013
1014         // Public utilities:
1015
1016         pub fn channel_id(&self) -> ChannelId {
1017                 self.channel_id
1018         }
1019
1020         // Return the `temporary_channel_id` used during channel establishment.
1021         //
1022         // Will return `None` for channels created prior to LDK version 0.0.115.
1023         pub fn temporary_channel_id(&self) -> Option<ChannelId> {
1024                 self.temporary_channel_id
1025         }
1026
1027         pub fn minimum_depth(&self) -> Option<u32> {
1028                 self.minimum_depth
1029         }
1030
1031         /// Gets the "user_id" value passed into the construction of this channel. It has no special
1032         /// meaning and exists only to allow users to have a persistent identifier of a channel.
1033         pub fn get_user_id(&self) -> u128 {
1034                 self.user_id
1035         }
1036
1037         /// Gets the channel's type
1038         pub fn get_channel_type(&self) -> &ChannelTypeFeatures {
1039                 &self.channel_type
1040         }
1041
1042         /// Gets the channel's `short_channel_id`.
1043         ///
1044         /// Will return `None` if the channel hasn't been confirmed yet.
1045         pub fn get_short_channel_id(&self) -> Option<u64> {
1046                 self.short_channel_id
1047         }
1048
1049         /// Allowed in any state (including after shutdown)
1050         pub fn latest_inbound_scid_alias(&self) -> Option<u64> {
1051                 self.latest_inbound_scid_alias
1052         }
1053
1054         /// Allowed in any state (including after shutdown)
1055         pub fn outbound_scid_alias(&self) -> u64 {
1056                 self.outbound_scid_alias
1057         }
1058
1059         /// Only allowed immediately after deserialization if get_outbound_scid_alias returns 0,
1060         /// indicating we were written by LDK prior to 0.0.106 which did not set outbound SCID aliases
1061         /// or prior to any channel actions during `Channel` initialization.
1062         pub fn set_outbound_scid_alias(&mut self, outbound_scid_alias: u64) {
1063                 debug_assert_eq!(self.outbound_scid_alias, 0);
1064                 self.outbound_scid_alias = outbound_scid_alias;
1065         }
1066
1067         /// Returns the funding_txo we either got from our peer, or were given by
1068         /// get_funding_created.
1069         pub fn get_funding_txo(&self) -> Option<OutPoint> {
1070                 self.channel_transaction_parameters.funding_outpoint
1071         }
1072
1073         /// Returns the block hash in which our funding transaction was confirmed.
1074         pub fn get_funding_tx_confirmed_in(&self) -> Option<BlockHash> {
1075                 self.funding_tx_confirmed_in
1076         }
1077
1078         /// Returns the current number of confirmations on the funding transaction.
1079         pub fn get_funding_tx_confirmations(&self, height: u32) -> u32 {
1080                 if self.funding_tx_confirmation_height == 0 {
1081                         // We either haven't seen any confirmation yet, or observed a reorg.
1082                         return 0;
1083                 }
1084
1085                 height.checked_sub(self.funding_tx_confirmation_height).map_or(0, |c| c + 1)
1086         }
1087
1088         fn get_holder_selected_contest_delay(&self) -> u16 {
1089                 self.channel_transaction_parameters.holder_selected_contest_delay
1090         }
1091
1092         fn get_holder_pubkeys(&self) -> &ChannelPublicKeys {
1093                 &self.channel_transaction_parameters.holder_pubkeys
1094         }
1095
1096         pub fn get_counterparty_selected_contest_delay(&self) -> Option<u16> {
1097                 self.channel_transaction_parameters.counterparty_parameters
1098                         .as_ref().map(|params| params.selected_contest_delay)
1099         }
1100
1101         fn get_counterparty_pubkeys(&self) -> &ChannelPublicKeys {
1102                 &self.channel_transaction_parameters.counterparty_parameters.as_ref().unwrap().pubkeys
1103         }
1104
1105         /// Allowed in any state (including after shutdown)
1106         pub fn get_counterparty_node_id(&self) -> PublicKey {
1107                 self.counterparty_node_id
1108         }
1109
1110         /// Allowed in any state (including after shutdown)
1111         pub fn get_holder_htlc_minimum_msat(&self) -> u64 {
1112                 self.holder_htlc_minimum_msat
1113         }
1114
1115         /// Allowed in any state (including after shutdown), but will return none before TheirInitSent
1116         pub fn get_holder_htlc_maximum_msat(&self) -> Option<u64> {
1117                 self.get_htlc_maximum_msat(self.holder_max_htlc_value_in_flight_msat)
1118         }
1119
1120         /// Allowed in any state (including after shutdown)
1121         pub fn get_announced_htlc_max_msat(&self) -> u64 {
1122                 return cmp::min(
1123                         // Upper bound by capacity. We make it a bit less than full capacity to prevent attempts
1124                         // to use full capacity. This is an effort to reduce routing failures, because in many cases
1125                         // channel might have been used to route very small values (either by honest users or as DoS).
1126                         self.channel_value_satoshis * 1000 * 9 / 10,
1127
1128                         self.counterparty_max_htlc_value_in_flight_msat
1129                 );
1130         }
1131
1132         /// Allowed in any state (including after shutdown)
1133         pub fn get_counterparty_htlc_minimum_msat(&self) -> u64 {
1134                 self.counterparty_htlc_minimum_msat
1135         }
1136
1137         /// Allowed in any state (including after shutdown), but will return none before TheirInitSent
1138         pub fn get_counterparty_htlc_maximum_msat(&self) -> Option<u64> {
1139                 self.get_htlc_maximum_msat(self.counterparty_max_htlc_value_in_flight_msat)
1140         }
1141
1142         fn get_htlc_maximum_msat(&self, party_max_htlc_value_in_flight_msat: u64) -> Option<u64> {
1143                 self.counterparty_selected_channel_reserve_satoshis.map(|counterparty_reserve| {
1144                         let holder_reserve = self.holder_selected_channel_reserve_satoshis;
1145                         cmp::min(
1146                                 (self.channel_value_satoshis - counterparty_reserve - holder_reserve) * 1000,
1147                                 party_max_htlc_value_in_flight_msat
1148                         )
1149                 })
1150         }
1151
1152         pub fn get_value_satoshis(&self) -> u64 {
1153                 self.channel_value_satoshis
1154         }
1155
1156         pub fn get_fee_proportional_millionths(&self) -> u32 {
1157                 self.config.options.forwarding_fee_proportional_millionths
1158         }
1159
1160         pub fn get_cltv_expiry_delta(&self) -> u16 {
1161                 cmp::max(self.config.options.cltv_expiry_delta, MIN_CLTV_EXPIRY_DELTA)
1162         }
1163
1164         pub fn get_max_dust_htlc_exposure_msat<F: Deref>(&self,
1165                 fee_estimator: &LowerBoundedFeeEstimator<F>) -> u64
1166         where F::Target: FeeEstimator
1167         {
1168                 match self.config.options.max_dust_htlc_exposure {
1169                         MaxDustHTLCExposure::FeeRateMultiplier(multiplier) => {
1170                                 let feerate_per_kw = fee_estimator.bounded_sat_per_1000_weight(
1171                                         ConfirmationTarget::OnChainSweep);
1172                                 feerate_per_kw as u64 * multiplier
1173                         },
1174                         MaxDustHTLCExposure::FixedLimitMsat(limit) => limit,
1175                 }
1176         }
1177
1178         /// Returns the previous [`ChannelConfig`] applied to this channel, if any.
1179         pub fn prev_config(&self) -> Option<ChannelConfig> {
1180                 self.prev_config.map(|prev_config| prev_config.0)
1181         }
1182
1183         // Checks whether we should emit a `ChannelPending` event.
1184         pub(crate) fn should_emit_channel_pending_event(&mut self) -> bool {
1185                 self.is_funding_broadcast() && !self.channel_pending_event_emitted
1186         }
1187
1188         // Returns whether we already emitted a `ChannelPending` event.
1189         pub(crate) fn channel_pending_event_emitted(&self) -> bool {
1190                 self.channel_pending_event_emitted
1191         }
1192
1193         // Remembers that we already emitted a `ChannelPending` event.
1194         pub(crate) fn set_channel_pending_event_emitted(&mut self) {
1195                 self.channel_pending_event_emitted = true;
1196         }
1197
1198         // Checks whether we should emit a `ChannelReady` event.
1199         pub(crate) fn should_emit_channel_ready_event(&mut self) -> bool {
1200                 self.is_usable() && !self.channel_ready_event_emitted
1201         }
1202
1203         // Remembers that we already emitted a `ChannelReady` event.
1204         pub(crate) fn set_channel_ready_event_emitted(&mut self) {
1205                 self.channel_ready_event_emitted = true;
1206         }
1207
1208         /// Tracks the number of ticks elapsed since the previous [`ChannelConfig`] was updated. Once
1209         /// [`EXPIRE_PREV_CONFIG_TICKS`] is reached, the previous config is considered expired and will
1210         /// no longer be considered when forwarding HTLCs.
1211         pub fn maybe_expire_prev_config(&mut self) {
1212                 if self.prev_config.is_none() {
1213                         return;
1214                 }
1215                 let prev_config = self.prev_config.as_mut().unwrap();
1216                 prev_config.1 += 1;
1217                 if prev_config.1 == EXPIRE_PREV_CONFIG_TICKS {
1218                         self.prev_config = None;
1219                 }
1220         }
1221
1222         /// Returns the current [`ChannelConfig`] applied to the channel.
1223         pub fn config(&self) -> ChannelConfig {
1224                 self.config.options
1225         }
1226
1227         /// Updates the channel's config. A bool is returned indicating whether the config update
1228         /// applied resulted in a new ChannelUpdate message.
1229         pub fn update_config(&mut self, config: &ChannelConfig) -> bool {
1230                 let did_channel_update =
1231                         self.config.options.forwarding_fee_proportional_millionths != config.forwarding_fee_proportional_millionths ||
1232                         self.config.options.forwarding_fee_base_msat != config.forwarding_fee_base_msat ||
1233                         self.config.options.cltv_expiry_delta != config.cltv_expiry_delta;
1234                 if did_channel_update {
1235                         self.prev_config = Some((self.config.options, 0));
1236                         // Update the counter, which backs the ChannelUpdate timestamp, to allow the relay
1237                         // policy change to propagate throughout the network.
1238                         self.update_time_counter += 1;
1239                 }
1240                 self.config.options = *config;
1241                 did_channel_update
1242         }
1243
1244         /// Returns true if funding_signed was sent/received and the
1245         /// funding transaction has been broadcast if necessary.
1246         pub fn is_funding_broadcast(&self) -> bool {
1247                 self.channel_state & !STATE_FLAGS >= ChannelState::FundingSent as u32 &&
1248                         self.channel_state & ChannelState::WaitingForBatch as u32 == 0
1249         }
1250
1251         /// Transaction nomenclature is somewhat confusing here as there are many different cases - a
1252         /// transaction is referred to as "a's transaction" implying that a will be able to broadcast
1253         /// the transaction. Thus, b will generally be sending a signature over such a transaction to
1254         /// a, and a can revoke the transaction by providing b the relevant per_commitment_secret. As
1255         /// such, a transaction is generally the result of b increasing the amount paid to a (or adding
1256         /// an HTLC to a).
1257         /// @local is used only to convert relevant internal structures which refer to remote vs local
1258         /// to decide value of outputs and direction of HTLCs.
1259         /// @generated_by_local is used to determine *which* HTLCs to include - noting that the HTLC
1260         /// state may indicate that one peer has informed the other that they'd like to add an HTLC but
1261         /// have not yet committed it. Such HTLCs will only be included in transactions which are being
1262         /// generated by the peer which proposed adding the HTLCs, and thus we need to understand both
1263         /// which peer generated this transaction and "to whom" this transaction flows.
1264         #[inline]
1265         fn build_commitment_transaction<L: Deref>(&self, commitment_number: u64, keys: &TxCreationKeys, local: bool, generated_by_local: bool, logger: &L) -> CommitmentStats
1266                 where L::Target: Logger
1267         {
1268                 let mut included_dust_htlcs: Vec<(HTLCOutputInCommitment, Option<&HTLCSource>)> = Vec::new();
1269                 let num_htlcs = self.pending_inbound_htlcs.len() + self.pending_outbound_htlcs.len();
1270                 let mut included_non_dust_htlcs: Vec<(HTLCOutputInCommitment, Option<&HTLCSource>)> = Vec::with_capacity(num_htlcs);
1271
1272                 let broadcaster_dust_limit_satoshis = if local { self.holder_dust_limit_satoshis } else { self.counterparty_dust_limit_satoshis };
1273                 let mut remote_htlc_total_msat = 0;
1274                 let mut local_htlc_total_msat = 0;
1275                 let mut value_to_self_msat_offset = 0;
1276
1277                 let mut feerate_per_kw = self.feerate_per_kw;
1278                 if let Some((feerate, update_state)) = self.pending_update_fee {
1279                         if match update_state {
1280                                 // Note that these match the inclusion criteria when scanning
1281                                 // pending_inbound_htlcs below.
1282                                 FeeUpdateState::RemoteAnnounced => { debug_assert!(!self.is_outbound()); !generated_by_local },
1283                                 FeeUpdateState::AwaitingRemoteRevokeToAnnounce => { debug_assert!(!self.is_outbound()); !generated_by_local },
1284                                 FeeUpdateState::Outbound => { assert!(self.is_outbound());  generated_by_local },
1285                         } {
1286                                 feerate_per_kw = feerate;
1287                         }
1288                 }
1289
1290                 log_trace!(logger, "Building commitment transaction number {} (really {} xor {}) for channel {} for {}, generated by {} with fee {}...",
1291                         commitment_number, (INITIAL_COMMITMENT_NUMBER - commitment_number),
1292                         get_commitment_transaction_number_obscure_factor(&self.get_holder_pubkeys().payment_point, &self.get_counterparty_pubkeys().payment_point, self.is_outbound()),
1293                         &self.channel_id,
1294                         if local { "us" } else { "remote" }, if generated_by_local { "us" } else { "remote" }, feerate_per_kw);
1295
1296                 macro_rules! get_htlc_in_commitment {
1297                         ($htlc: expr, $offered: expr) => {
1298                                 HTLCOutputInCommitment {
1299                                         offered: $offered,
1300                                         amount_msat: $htlc.amount_msat,
1301                                         cltv_expiry: $htlc.cltv_expiry,
1302                                         payment_hash: $htlc.payment_hash,
1303                                         transaction_output_index: None
1304                                 }
1305                         }
1306                 }
1307
1308                 macro_rules! add_htlc_output {
1309                         ($htlc: expr, $outbound: expr, $source: expr, $state_name: expr) => {
1310                                 if $outbound == local { // "offered HTLC output"
1311                                         let htlc_in_tx = get_htlc_in_commitment!($htlc, true);
1312                                         let htlc_tx_fee = if self.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1313                                                 0
1314                                         } else {
1315                                                 feerate_per_kw as u64 * htlc_timeout_tx_weight(self.get_channel_type()) / 1000
1316                                         };
1317                                         if $htlc.amount_msat / 1000 >= broadcaster_dust_limit_satoshis + htlc_tx_fee {
1318                                                 log_trace!(logger, "   ...including {} {} HTLC {} (hash {}) with value {}", if $outbound { "outbound" } else { "inbound" }, $state_name, $htlc.htlc_id, &$htlc.payment_hash, $htlc.amount_msat);
1319                                                 included_non_dust_htlcs.push((htlc_in_tx, $source));
1320                                         } else {
1321                                                 log_trace!(logger, "   ...including {} {} dust HTLC {} (hash {}) with value {} due to dust limit", if $outbound { "outbound" } else { "inbound" }, $state_name, $htlc.htlc_id, &$htlc.payment_hash, $htlc.amount_msat);
1322                                                 included_dust_htlcs.push((htlc_in_tx, $source));
1323                                         }
1324                                 } else {
1325                                         let htlc_in_tx = get_htlc_in_commitment!($htlc, false);
1326                                         let htlc_tx_fee = if self.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1327                                                 0
1328                                         } else {
1329                                                 feerate_per_kw as u64 * htlc_success_tx_weight(self.get_channel_type()) / 1000
1330                                         };
1331                                         if $htlc.amount_msat / 1000 >= broadcaster_dust_limit_satoshis + htlc_tx_fee {
1332                                                 log_trace!(logger, "   ...including {} {} HTLC {} (hash {}) with value {}", if $outbound { "outbound" } else { "inbound" }, $state_name, $htlc.htlc_id, &$htlc.payment_hash, $htlc.amount_msat);
1333                                                 included_non_dust_htlcs.push((htlc_in_tx, $source));
1334                                         } else {
1335                                                 log_trace!(logger, "   ...including {} {} dust HTLC {} (hash {}) with value {}", if $outbound { "outbound" } else { "inbound" }, $state_name, $htlc.htlc_id, &$htlc.payment_hash, $htlc.amount_msat);
1336                                                 included_dust_htlcs.push((htlc_in_tx, $source));
1337                                         }
1338                                 }
1339                         }
1340                 }
1341
1342                 for ref htlc in self.pending_inbound_htlcs.iter() {
1343                         let (include, state_name) = match htlc.state {
1344                                 InboundHTLCState::RemoteAnnounced(_) => (!generated_by_local, "RemoteAnnounced"),
1345                                 InboundHTLCState::AwaitingRemoteRevokeToAnnounce(_) => (!generated_by_local, "AwaitingRemoteRevokeToAnnounce"),
1346                                 InboundHTLCState::AwaitingAnnouncedRemoteRevoke(_) => (true, "AwaitingAnnouncedRemoteRevoke"),
1347                                 InboundHTLCState::Committed => (true, "Committed"),
1348                                 InboundHTLCState::LocalRemoved(_) => (!generated_by_local, "LocalRemoved"),
1349                         };
1350
1351                         if include {
1352                                 add_htlc_output!(htlc, false, None, state_name);
1353                                 remote_htlc_total_msat += htlc.amount_msat;
1354                         } else {
1355                                 log_trace!(logger, "   ...not including inbound HTLC {} (hash {}) with value {} due to state ({})", htlc.htlc_id, &htlc.payment_hash, htlc.amount_msat, state_name);
1356                                 match &htlc.state {
1357                                         &InboundHTLCState::LocalRemoved(ref reason) => {
1358                                                 if generated_by_local {
1359                                                         if let &InboundHTLCRemovalReason::Fulfill(_) = reason {
1360                                                                 value_to_self_msat_offset += htlc.amount_msat as i64;
1361                                                         }
1362                                                 }
1363                                         },
1364                                         _ => {},
1365                                 }
1366                         }
1367                 }
1368
1369                 let mut preimages: Vec<PaymentPreimage> = Vec::new();
1370
1371                 for ref htlc in self.pending_outbound_htlcs.iter() {
1372                         let (include, state_name) = match htlc.state {
1373                                 OutboundHTLCState::LocalAnnounced(_) => (generated_by_local, "LocalAnnounced"),
1374                                 OutboundHTLCState::Committed => (true, "Committed"),
1375                                 OutboundHTLCState::RemoteRemoved(_) => (generated_by_local, "RemoteRemoved"),
1376                                 OutboundHTLCState::AwaitingRemoteRevokeToRemove(_) => (generated_by_local, "AwaitingRemoteRevokeToRemove"),
1377                                 OutboundHTLCState::AwaitingRemovedRemoteRevoke(_) => (false, "AwaitingRemovedRemoteRevoke"),
1378                         };
1379
1380                         let preimage_opt = match htlc.state {
1381                                 OutboundHTLCState::RemoteRemoved(OutboundHTLCOutcome::Success(p)) => p,
1382                                 OutboundHTLCState::AwaitingRemoteRevokeToRemove(OutboundHTLCOutcome::Success(p)) => p,
1383                                 OutboundHTLCState::AwaitingRemovedRemoteRevoke(OutboundHTLCOutcome::Success(p)) => p,
1384                                 _ => None,
1385                         };
1386
1387                         if let Some(preimage) = preimage_opt {
1388                                 preimages.push(preimage);
1389                         }
1390
1391                         if include {
1392                                 add_htlc_output!(htlc, true, Some(&htlc.source), state_name);
1393                                 local_htlc_total_msat += htlc.amount_msat;
1394                         } else {
1395                                 log_trace!(logger, "   ...not including outbound HTLC {} (hash {}) with value {} due to state ({})", htlc.htlc_id, &htlc.payment_hash, htlc.amount_msat, state_name);
1396                                 match htlc.state {
1397                                         OutboundHTLCState::AwaitingRemoteRevokeToRemove(OutboundHTLCOutcome::Success(_))|OutboundHTLCState::AwaitingRemovedRemoteRevoke(OutboundHTLCOutcome::Success(_)) => {
1398                                                 value_to_self_msat_offset -= htlc.amount_msat as i64;
1399                                         },
1400                                         OutboundHTLCState::RemoteRemoved(OutboundHTLCOutcome::Success(_)) => {
1401                                                 if !generated_by_local {
1402                                                         value_to_self_msat_offset -= htlc.amount_msat as i64;
1403                                                 }
1404                                         },
1405                                         _ => {},
1406                                 }
1407                         }
1408                 }
1409
1410                 let mut value_to_self_msat: i64 = (self.value_to_self_msat - local_htlc_total_msat) as i64 + value_to_self_msat_offset;
1411                 assert!(value_to_self_msat >= 0);
1412                 // Note that in case they have several just-awaiting-last-RAA fulfills in-progress (ie
1413                 // AwaitingRemoteRevokeToRemove or AwaitingRemovedRemoteRevoke) we may have allowed them to
1414                 // "violate" their reserve value by couting those against it. Thus, we have to convert
1415                 // everything to i64 before subtracting as otherwise we can overflow.
1416                 let mut value_to_remote_msat: i64 = (self.channel_value_satoshis * 1000) as i64 - (self.value_to_self_msat as i64) - (remote_htlc_total_msat as i64) - value_to_self_msat_offset;
1417                 assert!(value_to_remote_msat >= 0);
1418
1419                 #[cfg(debug_assertions)]
1420                 {
1421                         // Make sure that the to_self/to_remote is always either past the appropriate
1422                         // channel_reserve *or* it is making progress towards it.
1423                         let mut broadcaster_max_commitment_tx_output = if generated_by_local {
1424                                 self.holder_max_commitment_tx_output.lock().unwrap()
1425                         } else {
1426                                 self.counterparty_max_commitment_tx_output.lock().unwrap()
1427                         };
1428                         debug_assert!(broadcaster_max_commitment_tx_output.0 <= value_to_self_msat as u64 || value_to_self_msat / 1000 >= self.counterparty_selected_channel_reserve_satoshis.unwrap() as i64);
1429                         broadcaster_max_commitment_tx_output.0 = cmp::max(broadcaster_max_commitment_tx_output.0, value_to_self_msat as u64);
1430                         debug_assert!(broadcaster_max_commitment_tx_output.1 <= value_to_remote_msat as u64 || value_to_remote_msat / 1000 >= self.holder_selected_channel_reserve_satoshis as i64);
1431                         broadcaster_max_commitment_tx_output.1 = cmp::max(broadcaster_max_commitment_tx_output.1, value_to_remote_msat as u64);
1432                 }
1433
1434                 let total_fee_sat = commit_tx_fee_sat(feerate_per_kw, included_non_dust_htlcs.len(), &self.channel_transaction_parameters.channel_type_features);
1435                 let anchors_val = if self.channel_transaction_parameters.channel_type_features.supports_anchors_zero_fee_htlc_tx() { ANCHOR_OUTPUT_VALUE_SATOSHI * 2 } else { 0 } as i64;
1436                 let (value_to_self, value_to_remote) = if self.is_outbound() {
1437                         (value_to_self_msat / 1000 - anchors_val - total_fee_sat as i64, value_to_remote_msat / 1000)
1438                 } else {
1439                         (value_to_self_msat / 1000, value_to_remote_msat / 1000 - anchors_val - total_fee_sat as i64)
1440                 };
1441
1442                 let mut value_to_a = if local { value_to_self } else { value_to_remote };
1443                 let mut value_to_b = if local { value_to_remote } else { value_to_self };
1444                 let (funding_pubkey_a, funding_pubkey_b) = if local {
1445                         (self.get_holder_pubkeys().funding_pubkey, self.get_counterparty_pubkeys().funding_pubkey)
1446                 } else {
1447                         (self.get_counterparty_pubkeys().funding_pubkey, self.get_holder_pubkeys().funding_pubkey)
1448                 };
1449
1450                 if value_to_a >= (broadcaster_dust_limit_satoshis as i64) {
1451                         log_trace!(logger, "   ...including {} output with value {}", if local { "to_local" } else { "to_remote" }, value_to_a);
1452                 } else {
1453                         value_to_a = 0;
1454                 }
1455
1456                 if value_to_b >= (broadcaster_dust_limit_satoshis as i64) {
1457                         log_trace!(logger, "   ...including {} output with value {}", if local { "to_remote" } else { "to_local" }, value_to_b);
1458                 } else {
1459                         value_to_b = 0;
1460                 }
1461
1462                 let num_nondust_htlcs = included_non_dust_htlcs.len();
1463
1464                 let channel_parameters =
1465                         if local { self.channel_transaction_parameters.as_holder_broadcastable() }
1466                         else { self.channel_transaction_parameters.as_counterparty_broadcastable() };
1467                 let tx = CommitmentTransaction::new_with_auxiliary_htlc_data(commitment_number,
1468                                                                              value_to_a as u64,
1469                                                                              value_to_b as u64,
1470                                                                              funding_pubkey_a,
1471                                                                              funding_pubkey_b,
1472                                                                              keys.clone(),
1473                                                                              feerate_per_kw,
1474                                                                              &mut included_non_dust_htlcs,
1475                                                                              &channel_parameters
1476                 );
1477                 let mut htlcs_included = included_non_dust_htlcs;
1478                 // The unwrap is safe, because all non-dust HTLCs have been assigned an output index
1479                 htlcs_included.sort_unstable_by_key(|h| h.0.transaction_output_index.unwrap());
1480                 htlcs_included.append(&mut included_dust_htlcs);
1481
1482                 // For the stats, trimmed-to-0 the value in msats accordingly
1483                 value_to_self_msat = if (value_to_self_msat * 1000) < broadcaster_dust_limit_satoshis as i64 { 0 } else { value_to_self_msat };
1484                 value_to_remote_msat = if (value_to_remote_msat * 1000) < broadcaster_dust_limit_satoshis as i64 { 0 } else { value_to_remote_msat };
1485
1486                 CommitmentStats {
1487                         tx,
1488                         feerate_per_kw,
1489                         total_fee_sat,
1490                         num_nondust_htlcs,
1491                         htlcs_included,
1492                         local_balance_msat: value_to_self_msat as u64,
1493                         remote_balance_msat: value_to_remote_msat as u64,
1494                         preimages
1495                 }
1496         }
1497
1498         #[inline]
1499         /// Creates a set of keys for build_commitment_transaction to generate a transaction which our
1500         /// counterparty will sign (ie DO NOT send signatures over a transaction created by this to
1501         /// our counterparty!)
1502         /// The result is a transaction which we can revoke broadcastership of (ie a "local" transaction)
1503         /// TODO Some magic rust shit to compile-time check this?
1504         fn build_holder_transaction_keys(&self, commitment_number: u64) -> TxCreationKeys {
1505                 let per_commitment_point = self.holder_signer.as_ref().get_per_commitment_point(commitment_number, &self.secp_ctx);
1506                 let delayed_payment_base = &self.get_holder_pubkeys().delayed_payment_basepoint;
1507                 let htlc_basepoint = &self.get_holder_pubkeys().htlc_basepoint;
1508                 let counterparty_pubkeys = self.get_counterparty_pubkeys();
1509
1510                 TxCreationKeys::derive_new(&self.secp_ctx, &per_commitment_point, delayed_payment_base, htlc_basepoint, &counterparty_pubkeys.revocation_basepoint, &counterparty_pubkeys.htlc_basepoint)
1511         }
1512
1513         #[inline]
1514         /// Creates a set of keys for build_commitment_transaction to generate a transaction which we
1515         /// will sign and send to our counterparty.
1516         /// If an Err is returned, it is a ChannelError::Close (for get_funding_created)
1517         fn build_remote_transaction_keys(&self) -> TxCreationKeys {
1518                 //TODO: Ensure that the payment_key derived here ends up in the library users' wallet as we
1519                 //may see payments to it!
1520                 let revocation_basepoint = &self.get_holder_pubkeys().revocation_basepoint;
1521                 let htlc_basepoint = &self.get_holder_pubkeys().htlc_basepoint;
1522                 let counterparty_pubkeys = self.get_counterparty_pubkeys();
1523
1524                 TxCreationKeys::derive_new(&self.secp_ctx, &self.counterparty_cur_commitment_point.unwrap(), &counterparty_pubkeys.delayed_payment_basepoint, &counterparty_pubkeys.htlc_basepoint, revocation_basepoint, htlc_basepoint)
1525         }
1526
1527         /// Gets the redeemscript for the funding transaction output (ie the funding transaction output
1528         /// pays to get_funding_redeemscript().to_v0_p2wsh()).
1529         /// Panics if called before accept_channel/InboundV1Channel::new
1530         pub fn get_funding_redeemscript(&self) -> Script {
1531                 make_funding_redeemscript(&self.get_holder_pubkeys().funding_pubkey, self.counterparty_funding_pubkey())
1532         }
1533
1534         fn counterparty_funding_pubkey(&self) -> &PublicKey {
1535                 &self.get_counterparty_pubkeys().funding_pubkey
1536         }
1537
1538         pub fn get_feerate_sat_per_1000_weight(&self) -> u32 {
1539                 self.feerate_per_kw
1540         }
1541
1542         pub fn get_dust_buffer_feerate(&self, outbound_feerate_update: Option<u32>) -> u32 {
1543                 // When calculating our exposure to dust HTLCs, we assume that the channel feerate
1544                 // may, at any point, increase by at least 10 sat/vB (i.e 2530 sat/kWU) or 25%,
1545                 // whichever is higher. This ensures that we aren't suddenly exposed to significantly
1546                 // more dust balance if the feerate increases when we have several HTLCs pending
1547                 // which are near the dust limit.
1548                 let mut feerate_per_kw = self.feerate_per_kw;
1549                 // If there's a pending update fee, use it to ensure we aren't under-estimating
1550                 // potential feerate updates coming soon.
1551                 if let Some((feerate, _)) = self.pending_update_fee {
1552                         feerate_per_kw = cmp::max(feerate_per_kw, feerate);
1553                 }
1554                 if let Some(feerate) = outbound_feerate_update {
1555                         feerate_per_kw = cmp::max(feerate_per_kw, feerate);
1556                 }
1557                 cmp::max(2530, feerate_per_kw * 1250 / 1000)
1558         }
1559
1560         /// Get forwarding information for the counterparty.
1561         pub fn counterparty_forwarding_info(&self) -> Option<CounterpartyForwardingInfo> {
1562                 self.counterparty_forwarding_info.clone()
1563         }
1564
1565         /// Returns a HTLCStats about inbound pending htlcs
1566         fn get_inbound_pending_htlc_stats(&self, outbound_feerate_update: Option<u32>) -> HTLCStats {
1567                 let context = self;
1568                 let mut stats = HTLCStats {
1569                         pending_htlcs: context.pending_inbound_htlcs.len() as u32,
1570                         pending_htlcs_value_msat: 0,
1571                         on_counterparty_tx_dust_exposure_msat: 0,
1572                         on_holder_tx_dust_exposure_msat: 0,
1573                         holding_cell_msat: 0,
1574                         on_holder_tx_holding_cell_htlcs_count: 0,
1575                 };
1576
1577                 let (htlc_timeout_dust_limit, htlc_success_dust_limit) = if context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1578                         (0, 0)
1579                 } else {
1580                         let dust_buffer_feerate = context.get_dust_buffer_feerate(outbound_feerate_update) as u64;
1581                         (dust_buffer_feerate * htlc_timeout_tx_weight(context.get_channel_type()) / 1000,
1582                                 dust_buffer_feerate * htlc_success_tx_weight(context.get_channel_type()) / 1000)
1583                 };
1584                 let counterparty_dust_limit_timeout_sat = htlc_timeout_dust_limit + context.counterparty_dust_limit_satoshis;
1585                 let holder_dust_limit_success_sat = htlc_success_dust_limit + context.holder_dust_limit_satoshis;
1586                 for ref htlc in context.pending_inbound_htlcs.iter() {
1587                         stats.pending_htlcs_value_msat += htlc.amount_msat;
1588                         if htlc.amount_msat / 1000 < counterparty_dust_limit_timeout_sat {
1589                                 stats.on_counterparty_tx_dust_exposure_msat += htlc.amount_msat;
1590                         }
1591                         if htlc.amount_msat / 1000 < holder_dust_limit_success_sat {
1592                                 stats.on_holder_tx_dust_exposure_msat += htlc.amount_msat;
1593                         }
1594                 }
1595                 stats
1596         }
1597
1598         /// Returns a HTLCStats about pending outbound htlcs, *including* pending adds in our holding cell.
1599         fn get_outbound_pending_htlc_stats(&self, outbound_feerate_update: Option<u32>) -> HTLCStats {
1600                 let context = self;
1601                 let mut stats = HTLCStats {
1602                         pending_htlcs: context.pending_outbound_htlcs.len() as u32,
1603                         pending_htlcs_value_msat: 0,
1604                         on_counterparty_tx_dust_exposure_msat: 0,
1605                         on_holder_tx_dust_exposure_msat: 0,
1606                         holding_cell_msat: 0,
1607                         on_holder_tx_holding_cell_htlcs_count: 0,
1608                 };
1609
1610                 let (htlc_timeout_dust_limit, htlc_success_dust_limit) = if context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1611                         (0, 0)
1612                 } else {
1613                         let dust_buffer_feerate = context.get_dust_buffer_feerate(outbound_feerate_update) as u64;
1614                         (dust_buffer_feerate * htlc_timeout_tx_weight(context.get_channel_type()) / 1000,
1615                                 dust_buffer_feerate * htlc_success_tx_weight(context.get_channel_type()) / 1000)
1616                 };
1617                 let counterparty_dust_limit_success_sat = htlc_success_dust_limit + context.counterparty_dust_limit_satoshis;
1618                 let holder_dust_limit_timeout_sat = htlc_timeout_dust_limit + context.holder_dust_limit_satoshis;
1619                 for ref htlc in context.pending_outbound_htlcs.iter() {
1620                         stats.pending_htlcs_value_msat += htlc.amount_msat;
1621                         if htlc.amount_msat / 1000 < counterparty_dust_limit_success_sat {
1622                                 stats.on_counterparty_tx_dust_exposure_msat += htlc.amount_msat;
1623                         }
1624                         if htlc.amount_msat / 1000 < holder_dust_limit_timeout_sat {
1625                                 stats.on_holder_tx_dust_exposure_msat += htlc.amount_msat;
1626                         }
1627                 }
1628
1629                 for update in context.holding_cell_htlc_updates.iter() {
1630                         if let &HTLCUpdateAwaitingACK::AddHTLC { ref amount_msat, .. } = update {
1631                                 stats.pending_htlcs += 1;
1632                                 stats.pending_htlcs_value_msat += amount_msat;
1633                                 stats.holding_cell_msat += amount_msat;
1634                                 if *amount_msat / 1000 < counterparty_dust_limit_success_sat {
1635                                         stats.on_counterparty_tx_dust_exposure_msat += amount_msat;
1636                                 }
1637                                 if *amount_msat / 1000 < holder_dust_limit_timeout_sat {
1638                                         stats.on_holder_tx_dust_exposure_msat += amount_msat;
1639                                 } else {
1640                                         stats.on_holder_tx_holding_cell_htlcs_count += 1;
1641                                 }
1642                         }
1643                 }
1644                 stats
1645         }
1646
1647         /// Get the available balances, see [`AvailableBalances`]'s fields for more info.
1648         /// Doesn't bother handling the
1649         /// if-we-removed-it-already-but-haven't-fully-resolved-they-can-still-send-an-inbound-HTLC
1650         /// corner case properly.
1651         pub fn get_available_balances<F: Deref>(&self, fee_estimator: &LowerBoundedFeeEstimator<F>)
1652         -> AvailableBalances
1653         where F::Target: FeeEstimator
1654         {
1655                 let context = &self;
1656                 // Note that we have to handle overflow due to the above case.
1657                 let inbound_stats = context.get_inbound_pending_htlc_stats(None);
1658                 let outbound_stats = context.get_outbound_pending_htlc_stats(None);
1659
1660                 let mut balance_msat = context.value_to_self_msat;
1661                 for ref htlc in context.pending_inbound_htlcs.iter() {
1662                         if let InboundHTLCState::LocalRemoved(InboundHTLCRemovalReason::Fulfill(_)) = htlc.state {
1663                                 balance_msat += htlc.amount_msat;
1664                         }
1665                 }
1666                 balance_msat -= outbound_stats.pending_htlcs_value_msat;
1667
1668                 let outbound_capacity_msat = context.value_to_self_msat
1669                                 .saturating_sub(outbound_stats.pending_htlcs_value_msat)
1670                                 .saturating_sub(
1671                                         context.counterparty_selected_channel_reserve_satoshis.unwrap_or(0) * 1000);
1672
1673                 let mut available_capacity_msat = outbound_capacity_msat;
1674
1675                 let anchor_outputs_value_msat = if context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1676                         ANCHOR_OUTPUT_VALUE_SATOSHI * 2 * 1000
1677                 } else {
1678                         0
1679                 };
1680                 if context.is_outbound() {
1681                         // We should mind channel commit tx fee when computing how much of the available capacity
1682                         // can be used in the next htlc. Mirrors the logic in send_htlc.
1683                         //
1684                         // The fee depends on whether the amount we will be sending is above dust or not,
1685                         // and the answer will in turn change the amount itself â€” making it a circular
1686                         // dependency.
1687                         // This complicates the computation around dust-values, up to the one-htlc-value.
1688                         let mut real_dust_limit_timeout_sat = context.holder_dust_limit_satoshis;
1689                         if !context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1690                                 real_dust_limit_timeout_sat += context.feerate_per_kw as u64 * htlc_timeout_tx_weight(context.get_channel_type()) / 1000;
1691                         }
1692
1693                         let htlc_above_dust = HTLCCandidate::new(real_dust_limit_timeout_sat * 1000, HTLCInitiator::LocalOffered);
1694                         let mut max_reserved_commit_tx_fee_msat = context.next_local_commit_tx_fee_msat(htlc_above_dust, Some(()));
1695                         let htlc_dust = HTLCCandidate::new(real_dust_limit_timeout_sat * 1000 - 1, HTLCInitiator::LocalOffered);
1696                         let mut min_reserved_commit_tx_fee_msat = context.next_local_commit_tx_fee_msat(htlc_dust, Some(()));
1697                         if !context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1698                                 max_reserved_commit_tx_fee_msat *= FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE;
1699                                 min_reserved_commit_tx_fee_msat *= FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE;
1700                         }
1701
1702                         // We will first subtract the fee as if we were above-dust. Then, if the resulting
1703                         // value ends up being below dust, we have this fee available again. In that case,
1704                         // match the value to right-below-dust.
1705                         let mut capacity_minus_commitment_fee_msat: i64 = available_capacity_msat as i64 -
1706                                 max_reserved_commit_tx_fee_msat as i64 - anchor_outputs_value_msat as i64;
1707                         if capacity_minus_commitment_fee_msat < (real_dust_limit_timeout_sat as i64) * 1000 {
1708                                 let one_htlc_difference_msat = max_reserved_commit_tx_fee_msat - min_reserved_commit_tx_fee_msat;
1709                                 debug_assert!(one_htlc_difference_msat != 0);
1710                                 capacity_minus_commitment_fee_msat += one_htlc_difference_msat as i64;
1711                                 capacity_minus_commitment_fee_msat = cmp::min(real_dust_limit_timeout_sat as i64 * 1000 - 1, capacity_minus_commitment_fee_msat);
1712                                 available_capacity_msat = cmp::max(0, cmp::min(capacity_minus_commitment_fee_msat, available_capacity_msat as i64)) as u64;
1713                         } else {
1714                                 available_capacity_msat = capacity_minus_commitment_fee_msat as u64;
1715                         }
1716                 } else {
1717                         // If the channel is inbound (i.e. counterparty pays the fee), we need to make sure
1718                         // sending a new HTLC won't reduce their balance below our reserve threshold.
1719                         let mut real_dust_limit_success_sat = context.counterparty_dust_limit_satoshis;
1720                         if !context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1721                                 real_dust_limit_success_sat += context.feerate_per_kw as u64 * htlc_success_tx_weight(context.get_channel_type()) / 1000;
1722                         }
1723
1724                         let htlc_above_dust = HTLCCandidate::new(real_dust_limit_success_sat * 1000, HTLCInitiator::LocalOffered);
1725                         let max_reserved_commit_tx_fee_msat = context.next_remote_commit_tx_fee_msat(htlc_above_dust, None);
1726
1727                         let holder_selected_chan_reserve_msat = context.holder_selected_channel_reserve_satoshis * 1000;
1728                         let remote_balance_msat = (context.channel_value_satoshis * 1000 - context.value_to_self_msat)
1729                                 .saturating_sub(inbound_stats.pending_htlcs_value_msat);
1730
1731                         if remote_balance_msat < max_reserved_commit_tx_fee_msat + holder_selected_chan_reserve_msat + anchor_outputs_value_msat {
1732                                 // If another HTLC's fee would reduce the remote's balance below the reserve limit
1733                                 // we've selected for them, we can only send dust HTLCs.
1734                                 available_capacity_msat = cmp::min(available_capacity_msat, real_dust_limit_success_sat * 1000 - 1);
1735                         }
1736                 }
1737
1738                 let mut next_outbound_htlc_minimum_msat = context.counterparty_htlc_minimum_msat;
1739
1740                 // If we get close to our maximum dust exposure, we end up in a situation where we can send
1741                 // between zero and the remaining dust exposure limit remaining OR above the dust limit.
1742                 // Because we cannot express this as a simple min/max, we prefer to tell the user they can
1743                 // send above the dust limit (as the router can always overpay to meet the dust limit).
1744                 let mut remaining_msat_below_dust_exposure_limit = None;
1745                 let mut dust_exposure_dust_limit_msat = 0;
1746                 let max_dust_htlc_exposure_msat = context.get_max_dust_htlc_exposure_msat(fee_estimator);
1747
1748                 let (htlc_success_dust_limit, htlc_timeout_dust_limit) = if context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1749                         (context.counterparty_dust_limit_satoshis, context.holder_dust_limit_satoshis)
1750                 } else {
1751                         let dust_buffer_feerate = context.get_dust_buffer_feerate(None) as u64;
1752                         (context.counterparty_dust_limit_satoshis + dust_buffer_feerate * htlc_success_tx_weight(context.get_channel_type()) / 1000,
1753                          context.holder_dust_limit_satoshis       + dust_buffer_feerate * htlc_timeout_tx_weight(context.get_channel_type()) / 1000)
1754                 };
1755                 let on_counterparty_dust_htlc_exposure_msat = inbound_stats.on_counterparty_tx_dust_exposure_msat + outbound_stats.on_counterparty_tx_dust_exposure_msat;
1756                 if on_counterparty_dust_htlc_exposure_msat as i64 + htlc_success_dust_limit as i64 * 1000 - 1 > max_dust_htlc_exposure_msat as i64 {
1757                         remaining_msat_below_dust_exposure_limit =
1758                                 Some(max_dust_htlc_exposure_msat.saturating_sub(on_counterparty_dust_htlc_exposure_msat));
1759                         dust_exposure_dust_limit_msat = cmp::max(dust_exposure_dust_limit_msat, htlc_success_dust_limit * 1000);
1760                 }
1761
1762                 let on_holder_dust_htlc_exposure_msat = inbound_stats.on_holder_tx_dust_exposure_msat + outbound_stats.on_holder_tx_dust_exposure_msat;
1763                 if on_holder_dust_htlc_exposure_msat as i64 + htlc_timeout_dust_limit as i64 * 1000 - 1 > max_dust_htlc_exposure_msat as i64 {
1764                         remaining_msat_below_dust_exposure_limit = Some(cmp::min(
1765                                 remaining_msat_below_dust_exposure_limit.unwrap_or(u64::max_value()),
1766                                 max_dust_htlc_exposure_msat.saturating_sub(on_holder_dust_htlc_exposure_msat)));
1767                         dust_exposure_dust_limit_msat = cmp::max(dust_exposure_dust_limit_msat, htlc_timeout_dust_limit * 1000);
1768                 }
1769
1770                 if let Some(remaining_limit_msat) = remaining_msat_below_dust_exposure_limit {
1771                         if available_capacity_msat < dust_exposure_dust_limit_msat {
1772                                 available_capacity_msat = cmp::min(available_capacity_msat, remaining_limit_msat);
1773                         } else {
1774                                 next_outbound_htlc_minimum_msat = cmp::max(next_outbound_htlc_minimum_msat, dust_exposure_dust_limit_msat);
1775                         }
1776                 }
1777
1778                 available_capacity_msat = cmp::min(available_capacity_msat,
1779                         context.counterparty_max_htlc_value_in_flight_msat - outbound_stats.pending_htlcs_value_msat);
1780
1781                 if outbound_stats.pending_htlcs + 1 > context.counterparty_max_accepted_htlcs as u32 {
1782                         available_capacity_msat = 0;
1783                 }
1784
1785                 AvailableBalances {
1786                         inbound_capacity_msat: cmp::max(context.channel_value_satoshis as i64 * 1000
1787                                         - context.value_to_self_msat as i64
1788                                         - context.get_inbound_pending_htlc_stats(None).pending_htlcs_value_msat as i64
1789                                         - context.holder_selected_channel_reserve_satoshis as i64 * 1000,
1790                                 0) as u64,
1791                         outbound_capacity_msat,
1792                         next_outbound_htlc_limit_msat: available_capacity_msat,
1793                         next_outbound_htlc_minimum_msat,
1794                         balance_msat,
1795                 }
1796         }
1797
1798         pub fn get_holder_counterparty_selected_channel_reserve_satoshis(&self) -> (u64, Option<u64>) {
1799                 let context = &self;
1800                 (context.holder_selected_channel_reserve_satoshis, context.counterparty_selected_channel_reserve_satoshis)
1801         }
1802
1803         /// Get the commitment tx fee for the local's (i.e. our) next commitment transaction based on the
1804         /// number of pending HTLCs that are on track to be in our next commitment tx.
1805         ///
1806         /// Optionally includes the `HTLCCandidate` given by `htlc` and an additional non-dust HTLC if
1807         /// `fee_spike_buffer_htlc` is `Some`.
1808         ///
1809         /// The first extra HTLC is useful for determining whether we can accept a further HTLC, the
1810         /// second allows for creating a buffer to ensure a further HTLC can always be accepted/added.
1811         ///
1812         /// Dust HTLCs are excluded.
1813         fn next_local_commit_tx_fee_msat(&self, htlc: HTLCCandidate, fee_spike_buffer_htlc: Option<()>) -> u64 {
1814                 let context = &self;
1815                 assert!(context.is_outbound());
1816
1817                 let (htlc_success_dust_limit, htlc_timeout_dust_limit) = if context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1818                         (0, 0)
1819                 } else {
1820                         (context.feerate_per_kw as u64 * htlc_success_tx_weight(context.get_channel_type()) / 1000,
1821                                 context.feerate_per_kw as u64 * htlc_timeout_tx_weight(context.get_channel_type()) / 1000)
1822                 };
1823                 let real_dust_limit_success_sat = htlc_success_dust_limit + context.holder_dust_limit_satoshis;
1824                 let real_dust_limit_timeout_sat = htlc_timeout_dust_limit + context.holder_dust_limit_satoshis;
1825
1826                 let mut addl_htlcs = 0;
1827                 if fee_spike_buffer_htlc.is_some() { addl_htlcs += 1; }
1828                 match htlc.origin {
1829                         HTLCInitiator::LocalOffered => {
1830                                 if htlc.amount_msat / 1000 >= real_dust_limit_timeout_sat {
1831                                         addl_htlcs += 1;
1832                                 }
1833                         },
1834                         HTLCInitiator::RemoteOffered => {
1835                                 if htlc.amount_msat / 1000 >= real_dust_limit_success_sat {
1836                                         addl_htlcs += 1;
1837                                 }
1838                         }
1839                 }
1840
1841                 let mut included_htlcs = 0;
1842                 for ref htlc in context.pending_inbound_htlcs.iter() {
1843                         if htlc.amount_msat / 1000 < real_dust_limit_success_sat {
1844                                 continue
1845                         }
1846                         // We include LocalRemoved HTLCs here because we may still need to broadcast a commitment
1847                         // transaction including this HTLC if it times out before they RAA.
1848                         included_htlcs += 1;
1849                 }
1850
1851                 for ref htlc in context.pending_outbound_htlcs.iter() {
1852                         if htlc.amount_msat / 1000 < real_dust_limit_timeout_sat {
1853                                 continue
1854                         }
1855                         match htlc.state {
1856                                 OutboundHTLCState::LocalAnnounced {..} => included_htlcs += 1,
1857                                 OutboundHTLCState::Committed => included_htlcs += 1,
1858                                 OutboundHTLCState::RemoteRemoved {..} => included_htlcs += 1,
1859                                 // We don't include AwaitingRemoteRevokeToRemove HTLCs because our next commitment
1860                                 // transaction won't be generated until they send us their next RAA, which will mean
1861                                 // dropping any HTLCs in this state.
1862                                 _ => {},
1863                         }
1864                 }
1865
1866                 for htlc in context.holding_cell_htlc_updates.iter() {
1867                         match htlc {
1868                                 &HTLCUpdateAwaitingACK::AddHTLC { amount_msat, .. } => {
1869                                         if amount_msat / 1000 < real_dust_limit_timeout_sat {
1870                                                 continue
1871                                         }
1872                                         included_htlcs += 1
1873                                 },
1874                                 _ => {}, // Don't include claims/fails that are awaiting ack, because once we get the
1875                                          // ack we're guaranteed to never include them in commitment txs anymore.
1876                         }
1877                 }
1878
1879                 let num_htlcs = included_htlcs + addl_htlcs;
1880                 let res = commit_tx_fee_msat(context.feerate_per_kw, num_htlcs, &context.channel_type);
1881                 #[cfg(any(test, fuzzing))]
1882                 {
1883                         let mut fee = res;
1884                         if fee_spike_buffer_htlc.is_some() {
1885                                 fee = commit_tx_fee_msat(context.feerate_per_kw, num_htlcs - 1, &context.channel_type);
1886                         }
1887                         let total_pending_htlcs = context.pending_inbound_htlcs.len() + context.pending_outbound_htlcs.len()
1888                                 + context.holding_cell_htlc_updates.len();
1889                         let commitment_tx_info = CommitmentTxInfoCached {
1890                                 fee,
1891                                 total_pending_htlcs,
1892                                 next_holder_htlc_id: match htlc.origin {
1893                                         HTLCInitiator::LocalOffered => context.next_holder_htlc_id + 1,
1894                                         HTLCInitiator::RemoteOffered => context.next_holder_htlc_id,
1895                                 },
1896                                 next_counterparty_htlc_id: match htlc.origin {
1897                                         HTLCInitiator::LocalOffered => context.next_counterparty_htlc_id,
1898                                         HTLCInitiator::RemoteOffered => context.next_counterparty_htlc_id + 1,
1899                                 },
1900                                 feerate: context.feerate_per_kw,
1901                         };
1902                         *context.next_local_commitment_tx_fee_info_cached.lock().unwrap() = Some(commitment_tx_info);
1903                 }
1904                 res
1905         }
1906
1907         /// Get the commitment tx fee for the remote's next commitment transaction based on the number of
1908         /// pending HTLCs that are on track to be in their next commitment tx
1909         ///
1910         /// Optionally includes the `HTLCCandidate` given by `htlc` and an additional non-dust HTLC if
1911         /// `fee_spike_buffer_htlc` is `Some`.
1912         ///
1913         /// The first extra HTLC is useful for determining whether we can accept a further HTLC, the
1914         /// second allows for creating a buffer to ensure a further HTLC can always be accepted/added.
1915         ///
1916         /// Dust HTLCs are excluded.
1917         fn next_remote_commit_tx_fee_msat(&self, htlc: HTLCCandidate, fee_spike_buffer_htlc: Option<()>) -> u64 {
1918                 let context = &self;
1919                 assert!(!context.is_outbound());
1920
1921                 let (htlc_success_dust_limit, htlc_timeout_dust_limit) = if context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1922                         (0, 0)
1923                 } else {
1924                         (context.feerate_per_kw as u64 * htlc_success_tx_weight(context.get_channel_type()) / 1000,
1925                                 context.feerate_per_kw as u64 * htlc_timeout_tx_weight(context.get_channel_type()) / 1000)
1926                 };
1927                 let real_dust_limit_success_sat = htlc_success_dust_limit + context.counterparty_dust_limit_satoshis;
1928                 let real_dust_limit_timeout_sat = htlc_timeout_dust_limit + context.counterparty_dust_limit_satoshis;
1929
1930                 let mut addl_htlcs = 0;
1931                 if fee_spike_buffer_htlc.is_some() { addl_htlcs += 1; }
1932                 match htlc.origin {
1933                         HTLCInitiator::LocalOffered => {
1934                                 if htlc.amount_msat / 1000 >= real_dust_limit_success_sat {
1935                                         addl_htlcs += 1;
1936                                 }
1937                         },
1938                         HTLCInitiator::RemoteOffered => {
1939                                 if htlc.amount_msat / 1000 >= real_dust_limit_timeout_sat {
1940                                         addl_htlcs += 1;
1941                                 }
1942                         }
1943                 }
1944
1945                 // When calculating the set of HTLCs which will be included in their next commitment_signed, all
1946                 // non-dust inbound HTLCs are included (as all states imply it will be included) and only
1947                 // committed outbound HTLCs, see below.
1948                 let mut included_htlcs = 0;
1949                 for ref htlc in context.pending_inbound_htlcs.iter() {
1950                         if htlc.amount_msat / 1000 <= real_dust_limit_timeout_sat {
1951                                 continue
1952                         }
1953                         included_htlcs += 1;
1954                 }
1955
1956                 for ref htlc in context.pending_outbound_htlcs.iter() {
1957                         if htlc.amount_msat / 1000 <= real_dust_limit_success_sat {
1958                                 continue
1959                         }
1960                         // We only include outbound HTLCs if it will not be included in their next commitment_signed,
1961                         // i.e. if they've responded to us with an RAA after announcement.
1962                         match htlc.state {
1963                                 OutboundHTLCState::Committed => included_htlcs += 1,
1964                                 OutboundHTLCState::RemoteRemoved {..} => included_htlcs += 1,
1965                                 OutboundHTLCState::LocalAnnounced { .. } => included_htlcs += 1,
1966                                 _ => {},
1967                         }
1968                 }
1969
1970                 let num_htlcs = included_htlcs + addl_htlcs;
1971                 let res = commit_tx_fee_msat(context.feerate_per_kw, num_htlcs, &context.channel_type);
1972                 #[cfg(any(test, fuzzing))]
1973                 {
1974                         let mut fee = res;
1975                         if fee_spike_buffer_htlc.is_some() {
1976                                 fee = commit_tx_fee_msat(context.feerate_per_kw, num_htlcs - 1, &context.channel_type);
1977                         }
1978                         let total_pending_htlcs = context.pending_inbound_htlcs.len() + context.pending_outbound_htlcs.len();
1979                         let commitment_tx_info = CommitmentTxInfoCached {
1980                                 fee,
1981                                 total_pending_htlcs,
1982                                 next_holder_htlc_id: match htlc.origin {
1983                                         HTLCInitiator::LocalOffered => context.next_holder_htlc_id + 1,
1984                                         HTLCInitiator::RemoteOffered => context.next_holder_htlc_id,
1985                                 },
1986                                 next_counterparty_htlc_id: match htlc.origin {
1987                                         HTLCInitiator::LocalOffered => context.next_counterparty_htlc_id,
1988                                         HTLCInitiator::RemoteOffered => context.next_counterparty_htlc_id + 1,
1989                                 },
1990                                 feerate: context.feerate_per_kw,
1991                         };
1992                         *context.next_remote_commitment_tx_fee_info_cached.lock().unwrap() = Some(commitment_tx_info);
1993                 }
1994                 res
1995         }
1996
1997         fn if_unbroadcasted_funding<F, O>(&self, f: F) -> Option<O>
1998                 where F: Fn() -> Option<O> {
1999                 if self.channel_state & ChannelState::FundingCreated as u32 != 0 ||
2000                    self.channel_state & ChannelState::WaitingForBatch as u32 != 0 {
2001                         f()
2002                 } else {
2003                         None
2004                 }
2005         }
2006
2007         /// Returns the transaction if there is a pending funding transaction that is yet to be
2008         /// broadcast.
2009         pub fn unbroadcasted_funding(&self) -> Option<Transaction> {
2010                 self.if_unbroadcasted_funding(|| self.funding_transaction.clone())
2011         }
2012
2013         /// Returns the transaction ID if there is a pending funding transaction that is yet to be
2014         /// broadcast.
2015         pub fn unbroadcasted_funding_txid(&self) -> Option<Txid> {
2016                 self.if_unbroadcasted_funding(||
2017                         self.channel_transaction_parameters.funding_outpoint.map(|txo| txo.txid)
2018                 )
2019         }
2020
2021         /// Returns whether the channel is funded in a batch.
2022         pub fn is_batch_funding(&self) -> bool {
2023                 self.is_batch_funding.is_some()
2024         }
2025
2026         /// Returns the transaction ID if there is a pending batch funding transaction that is yet to be
2027         /// broadcast.
2028         pub fn unbroadcasted_batch_funding_txid(&self) -> Option<Txid> {
2029                 self.unbroadcasted_funding_txid().filter(|_| self.is_batch_funding())
2030         }
2031
2032         /// Gets the latest commitment transaction and any dependent transactions for relay (forcing
2033         /// shutdown of this channel - no more calls into this Channel may be made afterwards except
2034         /// those explicitly stated to be allowed after shutdown completes, eg some simple getters).
2035         /// Also returns the list of payment_hashes for channels which we can safely fail backwards
2036         /// immediately (others we will have to allow to time out).
2037         pub fn force_shutdown(&mut self, should_broadcast: bool) -> ShutdownResult {
2038                 // Note that we MUST only generate a monitor update that indicates force-closure - we're
2039                 // called during initialization prior to the chain_monitor in the encompassing ChannelManager
2040                 // being fully configured in some cases. Thus, its likely any monitor events we generate will
2041                 // be delayed in being processed! See the docs for `ChannelManagerReadArgs` for more.
2042                 assert!(self.channel_state != ChannelState::ShutdownComplete as u32);
2043
2044                 // We go ahead and "free" any holding cell HTLCs or HTLCs we haven't yet committed to and
2045                 // return them to fail the payment.
2046                 let mut dropped_outbound_htlcs = Vec::with_capacity(self.holding_cell_htlc_updates.len());
2047                 let counterparty_node_id = self.get_counterparty_node_id();
2048                 for htlc_update in self.holding_cell_htlc_updates.drain(..) {
2049                         match htlc_update {
2050                                 HTLCUpdateAwaitingACK::AddHTLC { source, payment_hash, .. } => {
2051                                         dropped_outbound_htlcs.push((source, payment_hash, counterparty_node_id, self.channel_id));
2052                                 },
2053                                 _ => {}
2054                         }
2055                 }
2056                 let monitor_update = if let Some(funding_txo) = self.get_funding_txo() {
2057                         // If we haven't yet exchanged funding signatures (ie channel_state < FundingSent),
2058                         // returning a channel monitor update here would imply a channel monitor update before
2059                         // we even registered the channel monitor to begin with, which is invalid.
2060                         // Thus, if we aren't actually at a point where we could conceivably broadcast the
2061                         // funding transaction, don't return a funding txo (which prevents providing the
2062                         // monitor update to the user, even if we return one).
2063                         // See test_duplicate_chan_id and test_pre_lockin_no_chan_closed_update for more.
2064                         if self.channel_state & (ChannelState::FundingSent as u32 | ChannelState::ChannelReady as u32 | ChannelState::ShutdownComplete as u32) != 0 {
2065                                 self.latest_monitor_update_id = CLOSED_CHANNEL_UPDATE_ID;
2066                                 Some((self.get_counterparty_node_id(), funding_txo, ChannelMonitorUpdate {
2067                                         update_id: self.latest_monitor_update_id,
2068                                         updates: vec![ChannelMonitorUpdateStep::ChannelForceClosed { should_broadcast }],
2069                                 }))
2070                         } else { None }
2071                 } else { None };
2072                 let unbroadcasted_batch_funding_txid = self.unbroadcasted_batch_funding_txid();
2073
2074                 self.channel_state = ChannelState::ShutdownComplete as u32;
2075                 self.update_time_counter += 1;
2076                 ShutdownResult {
2077                         monitor_update,
2078                         dropped_outbound_htlcs,
2079                         unbroadcasted_batch_funding_txid,
2080                 }
2081         }
2082 }
2083
2084 // Internal utility functions for channels
2085
2086 /// Returns the value to use for `holder_max_htlc_value_in_flight_msat` as a percentage of the
2087 /// `channel_value_satoshis` in msat, set through
2088 /// [`ChannelHandshakeConfig::max_inbound_htlc_value_in_flight_percent_of_channel`]
2089 ///
2090 /// The effective percentage is lower bounded by 1% and upper bounded by 100%.
2091 ///
2092 /// [`ChannelHandshakeConfig::max_inbound_htlc_value_in_flight_percent_of_channel`]: crate::util::config::ChannelHandshakeConfig::max_inbound_htlc_value_in_flight_percent_of_channel
2093 fn get_holder_max_htlc_value_in_flight_msat(channel_value_satoshis: u64, config: &ChannelHandshakeConfig) -> u64 {
2094         let configured_percent = if config.max_inbound_htlc_value_in_flight_percent_of_channel < 1 {
2095                 1
2096         } else if config.max_inbound_htlc_value_in_flight_percent_of_channel > 100 {
2097                 100
2098         } else {
2099                 config.max_inbound_htlc_value_in_flight_percent_of_channel as u64
2100         };
2101         channel_value_satoshis * 10 * configured_percent
2102 }
2103
2104 /// Returns a minimum channel reserve value the remote needs to maintain,
2105 /// required by us according to the configured or default
2106 /// [`ChannelHandshakeConfig::their_channel_reserve_proportional_millionths`]
2107 ///
2108 /// Guaranteed to return a value no larger than channel_value_satoshis
2109 ///
2110 /// This is used both for outbound and inbound channels and has lower bound
2111 /// of `MIN_THEIR_CHAN_RESERVE_SATOSHIS`.
2112 pub(crate) fn get_holder_selected_channel_reserve_satoshis(channel_value_satoshis: u64, config: &UserConfig) -> u64 {
2113         let calculated_reserve = channel_value_satoshis.saturating_mul(config.channel_handshake_config.their_channel_reserve_proportional_millionths as u64) / 1_000_000;
2114         cmp::min(channel_value_satoshis, cmp::max(calculated_reserve, MIN_THEIR_CHAN_RESERVE_SATOSHIS))
2115 }
2116
2117 /// This is for legacy reasons, present for forward-compatibility.
2118 /// LDK versions older than 0.0.104 don't know how read/handle values other than default
2119 /// from storage. Hence, we use this function to not persist default values of
2120 /// `holder_selected_channel_reserve_satoshis` for channels into storage.
2121 pub(crate) fn get_legacy_default_holder_selected_channel_reserve_satoshis(channel_value_satoshis: u64) -> u64 {
2122         let (q, _) = channel_value_satoshis.overflowing_div(100);
2123         cmp::min(channel_value_satoshis, cmp::max(q, 1000))
2124 }
2125
2126 // Get the fee cost in SATS of a commitment tx with a given number of HTLC outputs.
2127 // Note that num_htlcs should not include dust HTLCs.
2128 #[inline]
2129 fn commit_tx_fee_sat(feerate_per_kw: u32, num_htlcs: usize, channel_type_features: &ChannelTypeFeatures) -> u64 {
2130         feerate_per_kw as u64 * (commitment_tx_base_weight(channel_type_features) + num_htlcs as u64 * COMMITMENT_TX_WEIGHT_PER_HTLC) / 1000
2131 }
2132
2133 // Get the fee cost in MSATS of a commitment tx with a given number of HTLC outputs.
2134 // Note that num_htlcs should not include dust HTLCs.
2135 pub(crate) fn commit_tx_fee_msat(feerate_per_kw: u32, num_htlcs: usize, channel_type_features: &ChannelTypeFeatures) -> u64 {
2136         // Note that we need to divide before multiplying to round properly,
2137         // since the lowest denomination of bitcoin on-chain is the satoshi.
2138         (commitment_tx_base_weight(channel_type_features) + num_htlcs as u64 * COMMITMENT_TX_WEIGHT_PER_HTLC) * feerate_per_kw as u64 / 1000 * 1000
2139 }
2140
2141 // Holder designates channel data owned for the benefit of the user client.
2142 // Counterparty designates channel data owned by the another channel participant entity.
2143 pub(super) struct Channel<SP: Deref> where SP::Target: SignerProvider {
2144         pub context: ChannelContext<SP>,
2145 }
2146
2147 #[cfg(any(test, fuzzing))]
2148 struct CommitmentTxInfoCached {
2149         fee: u64,
2150         total_pending_htlcs: usize,
2151         next_holder_htlc_id: u64,
2152         next_counterparty_htlc_id: u64,
2153         feerate: u32,
2154 }
2155
2156 impl<SP: Deref> Channel<SP> where
2157         SP::Target: SignerProvider,
2158         <SP::Target as SignerProvider>::Signer: WriteableEcdsaChannelSigner
2159 {
2160         fn check_remote_fee<F: Deref, L: Deref>(
2161                 channel_type: &ChannelTypeFeatures, fee_estimator: &LowerBoundedFeeEstimator<F>,
2162                 feerate_per_kw: u32, cur_feerate_per_kw: Option<u32>, logger: &L
2163         ) -> Result<(), ChannelError> where F::Target: FeeEstimator, L::Target: Logger,
2164         {
2165                 // We only bound the fee updates on the upper side to prevent completely absurd feerates,
2166                 // always accepting up to 25 sat/vByte or 10x our fee estimator's "High Priority" fee.
2167                 // We generally don't care too much if they set the feerate to something very high, but it
2168                 // could result in the channel being useless due to everything being dust. This doesn't
2169                 // apply to channels supporting anchor outputs since HTLC transactions are pre-signed with a
2170                 // zero fee, so their fee is no longer considered to determine dust limits.
2171                 if !channel_type.supports_anchors_zero_fee_htlc_tx() {
2172                         let upper_limit =
2173                                 fee_estimator.bounded_sat_per_1000_weight(ConfirmationTarget::MaxAllowedNonAnchorChannelRemoteFee) as u64;
2174                         if feerate_per_kw as u64 > upper_limit {
2175                                 return Err(ChannelError::Close(format!("Peer's feerate much too high. Actual: {}. Our expected upper limit: {}", feerate_per_kw, upper_limit)));
2176                         }
2177                 }
2178
2179                 let lower_limit_conf_target = if channel_type.supports_anchors_zero_fee_htlc_tx() {
2180                         ConfirmationTarget::MinAllowedAnchorChannelRemoteFee
2181                 } else {
2182                         ConfirmationTarget::MinAllowedNonAnchorChannelRemoteFee
2183                 };
2184                 let lower_limit = fee_estimator.bounded_sat_per_1000_weight(lower_limit_conf_target);
2185                 if feerate_per_kw < lower_limit {
2186                         if let Some(cur_feerate) = cur_feerate_per_kw {
2187                                 if feerate_per_kw > cur_feerate {
2188                                         log_warn!(logger,
2189                                                 "Accepting feerate that may prevent us from closing this channel because it's higher than what we have now. Had {} s/kW, now {} s/kW.",
2190                                                 cur_feerate, feerate_per_kw);
2191                                         return Ok(());
2192                                 }
2193                         }
2194                         return Err(ChannelError::Close(format!("Peer's feerate much too low. Actual: {}. Our expected lower limit: {}", feerate_per_kw, lower_limit)));
2195                 }
2196                 Ok(())
2197         }
2198
2199         #[inline]
2200         fn get_closing_scriptpubkey(&self) -> Script {
2201                 // The shutdown scriptpubkey is set on channel opening when option_upfront_shutdown_script
2202                 // is signaled. Otherwise, it is set when sending a shutdown message. Calling this method
2203                 // outside of those situations will fail.
2204                 self.context.shutdown_scriptpubkey.clone().unwrap().into_inner()
2205         }
2206
2207         #[inline]
2208         fn get_closing_transaction_weight(&self, a_scriptpubkey: Option<&Script>, b_scriptpubkey: Option<&Script>) -> u64 {
2209                 let mut ret =
2210                 (4 +                                                   // version
2211                  1 +                                                   // input count
2212                  36 +                                                  // prevout
2213                  1 +                                                   // script length (0)
2214                  4 +                                                   // sequence
2215                  1 +                                                   // output count
2216                  4                                                     // lock time
2217                  )*4 +                                                 // * 4 for non-witness parts
2218                 2 +                                                    // witness marker and flag
2219                 1 +                                                    // witness element count
2220                 4 +                                                    // 4 element lengths (2 sigs, multisig dummy, and witness script)
2221                 self.context.get_funding_redeemscript().len() as u64 + // funding witness script
2222                 2*(1 + 71);                                            // two signatures + sighash type flags
2223                 if let Some(spk) = a_scriptpubkey {
2224                         ret += ((8+1) +                                    // output values and script length
2225                                 spk.len() as u64) * 4;                         // scriptpubkey and witness multiplier
2226                 }
2227                 if let Some(spk) = b_scriptpubkey {
2228                         ret += ((8+1) +                                    // output values and script length
2229                                 spk.len() as u64) * 4;                         // scriptpubkey and witness multiplier
2230                 }
2231                 ret
2232         }
2233
2234         #[inline]
2235         fn build_closing_transaction(&self, proposed_total_fee_satoshis: u64, skip_remote_output: bool) -> (ClosingTransaction, u64) {
2236                 assert!(self.context.pending_inbound_htlcs.is_empty());
2237                 assert!(self.context.pending_outbound_htlcs.is_empty());
2238                 assert!(self.context.pending_update_fee.is_none());
2239
2240                 let mut total_fee_satoshis = proposed_total_fee_satoshis;
2241                 let mut value_to_holder: i64 = (self.context.value_to_self_msat as i64) / 1000 - if self.context.is_outbound() { total_fee_satoshis as i64 } else { 0 };
2242                 let mut value_to_counterparty: i64 = ((self.context.channel_value_satoshis * 1000 - self.context.value_to_self_msat) as i64 / 1000) - if self.context.is_outbound() { 0 } else { total_fee_satoshis as i64 };
2243
2244                 if value_to_holder < 0 {
2245                         assert!(self.context.is_outbound());
2246                         total_fee_satoshis += (-value_to_holder) as u64;
2247                 } else if value_to_counterparty < 0 {
2248                         assert!(!self.context.is_outbound());
2249                         total_fee_satoshis += (-value_to_counterparty) as u64;
2250                 }
2251
2252                 if skip_remote_output || value_to_counterparty as u64 <= self.context.holder_dust_limit_satoshis {
2253                         value_to_counterparty = 0;
2254                 }
2255
2256                 if value_to_holder as u64 <= self.context.holder_dust_limit_satoshis {
2257                         value_to_holder = 0;
2258                 }
2259
2260                 assert!(self.context.shutdown_scriptpubkey.is_some());
2261                 let holder_shutdown_script = self.get_closing_scriptpubkey();
2262                 let counterparty_shutdown_script = self.context.counterparty_shutdown_scriptpubkey.clone().unwrap();
2263                 let funding_outpoint = self.funding_outpoint().into_bitcoin_outpoint();
2264
2265                 let closing_transaction = ClosingTransaction::new(value_to_holder as u64, value_to_counterparty as u64, holder_shutdown_script, counterparty_shutdown_script, funding_outpoint);
2266                 (closing_transaction, total_fee_satoshis)
2267         }
2268
2269         fn funding_outpoint(&self) -> OutPoint {
2270                 self.context.channel_transaction_parameters.funding_outpoint.unwrap()
2271         }
2272
2273         /// Claims an HTLC while we're disconnected from a peer, dropping the [`ChannelMonitorUpdate`]
2274         /// entirely.
2275         ///
2276         /// The [`ChannelMonitor`] for this channel MUST be updated out-of-band with the preimage
2277         /// provided (i.e. without calling [`crate::chain::Watch::update_channel`]).
2278         ///
2279         /// The HTLC claim will end up in the holding cell (because the caller must ensure the peer is
2280         /// disconnected).
2281         pub fn claim_htlc_while_disconnected_dropping_mon_update<L: Deref>
2282                 (&mut self, htlc_id_arg: u64, payment_preimage_arg: PaymentPreimage, logger: &L)
2283         where L::Target: Logger {
2284                 // Assert that we'll add the HTLC claim to the holding cell in `get_update_fulfill_htlc`
2285                 // (see equivalent if condition there).
2286                 assert!(self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32 | ChannelState::PeerDisconnected as u32 | ChannelState::MonitorUpdateInProgress as u32) != 0);
2287                 let mon_update_id = self.context.latest_monitor_update_id; // Forget the ChannelMonitor update
2288                 let fulfill_resp = self.get_update_fulfill_htlc(htlc_id_arg, payment_preimage_arg, logger);
2289                 self.context.latest_monitor_update_id = mon_update_id;
2290                 if let UpdateFulfillFetch::NewClaim { msg, .. } = fulfill_resp {
2291                         assert!(msg.is_none()); // The HTLC must have ended up in the holding cell.
2292                 }
2293         }
2294
2295         fn get_update_fulfill_htlc<L: Deref>(&mut self, htlc_id_arg: u64, payment_preimage_arg: PaymentPreimage, logger: &L) -> UpdateFulfillFetch where L::Target: Logger {
2296                 // Either ChannelReady got set (which means it won't be unset) or there is no way any
2297                 // caller thought we could have something claimed (cause we wouldn't have accepted in an
2298                 // incoming HTLC anyway). If we got to ShutdownComplete, callers aren't allowed to call us,
2299                 // either.
2300                 if (self.context.channel_state & (ChannelState::ChannelReady as u32)) != (ChannelState::ChannelReady as u32) {
2301                         panic!("Was asked to fulfill an HTLC when channel was not in an operational state");
2302                 }
2303                 assert_eq!(self.context.channel_state & ChannelState::ShutdownComplete as u32, 0);
2304
2305                 // ChannelManager may generate duplicate claims/fails due to HTLC update events from
2306                 // on-chain ChannelsMonitors during block rescan. Ideally we'd figure out a way to drop
2307                 // these, but for now we just have to treat them as normal.
2308
2309                 let mut pending_idx = core::usize::MAX;
2310                 let mut htlc_value_msat = 0;
2311                 for (idx, htlc) in self.context.pending_inbound_htlcs.iter().enumerate() {
2312                         if htlc.htlc_id == htlc_id_arg {
2313                                 debug_assert_eq!(htlc.payment_hash, PaymentHash(Sha256::hash(&payment_preimage_arg.0[..]).into_inner()));
2314                                 log_debug!(logger, "Claiming inbound HTLC id {} with payment hash {} with preimage {}",
2315                                         htlc.htlc_id, htlc.payment_hash, payment_preimage_arg);
2316                                 match htlc.state {
2317                                         InboundHTLCState::Committed => {},
2318                                         InboundHTLCState::LocalRemoved(ref reason) => {
2319                                                 if let &InboundHTLCRemovalReason::Fulfill(_) = reason {
2320                                                 } else {
2321                                                         log_warn!(logger, "Have preimage and want to fulfill HTLC with payment hash {} we already failed against channel {}", &htlc.payment_hash, &self.context.channel_id());
2322                                                         debug_assert!(false, "Tried to fulfill an HTLC that was already failed");
2323                                                 }
2324                                                 return UpdateFulfillFetch::DuplicateClaim {};
2325                                         },
2326                                         _ => {
2327                                                 debug_assert!(false, "Have an inbound HTLC we tried to claim before it was fully committed to");
2328                                                 // Don't return in release mode here so that we can update channel_monitor
2329                                         }
2330                                 }
2331                                 pending_idx = idx;
2332                                 htlc_value_msat = htlc.amount_msat;
2333                                 break;
2334                         }
2335                 }
2336                 if pending_idx == core::usize::MAX {
2337                         #[cfg(any(test, fuzzing))]
2338                         // If we failed to find an HTLC to fulfill, make sure it was previously fulfilled and
2339                         // this is simply a duplicate claim, not previously failed and we lost funds.
2340                         debug_assert!(self.context.historical_inbound_htlc_fulfills.contains(&htlc_id_arg));
2341                         return UpdateFulfillFetch::DuplicateClaim {};
2342                 }
2343
2344                 // Now update local state:
2345                 //
2346                 // We have to put the payment_preimage in the channel_monitor right away here to ensure we
2347                 // can claim it even if the channel hits the chain before we see their next commitment.
2348                 self.context.latest_monitor_update_id += 1;
2349                 let monitor_update = ChannelMonitorUpdate {
2350                         update_id: self.context.latest_monitor_update_id,
2351                         updates: vec![ChannelMonitorUpdateStep::PaymentPreimage {
2352                                 payment_preimage: payment_preimage_arg.clone(),
2353                         }],
2354                 };
2355
2356                 if (self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32 | ChannelState::PeerDisconnected as u32 | ChannelState::MonitorUpdateInProgress as u32)) != 0 {
2357                         // Note that this condition is the same as the assertion in
2358                         // `claim_htlc_while_disconnected_dropping_mon_update` and must match exactly -
2359                         // `claim_htlc_while_disconnected_dropping_mon_update` would not work correctly if we
2360                         // do not not get into this branch.
2361                         for pending_update in self.context.holding_cell_htlc_updates.iter() {
2362                                 match pending_update {
2363                                         &HTLCUpdateAwaitingACK::ClaimHTLC { htlc_id, .. } => {
2364                                                 if htlc_id_arg == htlc_id {
2365                                                         // Make sure we don't leave latest_monitor_update_id incremented here:
2366                                                         self.context.latest_monitor_update_id -= 1;
2367                                                         #[cfg(any(test, fuzzing))]
2368                                                         debug_assert!(self.context.historical_inbound_htlc_fulfills.contains(&htlc_id_arg));
2369                                                         return UpdateFulfillFetch::DuplicateClaim {};
2370                                                 }
2371                                         },
2372                                         &HTLCUpdateAwaitingACK::FailHTLC { htlc_id, .. } => {
2373                                                 if htlc_id_arg == htlc_id {
2374                                                         log_warn!(logger, "Have preimage and want to fulfill HTLC with pending failure against channel {}", &self.context.channel_id());
2375                                                         // TODO: We may actually be able to switch to a fulfill here, though its
2376                                                         // rare enough it may not be worth the complexity burden.
2377                                                         debug_assert!(false, "Tried to fulfill an HTLC that was already failed");
2378                                                         return UpdateFulfillFetch::NewClaim { monitor_update, htlc_value_msat, msg: None };
2379                                                 }
2380                                         },
2381                                         _ => {}
2382                                 }
2383                         }
2384                         log_trace!(logger, "Adding HTLC claim to holding_cell in channel {}! Current state: {}", &self.context.channel_id(), self.context.channel_state);
2385                         self.context.holding_cell_htlc_updates.push(HTLCUpdateAwaitingACK::ClaimHTLC {
2386                                 payment_preimage: payment_preimage_arg, htlc_id: htlc_id_arg,
2387                         });
2388                         #[cfg(any(test, fuzzing))]
2389                         self.context.historical_inbound_htlc_fulfills.insert(htlc_id_arg);
2390                         return UpdateFulfillFetch::NewClaim { monitor_update, htlc_value_msat, msg: None };
2391                 }
2392                 #[cfg(any(test, fuzzing))]
2393                 self.context.historical_inbound_htlc_fulfills.insert(htlc_id_arg);
2394
2395                 {
2396                         let htlc = &mut self.context.pending_inbound_htlcs[pending_idx];
2397                         if let InboundHTLCState::Committed = htlc.state {
2398                         } else {
2399                                 debug_assert!(false, "Have an inbound HTLC we tried to claim before it was fully committed to");
2400                                 return UpdateFulfillFetch::NewClaim { monitor_update, htlc_value_msat, msg: None };
2401                         }
2402                         log_trace!(logger, "Upgrading HTLC {} to LocalRemoved with a Fulfill in channel {}!", &htlc.payment_hash, &self.context.channel_id);
2403                         htlc.state = InboundHTLCState::LocalRemoved(InboundHTLCRemovalReason::Fulfill(payment_preimage_arg.clone()));
2404                 }
2405
2406                 UpdateFulfillFetch::NewClaim {
2407                         monitor_update,
2408                         htlc_value_msat,
2409                         msg: Some(msgs::UpdateFulfillHTLC {
2410                                 channel_id: self.context.channel_id(),
2411                                 htlc_id: htlc_id_arg,
2412                                 payment_preimage: payment_preimage_arg,
2413                         }),
2414                 }
2415         }
2416
2417         pub fn get_update_fulfill_htlc_and_commit<L: Deref>(&mut self, htlc_id: u64, payment_preimage: PaymentPreimage, logger: &L) -> UpdateFulfillCommitFetch where L::Target: Logger {
2418                 let release_cs_monitor = self.context.blocked_monitor_updates.is_empty();
2419                 match self.get_update_fulfill_htlc(htlc_id, payment_preimage, logger) {
2420                         UpdateFulfillFetch::NewClaim { mut monitor_update, htlc_value_msat, msg } => {
2421                                 // Even if we aren't supposed to let new monitor updates with commitment state
2422                                 // updates run, we still need to push the preimage ChannelMonitorUpdateStep no
2423                                 // matter what. Sadly, to push a new monitor update which flies before others
2424                                 // already queued, we have to insert it into the pending queue and update the
2425                                 // update_ids of all the following monitors.
2426                                 if release_cs_monitor && msg.is_some() {
2427                                         let mut additional_update = self.build_commitment_no_status_check(logger);
2428                                         // build_commitment_no_status_check may bump latest_monitor_id but we want them
2429                                         // to be strictly increasing by one, so decrement it here.
2430                                         self.context.latest_monitor_update_id = monitor_update.update_id;
2431                                         monitor_update.updates.append(&mut additional_update.updates);
2432                                 } else {
2433                                         let new_mon_id = self.context.blocked_monitor_updates.get(0)
2434                                                 .map(|upd| upd.update.update_id).unwrap_or(monitor_update.update_id);
2435                                         monitor_update.update_id = new_mon_id;
2436                                         for held_update in self.context.blocked_monitor_updates.iter_mut() {
2437                                                 held_update.update.update_id += 1;
2438                                         }
2439                                         if msg.is_some() {
2440                                                 debug_assert!(false, "If there is a pending blocked monitor we should have MonitorUpdateInProgress set");
2441                                                 let update = self.build_commitment_no_status_check(logger);
2442                                                 self.context.blocked_monitor_updates.push(PendingChannelMonitorUpdate {
2443                                                         update,
2444                                                 });
2445                                         }
2446                                 }
2447
2448                                 self.monitor_updating_paused(false, msg.is_some(), false, Vec::new(), Vec::new(), Vec::new());
2449                                 UpdateFulfillCommitFetch::NewClaim { monitor_update, htlc_value_msat, }
2450                         },
2451                         UpdateFulfillFetch::DuplicateClaim {} => UpdateFulfillCommitFetch::DuplicateClaim {},
2452                 }
2453         }
2454
2455         /// We can only have one resolution per HTLC. In some cases around reconnect, we may fulfill
2456         /// an HTLC more than once or fulfill once and then attempt to fail after reconnect. We cannot,
2457         /// however, fail more than once as we wait for an upstream failure to be irrevocably committed
2458         /// before we fail backwards.
2459         ///
2460         /// If we do fail twice, we `debug_assert!(false)` and return `Ok(None)`. Thus, this will always
2461         /// return `Ok(_)` if preconditions are met. In any case, `Err`s will only be
2462         /// [`ChannelError::Ignore`].
2463         pub fn queue_fail_htlc<L: Deref>(&mut self, htlc_id_arg: u64, err_packet: msgs::OnionErrorPacket, logger: &L)
2464         -> Result<(), ChannelError> where L::Target: Logger {
2465                 self.fail_htlc(htlc_id_arg, err_packet, true, logger)
2466                         .map(|msg_opt| assert!(msg_opt.is_none(), "We forced holding cell?"))
2467         }
2468
2469         /// We can only have one resolution per HTLC. In some cases around reconnect, we may fulfill
2470         /// an HTLC more than once or fulfill once and then attempt to fail after reconnect. We cannot,
2471         /// however, fail more than once as we wait for an upstream failure to be irrevocably committed
2472         /// before we fail backwards.
2473         ///
2474         /// If we do fail twice, we `debug_assert!(false)` and return `Ok(None)`. Thus, this will always
2475         /// return `Ok(_)` if preconditions are met. In any case, `Err`s will only be
2476         /// [`ChannelError::Ignore`].
2477         fn fail_htlc<L: Deref>(&mut self, htlc_id_arg: u64, err_packet: msgs::OnionErrorPacket, mut force_holding_cell: bool, logger: &L)
2478         -> Result<Option<msgs::UpdateFailHTLC>, ChannelError> where L::Target: Logger {
2479                 if (self.context.channel_state & (ChannelState::ChannelReady as u32)) != (ChannelState::ChannelReady as u32) {
2480                         panic!("Was asked to fail an HTLC when channel was not in an operational state");
2481                 }
2482                 assert_eq!(self.context.channel_state & ChannelState::ShutdownComplete as u32, 0);
2483
2484                 // ChannelManager may generate duplicate claims/fails due to HTLC update events from
2485                 // on-chain ChannelsMonitors during block rescan. Ideally we'd figure out a way to drop
2486                 // these, but for now we just have to treat them as normal.
2487
2488                 let mut pending_idx = core::usize::MAX;
2489                 for (idx, htlc) in self.context.pending_inbound_htlcs.iter().enumerate() {
2490                         if htlc.htlc_id == htlc_id_arg {
2491                                 match htlc.state {
2492                                         InboundHTLCState::Committed => {},
2493                                         InboundHTLCState::LocalRemoved(ref reason) => {
2494                                                 if let &InboundHTLCRemovalReason::Fulfill(_) = reason {
2495                                                 } else {
2496                                                         debug_assert!(false, "Tried to fail an HTLC that was already failed");
2497                                                 }
2498                                                 return Ok(None);
2499                                         },
2500                                         _ => {
2501                                                 debug_assert!(false, "Have an inbound HTLC we tried to claim before it was fully committed to");
2502                                                 return Err(ChannelError::Ignore(format!("Unable to find a pending HTLC which matched the given HTLC ID ({})", htlc.htlc_id)));
2503                                         }
2504                                 }
2505                                 pending_idx = idx;
2506                         }
2507                 }
2508                 if pending_idx == core::usize::MAX {
2509                         #[cfg(any(test, fuzzing))]
2510                         // If we failed to find an HTLC to fail, make sure it was previously fulfilled and this
2511                         // is simply a duplicate fail, not previously failed and we failed-back too early.
2512                         debug_assert!(self.context.historical_inbound_htlc_fulfills.contains(&htlc_id_arg));
2513                         return Ok(None);
2514                 }
2515
2516                 if (self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32 | ChannelState::PeerDisconnected as u32 | ChannelState::MonitorUpdateInProgress as u32)) != 0 {
2517                         debug_assert!(force_holding_cell, "!force_holding_cell is only called when emptying the holding cell, so we shouldn't end up back in it!");
2518                         force_holding_cell = true;
2519                 }
2520
2521                 // Now update local state:
2522                 if force_holding_cell {
2523                         for pending_update in self.context.holding_cell_htlc_updates.iter() {
2524                                 match pending_update {
2525                                         &HTLCUpdateAwaitingACK::ClaimHTLC { htlc_id, .. } => {
2526                                                 if htlc_id_arg == htlc_id {
2527                                                         #[cfg(any(test, fuzzing))]
2528                                                         debug_assert!(self.context.historical_inbound_htlc_fulfills.contains(&htlc_id_arg));
2529                                                         return Ok(None);
2530                                                 }
2531                                         },
2532                                         &HTLCUpdateAwaitingACK::FailHTLC { htlc_id, .. } => {
2533                                                 if htlc_id_arg == htlc_id {
2534                                                         debug_assert!(false, "Tried to fail an HTLC that was already failed");
2535                                                         return Err(ChannelError::Ignore("Unable to find a pending HTLC which matched the given HTLC ID".to_owned()));
2536                                                 }
2537                                         },
2538                                         _ => {}
2539                                 }
2540                         }
2541                         log_trace!(logger, "Placing failure for HTLC ID {} in holding cell in channel {}.", htlc_id_arg, &self.context.channel_id());
2542                         self.context.holding_cell_htlc_updates.push(HTLCUpdateAwaitingACK::FailHTLC {
2543                                 htlc_id: htlc_id_arg,
2544                                 err_packet,
2545                         });
2546                         return Ok(None);
2547                 }
2548
2549                 log_trace!(logger, "Failing HTLC ID {} back with a update_fail_htlc message in channel {}.", htlc_id_arg, &self.context.channel_id());
2550                 {
2551                         let htlc = &mut self.context.pending_inbound_htlcs[pending_idx];
2552                         htlc.state = InboundHTLCState::LocalRemoved(InboundHTLCRemovalReason::FailRelay(err_packet.clone()));
2553                 }
2554
2555                 Ok(Some(msgs::UpdateFailHTLC {
2556                         channel_id: self.context.channel_id(),
2557                         htlc_id: htlc_id_arg,
2558                         reason: err_packet
2559                 }))
2560         }
2561
2562         // Message handlers:
2563
2564         /// Handles a funding_signed message from the remote end.
2565         /// If this call is successful, broadcast the funding transaction (and not before!)
2566         pub fn funding_signed<L: Deref>(
2567                 &mut self, msg: &msgs::FundingSigned, best_block: BestBlock, signer_provider: &SP, logger: &L
2568         ) -> Result<ChannelMonitor<<SP::Target as SignerProvider>::Signer>, ChannelError>
2569         where
2570                 L::Target: Logger
2571         {
2572                 if !self.context.is_outbound() {
2573                         return Err(ChannelError::Close("Received funding_signed for an inbound channel?".to_owned()));
2574                 }
2575                 if self.context.channel_state & !(ChannelState::MonitorUpdateInProgress as u32) != ChannelState::FundingCreated as u32 {
2576                         return Err(ChannelError::Close("Received funding_signed in strange state!".to_owned()));
2577                 }
2578                 if self.context.commitment_secrets.get_min_seen_secret() != (1 << 48) ||
2579                                 self.context.cur_counterparty_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER ||
2580                                 self.context.cur_holder_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER {
2581                         panic!("Should not have advanced channel commitment tx numbers prior to funding_created");
2582                 }
2583
2584                 let funding_script = self.context.get_funding_redeemscript();
2585
2586                 let counterparty_keys = self.context.build_remote_transaction_keys();
2587                 let counterparty_initial_commitment_tx = self.context.build_commitment_transaction(self.context.cur_counterparty_commitment_transaction_number, &counterparty_keys, false, false, logger).tx;
2588                 let counterparty_trusted_tx = counterparty_initial_commitment_tx.trust();
2589                 let counterparty_initial_bitcoin_tx = counterparty_trusted_tx.built_transaction();
2590
2591                 log_trace!(logger, "Initial counterparty tx for channel {} is: txid {} tx {}",
2592                         &self.context.channel_id(), counterparty_initial_bitcoin_tx.txid, encode::serialize_hex(&counterparty_initial_bitcoin_tx.transaction));
2593
2594                 let holder_signer = self.context.build_holder_transaction_keys(self.context.cur_holder_commitment_transaction_number);
2595                 let initial_commitment_tx = self.context.build_commitment_transaction(self.context.cur_holder_commitment_transaction_number, &holder_signer, true, false, logger).tx;
2596                 {
2597                         let trusted_tx = initial_commitment_tx.trust();
2598                         let initial_commitment_bitcoin_tx = trusted_tx.built_transaction();
2599                         let sighash = initial_commitment_bitcoin_tx.get_sighash_all(&funding_script, self.context.channel_value_satoshis);
2600                         // They sign our commitment transaction, allowing us to broadcast the tx if we wish.
2601                         if let Err(_) = self.context.secp_ctx.verify_ecdsa(&sighash, &msg.signature, &self.context.get_counterparty_pubkeys().funding_pubkey) {
2602                                 return Err(ChannelError::Close("Invalid funding_signed signature from peer".to_owned()));
2603                         }
2604                 }
2605
2606                 let holder_commitment_tx = HolderCommitmentTransaction::new(
2607                         initial_commitment_tx,
2608                         msg.signature,
2609                         Vec::new(),
2610                         &self.context.get_holder_pubkeys().funding_pubkey,
2611                         self.context.counterparty_funding_pubkey()
2612                 );
2613
2614                 self.context.holder_signer.as_ref().validate_holder_commitment(&holder_commitment_tx, Vec::new())
2615                         .map_err(|_| ChannelError::Close("Failed to validate our commitment".to_owned()))?;
2616
2617
2618                 let funding_redeemscript = self.context.get_funding_redeemscript();
2619                 let funding_txo = self.context.get_funding_txo().unwrap();
2620                 let funding_txo_script = funding_redeemscript.to_v0_p2wsh();
2621                 let obscure_factor = get_commitment_transaction_number_obscure_factor(&self.context.get_holder_pubkeys().payment_point, &self.context.get_counterparty_pubkeys().payment_point, self.context.is_outbound());
2622                 let shutdown_script = self.context.shutdown_scriptpubkey.clone().map(|script| script.into_inner());
2623                 let mut monitor_signer = signer_provider.derive_channel_signer(self.context.channel_value_satoshis, self.context.channel_keys_id);
2624                 monitor_signer.provide_channel_parameters(&self.context.channel_transaction_parameters);
2625                 let channel_monitor = ChannelMonitor::new(self.context.secp_ctx.clone(), monitor_signer,
2626                                                           shutdown_script, self.context.get_holder_selected_contest_delay(),
2627                                                           &self.context.destination_script, (funding_txo, funding_txo_script),
2628                                                           &self.context.channel_transaction_parameters,
2629                                                           funding_redeemscript.clone(), self.context.channel_value_satoshis,
2630                                                           obscure_factor,
2631                                                           holder_commitment_tx, best_block, self.context.counterparty_node_id);
2632
2633                 channel_monitor.provide_initial_counterparty_commitment_tx(
2634                         counterparty_initial_bitcoin_tx.txid, Vec::new(),
2635                         self.context.cur_counterparty_commitment_transaction_number,
2636                         self.context.counterparty_cur_commitment_point.unwrap(),
2637                         counterparty_initial_commitment_tx.feerate_per_kw(),
2638                         counterparty_initial_commitment_tx.to_broadcaster_value_sat(),
2639                         counterparty_initial_commitment_tx.to_countersignatory_value_sat(), logger);
2640
2641                 assert_eq!(self.context.channel_state & (ChannelState::MonitorUpdateInProgress as u32), 0); // We have no had any monitor(s) yet to fail update!
2642                 if self.context.is_batch_funding() {
2643                         self.context.channel_state = ChannelState::FundingSent as u32 | ChannelState::WaitingForBatch as u32;
2644                 } else {
2645                         self.context.channel_state = ChannelState::FundingSent as u32;
2646                 }
2647                 self.context.cur_holder_commitment_transaction_number -= 1;
2648                 self.context.cur_counterparty_commitment_transaction_number -= 1;
2649
2650                 log_info!(logger, "Received funding_signed from peer for channel {}", &self.context.channel_id());
2651
2652                 let need_channel_ready = self.check_get_channel_ready(0).is_some();
2653                 self.monitor_updating_paused(false, false, need_channel_ready, Vec::new(), Vec::new(), Vec::new());
2654                 Ok(channel_monitor)
2655         }
2656
2657         /// Updates the state of the channel to indicate that all channels in the batch have received
2658         /// funding_signed and persisted their monitors.
2659         /// The funding transaction is consequently allowed to be broadcast, and the channel can be
2660         /// treated as a non-batch channel going forward.
2661         pub fn set_batch_ready(&mut self) {
2662                 self.context.is_batch_funding = None;
2663                 self.context.channel_state &= !(ChannelState::WaitingForBatch as u32);
2664         }
2665
2666         /// Handles a channel_ready message from our peer. If we've already sent our channel_ready
2667         /// and the channel is now usable (and public), this may generate an announcement_signatures to
2668         /// reply with.
2669         pub fn channel_ready<NS: Deref, L: Deref>(
2670                 &mut self, msg: &msgs::ChannelReady, node_signer: &NS, chain_hash: ChainHash,
2671                 user_config: &UserConfig, best_block: &BestBlock, logger: &L
2672         ) -> Result<Option<msgs::AnnouncementSignatures>, ChannelError>
2673         where
2674                 NS::Target: NodeSigner,
2675                 L::Target: Logger
2676         {
2677                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
2678                         self.context.workaround_lnd_bug_4006 = Some(msg.clone());
2679                         return Err(ChannelError::Ignore("Peer sent channel_ready when we needed a channel_reestablish. The peer is likely lnd, see https://github.com/lightningnetwork/lnd/issues/4006".to_owned()));
2680                 }
2681
2682                 if let Some(scid_alias) = msg.short_channel_id_alias {
2683                         if Some(scid_alias) != self.context.short_channel_id {
2684                                 // The scid alias provided can be used to route payments *from* our counterparty,
2685                                 // i.e. can be used for inbound payments and provided in invoices, but is not used
2686                                 // when routing outbound payments.
2687                                 self.context.latest_inbound_scid_alias = Some(scid_alias);
2688                         }
2689                 }
2690
2691                 let non_shutdown_state = self.context.channel_state & (!MULTI_STATE_FLAGS);
2692
2693                 // Our channel_ready shouldn't have been sent if we are waiting for other channels in the
2694                 // batch, but we can receive channel_ready messages.
2695                 debug_assert!(
2696                         non_shutdown_state & ChannelState::OurChannelReady as u32 == 0 ||
2697                         non_shutdown_state & ChannelState::WaitingForBatch as u32 == 0
2698                 );
2699                 if non_shutdown_state & !(ChannelState::WaitingForBatch as u32) == ChannelState::FundingSent as u32 {
2700                         self.context.channel_state |= ChannelState::TheirChannelReady as u32;
2701                 } else if non_shutdown_state == (ChannelState::FundingSent as u32 | ChannelState::OurChannelReady as u32) {
2702                         self.context.channel_state = ChannelState::ChannelReady as u32 | (self.context.channel_state & MULTI_STATE_FLAGS);
2703                         self.context.update_time_counter += 1;
2704                 } else if self.context.channel_state & (ChannelState::ChannelReady as u32) != 0 ||
2705                         // If we reconnected before sending our `channel_ready` they may still resend theirs:
2706                         (self.context.channel_state & (ChannelState::FundingSent as u32 | ChannelState::TheirChannelReady as u32) ==
2707                                               (ChannelState::FundingSent as u32 | ChannelState::TheirChannelReady as u32))
2708                 {
2709                         // They probably disconnected/reconnected and re-sent the channel_ready, which is
2710                         // required, or they're sending a fresh SCID alias.
2711                         let expected_point =
2712                                 if self.context.cur_counterparty_commitment_transaction_number == INITIAL_COMMITMENT_NUMBER - 1 {
2713                                         // If they haven't ever sent an updated point, the point they send should match
2714                                         // the current one.
2715                                         self.context.counterparty_cur_commitment_point
2716                                 } else if self.context.cur_counterparty_commitment_transaction_number == INITIAL_COMMITMENT_NUMBER - 2 {
2717                                         // If we've advanced the commitment number once, the second commitment point is
2718                                         // at `counterparty_prev_commitment_point`, which is not yet revoked.
2719                                         debug_assert!(self.context.counterparty_prev_commitment_point.is_some());
2720                                         self.context.counterparty_prev_commitment_point
2721                                 } else {
2722                                         // If they have sent updated points, channel_ready is always supposed to match
2723                                         // their "first" point, which we re-derive here.
2724                                         Some(PublicKey::from_secret_key(&self.context.secp_ctx, &SecretKey::from_slice(
2725                                                         &self.context.commitment_secrets.get_secret(INITIAL_COMMITMENT_NUMBER - 1).expect("We should have all prev secrets available")
2726                                                 ).expect("We already advanced, so previous secret keys should have been validated already")))
2727                                 };
2728                         if expected_point != Some(msg.next_per_commitment_point) {
2729                                 return Err(ChannelError::Close("Peer sent a reconnect channel_ready with a different point".to_owned()));
2730                         }
2731                         return Ok(None);
2732                 } else {
2733                         return Err(ChannelError::Close("Peer sent a channel_ready at a strange time".to_owned()));
2734                 }
2735
2736                 self.context.counterparty_prev_commitment_point = self.context.counterparty_cur_commitment_point;
2737                 self.context.counterparty_cur_commitment_point = Some(msg.next_per_commitment_point);
2738
2739                 log_info!(logger, "Received channel_ready from peer for channel {}", &self.context.channel_id());
2740
2741                 Ok(self.get_announcement_sigs(node_signer, chain_hash, user_config, best_block.height(), logger))
2742         }
2743
2744         pub fn update_add_htlc<F, FE: Deref, L: Deref>(
2745                 &mut self, msg: &msgs::UpdateAddHTLC, mut pending_forward_status: PendingHTLCStatus,
2746                 create_pending_htlc_status: F, fee_estimator: &LowerBoundedFeeEstimator<FE>, logger: &L
2747         ) -> Result<(), ChannelError>
2748         where F: for<'a> Fn(&'a Self, PendingHTLCStatus, u16) -> PendingHTLCStatus,
2749                 FE::Target: FeeEstimator, L::Target: Logger,
2750         {
2751                 // We can't accept HTLCs sent after we've sent a shutdown.
2752                 let local_sent_shutdown = (self.context.channel_state & (ChannelState::ChannelReady as u32 | ChannelState::LocalShutdownSent as u32)) != (ChannelState::ChannelReady as u32);
2753                 if local_sent_shutdown {
2754                         pending_forward_status = create_pending_htlc_status(self, pending_forward_status, 0x4000|8);
2755                 }
2756                 // If the remote has sent a shutdown prior to adding this HTLC, then they are in violation of the spec.
2757                 let remote_sent_shutdown = (self.context.channel_state & (ChannelState::ChannelReady as u32 | ChannelState::RemoteShutdownSent as u32)) != (ChannelState::ChannelReady as u32);
2758                 if remote_sent_shutdown {
2759                         return Err(ChannelError::Close("Got add HTLC message when channel was not in an operational state".to_owned()));
2760                 }
2761                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
2762                         return Err(ChannelError::Close("Peer sent update_add_htlc when we needed a channel_reestablish".to_owned()));
2763                 }
2764                 if msg.amount_msat > self.context.channel_value_satoshis * 1000 {
2765                         return Err(ChannelError::Close("Remote side tried to send more than the total value of the channel".to_owned()));
2766                 }
2767                 if msg.amount_msat == 0 {
2768                         return Err(ChannelError::Close("Remote side tried to send a 0-msat HTLC".to_owned()));
2769                 }
2770                 if msg.amount_msat < self.context.holder_htlc_minimum_msat {
2771                         return Err(ChannelError::Close(format!("Remote side tried to send less than our minimum HTLC value. Lower limit: ({}). Actual: ({})", self.context.holder_htlc_minimum_msat, msg.amount_msat)));
2772                 }
2773
2774                 let inbound_stats = self.context.get_inbound_pending_htlc_stats(None);
2775                 let outbound_stats = self.context.get_outbound_pending_htlc_stats(None);
2776                 if inbound_stats.pending_htlcs + 1 > self.context.holder_max_accepted_htlcs as u32 {
2777                         return Err(ChannelError::Close(format!("Remote tried to push more than our max accepted HTLCs ({})", self.context.holder_max_accepted_htlcs)));
2778                 }
2779                 if inbound_stats.pending_htlcs_value_msat + msg.amount_msat > self.context.holder_max_htlc_value_in_flight_msat {
2780                         return Err(ChannelError::Close(format!("Remote HTLC add would put them over our max HTLC value ({})", self.context.holder_max_htlc_value_in_flight_msat)));
2781                 }
2782
2783                 // Check holder_selected_channel_reserve_satoshis (we're getting paid, so they have to at least meet
2784                 // the reserve_satoshis we told them to always have as direct payment so that they lose
2785                 // something if we punish them for broadcasting an old state).
2786                 // Note that we don't really care about having a small/no to_remote output in our local
2787                 // commitment transactions, as the purpose of the channel reserve is to ensure we can
2788                 // punish *them* if they misbehave, so we discount any outbound HTLCs which will not be
2789                 // present in the next commitment transaction we send them (at least for fulfilled ones,
2790                 // failed ones won't modify value_to_self).
2791                 // Note that we will send HTLCs which another instance of rust-lightning would think
2792                 // violate the reserve value if we do not do this (as we forget inbound HTLCs from the
2793                 // Channel state once they will not be present in the next received commitment
2794                 // transaction).
2795                 let mut removed_outbound_total_msat = 0;
2796                 for ref htlc in self.context.pending_outbound_htlcs.iter() {
2797                         if let OutboundHTLCState::AwaitingRemoteRevokeToRemove(OutboundHTLCOutcome::Success(_)) = htlc.state {
2798                                 removed_outbound_total_msat += htlc.amount_msat;
2799                         } else if let OutboundHTLCState::AwaitingRemovedRemoteRevoke(OutboundHTLCOutcome::Success(_)) = htlc.state {
2800                                 removed_outbound_total_msat += htlc.amount_msat;
2801                         }
2802                 }
2803
2804                 let max_dust_htlc_exposure_msat = self.context.get_max_dust_htlc_exposure_msat(fee_estimator);
2805                 let (htlc_timeout_dust_limit, htlc_success_dust_limit) = if self.context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
2806                         (0, 0)
2807                 } else {
2808                         let dust_buffer_feerate = self.context.get_dust_buffer_feerate(None) as u64;
2809                         (dust_buffer_feerate * htlc_timeout_tx_weight(self.context.get_channel_type()) / 1000,
2810                                 dust_buffer_feerate * htlc_success_tx_weight(self.context.get_channel_type()) / 1000)
2811                 };
2812                 let exposure_dust_limit_timeout_sats = htlc_timeout_dust_limit + self.context.counterparty_dust_limit_satoshis;
2813                 if msg.amount_msat / 1000 < exposure_dust_limit_timeout_sats {
2814                         let on_counterparty_tx_dust_htlc_exposure_msat = inbound_stats.on_counterparty_tx_dust_exposure_msat + outbound_stats.on_counterparty_tx_dust_exposure_msat + msg.amount_msat;
2815                         if on_counterparty_tx_dust_htlc_exposure_msat > max_dust_htlc_exposure_msat {
2816                                 log_info!(logger, "Cannot accept value that would put our exposure to dust HTLCs at {} over the limit {} on counterparty commitment tx",
2817                                         on_counterparty_tx_dust_htlc_exposure_msat, max_dust_htlc_exposure_msat);
2818                                 pending_forward_status = create_pending_htlc_status(self, pending_forward_status, 0x1000|7);
2819                         }
2820                 }
2821
2822                 let exposure_dust_limit_success_sats = htlc_success_dust_limit + self.context.holder_dust_limit_satoshis;
2823                 if msg.amount_msat / 1000 < exposure_dust_limit_success_sats {
2824                         let on_holder_tx_dust_htlc_exposure_msat = inbound_stats.on_holder_tx_dust_exposure_msat + outbound_stats.on_holder_tx_dust_exposure_msat + msg.amount_msat;
2825                         if on_holder_tx_dust_htlc_exposure_msat > max_dust_htlc_exposure_msat {
2826                                 log_info!(logger, "Cannot accept value that would put our exposure to dust HTLCs at {} over the limit {} on holder commitment tx",
2827                                         on_holder_tx_dust_htlc_exposure_msat, max_dust_htlc_exposure_msat);
2828                                 pending_forward_status = create_pending_htlc_status(self, pending_forward_status, 0x1000|7);
2829                         }
2830                 }
2831
2832                 let pending_value_to_self_msat =
2833                         self.context.value_to_self_msat + inbound_stats.pending_htlcs_value_msat - removed_outbound_total_msat;
2834                 let pending_remote_value_msat =
2835                         self.context.channel_value_satoshis * 1000 - pending_value_to_self_msat;
2836                 if pending_remote_value_msat < msg.amount_msat {
2837                         return Err(ChannelError::Close("Remote HTLC add would overdraw remaining funds".to_owned()));
2838                 }
2839
2840                 // Check that the remote can afford to pay for this HTLC on-chain at the current
2841                 // feerate_per_kw, while maintaining their channel reserve (as required by the spec).
2842                 {
2843                         let remote_commit_tx_fee_msat = if self.context.is_outbound() { 0 } else {
2844                                 let htlc_candidate = HTLCCandidate::new(msg.amount_msat, HTLCInitiator::RemoteOffered);
2845                                 self.context.next_remote_commit_tx_fee_msat(htlc_candidate, None) // Don't include the extra fee spike buffer HTLC in calculations
2846                         };
2847                         let anchor_outputs_value_msat = if !self.context.is_outbound() && self.context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
2848                                 ANCHOR_OUTPUT_VALUE_SATOSHI * 2 * 1000
2849                         } else {
2850                                 0
2851                         };
2852                         if pending_remote_value_msat.saturating_sub(msg.amount_msat).saturating_sub(anchor_outputs_value_msat) < remote_commit_tx_fee_msat {
2853                                 return Err(ChannelError::Close("Remote HTLC add would not leave enough to pay for fees".to_owned()));
2854                         };
2855                         if pending_remote_value_msat.saturating_sub(msg.amount_msat).saturating_sub(remote_commit_tx_fee_msat).saturating_sub(anchor_outputs_value_msat) < self.context.holder_selected_channel_reserve_satoshis * 1000 {
2856                                 return Err(ChannelError::Close("Remote HTLC add would put them under remote reserve value".to_owned()));
2857                         }
2858                 }
2859
2860                 let anchor_outputs_value_msat = if self.context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
2861                         ANCHOR_OUTPUT_VALUE_SATOSHI * 2 * 1000
2862                 } else {
2863                         0
2864                 };
2865                 if !self.context.is_outbound() {
2866                         // `Some(())` is for the fee spike buffer we keep for the remote. This deviates from
2867                         // the spec because the fee spike buffer requirement doesn't exist on the receiver's
2868                         // side, only on the sender's. Note that with anchor outputs we are no longer as
2869                         // sensitive to fee spikes, so we need to account for them.
2870                         let htlc_candidate = HTLCCandidate::new(msg.amount_msat, HTLCInitiator::RemoteOffered);
2871                         let mut remote_fee_cost_incl_stuck_buffer_msat = self.context.next_remote_commit_tx_fee_msat(htlc_candidate, Some(()));
2872                         if !self.context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
2873                                 remote_fee_cost_incl_stuck_buffer_msat *= FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE;
2874                         }
2875                         if pending_remote_value_msat.saturating_sub(msg.amount_msat).saturating_sub(self.context.holder_selected_channel_reserve_satoshis * 1000).saturating_sub(anchor_outputs_value_msat) < remote_fee_cost_incl_stuck_buffer_msat {
2876                                 // Note that if the pending_forward_status is not updated here, then it's because we're already failing
2877                                 // the HTLC, i.e. its status is already set to failing.
2878                                 log_info!(logger, "Attempting to fail HTLC due to fee spike buffer violation in channel {}. Rebalancing is required.", &self.context.channel_id());
2879                                 pending_forward_status = create_pending_htlc_status(self, pending_forward_status, 0x1000|7);
2880                         }
2881                 } else {
2882                         // Check that they won't violate our local required channel reserve by adding this HTLC.
2883                         let htlc_candidate = HTLCCandidate::new(msg.amount_msat, HTLCInitiator::RemoteOffered);
2884                         let local_commit_tx_fee_msat = self.context.next_local_commit_tx_fee_msat(htlc_candidate, None);
2885                         if self.context.value_to_self_msat < self.context.counterparty_selected_channel_reserve_satoshis.unwrap() * 1000 + local_commit_tx_fee_msat + anchor_outputs_value_msat {
2886                                 return Err(ChannelError::Close("Cannot accept HTLC that would put our balance under counterparty-announced channel reserve value".to_owned()));
2887                         }
2888                 }
2889                 if self.context.next_counterparty_htlc_id != msg.htlc_id {
2890                         return Err(ChannelError::Close(format!("Remote skipped HTLC ID (skipped ID: {})", self.context.next_counterparty_htlc_id)));
2891                 }
2892                 if msg.cltv_expiry >= 500000000 {
2893                         return Err(ChannelError::Close("Remote provided CLTV expiry in seconds instead of block height".to_owned()));
2894                 }
2895
2896                 if self.context.channel_state & ChannelState::LocalShutdownSent as u32 != 0 {
2897                         if let PendingHTLCStatus::Forward(_) = pending_forward_status {
2898                                 panic!("ChannelManager shouldn't be trying to add a forwardable HTLC after we've started closing");
2899                         }
2900                 }
2901
2902                 // Now update local state:
2903                 self.context.next_counterparty_htlc_id += 1;
2904                 self.context.pending_inbound_htlcs.push(InboundHTLCOutput {
2905                         htlc_id: msg.htlc_id,
2906                         amount_msat: msg.amount_msat,
2907                         payment_hash: msg.payment_hash,
2908                         cltv_expiry: msg.cltv_expiry,
2909                         state: InboundHTLCState::RemoteAnnounced(pending_forward_status),
2910                 });
2911                 Ok(())
2912         }
2913
2914         /// Marks an outbound HTLC which we have received update_fail/fulfill/malformed
2915         #[inline]
2916         fn mark_outbound_htlc_removed(&mut self, htlc_id: u64, check_preimage: Option<PaymentPreimage>, fail_reason: Option<HTLCFailReason>) -> Result<&OutboundHTLCOutput, ChannelError> {
2917                 assert!(!(check_preimage.is_some() && fail_reason.is_some()), "cannot fail while we have a preimage");
2918                 for htlc in self.context.pending_outbound_htlcs.iter_mut() {
2919                         if htlc.htlc_id == htlc_id {
2920                                 let outcome = match check_preimage {
2921                                         None => fail_reason.into(),
2922                                         Some(payment_preimage) => {
2923                                                 let payment_hash = PaymentHash(Sha256::hash(&payment_preimage.0[..]).into_inner());
2924                                                 if payment_hash != htlc.payment_hash {
2925                                                         return Err(ChannelError::Close(format!("Remote tried to fulfill HTLC ({}) with an incorrect preimage", htlc_id)));
2926                                                 }
2927                                                 OutboundHTLCOutcome::Success(Some(payment_preimage))
2928                                         }
2929                                 };
2930                                 match htlc.state {
2931                                         OutboundHTLCState::LocalAnnounced(_) =>
2932                                                 return Err(ChannelError::Close(format!("Remote tried to fulfill/fail HTLC ({}) before it had been committed", htlc_id))),
2933                                         OutboundHTLCState::Committed => {
2934                                                 htlc.state = OutboundHTLCState::RemoteRemoved(outcome);
2935                                         },
2936                                         OutboundHTLCState::AwaitingRemoteRevokeToRemove(_) | OutboundHTLCState::AwaitingRemovedRemoteRevoke(_) | OutboundHTLCState::RemoteRemoved(_) =>
2937                                                 return Err(ChannelError::Close(format!("Remote tried to fulfill/fail HTLC ({}) that they'd already fulfilled/failed", htlc_id))),
2938                                 }
2939                                 return Ok(htlc);
2940                         }
2941                 }
2942                 Err(ChannelError::Close("Remote tried to fulfill/fail an HTLC we couldn't find".to_owned()))
2943         }
2944
2945         pub fn update_fulfill_htlc(&mut self, msg: &msgs::UpdateFulfillHTLC) -> Result<(HTLCSource, u64), ChannelError> {
2946                 if (self.context.channel_state & (ChannelState::ChannelReady as u32)) != (ChannelState::ChannelReady as u32) {
2947                         return Err(ChannelError::Close("Got fulfill HTLC message when channel was not in an operational state".to_owned()));
2948                 }
2949                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
2950                         return Err(ChannelError::Close("Peer sent update_fulfill_htlc when we needed a channel_reestablish".to_owned()));
2951                 }
2952
2953                 self.mark_outbound_htlc_removed(msg.htlc_id, Some(msg.payment_preimage), None).map(|htlc| (htlc.source.clone(), htlc.amount_msat))
2954         }
2955
2956         pub fn update_fail_htlc(&mut self, msg: &msgs::UpdateFailHTLC, fail_reason: HTLCFailReason) -> Result<(), ChannelError> {
2957                 if (self.context.channel_state & (ChannelState::ChannelReady as u32)) != (ChannelState::ChannelReady as u32) {
2958                         return Err(ChannelError::Close("Got fail HTLC message when channel was not in an operational state".to_owned()));
2959                 }
2960                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
2961                         return Err(ChannelError::Close("Peer sent update_fail_htlc when we needed a channel_reestablish".to_owned()));
2962                 }
2963
2964                 self.mark_outbound_htlc_removed(msg.htlc_id, None, Some(fail_reason))?;
2965                 Ok(())
2966         }
2967
2968         pub fn update_fail_malformed_htlc(&mut self, msg: &msgs::UpdateFailMalformedHTLC, fail_reason: HTLCFailReason) -> Result<(), ChannelError> {
2969                 if (self.context.channel_state & (ChannelState::ChannelReady as u32)) != (ChannelState::ChannelReady as u32) {
2970                         return Err(ChannelError::Close("Got fail malformed HTLC message when channel was not in an operational state".to_owned()));
2971                 }
2972                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
2973                         return Err(ChannelError::Close("Peer sent update_fail_malformed_htlc when we needed a channel_reestablish".to_owned()));
2974                 }
2975
2976                 self.mark_outbound_htlc_removed(msg.htlc_id, None, Some(fail_reason))?;
2977                 Ok(())
2978         }
2979
2980         pub fn commitment_signed<L: Deref>(&mut self, msg: &msgs::CommitmentSigned, logger: &L) -> Result<Option<ChannelMonitorUpdate>, ChannelError>
2981                 where L::Target: Logger
2982         {
2983                 if (self.context.channel_state & (ChannelState::ChannelReady as u32)) != (ChannelState::ChannelReady as u32) {
2984                         return Err(ChannelError::Close("Got commitment signed message when channel was not in an operational state".to_owned()));
2985                 }
2986                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
2987                         return Err(ChannelError::Close("Peer sent commitment_signed when we needed a channel_reestablish".to_owned()));
2988                 }
2989                 if self.context.channel_state & BOTH_SIDES_SHUTDOWN_MASK == BOTH_SIDES_SHUTDOWN_MASK && self.context.last_sent_closing_fee.is_some() {
2990                         return Err(ChannelError::Close("Peer sent commitment_signed after we'd started exchanging closing_signeds".to_owned()));
2991                 }
2992
2993                 let funding_script = self.context.get_funding_redeemscript();
2994
2995                 let keys = self.context.build_holder_transaction_keys(self.context.cur_holder_commitment_transaction_number);
2996
2997                 let commitment_stats = self.context.build_commitment_transaction(self.context.cur_holder_commitment_transaction_number, &keys, true, false, logger);
2998                 let commitment_txid = {
2999                         let trusted_tx = commitment_stats.tx.trust();
3000                         let bitcoin_tx = trusted_tx.built_transaction();
3001                         let sighash = bitcoin_tx.get_sighash_all(&funding_script, self.context.channel_value_satoshis);
3002
3003                         log_trace!(logger, "Checking commitment tx signature {} by key {} against tx {} (sighash {}) with redeemscript {} in channel {}",
3004                                 log_bytes!(msg.signature.serialize_compact()[..]),
3005                                 log_bytes!(self.context.counterparty_funding_pubkey().serialize()), encode::serialize_hex(&bitcoin_tx.transaction),
3006                                 log_bytes!(sighash[..]), encode::serialize_hex(&funding_script), &self.context.channel_id());
3007                         if let Err(_) = self.context.secp_ctx.verify_ecdsa(&sighash, &msg.signature, &self.context.counterparty_funding_pubkey()) {
3008                                 return Err(ChannelError::Close("Invalid commitment tx signature from peer".to_owned()));
3009                         }
3010                         bitcoin_tx.txid
3011                 };
3012                 let mut htlcs_cloned: Vec<_> = commitment_stats.htlcs_included.iter().map(|htlc| (htlc.0.clone(), htlc.1.map(|h| h.clone()))).collect();
3013
3014                 // If our counterparty updated the channel fee in this commitment transaction, check that
3015                 // they can actually afford the new fee now.
3016                 let update_fee = if let Some((_, update_state)) = self.context.pending_update_fee {
3017                         update_state == FeeUpdateState::RemoteAnnounced
3018                 } else { false };
3019                 if update_fee {
3020                         debug_assert!(!self.context.is_outbound());
3021                         let counterparty_reserve_we_require_msat = self.context.holder_selected_channel_reserve_satoshis * 1000;
3022                         if commitment_stats.remote_balance_msat < commitment_stats.total_fee_sat * 1000 + counterparty_reserve_we_require_msat {
3023                                 return Err(ChannelError::Close("Funding remote cannot afford proposed new fee".to_owned()));
3024                         }
3025                 }
3026                 #[cfg(any(test, fuzzing))]
3027                 {
3028                         if self.context.is_outbound() {
3029                                 let projected_commit_tx_info = self.context.next_local_commitment_tx_fee_info_cached.lock().unwrap().take();
3030                                 *self.context.next_remote_commitment_tx_fee_info_cached.lock().unwrap() = None;
3031                                 if let Some(info) = projected_commit_tx_info {
3032                                         let total_pending_htlcs = self.context.pending_inbound_htlcs.len() + self.context.pending_outbound_htlcs.len()
3033                                                 + self.context.holding_cell_htlc_updates.len();
3034                                         if info.total_pending_htlcs == total_pending_htlcs
3035                                                 && info.next_holder_htlc_id == self.context.next_holder_htlc_id
3036                                                 && info.next_counterparty_htlc_id == self.context.next_counterparty_htlc_id
3037                                                 && info.feerate == self.context.feerate_per_kw {
3038                                                         assert_eq!(commitment_stats.total_fee_sat, info.fee / 1000);
3039                                                 }
3040                                 }
3041                         }
3042                 }
3043
3044                 if msg.htlc_signatures.len() != commitment_stats.num_nondust_htlcs {
3045                         return Err(ChannelError::Close(format!("Got wrong number of HTLC signatures ({}) from remote. It must be {}", msg.htlc_signatures.len(), commitment_stats.num_nondust_htlcs)));
3046                 }
3047
3048                 // Up to LDK 0.0.115, HTLC information was required to be duplicated in the
3049                 // `htlcs_and_sigs` vec and in the `holder_commitment_tx` itself, both of which were passed
3050                 // in the `ChannelMonitorUpdate`. In 0.0.115, support for having a separate set of
3051                 // outbound-non-dust-HTLCSources in the `ChannelMonitorUpdate` was added, however for
3052                 // backwards compatibility, we never use it in production. To provide test coverage, here,
3053                 // we randomly decide (in test/fuzzing builds) to use the new vec sometimes.
3054                 #[allow(unused_assignments, unused_mut)]
3055                 let mut separate_nondust_htlc_sources = false;
3056                 #[cfg(all(feature = "std", any(test, fuzzing)))] {
3057                         use core::hash::{BuildHasher, Hasher};
3058                         // Get a random value using the only std API to do so - the DefaultHasher
3059                         let rand_val = std::collections::hash_map::RandomState::new().build_hasher().finish();
3060                         separate_nondust_htlc_sources = rand_val % 2 == 0;
3061                 }
3062
3063                 let mut nondust_htlc_sources = Vec::with_capacity(htlcs_cloned.len());
3064                 let mut htlcs_and_sigs = Vec::with_capacity(htlcs_cloned.len());
3065                 for (idx, (htlc, mut source_opt)) in htlcs_cloned.drain(..).enumerate() {
3066                         if let Some(_) = htlc.transaction_output_index {
3067                                 let htlc_tx = chan_utils::build_htlc_transaction(&commitment_txid, commitment_stats.feerate_per_kw,
3068                                         self.context.get_counterparty_selected_contest_delay().unwrap(), &htlc, &self.context.channel_type,
3069                                         &keys.broadcaster_delayed_payment_key, &keys.revocation_key);
3070
3071                                 let htlc_redeemscript = chan_utils::get_htlc_redeemscript(&htlc, &self.context.channel_type, &keys);
3072                                 let htlc_sighashtype = if self.context.channel_type.supports_anchors_zero_fee_htlc_tx() { EcdsaSighashType::SinglePlusAnyoneCanPay } else { EcdsaSighashType::All };
3073                                 let htlc_sighash = hash_to_message!(&sighash::SighashCache::new(&htlc_tx).segwit_signature_hash(0, &htlc_redeemscript, htlc.amount_msat / 1000, htlc_sighashtype).unwrap()[..]);
3074                                 log_trace!(logger, "Checking HTLC tx signature {} by key {} against tx {} (sighash {}) with redeemscript {} in channel {}.",
3075                                         log_bytes!(msg.htlc_signatures[idx].serialize_compact()[..]), log_bytes!(keys.countersignatory_htlc_key.serialize()),
3076                                         encode::serialize_hex(&htlc_tx), log_bytes!(htlc_sighash[..]), encode::serialize_hex(&htlc_redeemscript), &self.context.channel_id());
3077                                 if let Err(_) = self.context.secp_ctx.verify_ecdsa(&htlc_sighash, &msg.htlc_signatures[idx], &keys.countersignatory_htlc_key) {
3078                                         return Err(ChannelError::Close("Invalid HTLC tx signature from peer".to_owned()));
3079                                 }
3080                                 if !separate_nondust_htlc_sources {
3081                                         htlcs_and_sigs.push((htlc, Some(msg.htlc_signatures[idx]), source_opt.take()));
3082                                 }
3083                         } else {
3084                                 htlcs_and_sigs.push((htlc, None, source_opt.take()));
3085                         }
3086                         if separate_nondust_htlc_sources {
3087                                 if let Some(source) = source_opt.take() {
3088                                         nondust_htlc_sources.push(source);
3089                                 }
3090                         }
3091                         debug_assert!(source_opt.is_none(), "HTLCSource should have been put somewhere");
3092                 }
3093
3094                 let holder_commitment_tx = HolderCommitmentTransaction::new(
3095                         commitment_stats.tx,
3096                         msg.signature,
3097                         msg.htlc_signatures.clone(),
3098                         &self.context.get_holder_pubkeys().funding_pubkey,
3099                         self.context.counterparty_funding_pubkey()
3100                 );
3101
3102                 self.context.holder_signer.as_ref().validate_holder_commitment(&holder_commitment_tx, commitment_stats.preimages)
3103                         .map_err(|_| ChannelError::Close("Failed to validate our commitment".to_owned()))?;
3104
3105                 // Update state now that we've passed all the can-fail calls...
3106                 let mut need_commitment = false;
3107                 if let &mut Some((_, ref mut update_state)) = &mut self.context.pending_update_fee {
3108                         if *update_state == FeeUpdateState::RemoteAnnounced {
3109                                 *update_state = FeeUpdateState::AwaitingRemoteRevokeToAnnounce;
3110                                 need_commitment = true;
3111                         }
3112                 }
3113
3114                 for htlc in self.context.pending_inbound_htlcs.iter_mut() {
3115                         let new_forward = if let &InboundHTLCState::RemoteAnnounced(ref forward_info) = &htlc.state {
3116                                 Some(forward_info.clone())
3117                         } else { None };
3118                         if let Some(forward_info) = new_forward {
3119                                 log_trace!(logger, "Updating HTLC {} to AwaitingRemoteRevokeToAnnounce due to commitment_signed in channel {}.",
3120                                         &htlc.payment_hash, &self.context.channel_id);
3121                                 htlc.state = InboundHTLCState::AwaitingRemoteRevokeToAnnounce(forward_info);
3122                                 need_commitment = true;
3123                         }
3124                 }
3125                 let mut claimed_htlcs = Vec::new();
3126                 for htlc in self.context.pending_outbound_htlcs.iter_mut() {
3127                         if let &mut OutboundHTLCState::RemoteRemoved(ref mut outcome) = &mut htlc.state {
3128                                 log_trace!(logger, "Updating HTLC {} to AwaitingRemoteRevokeToRemove due to commitment_signed in channel {}.",
3129                                         &htlc.payment_hash, &self.context.channel_id);
3130                                 // Grab the preimage, if it exists, instead of cloning
3131                                 let mut reason = OutboundHTLCOutcome::Success(None);
3132                                 mem::swap(outcome, &mut reason);
3133                                 if let OutboundHTLCOutcome::Success(Some(preimage)) = reason {
3134                                         // If a user (a) receives an HTLC claim using LDK 0.0.104 or before, then (b)
3135                                         // upgrades to LDK 0.0.114 or later before the HTLC is fully resolved, we could
3136                                         // have a `Success(None)` reason. In this case we could forget some HTLC
3137                                         // claims, but such an upgrade is unlikely and including claimed HTLCs here
3138                                         // fixes a bug which the user was exposed to on 0.0.104 when they started the
3139                                         // claim anyway.
3140                                         claimed_htlcs.push((SentHTLCId::from_source(&htlc.source), preimage));
3141                                 }
3142                                 htlc.state = OutboundHTLCState::AwaitingRemoteRevokeToRemove(reason);
3143                                 need_commitment = true;
3144                         }
3145                 }
3146
3147                 self.context.latest_monitor_update_id += 1;
3148                 let mut monitor_update = ChannelMonitorUpdate {
3149                         update_id: self.context.latest_monitor_update_id,
3150                         updates: vec![ChannelMonitorUpdateStep::LatestHolderCommitmentTXInfo {
3151                                 commitment_tx: holder_commitment_tx,
3152                                 htlc_outputs: htlcs_and_sigs,
3153                                 claimed_htlcs,
3154                                 nondust_htlc_sources,
3155                         }]
3156                 };
3157
3158                 self.context.cur_holder_commitment_transaction_number -= 1;
3159                 // Note that if we need_commitment & !AwaitingRemoteRevoke we'll call
3160                 // build_commitment_no_status_check() next which will reset this to RAAFirst.
3161                 self.context.resend_order = RAACommitmentOrder::CommitmentFirst;
3162
3163                 if (self.context.channel_state & ChannelState::MonitorUpdateInProgress as u32) != 0 {
3164                         // In case we initially failed monitor updating without requiring a response, we need
3165                         // to make sure the RAA gets sent first.
3166                         self.context.monitor_pending_revoke_and_ack = true;
3167                         if need_commitment && (self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32)) == 0 {
3168                                 // If we were going to send a commitment_signed after the RAA, go ahead and do all
3169                                 // the corresponding HTLC status updates so that get_last_commitment_update
3170                                 // includes the right HTLCs.
3171                                 self.context.monitor_pending_commitment_signed = true;
3172                                 let mut additional_update = self.build_commitment_no_status_check(logger);
3173                                 // build_commitment_no_status_check may bump latest_monitor_id but we want them to be
3174                                 // strictly increasing by one, so decrement it here.
3175                                 self.context.latest_monitor_update_id = monitor_update.update_id;
3176                                 monitor_update.updates.append(&mut additional_update.updates);
3177                         }
3178                         log_debug!(logger, "Received valid commitment_signed from peer in channel {}, updated HTLC state but awaiting a monitor update resolution to reply.",
3179                                 &self.context.channel_id);
3180                         return Ok(self.push_ret_blockable_mon_update(monitor_update));
3181                 }
3182
3183                 let need_commitment_signed = if need_commitment && (self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32)) == 0 {
3184                         // If we're AwaitingRemoteRevoke we can't send a new commitment here, but that's ok -
3185                         // we'll send one right away when we get the revoke_and_ack when we
3186                         // free_holding_cell_htlcs().
3187                         let mut additional_update = self.build_commitment_no_status_check(logger);
3188                         // build_commitment_no_status_check may bump latest_monitor_id but we want them to be
3189                         // strictly increasing by one, so decrement it here.
3190                         self.context.latest_monitor_update_id = monitor_update.update_id;
3191                         monitor_update.updates.append(&mut additional_update.updates);
3192                         true
3193                 } else { false };
3194
3195                 log_debug!(logger, "Received valid commitment_signed from peer in channel {}, updating HTLC state and responding with{} a revoke_and_ack.",
3196                         &self.context.channel_id(), if need_commitment_signed { " our own commitment_signed and" } else { "" });
3197                 self.monitor_updating_paused(true, need_commitment_signed, false, Vec::new(), Vec::new(), Vec::new());
3198                 return Ok(self.push_ret_blockable_mon_update(monitor_update));
3199         }
3200
3201         /// Public version of the below, checking relevant preconditions first.
3202         /// If we're not in a state where freeing the holding cell makes sense, this is a no-op and
3203         /// returns `(None, Vec::new())`.
3204         pub fn maybe_free_holding_cell_htlcs<F: Deref, L: Deref>(
3205                 &mut self, fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L
3206         ) -> (Option<ChannelMonitorUpdate>, Vec<(HTLCSource, PaymentHash)>)
3207         where F::Target: FeeEstimator, L::Target: Logger
3208         {
3209                 if self.context.channel_state & !STATE_FLAGS >= ChannelState::ChannelReady as u32 &&
3210                    (self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32 | ChannelState::PeerDisconnected as u32 | ChannelState::MonitorUpdateInProgress as u32)) == 0 {
3211                         self.free_holding_cell_htlcs(fee_estimator, logger)
3212                 } else { (None, Vec::new()) }
3213         }
3214
3215         /// Frees any pending commitment updates in the holding cell, generating the relevant messages
3216         /// for our counterparty.
3217         fn free_holding_cell_htlcs<F: Deref, L: Deref>(
3218                 &mut self, fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L
3219         ) -> (Option<ChannelMonitorUpdate>, Vec<(HTLCSource, PaymentHash)>)
3220         where F::Target: FeeEstimator, L::Target: Logger
3221         {
3222                 assert_eq!(self.context.channel_state & ChannelState::MonitorUpdateInProgress as u32, 0);
3223                 if self.context.holding_cell_htlc_updates.len() != 0 || self.context.holding_cell_update_fee.is_some() {
3224                         log_trace!(logger, "Freeing holding cell with {} HTLC updates{} in channel {}", self.context.holding_cell_htlc_updates.len(),
3225                                 if self.context.holding_cell_update_fee.is_some() { " and a fee update" } else { "" }, &self.context.channel_id());
3226
3227                         let mut monitor_update = ChannelMonitorUpdate {
3228                                 update_id: self.context.latest_monitor_update_id + 1, // We don't increment this yet!
3229                                 updates: Vec::new(),
3230                         };
3231
3232                         let mut htlc_updates = Vec::new();
3233                         mem::swap(&mut htlc_updates, &mut self.context.holding_cell_htlc_updates);
3234                         let mut update_add_count = 0;
3235                         let mut update_fulfill_count = 0;
3236                         let mut update_fail_count = 0;
3237                         let mut htlcs_to_fail = Vec::new();
3238                         for htlc_update in htlc_updates.drain(..) {
3239                                 // Note that this *can* fail, though it should be due to rather-rare conditions on
3240                                 // fee races with adding too many outputs which push our total payments just over
3241                                 // the limit. In case it's less rare than I anticipate, we may want to revisit
3242                                 // handling this case better and maybe fulfilling some of the HTLCs while attempting
3243                                 // to rebalance channels.
3244                                 match &htlc_update {
3245                                         &HTLCUpdateAwaitingACK::AddHTLC {
3246                                                 amount_msat, cltv_expiry, ref payment_hash, ref source, ref onion_routing_packet,
3247                                                 skimmed_fee_msat, ..
3248                                         } => {
3249                                                 match self.send_htlc(amount_msat, *payment_hash, cltv_expiry, source.clone(),
3250                                                         onion_routing_packet.clone(), false, skimmed_fee_msat, fee_estimator, logger)
3251                                                 {
3252                                                         Ok(_) => update_add_count += 1,
3253                                                         Err(e) => {
3254                                                                 match e {
3255                                                                         ChannelError::Ignore(ref msg) => {
3256                                                                                 log_info!(logger, "Failed to send HTLC with payment_hash {} due to {} in channel {}", &payment_hash, msg, &self.context.channel_id());
3257                                                                                 // If we fail to send here, then this HTLC should
3258                                                                                 // be failed backwards. Failing to send here
3259                                                                                 // indicates that this HTLC may keep being put back
3260                                                                                 // into the holding cell without ever being
3261                                                                                 // successfully forwarded/failed/fulfilled, causing
3262                                                                                 // our counterparty to eventually close on us.
3263                                                                                 htlcs_to_fail.push((source.clone(), *payment_hash));
3264                                                                         },
3265                                                                         _ => {
3266                                                                                 panic!("Got a non-IgnoreError action trying to send holding cell HTLC");
3267                                                                         },
3268                                                                 }
3269                                                         }
3270                                                 }
3271                                         },
3272                                         &HTLCUpdateAwaitingACK::ClaimHTLC { ref payment_preimage, htlc_id, .. } => {
3273                                                 // If an HTLC claim was previously added to the holding cell (via
3274                                                 // `get_update_fulfill_htlc`, then generating the claim message itself must
3275                                                 // not fail - any in between attempts to claim the HTLC will have resulted
3276                                                 // in it hitting the holding cell again and we cannot change the state of a
3277                                                 // holding cell HTLC from fulfill to anything else.
3278                                                 let mut additional_monitor_update =
3279                                                         if let UpdateFulfillFetch::NewClaim { monitor_update, .. } =
3280                                                                 self.get_update_fulfill_htlc(htlc_id, *payment_preimage, logger)
3281                                                         { monitor_update } else { unreachable!() };
3282                                                 update_fulfill_count += 1;
3283                                                 monitor_update.updates.append(&mut additional_monitor_update.updates);
3284                                         },
3285                                         &HTLCUpdateAwaitingACK::FailHTLC { htlc_id, ref err_packet } => {
3286                                                 match self.fail_htlc(htlc_id, err_packet.clone(), false, logger) {
3287                                                         Ok(update_fail_msg_option) => {
3288                                                                 // If an HTLC failure was previously added to the holding cell (via
3289                                                                 // `queue_fail_htlc`) then generating the fail message itself must
3290                                                                 // not fail - we should never end up in a state where we double-fail
3291                                                                 // an HTLC or fail-then-claim an HTLC as it indicates we didn't wait
3292                                                                 // for a full revocation before failing.
3293                                                                 debug_assert!(update_fail_msg_option.is_some());
3294                                                                 update_fail_count += 1;
3295                                                         },
3296                                                         Err(e) => {
3297                                                                 if let ChannelError::Ignore(_) = e {}
3298                                                                 else {
3299                                                                         panic!("Got a non-IgnoreError action trying to fail holding cell HTLC");
3300                                                                 }
3301                                                         }
3302                                                 }
3303                                         },
3304                                 }
3305                         }
3306                         if update_add_count == 0 && update_fulfill_count == 0 && update_fail_count == 0 && self.context.holding_cell_update_fee.is_none() {
3307                                 return (None, htlcs_to_fail);
3308                         }
3309                         let update_fee = if let Some(feerate) = self.context.holding_cell_update_fee.take() {
3310                                 self.send_update_fee(feerate, false, fee_estimator, logger)
3311                         } else {
3312                                 None
3313                         };
3314
3315                         let mut additional_update = self.build_commitment_no_status_check(logger);
3316                         // build_commitment_no_status_check and get_update_fulfill_htlc may bump latest_monitor_id
3317                         // but we want them to be strictly increasing by one, so reset it here.
3318                         self.context.latest_monitor_update_id = monitor_update.update_id;
3319                         monitor_update.updates.append(&mut additional_update.updates);
3320
3321                         log_debug!(logger, "Freeing holding cell in channel {} resulted in {}{} HTLCs added, {} HTLCs fulfilled, and {} HTLCs failed.",
3322                                 &self.context.channel_id(), if update_fee.is_some() { "a fee update, " } else { "" },
3323                                 update_add_count, update_fulfill_count, update_fail_count);
3324
3325                         self.monitor_updating_paused(false, true, false, Vec::new(), Vec::new(), Vec::new());
3326                         (self.push_ret_blockable_mon_update(monitor_update), htlcs_to_fail)
3327                 } else {
3328                         (None, Vec::new())
3329                 }
3330         }
3331
3332         /// Handles receiving a remote's revoke_and_ack. Note that we may return a new
3333         /// commitment_signed message here in case we had pending outbound HTLCs to add which were
3334         /// waiting on this revoke_and_ack. The generation of this new commitment_signed may also fail,
3335         /// generating an appropriate error *after* the channel state has been updated based on the
3336         /// revoke_and_ack message.
3337         pub fn revoke_and_ack<F: Deref, L: Deref>(&mut self, msg: &msgs::RevokeAndACK,
3338                 fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L, hold_mon_update: bool,
3339         ) -> Result<(Vec<(HTLCSource, PaymentHash)>, Option<ChannelMonitorUpdate>), ChannelError>
3340         where F::Target: FeeEstimator, L::Target: Logger,
3341         {
3342                 if (self.context.channel_state & (ChannelState::ChannelReady as u32)) != (ChannelState::ChannelReady as u32) {
3343                         return Err(ChannelError::Close("Got revoke/ACK message when channel was not in an operational state".to_owned()));
3344                 }
3345                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
3346                         return Err(ChannelError::Close("Peer sent revoke_and_ack when we needed a channel_reestablish".to_owned()));
3347                 }
3348                 if self.context.channel_state & BOTH_SIDES_SHUTDOWN_MASK == BOTH_SIDES_SHUTDOWN_MASK && self.context.last_sent_closing_fee.is_some() {
3349                         return Err(ChannelError::Close("Peer sent revoke_and_ack after we'd started exchanging closing_signeds".to_owned()));
3350                 }
3351
3352                 let secret = secp_check!(SecretKey::from_slice(&msg.per_commitment_secret), "Peer provided an invalid per_commitment_secret".to_owned());
3353
3354                 if let Some(counterparty_prev_commitment_point) = self.context.counterparty_prev_commitment_point {
3355                         if PublicKey::from_secret_key(&self.context.secp_ctx, &secret) != counterparty_prev_commitment_point {
3356                                 return Err(ChannelError::Close("Got a revoke commitment secret which didn't correspond to their current pubkey".to_owned()));
3357                         }
3358                 }
3359
3360                 if self.context.channel_state & ChannelState::AwaitingRemoteRevoke as u32 == 0 {
3361                         // Our counterparty seems to have burned their coins to us (by revoking a state when we
3362                         // haven't given them a new commitment transaction to broadcast). We should probably
3363                         // take advantage of this by updating our channel monitor, sending them an error, and
3364                         // waiting for them to broadcast their latest (now-revoked claim). But, that would be a
3365                         // lot of work, and there's some chance this is all a misunderstanding anyway.
3366                         // We have to do *something*, though, since our signer may get mad at us for otherwise
3367                         // jumping a remote commitment number, so best to just force-close and move on.
3368                         return Err(ChannelError::Close("Received an unexpected revoke_and_ack".to_owned()));
3369                 }
3370
3371                 #[cfg(any(test, fuzzing))]
3372                 {
3373                         *self.context.next_local_commitment_tx_fee_info_cached.lock().unwrap() = None;
3374                         *self.context.next_remote_commitment_tx_fee_info_cached.lock().unwrap() = None;
3375                 }
3376
3377                 match &self.context.holder_signer {
3378                         ChannelSignerType::Ecdsa(ecdsa) => {
3379                                 ecdsa.validate_counterparty_revocation(
3380                                         self.context.cur_counterparty_commitment_transaction_number + 1,
3381                                         &secret
3382                                 ).map_err(|_| ChannelError::Close("Failed to validate revocation from peer".to_owned()))?;
3383                         }
3384                 };
3385
3386                 self.context.commitment_secrets.provide_secret(self.context.cur_counterparty_commitment_transaction_number + 1, msg.per_commitment_secret)
3387                         .map_err(|_| ChannelError::Close("Previous secrets did not match new one".to_owned()))?;
3388                 self.context.latest_monitor_update_id += 1;
3389                 let mut monitor_update = ChannelMonitorUpdate {
3390                         update_id: self.context.latest_monitor_update_id,
3391                         updates: vec![ChannelMonitorUpdateStep::CommitmentSecret {
3392                                 idx: self.context.cur_counterparty_commitment_transaction_number + 1,
3393                                 secret: msg.per_commitment_secret,
3394                         }],
3395                 };
3396
3397                 // Update state now that we've passed all the can-fail calls...
3398                 // (note that we may still fail to generate the new commitment_signed message, but that's
3399                 // OK, we step the channel here and *then* if the new generation fails we can fail the
3400                 // channel based on that, but stepping stuff here should be safe either way.
3401                 self.context.channel_state &= !(ChannelState::AwaitingRemoteRevoke as u32);
3402                 self.context.sent_message_awaiting_response = None;
3403                 self.context.counterparty_prev_commitment_point = self.context.counterparty_cur_commitment_point;
3404                 self.context.counterparty_cur_commitment_point = Some(msg.next_per_commitment_point);
3405                 self.context.cur_counterparty_commitment_transaction_number -= 1;
3406
3407                 if self.context.announcement_sigs_state == AnnouncementSigsState::Committed {
3408                         self.context.announcement_sigs_state = AnnouncementSigsState::PeerReceived;
3409                 }
3410
3411                 log_trace!(logger, "Updating HTLCs on receipt of RAA in channel {}...", &self.context.channel_id());
3412                 let mut to_forward_infos = Vec::new();
3413                 let mut revoked_htlcs = Vec::new();
3414                 let mut finalized_claimed_htlcs = Vec::new();
3415                 let mut update_fail_htlcs = Vec::new();
3416                 let mut update_fail_malformed_htlcs = Vec::new();
3417                 let mut require_commitment = false;
3418                 let mut value_to_self_msat_diff: i64 = 0;
3419
3420                 {
3421                         // Take references explicitly so that we can hold multiple references to self.context.
3422                         let pending_inbound_htlcs: &mut Vec<_> = &mut self.context.pending_inbound_htlcs;
3423                         let pending_outbound_htlcs: &mut Vec<_> = &mut self.context.pending_outbound_htlcs;
3424
3425                         // We really shouldnt have two passes here, but retain gives a non-mutable ref (Rust bug)
3426                         pending_inbound_htlcs.retain(|htlc| {
3427                                 if let &InboundHTLCState::LocalRemoved(ref reason) = &htlc.state {
3428                                         log_trace!(logger, " ...removing inbound LocalRemoved {}", &htlc.payment_hash);
3429                                         if let &InboundHTLCRemovalReason::Fulfill(_) = reason {
3430                                                 value_to_self_msat_diff += htlc.amount_msat as i64;
3431                                         }
3432                                         false
3433                                 } else { true }
3434                         });
3435                         pending_outbound_htlcs.retain(|htlc| {
3436                                 if let &OutboundHTLCState::AwaitingRemovedRemoteRevoke(ref outcome) = &htlc.state {
3437                                         log_trace!(logger, " ...removing outbound AwaitingRemovedRemoteRevoke {}", &htlc.payment_hash);
3438                                         if let OutboundHTLCOutcome::Failure(reason) = outcome.clone() { // We really want take() here, but, again, non-mut ref :(
3439                                                 revoked_htlcs.push((htlc.source.clone(), htlc.payment_hash, reason));
3440                                         } else {
3441                                                 finalized_claimed_htlcs.push(htlc.source.clone());
3442                                                 // They fulfilled, so we sent them money
3443                                                 value_to_self_msat_diff -= htlc.amount_msat as i64;
3444                                         }
3445                                         false
3446                                 } else { true }
3447                         });
3448                         for htlc in pending_inbound_htlcs.iter_mut() {
3449                                 let swap = if let &InboundHTLCState::AwaitingRemoteRevokeToAnnounce(_) = &htlc.state {
3450                                         true
3451                                 } else if let &InboundHTLCState::AwaitingAnnouncedRemoteRevoke(_) = &htlc.state {
3452                                         true
3453                                 } else { false };
3454                                 if swap {
3455                                         let mut state = InboundHTLCState::Committed;
3456                                         mem::swap(&mut state, &mut htlc.state);
3457
3458                                         if let InboundHTLCState::AwaitingRemoteRevokeToAnnounce(forward_info) = state {
3459                                                 log_trace!(logger, " ...promoting inbound AwaitingRemoteRevokeToAnnounce {} to AwaitingAnnouncedRemoteRevoke", &htlc.payment_hash);
3460                                                 htlc.state = InboundHTLCState::AwaitingAnnouncedRemoteRevoke(forward_info);
3461                                                 require_commitment = true;
3462                                         } else if let InboundHTLCState::AwaitingAnnouncedRemoteRevoke(forward_info) = state {
3463                                                 match forward_info {
3464                                                         PendingHTLCStatus::Fail(fail_msg) => {
3465                                                                 log_trace!(logger, " ...promoting inbound AwaitingAnnouncedRemoteRevoke {} to LocalRemoved due to PendingHTLCStatus indicating failure", &htlc.payment_hash);
3466                                                                 require_commitment = true;
3467                                                                 match fail_msg {
3468                                                                         HTLCFailureMsg::Relay(msg) => {
3469                                                                                 htlc.state = InboundHTLCState::LocalRemoved(InboundHTLCRemovalReason::FailRelay(msg.reason.clone()));
3470                                                                                 update_fail_htlcs.push(msg)
3471                                                                         },
3472                                                                         HTLCFailureMsg::Malformed(msg) => {
3473                                                                                 htlc.state = InboundHTLCState::LocalRemoved(InboundHTLCRemovalReason::FailMalformed((msg.sha256_of_onion, msg.failure_code)));
3474                                                                                 update_fail_malformed_htlcs.push(msg)
3475                                                                         },
3476                                                                 }
3477                                                         },
3478                                                         PendingHTLCStatus::Forward(forward_info) => {
3479                                                                 log_trace!(logger, " ...promoting inbound AwaitingAnnouncedRemoteRevoke {} to Committed", &htlc.payment_hash);
3480                                                                 to_forward_infos.push((forward_info, htlc.htlc_id));
3481                                                                 htlc.state = InboundHTLCState::Committed;
3482                                                         }
3483                                                 }
3484                                         }
3485                                 }
3486                         }
3487                         for htlc in pending_outbound_htlcs.iter_mut() {
3488                                 if let OutboundHTLCState::LocalAnnounced(_) = htlc.state {
3489                                         log_trace!(logger, " ...promoting outbound LocalAnnounced {} to Committed", &htlc.payment_hash);
3490                                         htlc.state = OutboundHTLCState::Committed;
3491                                 }
3492                                 if let &mut OutboundHTLCState::AwaitingRemoteRevokeToRemove(ref mut outcome) = &mut htlc.state {
3493                                         log_trace!(logger, " ...promoting outbound AwaitingRemoteRevokeToRemove {} to AwaitingRemovedRemoteRevoke", &htlc.payment_hash);
3494                                         // Grab the preimage, if it exists, instead of cloning
3495                                         let mut reason = OutboundHTLCOutcome::Success(None);
3496                                         mem::swap(outcome, &mut reason);
3497                                         htlc.state = OutboundHTLCState::AwaitingRemovedRemoteRevoke(reason);
3498                                         require_commitment = true;
3499                                 }
3500                         }
3501                 }
3502                 self.context.value_to_self_msat = (self.context.value_to_self_msat as i64 + value_to_self_msat_diff) as u64;
3503
3504                 if let Some((feerate, update_state)) = self.context.pending_update_fee {
3505                         match update_state {
3506                                 FeeUpdateState::Outbound => {
3507                                         debug_assert!(self.context.is_outbound());
3508                                         log_trace!(logger, " ...promoting outbound fee update {} to Committed", feerate);
3509                                         self.context.feerate_per_kw = feerate;
3510                                         self.context.pending_update_fee = None;
3511                                 },
3512                                 FeeUpdateState::RemoteAnnounced => { debug_assert!(!self.context.is_outbound()); },
3513                                 FeeUpdateState::AwaitingRemoteRevokeToAnnounce => {
3514                                         debug_assert!(!self.context.is_outbound());
3515                                         log_trace!(logger, " ...promoting inbound AwaitingRemoteRevokeToAnnounce fee update {} to Committed", feerate);
3516                                         require_commitment = true;
3517                                         self.context.feerate_per_kw = feerate;
3518                                         self.context.pending_update_fee = None;
3519                                 },
3520                         }
3521                 }
3522
3523                 let release_monitor = self.context.blocked_monitor_updates.is_empty() && !hold_mon_update;
3524                 let release_state_str =
3525                         if hold_mon_update { "Holding" } else if release_monitor { "Releasing" } else { "Blocked" };
3526                 macro_rules! return_with_htlcs_to_fail {
3527                         ($htlcs_to_fail: expr) => {
3528                                 if !release_monitor {
3529                                         self.context.blocked_monitor_updates.push(PendingChannelMonitorUpdate {
3530                                                 update: monitor_update,
3531                                         });
3532                                         return Ok(($htlcs_to_fail, None));
3533                                 } else {
3534                                         return Ok(($htlcs_to_fail, Some(monitor_update)));
3535                                 }
3536                         }
3537                 }
3538
3539                 if (self.context.channel_state & ChannelState::MonitorUpdateInProgress as u32) == ChannelState::MonitorUpdateInProgress as u32 {
3540                         // We can't actually generate a new commitment transaction (incl by freeing holding
3541                         // cells) while we can't update the monitor, so we just return what we have.
3542                         if require_commitment {
3543                                 self.context.monitor_pending_commitment_signed = true;
3544                                 // When the monitor updating is restored we'll call get_last_commitment_update(),
3545                                 // which does not update state, but we're definitely now awaiting a remote revoke
3546                                 // before we can step forward any more, so set it here.
3547                                 let mut additional_update = self.build_commitment_no_status_check(logger);
3548                                 // build_commitment_no_status_check may bump latest_monitor_id but we want them to be
3549                                 // strictly increasing by one, so decrement it here.
3550                                 self.context.latest_monitor_update_id = monitor_update.update_id;
3551                                 monitor_update.updates.append(&mut additional_update.updates);
3552                         }
3553                         self.context.monitor_pending_forwards.append(&mut to_forward_infos);
3554                         self.context.monitor_pending_failures.append(&mut revoked_htlcs);
3555                         self.context.monitor_pending_finalized_fulfills.append(&mut finalized_claimed_htlcs);
3556                         log_debug!(logger, "Received a valid revoke_and_ack for channel {} but awaiting a monitor update resolution to reply.", &self.context.channel_id());
3557                         return_with_htlcs_to_fail!(Vec::new());
3558                 }
3559
3560                 match self.free_holding_cell_htlcs(fee_estimator, logger) {
3561                         (Some(mut additional_update), htlcs_to_fail) => {
3562                                 // free_holding_cell_htlcs may bump latest_monitor_id multiple times but we want them to be
3563                                 // strictly increasing by one, so decrement it here.
3564                                 self.context.latest_monitor_update_id = monitor_update.update_id;
3565                                 monitor_update.updates.append(&mut additional_update.updates);
3566
3567                                 log_debug!(logger, "Received a valid revoke_and_ack for channel {} with holding cell HTLCs freed. {} monitor update.",
3568                                         &self.context.channel_id(), release_state_str);
3569
3570                                 self.monitor_updating_paused(false, true, false, to_forward_infos, revoked_htlcs, finalized_claimed_htlcs);
3571                                 return_with_htlcs_to_fail!(htlcs_to_fail);
3572                         },
3573                         (None, htlcs_to_fail) => {
3574                                 if require_commitment {
3575                                         let mut additional_update = self.build_commitment_no_status_check(logger);
3576
3577                                         // build_commitment_no_status_check may bump latest_monitor_id but we want them to be
3578                                         // strictly increasing by one, so decrement it here.
3579                                         self.context.latest_monitor_update_id = monitor_update.update_id;
3580                                         monitor_update.updates.append(&mut additional_update.updates);
3581
3582                                         log_debug!(logger, "Received a valid revoke_and_ack for channel {}. Responding with a commitment update with {} HTLCs failed. {} monitor update.",
3583                                                 &self.context.channel_id(),
3584                                                 update_fail_htlcs.len() + update_fail_malformed_htlcs.len(),
3585                                                 release_state_str);
3586
3587                                         self.monitor_updating_paused(false, true, false, to_forward_infos, revoked_htlcs, finalized_claimed_htlcs);
3588                                         return_with_htlcs_to_fail!(htlcs_to_fail);
3589                                 } else {
3590                                         log_debug!(logger, "Received a valid revoke_and_ack for channel {} with no reply necessary. {} monitor update.",
3591                                                 &self.context.channel_id(), release_state_str);
3592
3593                                         self.monitor_updating_paused(false, false, false, to_forward_infos, revoked_htlcs, finalized_claimed_htlcs);
3594                                         return_with_htlcs_to_fail!(htlcs_to_fail);
3595                                 }
3596                         }
3597                 }
3598         }
3599
3600         /// Queues up an outbound update fee by placing it in the holding cell. You should call
3601         /// [`Self::maybe_free_holding_cell_htlcs`] in order to actually generate and send the
3602         /// commitment update.
3603         pub fn queue_update_fee<F: Deref, L: Deref>(&mut self, feerate_per_kw: u32,
3604                 fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L)
3605         where F::Target: FeeEstimator, L::Target: Logger
3606         {
3607                 let msg_opt = self.send_update_fee(feerate_per_kw, true, fee_estimator, logger);
3608                 assert!(msg_opt.is_none(), "We forced holding cell?");
3609         }
3610
3611         /// Adds a pending update to this channel. See the doc for send_htlc for
3612         /// further details on the optionness of the return value.
3613         /// If our balance is too low to cover the cost of the next commitment transaction at the
3614         /// new feerate, the update is cancelled.
3615         ///
3616         /// You MUST call [`Self::send_commitment_no_state_update`] prior to any other calls on this
3617         /// [`Channel`] if `force_holding_cell` is false.
3618         fn send_update_fee<F: Deref, L: Deref>(
3619                 &mut self, feerate_per_kw: u32, mut force_holding_cell: bool,
3620                 fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L
3621         ) -> Option<msgs::UpdateFee>
3622         where F::Target: FeeEstimator, L::Target: Logger
3623         {
3624                 if !self.context.is_outbound() {
3625                         panic!("Cannot send fee from inbound channel");
3626                 }
3627                 if !self.context.is_usable() {
3628                         panic!("Cannot update fee until channel is fully established and we haven't started shutting down");
3629                 }
3630                 if !self.context.is_live() {
3631                         panic!("Cannot update fee while peer is disconnected/we're awaiting a monitor update (ChannelManager should have caught this)");
3632                 }
3633
3634                 // Before proposing a feerate update, check that we can actually afford the new fee.
3635                 let inbound_stats = self.context.get_inbound_pending_htlc_stats(Some(feerate_per_kw));
3636                 let outbound_stats = self.context.get_outbound_pending_htlc_stats(Some(feerate_per_kw));
3637                 let keys = self.context.build_holder_transaction_keys(self.context.cur_holder_commitment_transaction_number);
3638                 let commitment_stats = self.context.build_commitment_transaction(self.context.cur_holder_commitment_transaction_number, &keys, true, true, logger);
3639                 let buffer_fee_msat = commit_tx_fee_sat(feerate_per_kw, commitment_stats.num_nondust_htlcs + outbound_stats.on_holder_tx_holding_cell_htlcs_count as usize + CONCURRENT_INBOUND_HTLC_FEE_BUFFER as usize, self.context.get_channel_type()) * 1000;
3640                 let holder_balance_msat = commitment_stats.local_balance_msat - outbound_stats.holding_cell_msat;
3641                 if holder_balance_msat < buffer_fee_msat  + self.context.counterparty_selected_channel_reserve_satoshis.unwrap() * 1000 {
3642                         //TODO: auto-close after a number of failures?
3643                         log_debug!(logger, "Cannot afford to send new feerate at {}", feerate_per_kw);
3644                         return None;
3645                 }
3646
3647                 // Note, we evaluate pending htlc "preemptive" trimmed-to-dust threshold at the proposed `feerate_per_kw`.
3648                 let holder_tx_dust_exposure = inbound_stats.on_holder_tx_dust_exposure_msat + outbound_stats.on_holder_tx_dust_exposure_msat;
3649                 let counterparty_tx_dust_exposure = inbound_stats.on_counterparty_tx_dust_exposure_msat + outbound_stats.on_counterparty_tx_dust_exposure_msat;
3650                 let max_dust_htlc_exposure_msat = self.context.get_max_dust_htlc_exposure_msat(fee_estimator);
3651                 if holder_tx_dust_exposure > max_dust_htlc_exposure_msat {
3652                         log_debug!(logger, "Cannot afford to send new feerate at {} without infringing max dust htlc exposure", feerate_per_kw);
3653                         return None;
3654                 }
3655                 if counterparty_tx_dust_exposure > max_dust_htlc_exposure_msat {
3656                         log_debug!(logger, "Cannot afford to send new feerate at {} without infringing max dust htlc exposure", feerate_per_kw);
3657                         return None;
3658                 }
3659
3660                 if (self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32 | ChannelState::MonitorUpdateInProgress as u32)) != 0 {
3661                         force_holding_cell = true;
3662                 }
3663
3664                 if force_holding_cell {
3665                         self.context.holding_cell_update_fee = Some(feerate_per_kw);
3666                         return None;
3667                 }
3668
3669                 debug_assert!(self.context.pending_update_fee.is_none());
3670                 self.context.pending_update_fee = Some((feerate_per_kw, FeeUpdateState::Outbound));
3671
3672                 Some(msgs::UpdateFee {
3673                         channel_id: self.context.channel_id,
3674                         feerate_per_kw,
3675                 })
3676         }
3677
3678         /// Removes any uncommitted inbound HTLCs and resets the state of uncommitted outbound HTLC
3679         /// updates, to be used on peer disconnection. After this, update_*_htlc messages need to be
3680         /// resent.
3681         /// No further message handling calls may be made until a channel_reestablish dance has
3682         /// completed.
3683         /// May return `Err(())`, which implies [`ChannelContext::force_shutdown`] should be called immediately.
3684         pub fn remove_uncommitted_htlcs_and_mark_paused<L: Deref>(&mut self, logger: &L) -> Result<(), ()> where L::Target: Logger {
3685                 assert_eq!(self.context.channel_state & ChannelState::ShutdownComplete as u32, 0);
3686                 if self.context.channel_state & !STATE_FLAGS < ChannelState::FundingSent as u32 {
3687                         return Err(());
3688                 }
3689
3690                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == (ChannelState::PeerDisconnected as u32) {
3691                         // While the below code should be idempotent, it's simpler to just return early, as
3692                         // redundant disconnect events can fire, though they should be rare.
3693                         return Ok(());
3694                 }
3695
3696                 if self.context.announcement_sigs_state == AnnouncementSigsState::MessageSent || self.context.announcement_sigs_state == AnnouncementSigsState::Committed {
3697                         self.context.announcement_sigs_state = AnnouncementSigsState::NotSent;
3698                 }
3699
3700                 // Upon reconnect we have to start the closing_signed dance over, but shutdown messages
3701                 // will be retransmitted.
3702                 self.context.last_sent_closing_fee = None;
3703                 self.context.pending_counterparty_closing_signed = None;
3704                 self.context.closing_fee_limits = None;
3705
3706                 let mut inbound_drop_count = 0;
3707                 self.context.pending_inbound_htlcs.retain(|htlc| {
3708                         match htlc.state {
3709                                 InboundHTLCState::RemoteAnnounced(_) => {
3710                                         // They sent us an update_add_htlc but we never got the commitment_signed.
3711                                         // We'll tell them what commitment_signed we're expecting next and they'll drop
3712                                         // this HTLC accordingly
3713                                         inbound_drop_count += 1;
3714                                         false
3715                                 },
3716                                 InboundHTLCState::AwaitingRemoteRevokeToAnnounce(_)|InboundHTLCState::AwaitingAnnouncedRemoteRevoke(_) => {
3717                                         // We received a commitment_signed updating this HTLC and (at least hopefully)
3718                                         // sent a revoke_and_ack (which we can re-transmit) and have heard nothing
3719                                         // in response to it yet, so don't touch it.
3720                                         true
3721                                 },
3722                                 InboundHTLCState::Committed => true,
3723                                 InboundHTLCState::LocalRemoved(_) => {
3724                                         // We (hopefully) sent a commitment_signed updating this HTLC (which we can
3725                                         // re-transmit if needed) and they may have even sent a revoke_and_ack back
3726                                         // (that we missed). Keep this around for now and if they tell us they missed
3727                                         // the commitment_signed we can re-transmit the update then.
3728                                         true
3729                                 },
3730                         }
3731                 });
3732                 self.context.next_counterparty_htlc_id -= inbound_drop_count;
3733
3734                 if let Some((_, update_state)) = self.context.pending_update_fee {
3735                         if update_state == FeeUpdateState::RemoteAnnounced {
3736                                 debug_assert!(!self.context.is_outbound());
3737                                 self.context.pending_update_fee = None;
3738                         }
3739                 }
3740
3741                 for htlc in self.context.pending_outbound_htlcs.iter_mut() {
3742                         if let OutboundHTLCState::RemoteRemoved(_) = htlc.state {
3743                                 // They sent us an update to remove this but haven't yet sent the corresponding
3744                                 // commitment_signed, we need to move it back to Committed and they can re-send
3745                                 // the update upon reconnection.
3746                                 htlc.state = OutboundHTLCState::Committed;
3747                         }
3748                 }
3749
3750                 self.context.sent_message_awaiting_response = None;
3751
3752                 self.context.channel_state |= ChannelState::PeerDisconnected as u32;
3753                 log_trace!(logger, "Peer disconnection resulted in {} remote-announced HTLC drops on channel {}", inbound_drop_count, &self.context.channel_id());
3754                 Ok(())
3755         }
3756
3757         /// Indicates that a ChannelMonitor update is in progress and has not yet been fully persisted.
3758         /// This must be called before we return the [`ChannelMonitorUpdate`] back to the
3759         /// [`ChannelManager`], which will call [`Self::monitor_updating_restored`] once the monitor
3760         /// update completes (potentially immediately).
3761         /// The messages which were generated with the monitor update must *not* have been sent to the
3762         /// remote end, and must instead have been dropped. They will be regenerated when
3763         /// [`Self::monitor_updating_restored`] is called.
3764         ///
3765         /// [`ChannelManager`]: super::channelmanager::ChannelManager
3766         /// [`chain::Watch`]: crate::chain::Watch
3767         /// [`ChannelMonitorUpdateStatus::InProgress`]: crate::chain::ChannelMonitorUpdateStatus::InProgress
3768         fn monitor_updating_paused(&mut self, resend_raa: bool, resend_commitment: bool,
3769                 resend_channel_ready: bool, mut pending_forwards: Vec<(PendingHTLCInfo, u64)>,
3770                 mut pending_fails: Vec<(HTLCSource, PaymentHash, HTLCFailReason)>,
3771                 mut pending_finalized_claimed_htlcs: Vec<HTLCSource>
3772         ) {
3773                 self.context.monitor_pending_revoke_and_ack |= resend_raa;
3774                 self.context.monitor_pending_commitment_signed |= resend_commitment;
3775                 self.context.monitor_pending_channel_ready |= resend_channel_ready;
3776                 self.context.monitor_pending_forwards.append(&mut pending_forwards);
3777                 self.context.monitor_pending_failures.append(&mut pending_fails);
3778                 self.context.monitor_pending_finalized_fulfills.append(&mut pending_finalized_claimed_htlcs);
3779                 self.context.channel_state |= ChannelState::MonitorUpdateInProgress as u32;
3780         }
3781
3782         /// Indicates that the latest ChannelMonitor update has been committed by the client
3783         /// successfully and we should restore normal operation. Returns messages which should be sent
3784         /// to the remote side.
3785         pub fn monitor_updating_restored<L: Deref, NS: Deref>(
3786                 &mut self, logger: &L, node_signer: &NS, chain_hash: ChainHash,
3787                 user_config: &UserConfig, best_block_height: u32
3788         ) -> MonitorRestoreUpdates
3789         where
3790                 L::Target: Logger,
3791                 NS::Target: NodeSigner
3792         {
3793                 assert_eq!(self.context.channel_state & ChannelState::MonitorUpdateInProgress as u32, ChannelState::MonitorUpdateInProgress as u32);
3794                 self.context.channel_state &= !(ChannelState::MonitorUpdateInProgress as u32);
3795
3796                 // If we're past (or at) the FundingSent stage on an outbound channel, try to
3797                 // (re-)broadcast the funding transaction as we may have declined to broadcast it when we
3798                 // first received the funding_signed.
3799                 let mut funding_broadcastable =
3800                         if self.context.is_outbound() && self.context.channel_state & !STATE_FLAGS >= ChannelState::FundingSent as u32 && self.context.channel_state & ChannelState::WaitingForBatch as u32 == 0 {
3801                                 self.context.funding_transaction.take()
3802                         } else { None };
3803                 // That said, if the funding transaction is already confirmed (ie we're active with a
3804                 // minimum_depth over 0) don't bother re-broadcasting the confirmed funding tx.
3805                 if self.context.channel_state & !STATE_FLAGS >= ChannelState::ChannelReady as u32 && self.context.minimum_depth != Some(0) {
3806                         funding_broadcastable = None;
3807                 }
3808
3809                 // We will never broadcast the funding transaction when we're in MonitorUpdateInProgress
3810                 // (and we assume the user never directly broadcasts the funding transaction and waits for
3811                 // us to do it). Thus, we can only ever hit monitor_pending_channel_ready when we're
3812                 // * an inbound channel that failed to persist the monitor on funding_created and we got
3813                 //   the funding transaction confirmed before the monitor was persisted, or
3814                 // * a 0-conf channel and intended to send the channel_ready before any broadcast at all.
3815                 let channel_ready = if self.context.monitor_pending_channel_ready {
3816                         assert!(!self.context.is_outbound() || self.context.minimum_depth == Some(0),
3817                                 "Funding transaction broadcast by the local client before it should have - LDK didn't do it!");
3818                         self.context.monitor_pending_channel_ready = false;
3819                         let next_per_commitment_point = self.context.holder_signer.as_ref().get_per_commitment_point(self.context.cur_holder_commitment_transaction_number, &self.context.secp_ctx);
3820                         Some(msgs::ChannelReady {
3821                                 channel_id: self.context.channel_id(),
3822                                 next_per_commitment_point,
3823                                 short_channel_id_alias: Some(self.context.outbound_scid_alias),
3824                         })
3825                 } else { None };
3826
3827                 let announcement_sigs = self.get_announcement_sigs(node_signer, chain_hash, user_config, best_block_height, logger);
3828
3829                 let mut accepted_htlcs = Vec::new();
3830                 mem::swap(&mut accepted_htlcs, &mut self.context.monitor_pending_forwards);
3831                 let mut failed_htlcs = Vec::new();
3832                 mem::swap(&mut failed_htlcs, &mut self.context.monitor_pending_failures);
3833                 let mut finalized_claimed_htlcs = Vec::new();
3834                 mem::swap(&mut finalized_claimed_htlcs, &mut self.context.monitor_pending_finalized_fulfills);
3835
3836                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) != 0 {
3837                         self.context.monitor_pending_revoke_and_ack = false;
3838                         self.context.monitor_pending_commitment_signed = false;
3839                         return MonitorRestoreUpdates {
3840                                 raa: None, commitment_update: None, order: RAACommitmentOrder::RevokeAndACKFirst,
3841                                 accepted_htlcs, failed_htlcs, finalized_claimed_htlcs, funding_broadcastable, channel_ready, announcement_sigs
3842                         };
3843                 }
3844
3845                 let raa = if self.context.monitor_pending_revoke_and_ack {
3846                         Some(self.get_last_revoke_and_ack())
3847                 } else { None };
3848                 let commitment_update = if self.context.monitor_pending_commitment_signed {
3849                         self.mark_awaiting_response();
3850                         Some(self.get_last_commitment_update(logger))
3851                 } else { None };
3852
3853                 self.context.monitor_pending_revoke_and_ack = false;
3854                 self.context.monitor_pending_commitment_signed = false;
3855                 let order = self.context.resend_order.clone();
3856                 log_debug!(logger, "Restored monitor updating in channel {} resulting in {}{} commitment update and {} RAA, with {} first",
3857                         &self.context.channel_id(), if funding_broadcastable.is_some() { "a funding broadcastable, " } else { "" },
3858                         if commitment_update.is_some() { "a" } else { "no" }, if raa.is_some() { "an" } else { "no" },
3859                         match order { RAACommitmentOrder::CommitmentFirst => "commitment", RAACommitmentOrder::RevokeAndACKFirst => "RAA"});
3860                 MonitorRestoreUpdates {
3861                         raa, commitment_update, order, accepted_htlcs, failed_htlcs, finalized_claimed_htlcs, funding_broadcastable, channel_ready, announcement_sigs
3862                 }
3863         }
3864
3865         pub fn update_fee<F: Deref, L: Deref>(&mut self, fee_estimator: &LowerBoundedFeeEstimator<F>, msg: &msgs::UpdateFee, logger: &L) -> Result<(), ChannelError>
3866                 where F::Target: FeeEstimator, L::Target: Logger
3867         {
3868                 if self.context.is_outbound() {
3869                         return Err(ChannelError::Close("Non-funding remote tried to update channel fee".to_owned()));
3870                 }
3871                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
3872                         return Err(ChannelError::Close("Peer sent update_fee when we needed a channel_reestablish".to_owned()));
3873                 }
3874                 Channel::<SP>::check_remote_fee(&self.context.channel_type, fee_estimator, msg.feerate_per_kw, Some(self.context.feerate_per_kw), logger)?;
3875                 let feerate_over_dust_buffer = msg.feerate_per_kw > self.context.get_dust_buffer_feerate(None);
3876
3877                 self.context.pending_update_fee = Some((msg.feerate_per_kw, FeeUpdateState::RemoteAnnounced));
3878                 self.context.update_time_counter += 1;
3879                 // If the feerate has increased over the previous dust buffer (note that
3880                 // `get_dust_buffer_feerate` considers the `pending_update_fee` status), check that we
3881                 // won't be pushed over our dust exposure limit by the feerate increase.
3882                 if feerate_over_dust_buffer {
3883                         let inbound_stats = self.context.get_inbound_pending_htlc_stats(None);
3884                         let outbound_stats = self.context.get_outbound_pending_htlc_stats(None);
3885                         let holder_tx_dust_exposure = inbound_stats.on_holder_tx_dust_exposure_msat + outbound_stats.on_holder_tx_dust_exposure_msat;
3886                         let counterparty_tx_dust_exposure = inbound_stats.on_counterparty_tx_dust_exposure_msat + outbound_stats.on_counterparty_tx_dust_exposure_msat;
3887                         let max_dust_htlc_exposure_msat = self.context.get_max_dust_htlc_exposure_msat(fee_estimator);
3888                         if holder_tx_dust_exposure > max_dust_htlc_exposure_msat {
3889                                 return Err(ChannelError::Close(format!("Peer sent update_fee with a feerate ({}) which may over-expose us to dust-in-flight on our own transactions (totaling {} msat)",
3890                                         msg.feerate_per_kw, holder_tx_dust_exposure)));
3891                         }
3892                         if counterparty_tx_dust_exposure > max_dust_htlc_exposure_msat {
3893                                 return Err(ChannelError::Close(format!("Peer sent update_fee with a feerate ({}) which may over-expose us to dust-in-flight on our counterparty's transactions (totaling {} msat)",
3894                                         msg.feerate_per_kw, counterparty_tx_dust_exposure)));
3895                         }
3896                 }
3897                 Ok(())
3898         }
3899
3900         fn get_last_revoke_and_ack(&self) -> msgs::RevokeAndACK {
3901                 let next_per_commitment_point = self.context.holder_signer.as_ref().get_per_commitment_point(self.context.cur_holder_commitment_transaction_number, &self.context.secp_ctx);
3902                 let per_commitment_secret = self.context.holder_signer.as_ref().release_commitment_secret(self.context.cur_holder_commitment_transaction_number + 2);
3903                 msgs::RevokeAndACK {
3904                         channel_id: self.context.channel_id,
3905                         per_commitment_secret,
3906                         next_per_commitment_point,
3907                         #[cfg(taproot)]
3908                         next_local_nonce: None,
3909                 }
3910         }
3911
3912         fn get_last_commitment_update<L: Deref>(&self, logger: &L) -> msgs::CommitmentUpdate where L::Target: Logger {
3913                 let mut update_add_htlcs = Vec::new();
3914                 let mut update_fulfill_htlcs = Vec::new();
3915                 let mut update_fail_htlcs = Vec::new();
3916                 let mut update_fail_malformed_htlcs = Vec::new();
3917
3918                 for htlc in self.context.pending_outbound_htlcs.iter() {
3919                         if let &OutboundHTLCState::LocalAnnounced(ref onion_packet) = &htlc.state {
3920                                 update_add_htlcs.push(msgs::UpdateAddHTLC {
3921                                         channel_id: self.context.channel_id(),
3922                                         htlc_id: htlc.htlc_id,
3923                                         amount_msat: htlc.amount_msat,
3924                                         payment_hash: htlc.payment_hash,
3925                                         cltv_expiry: htlc.cltv_expiry,
3926                                         onion_routing_packet: (**onion_packet).clone(),
3927                                         skimmed_fee_msat: htlc.skimmed_fee_msat,
3928                                 });
3929                         }
3930                 }
3931
3932                 for htlc in self.context.pending_inbound_htlcs.iter() {
3933                         if let &InboundHTLCState::LocalRemoved(ref reason) = &htlc.state {
3934                                 match reason {
3935                                         &InboundHTLCRemovalReason::FailRelay(ref err_packet) => {
3936                                                 update_fail_htlcs.push(msgs::UpdateFailHTLC {
3937                                                         channel_id: self.context.channel_id(),
3938                                                         htlc_id: htlc.htlc_id,
3939                                                         reason: err_packet.clone()
3940                                                 });
3941                                         },
3942                                         &InboundHTLCRemovalReason::FailMalformed((ref sha256_of_onion, ref failure_code)) => {
3943                                                 update_fail_malformed_htlcs.push(msgs::UpdateFailMalformedHTLC {
3944                                                         channel_id: self.context.channel_id(),
3945                                                         htlc_id: htlc.htlc_id,
3946                                                         sha256_of_onion: sha256_of_onion.clone(),
3947                                                         failure_code: failure_code.clone(),
3948                                                 });
3949                                         },
3950                                         &InboundHTLCRemovalReason::Fulfill(ref payment_preimage) => {
3951                                                 update_fulfill_htlcs.push(msgs::UpdateFulfillHTLC {
3952                                                         channel_id: self.context.channel_id(),
3953                                                         htlc_id: htlc.htlc_id,
3954                                                         payment_preimage: payment_preimage.clone(),
3955                                                 });
3956                                         },
3957                                 }
3958                         }
3959                 }
3960
3961                 let update_fee = if self.context.is_outbound() && self.context.pending_update_fee.is_some() {
3962                         Some(msgs::UpdateFee {
3963                                 channel_id: self.context.channel_id(),
3964                                 feerate_per_kw: self.context.pending_update_fee.unwrap().0,
3965                         })
3966                 } else { None };
3967
3968                 log_trace!(logger, "Regenerated latest commitment update in channel {} with{} {} update_adds, {} update_fulfills, {} update_fails, and {} update_fail_malformeds",
3969                                 &self.context.channel_id(), if update_fee.is_some() { " update_fee," } else { "" },
3970                                 update_add_htlcs.len(), update_fulfill_htlcs.len(), update_fail_htlcs.len(), update_fail_malformed_htlcs.len());
3971                 msgs::CommitmentUpdate {
3972                         update_add_htlcs, update_fulfill_htlcs, update_fail_htlcs, update_fail_malformed_htlcs, update_fee,
3973                         commitment_signed: self.send_commitment_no_state_update(logger).expect("It looks like we failed to re-generate a commitment_signed we had previously sent?").0,
3974                 }
3975         }
3976
3977         /// Gets the `Shutdown` message we should send our peer on reconnect, if any.
3978         pub fn get_outbound_shutdown(&self) -> Option<msgs::Shutdown> {
3979                 if self.context.channel_state & (ChannelState::LocalShutdownSent as u32) != 0 {
3980                         assert!(self.context.shutdown_scriptpubkey.is_some());
3981                         Some(msgs::Shutdown {
3982                                 channel_id: self.context.channel_id,
3983                                 scriptpubkey: self.get_closing_scriptpubkey(),
3984                         })
3985                 } else { None }
3986         }
3987
3988         /// May panic if some calls other than message-handling calls (which will all Err immediately)
3989         /// have been called between remove_uncommitted_htlcs_and_mark_paused and this call.
3990         ///
3991         /// Some links printed in log lines are included here to check them during build (when run with
3992         /// `cargo doc --document-private-items`):
3993         /// [`super::channelmanager::ChannelManager::force_close_without_broadcasting_txn`] and
3994         /// [`super::channelmanager::ChannelManager::force_close_all_channels_without_broadcasting_txn`].
3995         pub fn channel_reestablish<L: Deref, NS: Deref>(
3996                 &mut self, msg: &msgs::ChannelReestablish, logger: &L, node_signer: &NS,
3997                 chain_hash: ChainHash, user_config: &UserConfig, best_block: &BestBlock
3998         ) -> Result<ReestablishResponses, ChannelError>
3999         where
4000                 L::Target: Logger,
4001                 NS::Target: NodeSigner
4002         {
4003                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == 0 {
4004                         // While BOLT 2 doesn't indicate explicitly we should error this channel here, it
4005                         // almost certainly indicates we are going to end up out-of-sync in some way, so we
4006                         // just close here instead of trying to recover.
4007                         return Err(ChannelError::Close("Peer sent a loose channel_reestablish not after reconnect".to_owned()));
4008                 }
4009
4010                 if msg.next_local_commitment_number >= INITIAL_COMMITMENT_NUMBER || msg.next_remote_commitment_number >= INITIAL_COMMITMENT_NUMBER ||
4011                         msg.next_local_commitment_number == 0 {
4012                         return Err(ChannelError::Close("Peer sent an invalid channel_reestablish to force close in a non-standard way".to_owned()));
4013                 }
4014
4015                 if msg.next_remote_commitment_number > 0 {
4016                         let expected_point = self.context.holder_signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER - msg.next_remote_commitment_number + 1, &self.context.secp_ctx);
4017                         let given_secret = SecretKey::from_slice(&msg.your_last_per_commitment_secret)
4018                                 .map_err(|_| ChannelError::Close("Peer sent a garbage channel_reestablish with unparseable secret key".to_owned()))?;
4019                         if expected_point != PublicKey::from_secret_key(&self.context.secp_ctx, &given_secret) {
4020                                 return Err(ChannelError::Close("Peer sent a garbage channel_reestablish with secret key not matching the commitment height provided".to_owned()));
4021                         }
4022                         if msg.next_remote_commitment_number > INITIAL_COMMITMENT_NUMBER - self.context.cur_holder_commitment_transaction_number {
4023                                 macro_rules! log_and_panic {
4024                                         ($err_msg: expr) => {
4025                                                 log_error!(logger, $err_msg, &self.context.channel_id, log_pubkey!(self.context.counterparty_node_id));
4026                                                 panic!($err_msg, &self.context.channel_id, log_pubkey!(self.context.counterparty_node_id));
4027                                         }
4028                                 }
4029                                 log_and_panic!("We have fallen behind - we have received proof that if we broadcast our counterparty is going to claim all our funds.\n\
4030                                         This implies you have restarted with lost ChannelMonitor and ChannelManager state, the first of which is a violation of the LDK chain::Watch requirements.\n\
4031                                         More specifically, this means you have a bug in your implementation that can cause loss of funds, or you are running with an old backup, which is unsafe.\n\
4032                                         If you have restored from an old backup and wish to force-close channels and return to operation, you should start up, call\n\
4033                                         ChannelManager::force_close_without_broadcasting_txn on channel {} with counterparty {} or\n\
4034                                         ChannelManager::force_close_all_channels_without_broadcasting_txn, then reconnect to peer(s).\n\
4035                                         Note that due to a long-standing bug in lnd you may have to reach out to peers running lnd-based nodes to ask them to manually force-close channels\n\
4036                                         See https://github.com/lightningdevkit/rust-lightning/issues/1565 for more info.");
4037                         }
4038                 }
4039
4040                 // Before we change the state of the channel, we check if the peer is sending a very old
4041                 // commitment transaction number, if yes we send a warning message.
4042                 let our_commitment_transaction = INITIAL_COMMITMENT_NUMBER - self.context.cur_holder_commitment_transaction_number - 1;
4043                 if  msg.next_remote_commitment_number + 1 < our_commitment_transaction {
4044                         return Err(
4045                                 ChannelError::Warn(format!("Peer attempted to reestablish channel with a very old local commitment transaction: {} (received) vs {} (expected)", msg.next_remote_commitment_number, our_commitment_transaction))
4046                         );
4047                 }
4048
4049                 // Go ahead and unmark PeerDisconnected as various calls we may make check for it (and all
4050                 // remaining cases either succeed or ErrorMessage-fail).
4051                 self.context.channel_state &= !(ChannelState::PeerDisconnected as u32);
4052                 self.context.sent_message_awaiting_response = None;
4053
4054                 let shutdown_msg = self.get_outbound_shutdown();
4055
4056                 let announcement_sigs = self.get_announcement_sigs(node_signer, chain_hash, user_config, best_block.height(), logger);
4057
4058                 if self.context.channel_state & (ChannelState::FundingSent as u32) == ChannelState::FundingSent as u32 {
4059                         // If we're waiting on a monitor update, we shouldn't re-send any channel_ready's.
4060                         if self.context.channel_state & (ChannelState::OurChannelReady as u32) == 0 ||
4061                                         self.context.channel_state & (ChannelState::MonitorUpdateInProgress as u32) != 0 {
4062                                 if msg.next_remote_commitment_number != 0 {
4063                                         return Err(ChannelError::Close("Peer claimed they saw a revoke_and_ack but we haven't sent channel_ready yet".to_owned()));
4064                                 }
4065                                 // Short circuit the whole handler as there is nothing we can resend them
4066                                 return Ok(ReestablishResponses {
4067                                         channel_ready: None,
4068                                         raa: None, commitment_update: None,
4069                                         order: RAACommitmentOrder::CommitmentFirst,
4070                                         shutdown_msg, announcement_sigs,
4071                                 });
4072                         }
4073
4074                         // We have OurChannelReady set!
4075                         let next_per_commitment_point = self.context.holder_signer.as_ref().get_per_commitment_point(self.context.cur_holder_commitment_transaction_number, &self.context.secp_ctx);
4076                         return Ok(ReestablishResponses {
4077                                 channel_ready: Some(msgs::ChannelReady {
4078                                         channel_id: self.context.channel_id(),
4079                                         next_per_commitment_point,
4080                                         short_channel_id_alias: Some(self.context.outbound_scid_alias),
4081                                 }),
4082                                 raa: None, commitment_update: None,
4083                                 order: RAACommitmentOrder::CommitmentFirst,
4084                                 shutdown_msg, announcement_sigs,
4085                         });
4086                 }
4087
4088                 let required_revoke = if msg.next_remote_commitment_number + 1 == INITIAL_COMMITMENT_NUMBER - self.context.cur_holder_commitment_transaction_number {
4089                         // Remote isn't waiting on any RevokeAndACK from us!
4090                         // Note that if we need to repeat our ChannelReady we'll do that in the next if block.
4091                         None
4092                 } else if msg.next_remote_commitment_number + 1 == (INITIAL_COMMITMENT_NUMBER - 1) - self.context.cur_holder_commitment_transaction_number {
4093                         if self.context.channel_state & (ChannelState::MonitorUpdateInProgress as u32) != 0 {
4094                                 self.context.monitor_pending_revoke_and_ack = true;
4095                                 None
4096                         } else {
4097                                 Some(self.get_last_revoke_and_ack())
4098                         }
4099                 } else {
4100                         return Err(ChannelError::Close("Peer attempted to reestablish channel with a very old local commitment transaction".to_owned()));
4101                 };
4102
4103                 // We increment cur_counterparty_commitment_transaction_number only upon receipt of
4104                 // revoke_and_ack, not on sending commitment_signed, so we add one if have
4105                 // AwaitingRemoteRevoke set, which indicates we sent a commitment_signed but haven't gotten
4106                 // the corresponding revoke_and_ack back yet.
4107                 let is_awaiting_remote_revoke = self.context.channel_state & ChannelState::AwaitingRemoteRevoke as u32 != 0;
4108                 if is_awaiting_remote_revoke && !self.is_awaiting_monitor_update() {
4109                         self.mark_awaiting_response();
4110                 }
4111                 let next_counterparty_commitment_number = INITIAL_COMMITMENT_NUMBER - self.context.cur_counterparty_commitment_transaction_number + if is_awaiting_remote_revoke { 1 } else { 0 };
4112
4113                 let channel_ready = if msg.next_local_commitment_number == 1 && INITIAL_COMMITMENT_NUMBER - self.context.cur_holder_commitment_transaction_number == 1 {
4114                         // We should never have to worry about MonitorUpdateInProgress resending ChannelReady
4115                         let next_per_commitment_point = self.context.holder_signer.as_ref().get_per_commitment_point(self.context.cur_holder_commitment_transaction_number, &self.context.secp_ctx);
4116                         Some(msgs::ChannelReady {
4117                                 channel_id: self.context.channel_id(),
4118                                 next_per_commitment_point,
4119                                 short_channel_id_alias: Some(self.context.outbound_scid_alias),
4120                         })
4121                 } else { None };
4122
4123                 if msg.next_local_commitment_number == next_counterparty_commitment_number {
4124                         if required_revoke.is_some() {
4125                                 log_debug!(logger, "Reconnected channel {} with only lost outbound RAA", &self.context.channel_id());
4126                         } else {
4127                                 log_debug!(logger, "Reconnected channel {} with no loss", &self.context.channel_id());
4128                         }
4129
4130                         Ok(ReestablishResponses {
4131                                 channel_ready, shutdown_msg, announcement_sigs,
4132                                 raa: required_revoke,
4133                                 commitment_update: None,
4134                                 order: self.context.resend_order.clone(),
4135                         })
4136                 } else if msg.next_local_commitment_number == next_counterparty_commitment_number - 1 {
4137                         if required_revoke.is_some() {
4138                                 log_debug!(logger, "Reconnected channel {} with lost outbound RAA and lost remote commitment tx", &self.context.channel_id());
4139                         } else {
4140                                 log_debug!(logger, "Reconnected channel {} with only lost remote commitment tx", &self.context.channel_id());
4141                         }
4142
4143                         if self.context.channel_state & (ChannelState::MonitorUpdateInProgress as u32) != 0 {
4144                                 self.context.monitor_pending_commitment_signed = true;
4145                                 Ok(ReestablishResponses {
4146                                         channel_ready, shutdown_msg, announcement_sigs,
4147                                         commitment_update: None, raa: None,
4148                                         order: self.context.resend_order.clone(),
4149                                 })
4150                         } else {
4151                                 Ok(ReestablishResponses {
4152                                         channel_ready, shutdown_msg, announcement_sigs,
4153                                         raa: required_revoke,
4154                                         commitment_update: Some(self.get_last_commitment_update(logger)),
4155                                         order: self.context.resend_order.clone(),
4156                                 })
4157                         }
4158                 } else {
4159                         Err(ChannelError::Close("Peer attempted to reestablish channel with a very old remote commitment transaction".to_owned()))
4160                 }
4161         }
4162
4163         /// Calculates and returns our minimum and maximum closing transaction fee amounts, in whole
4164         /// satoshis. The amounts remain consistent unless a peer disconnects/reconnects or we restart,
4165         /// at which point they will be recalculated.
4166         fn calculate_closing_fee_limits<F: Deref>(&mut self, fee_estimator: &LowerBoundedFeeEstimator<F>)
4167                 -> (u64, u64)
4168                 where F::Target: FeeEstimator
4169         {
4170                 if let Some((min, max)) = self.context.closing_fee_limits { return (min, max); }
4171
4172                 // Propose a range from our current Background feerate to our Normal feerate plus our
4173                 // force_close_avoidance_max_fee_satoshis.
4174                 // If we fail to come to consensus, we'll have to force-close.
4175                 let mut proposed_feerate = fee_estimator.bounded_sat_per_1000_weight(ConfirmationTarget::ChannelCloseMinimum);
4176                 // Use NonAnchorChannelFee because this should be an estimate for a channel close
4177                 // that we don't expect to need fee bumping
4178                 let normal_feerate = fee_estimator.bounded_sat_per_1000_weight(ConfirmationTarget::NonAnchorChannelFee);
4179                 let mut proposed_max_feerate = if self.context.is_outbound() { normal_feerate } else { u32::max_value() };
4180
4181                 // The spec requires that (when the channel does not have anchors) we only send absolute
4182                 // channel fees no greater than the absolute channel fee on the current commitment
4183                 // transaction. It's unclear *which* commitment transaction this refers to, and there isn't
4184                 // very good reason to apply such a limit in any case. We don't bother doing so, risking
4185                 // some force-closure by old nodes, but we wanted to close the channel anyway.
4186
4187                 if let Some(target_feerate) = self.context.target_closing_feerate_sats_per_kw {
4188                         let min_feerate = if self.context.is_outbound() { target_feerate } else { cmp::min(self.context.feerate_per_kw, target_feerate) };
4189                         proposed_feerate = cmp::max(proposed_feerate, min_feerate);
4190                         proposed_max_feerate = cmp::max(proposed_max_feerate, min_feerate);
4191                 }
4192
4193                 // Note that technically we could end up with a lower minimum fee if one sides' balance is
4194                 // below our dust limit, causing the output to disappear. We don't bother handling this
4195                 // case, however, as this should only happen if a channel is closed before any (material)
4196                 // payments have been made on it. This may cause slight fee overpayment and/or failure to
4197                 // come to consensus with our counterparty on appropriate fees, however it should be a
4198                 // relatively rare case. We can revisit this later, though note that in order to determine
4199                 // if the funders' output is dust we have to know the absolute fee we're going to use.
4200                 let tx_weight = self.get_closing_transaction_weight(Some(&self.get_closing_scriptpubkey()), Some(self.context.counterparty_shutdown_scriptpubkey.as_ref().unwrap()));
4201                 let proposed_total_fee_satoshis = proposed_feerate as u64 * tx_weight / 1000;
4202                 let proposed_max_total_fee_satoshis = if self.context.is_outbound() {
4203                                 // We always add force_close_avoidance_max_fee_satoshis to our normal
4204                                 // feerate-calculated fee, but allow the max to be overridden if we're using a
4205                                 // target feerate-calculated fee.
4206                                 cmp::max(normal_feerate as u64 * tx_weight / 1000 + self.context.config.options.force_close_avoidance_max_fee_satoshis,
4207                                         proposed_max_feerate as u64 * tx_weight / 1000)
4208                         } else {
4209                                 self.context.channel_value_satoshis - (self.context.value_to_self_msat + 999) / 1000
4210                         };
4211
4212                 self.context.closing_fee_limits = Some((proposed_total_fee_satoshis, proposed_max_total_fee_satoshis));
4213                 self.context.closing_fee_limits.clone().unwrap()
4214         }
4215
4216         /// Returns true if we're ready to commence the closing_signed negotiation phase. This is true
4217         /// after both sides have exchanged a `shutdown` message and all HTLCs have been drained. At
4218         /// this point if we're the funder we should send the initial closing_signed, and in any case
4219         /// shutdown should complete within a reasonable timeframe.
4220         fn closing_negotiation_ready(&self) -> bool {
4221                 self.context.closing_negotiation_ready()
4222         }
4223
4224         /// Checks if the closing_signed negotiation is making appropriate progress, possibly returning
4225         /// an Err if no progress is being made and the channel should be force-closed instead.
4226         /// Should be called on a one-minute timer.
4227         pub fn timer_check_closing_negotiation_progress(&mut self) -> Result<(), ChannelError> {
4228                 if self.closing_negotiation_ready() {
4229                         if self.context.closing_signed_in_flight {
4230                                 return Err(ChannelError::Close("closing_signed negotiation failed to finish within two timer ticks".to_owned()));
4231                         } else {
4232                                 self.context.closing_signed_in_flight = true;
4233                         }
4234                 }
4235                 Ok(())
4236         }
4237
4238         pub fn maybe_propose_closing_signed<F: Deref, L: Deref>(
4239                 &mut self, fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L)
4240                 -> Result<(Option<msgs::ClosingSigned>, Option<Transaction>, Option<ShutdownResult>), ChannelError>
4241                 where F::Target: FeeEstimator, L::Target: Logger
4242         {
4243                 if self.context.last_sent_closing_fee.is_some() || !self.closing_negotiation_ready() {
4244                         return Ok((None, None, None));
4245                 }
4246
4247                 if !self.context.is_outbound() {
4248                         if let Some(msg) = &self.context.pending_counterparty_closing_signed.take() {
4249                                 return self.closing_signed(fee_estimator, &msg);
4250                         }
4251                         return Ok((None, None, None));
4252                 }
4253
4254                 let (our_min_fee, our_max_fee) = self.calculate_closing_fee_limits(fee_estimator);
4255
4256                 assert!(self.context.shutdown_scriptpubkey.is_some());
4257                 let (closing_tx, total_fee_satoshis) = self.build_closing_transaction(our_min_fee, false);
4258                 log_trace!(logger, "Proposing initial closing_signed for our counterparty with a fee range of {}-{} sat (with initial proposal {} sats)",
4259                         our_min_fee, our_max_fee, total_fee_satoshis);
4260
4261                 match &self.context.holder_signer {
4262                         ChannelSignerType::Ecdsa(ecdsa) => {
4263                                 let sig = ecdsa
4264                                         .sign_closing_transaction(&closing_tx, &self.context.secp_ctx)
4265                                         .map_err(|()| ChannelError::Close("Failed to get signature for closing transaction.".to_owned()))?;
4266
4267                                 self.context.last_sent_closing_fee = Some((total_fee_satoshis, sig.clone()));
4268                                 Ok((Some(msgs::ClosingSigned {
4269                                         channel_id: self.context.channel_id,
4270                                         fee_satoshis: total_fee_satoshis,
4271                                         signature: sig,
4272                                         fee_range: Some(msgs::ClosingSignedFeeRange {
4273                                                 min_fee_satoshis: our_min_fee,
4274                                                 max_fee_satoshis: our_max_fee,
4275                                         }),
4276                                 }), None, None))
4277                         }
4278                 }
4279         }
4280
4281         // Marks a channel as waiting for a response from the counterparty. If it's not received
4282         // [`DISCONNECT_PEER_AWAITING_RESPONSE_TICKS`] after sending our own to them, then we'll attempt
4283         // a reconnection.
4284         fn mark_awaiting_response(&mut self) {
4285                 self.context.sent_message_awaiting_response = Some(0);
4286         }
4287
4288         /// Determines whether we should disconnect the counterparty due to not receiving a response
4289         /// within our expected timeframe.
4290         ///
4291         /// This should be called on every [`super::channelmanager::ChannelManager::timer_tick_occurred`].
4292         pub fn should_disconnect_peer_awaiting_response(&mut self) -> bool {
4293                 let ticks_elapsed = if let Some(ticks_elapsed) = self.context.sent_message_awaiting_response.as_mut() {
4294                         ticks_elapsed
4295                 } else {
4296                         // Don't disconnect when we're not waiting on a response.
4297                         return false;
4298                 };
4299                 *ticks_elapsed += 1;
4300                 *ticks_elapsed >= DISCONNECT_PEER_AWAITING_RESPONSE_TICKS
4301         }
4302
4303         pub fn shutdown(
4304                 &mut self, signer_provider: &SP, their_features: &InitFeatures, msg: &msgs::Shutdown
4305         ) -> Result<(Option<msgs::Shutdown>, Option<ChannelMonitorUpdate>, Vec<(HTLCSource, PaymentHash)>), ChannelError>
4306         {
4307                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
4308                         return Err(ChannelError::Close("Peer sent shutdown when we needed a channel_reestablish".to_owned()));
4309                 }
4310                 if self.context.channel_state & !STATE_FLAGS < ChannelState::FundingSent as u32 {
4311                         // Spec says we should fail the connection, not the channel, but that's nonsense, there
4312                         // are plenty of reasons you may want to fail a channel pre-funding, and spec says you
4313                         // can do that via error message without getting a connection fail anyway...
4314                         return Err(ChannelError::Close("Peer sent shutdown pre-funding generation".to_owned()));
4315                 }
4316                 for htlc in self.context.pending_inbound_htlcs.iter() {
4317                         if let InboundHTLCState::RemoteAnnounced(_) = htlc.state {
4318                                 return Err(ChannelError::Close("Got shutdown with remote pending HTLCs".to_owned()));
4319                         }
4320                 }
4321                 assert_eq!(self.context.channel_state & ChannelState::ShutdownComplete as u32, 0);
4322
4323                 if !script::is_bolt2_compliant(&msg.scriptpubkey, their_features) {
4324                         return Err(ChannelError::Warn(format!("Got a nonstandard scriptpubkey ({}) from remote peer", msg.scriptpubkey.to_bytes().to_hex())));
4325                 }
4326
4327                 if self.context.counterparty_shutdown_scriptpubkey.is_some() {
4328                         if Some(&msg.scriptpubkey) != self.context.counterparty_shutdown_scriptpubkey.as_ref() {
4329                                 return Err(ChannelError::Warn(format!("Got shutdown request with a scriptpubkey ({}) which did not match their previous scriptpubkey.", msg.scriptpubkey.to_bytes().to_hex())));
4330                         }
4331                 } else {
4332                         self.context.counterparty_shutdown_scriptpubkey = Some(msg.scriptpubkey.clone());
4333                 }
4334
4335                 // If we have any LocalAnnounced updates we'll probably just get back an update_fail_htlc
4336                 // immediately after the commitment dance, but we can send a Shutdown because we won't send
4337                 // any further commitment updates after we set LocalShutdownSent.
4338                 let send_shutdown = (self.context.channel_state & ChannelState::LocalShutdownSent as u32) != ChannelState::LocalShutdownSent as u32;
4339
4340                 let update_shutdown_script = match self.context.shutdown_scriptpubkey {
4341                         Some(_) => false,
4342                         None => {
4343                                 assert!(send_shutdown);
4344                                 let shutdown_scriptpubkey = match signer_provider.get_shutdown_scriptpubkey() {
4345                                         Ok(scriptpubkey) => scriptpubkey,
4346                                         Err(_) => return Err(ChannelError::Close("Failed to get shutdown scriptpubkey".to_owned())),
4347                                 };
4348                                 if !shutdown_scriptpubkey.is_compatible(their_features) {
4349                                         return Err(ChannelError::Close(format!("Provided a scriptpubkey format not accepted by peer: {}", shutdown_scriptpubkey)));
4350                                 }
4351                                 self.context.shutdown_scriptpubkey = Some(shutdown_scriptpubkey);
4352                                 true
4353                         },
4354                 };
4355
4356                 // From here on out, we may not fail!
4357
4358                 self.context.channel_state |= ChannelState::RemoteShutdownSent as u32;
4359                 self.context.update_time_counter += 1;
4360
4361                 let monitor_update = if update_shutdown_script {
4362                         self.context.latest_monitor_update_id += 1;
4363                         let monitor_update = ChannelMonitorUpdate {
4364                                 update_id: self.context.latest_monitor_update_id,
4365                                 updates: vec![ChannelMonitorUpdateStep::ShutdownScript {
4366                                         scriptpubkey: self.get_closing_scriptpubkey(),
4367                                 }],
4368                         };
4369                         self.monitor_updating_paused(false, false, false, Vec::new(), Vec::new(), Vec::new());
4370                         self.push_ret_blockable_mon_update(monitor_update)
4371                 } else { None };
4372                 let shutdown = if send_shutdown {
4373                         Some(msgs::Shutdown {
4374                                 channel_id: self.context.channel_id,
4375                                 scriptpubkey: self.get_closing_scriptpubkey(),
4376                         })
4377                 } else { None };
4378
4379                 // We can't send our shutdown until we've committed all of our pending HTLCs, but the
4380                 // remote side is unlikely to accept any new HTLCs, so we go ahead and "free" any holding
4381                 // cell HTLCs and return them to fail the payment.
4382                 self.context.holding_cell_update_fee = None;
4383                 let mut dropped_outbound_htlcs = Vec::with_capacity(self.context.holding_cell_htlc_updates.len());
4384                 self.context.holding_cell_htlc_updates.retain(|htlc_update| {
4385                         match htlc_update {
4386                                 &HTLCUpdateAwaitingACK::AddHTLC { ref payment_hash, ref source, .. } => {
4387                                         dropped_outbound_htlcs.push((source.clone(), payment_hash.clone()));
4388                                         false
4389                                 },
4390                                 _ => true
4391                         }
4392                 });
4393
4394                 self.context.channel_state |= ChannelState::LocalShutdownSent as u32;
4395                 self.context.update_time_counter += 1;
4396
4397                 Ok((shutdown, monitor_update, dropped_outbound_htlcs))
4398         }
4399
4400         fn build_signed_closing_transaction(&self, closing_tx: &ClosingTransaction, counterparty_sig: &Signature, sig: &Signature) -> Transaction {
4401                 let mut tx = closing_tx.trust().built_transaction().clone();
4402
4403                 tx.input[0].witness.push(Vec::new()); // First is the multisig dummy
4404
4405                 let funding_key = self.context.get_holder_pubkeys().funding_pubkey.serialize();
4406                 let counterparty_funding_key = self.context.counterparty_funding_pubkey().serialize();
4407                 let mut holder_sig = sig.serialize_der().to_vec();
4408                 holder_sig.push(EcdsaSighashType::All as u8);
4409                 let mut cp_sig = counterparty_sig.serialize_der().to_vec();
4410                 cp_sig.push(EcdsaSighashType::All as u8);
4411                 if funding_key[..] < counterparty_funding_key[..] {
4412                         tx.input[0].witness.push(holder_sig);
4413                         tx.input[0].witness.push(cp_sig);
4414                 } else {
4415                         tx.input[0].witness.push(cp_sig);
4416                         tx.input[0].witness.push(holder_sig);
4417                 }
4418
4419                 tx.input[0].witness.push(self.context.get_funding_redeemscript().into_bytes());
4420                 tx
4421         }
4422
4423         pub fn closing_signed<F: Deref>(
4424                 &mut self, fee_estimator: &LowerBoundedFeeEstimator<F>, msg: &msgs::ClosingSigned)
4425                 -> Result<(Option<msgs::ClosingSigned>, Option<Transaction>, Option<ShutdownResult>), ChannelError>
4426                 where F::Target: FeeEstimator
4427         {
4428                 if self.context.channel_state & BOTH_SIDES_SHUTDOWN_MASK != BOTH_SIDES_SHUTDOWN_MASK {
4429                         return Err(ChannelError::Close("Remote end sent us a closing_signed before both sides provided a shutdown".to_owned()));
4430                 }
4431                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
4432                         return Err(ChannelError::Close("Peer sent closing_signed when we needed a channel_reestablish".to_owned()));
4433                 }
4434                 if !self.context.pending_inbound_htlcs.is_empty() || !self.context.pending_outbound_htlcs.is_empty() {
4435                         return Err(ChannelError::Close("Remote end sent us a closing_signed while there were still pending HTLCs".to_owned()));
4436                 }
4437                 if msg.fee_satoshis > TOTAL_BITCOIN_SUPPLY_SATOSHIS { // this is required to stop potential overflow in build_closing_transaction
4438                         return Err(ChannelError::Close("Remote tried to send us a closing tx with > 21 million BTC fee".to_owned()));
4439                 }
4440
4441                 if self.context.is_outbound() && self.context.last_sent_closing_fee.is_none() {
4442                         return Err(ChannelError::Close("Remote tried to send a closing_signed when we were supposed to propose the first one".to_owned()));
4443                 }
4444
4445                 if self.context.channel_state & ChannelState::MonitorUpdateInProgress as u32 != 0 {
4446                         self.context.pending_counterparty_closing_signed = Some(msg.clone());
4447                         return Ok((None, None, None));
4448                 }
4449
4450                 let funding_redeemscript = self.context.get_funding_redeemscript();
4451                 let (mut closing_tx, used_total_fee) = self.build_closing_transaction(msg.fee_satoshis, false);
4452                 if used_total_fee != msg.fee_satoshis {
4453                         return Err(ChannelError::Close(format!("Remote sent us a closing_signed with a fee other than the value they can claim. Fee in message: {}. Actual closing tx fee: {}", msg.fee_satoshis, used_total_fee)));
4454                 }
4455                 let sighash = closing_tx.trust().get_sighash_all(&funding_redeemscript, self.context.channel_value_satoshis);
4456
4457                 match self.context.secp_ctx.verify_ecdsa(&sighash, &msg.signature, &self.context.get_counterparty_pubkeys().funding_pubkey) {
4458                         Ok(_) => {},
4459                         Err(_e) => {
4460                                 // The remote end may have decided to revoke their output due to inconsistent dust
4461                                 // limits, so check for that case by re-checking the signature here.
4462                                 closing_tx = self.build_closing_transaction(msg.fee_satoshis, true).0;
4463                                 let sighash = closing_tx.trust().get_sighash_all(&funding_redeemscript, self.context.channel_value_satoshis);
4464                                 secp_check!(self.context.secp_ctx.verify_ecdsa(&sighash, &msg.signature, self.context.counterparty_funding_pubkey()), "Invalid closing tx signature from peer".to_owned());
4465                         },
4466                 };
4467
4468                 for outp in closing_tx.trust().built_transaction().output.iter() {
4469                         if !outp.script_pubkey.is_witness_program() && outp.value < MAX_STD_OUTPUT_DUST_LIMIT_SATOSHIS {
4470                                 return Err(ChannelError::Close("Remote sent us a closing_signed with a dust output. Always use segwit closing scripts!".to_owned()));
4471                         }
4472                 }
4473
4474                 assert!(self.context.shutdown_scriptpubkey.is_some());
4475                 if let Some((last_fee, sig)) = self.context.last_sent_closing_fee {
4476                         if last_fee == msg.fee_satoshis {
4477                                 let shutdown_result = ShutdownResult {
4478                                         monitor_update: None,
4479                                         dropped_outbound_htlcs: Vec::new(),
4480                                         unbroadcasted_batch_funding_txid: self.context.unbroadcasted_batch_funding_txid(),
4481                                 };
4482                                 let tx = self.build_signed_closing_transaction(&mut closing_tx, &msg.signature, &sig);
4483                                 self.context.channel_state = ChannelState::ShutdownComplete as u32;
4484                                 self.context.update_time_counter += 1;
4485                                 return Ok((None, Some(tx), Some(shutdown_result)));
4486                         }
4487                 }
4488
4489                 let (our_min_fee, our_max_fee) = self.calculate_closing_fee_limits(fee_estimator);
4490
4491                 macro_rules! propose_fee {
4492                         ($new_fee: expr) => {
4493                                 let (closing_tx, used_fee) = if $new_fee == msg.fee_satoshis {
4494                                         (closing_tx, $new_fee)
4495                                 } else {
4496                                         self.build_closing_transaction($new_fee, false)
4497                                 };
4498
4499                                 return match &self.context.holder_signer {
4500                                         ChannelSignerType::Ecdsa(ecdsa) => {
4501                                                 let sig = ecdsa
4502                                                         .sign_closing_transaction(&closing_tx, &self.context.secp_ctx)
4503                                                         .map_err(|_| ChannelError::Close("External signer refused to sign closing transaction".to_owned()))?;
4504                                                 let (signed_tx, shutdown_result) = if $new_fee == msg.fee_satoshis {
4505                                                         let shutdown_result = ShutdownResult {
4506                                                                 monitor_update: None,
4507                                                                 dropped_outbound_htlcs: Vec::new(),
4508                                                                 unbroadcasted_batch_funding_txid: self.context.unbroadcasted_batch_funding_txid(),
4509                                                         };
4510                                                         self.context.channel_state = ChannelState::ShutdownComplete as u32;
4511                                                         self.context.update_time_counter += 1;
4512                                                         let tx = self.build_signed_closing_transaction(&closing_tx, &msg.signature, &sig);
4513                                                         (Some(tx), Some(shutdown_result))
4514                                                 } else {
4515                                                         (None, None)
4516                                                 };
4517
4518                                                 self.context.last_sent_closing_fee = Some((used_fee, sig.clone()));
4519                                                 Ok((Some(msgs::ClosingSigned {
4520                                                         channel_id: self.context.channel_id,
4521                                                         fee_satoshis: used_fee,
4522                                                         signature: sig,
4523                                                         fee_range: Some(msgs::ClosingSignedFeeRange {
4524                                                                 min_fee_satoshis: our_min_fee,
4525                                                                 max_fee_satoshis: our_max_fee,
4526                                                         }),
4527                                                 }), signed_tx, shutdown_result))
4528                                         }
4529                                 }
4530                         }
4531                 }
4532
4533                 if let Some(msgs::ClosingSignedFeeRange { min_fee_satoshis, max_fee_satoshis }) = msg.fee_range {
4534                         if msg.fee_satoshis < min_fee_satoshis || msg.fee_satoshis > max_fee_satoshis {
4535                                 return Err(ChannelError::Close(format!("Peer sent a bogus closing_signed - suggested fee of {} sat was not in their desired range of {} sat - {} sat", msg.fee_satoshis, min_fee_satoshis, max_fee_satoshis)));
4536                         }
4537                         if max_fee_satoshis < our_min_fee {
4538                                 return Err(ChannelError::Warn(format!("Unable to come to consensus about closing feerate, remote's max fee ({} sat) was smaller than our min fee ({} sat)", max_fee_satoshis, our_min_fee)));
4539                         }
4540                         if min_fee_satoshis > our_max_fee {
4541                                 return Err(ChannelError::Warn(format!("Unable to come to consensus about closing feerate, remote's min fee ({} sat) was greater than our max fee ({} sat)", min_fee_satoshis, our_max_fee)));
4542                         }
4543
4544                         if !self.context.is_outbound() {
4545                                 // They have to pay, so pick the highest fee in the overlapping range.
4546                                 // We should never set an upper bound aside from their full balance
4547                                 debug_assert_eq!(our_max_fee, self.context.channel_value_satoshis - (self.context.value_to_self_msat + 999) / 1000);
4548                                 propose_fee!(cmp::min(max_fee_satoshis, our_max_fee));
4549                         } else {
4550                                 if msg.fee_satoshis < our_min_fee || msg.fee_satoshis > our_max_fee {
4551                                         return Err(ChannelError::Close(format!("Peer sent a bogus closing_signed - suggested fee of {} sat was not in our desired range of {} sat - {} sat after we informed them of our range.",
4552                                                 msg.fee_satoshis, our_min_fee, our_max_fee)));
4553                                 }
4554                                 // The proposed fee is in our acceptable range, accept it and broadcast!
4555                                 propose_fee!(msg.fee_satoshis);
4556                         }
4557                 } else {
4558                         // Old fee style negotiation. We don't bother to enforce whether they are complying
4559                         // with the "making progress" requirements, we just comply and hope for the best.
4560                         if let Some((last_fee, _)) = self.context.last_sent_closing_fee {
4561                                 if msg.fee_satoshis > last_fee {
4562                                         if msg.fee_satoshis < our_max_fee {
4563                                                 propose_fee!(msg.fee_satoshis);
4564                                         } else if last_fee < our_max_fee {
4565                                                 propose_fee!(our_max_fee);
4566                                         } else {
4567                                                 return Err(ChannelError::Close(format!("Unable to come to consensus about closing feerate, remote wants something ({} sat) higher than our max fee ({} sat)", msg.fee_satoshis, our_max_fee)));
4568                                         }
4569                                 } else {
4570                                         if msg.fee_satoshis > our_min_fee {
4571                                                 propose_fee!(msg.fee_satoshis);
4572                                         } else if last_fee > our_min_fee {
4573                                                 propose_fee!(our_min_fee);
4574                                         } else {
4575                                                 return Err(ChannelError::Close(format!("Unable to come to consensus about closing feerate, remote wants something ({} sat) lower than our min fee ({} sat)", msg.fee_satoshis, our_min_fee)));
4576                                         }
4577                                 }
4578                         } else {
4579                                 if msg.fee_satoshis < our_min_fee {
4580                                         propose_fee!(our_min_fee);
4581                                 } else if msg.fee_satoshis > our_max_fee {
4582                                         propose_fee!(our_max_fee);
4583                                 } else {
4584                                         propose_fee!(msg.fee_satoshis);
4585                                 }
4586                         }
4587                 }
4588         }
4589
4590         fn internal_htlc_satisfies_config(
4591                 &self, htlc: &msgs::UpdateAddHTLC, amt_to_forward: u64, outgoing_cltv_value: u32, config: &ChannelConfig,
4592         ) -> Result<(), (&'static str, u16)> {
4593                 let fee = amt_to_forward.checked_mul(config.forwarding_fee_proportional_millionths as u64)
4594                         .and_then(|prop_fee| (prop_fee / 1000000).checked_add(config.forwarding_fee_base_msat as u64));
4595                 if fee.is_none() || htlc.amount_msat < fee.unwrap() ||
4596                         (htlc.amount_msat - fee.unwrap()) < amt_to_forward {
4597                         return Err((
4598                                 "Prior hop has deviated from specified fees parameters or origin node has obsolete ones",
4599                                 0x1000 | 12, // fee_insufficient
4600                         ));
4601                 }
4602                 if (htlc.cltv_expiry as u64) < outgoing_cltv_value as u64 + config.cltv_expiry_delta as u64 {
4603                         return Err((
4604                                 "Forwarding node has tampered with the intended HTLC values or origin node has an obsolete cltv_expiry_delta",
4605                                 0x1000 | 13, // incorrect_cltv_expiry
4606                         ));
4607                 }
4608                 Ok(())
4609         }
4610
4611         /// Determines whether the parameters of an incoming HTLC to be forwarded satisfy the channel's
4612         /// [`ChannelConfig`]. This first looks at the channel's current [`ChannelConfig`], and if
4613         /// unsuccessful, falls back to the previous one if one exists.
4614         pub fn htlc_satisfies_config(
4615                 &self, htlc: &msgs::UpdateAddHTLC, amt_to_forward: u64, outgoing_cltv_value: u32,
4616         ) -> Result<(), (&'static str, u16)> {
4617                 self.internal_htlc_satisfies_config(&htlc, amt_to_forward, outgoing_cltv_value, &self.context.config())
4618                         .or_else(|err| {
4619                                 if let Some(prev_config) = self.context.prev_config() {
4620                                         self.internal_htlc_satisfies_config(htlc, amt_to_forward, outgoing_cltv_value, &prev_config)
4621                                 } else {
4622                                         Err(err)
4623                                 }
4624                         })
4625         }
4626
4627         pub fn get_cur_holder_commitment_transaction_number(&self) -> u64 {
4628                 self.context.cur_holder_commitment_transaction_number + 1
4629         }
4630
4631         pub fn get_cur_counterparty_commitment_transaction_number(&self) -> u64 {
4632                 self.context.cur_counterparty_commitment_transaction_number + 1 - if self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32) != 0 { 1 } else { 0 }
4633         }
4634
4635         pub fn get_revoked_counterparty_commitment_transaction_number(&self) -> u64 {
4636                 self.context.cur_counterparty_commitment_transaction_number + 2
4637         }
4638
4639         #[cfg(test)]
4640         pub fn get_signer(&self) -> &ChannelSignerType<<SP::Target as SignerProvider>::Signer> {
4641                 &self.context.holder_signer
4642         }
4643
4644         #[cfg(test)]
4645         pub fn get_value_stat(&self) -> ChannelValueStat {
4646                 ChannelValueStat {
4647                         value_to_self_msat: self.context.value_to_self_msat,
4648                         channel_value_msat: self.context.channel_value_satoshis * 1000,
4649                         channel_reserve_msat: self.context.counterparty_selected_channel_reserve_satoshis.unwrap() * 1000,
4650                         pending_outbound_htlcs_amount_msat: self.context.pending_outbound_htlcs.iter().map(|ref h| h.amount_msat).sum::<u64>(),
4651                         pending_inbound_htlcs_amount_msat: self.context.pending_inbound_htlcs.iter().map(|ref h| h.amount_msat).sum::<u64>(),
4652                         holding_cell_outbound_amount_msat: {
4653                                 let mut res = 0;
4654                                 for h in self.context.holding_cell_htlc_updates.iter() {
4655                                         match h {
4656                                                 &HTLCUpdateAwaitingACK::AddHTLC{amount_msat, .. } => {
4657                                                         res += amount_msat;
4658                                                 }
4659                                                 _ => {}
4660                                         }
4661                                 }
4662                                 res
4663                         },
4664                         counterparty_max_htlc_value_in_flight_msat: self.context.counterparty_max_htlc_value_in_flight_msat,
4665                         counterparty_dust_limit_msat: self.context.counterparty_dust_limit_satoshis * 1000,
4666                 }
4667         }
4668
4669         /// Returns true if this channel has been marked as awaiting a monitor update to move forward.
4670         /// Allowed in any state (including after shutdown)
4671         pub fn is_awaiting_monitor_update(&self) -> bool {
4672                 (self.context.channel_state & ChannelState::MonitorUpdateInProgress as u32) != 0
4673         }
4674
4675         /// Gets the latest [`ChannelMonitorUpdate`] ID which has been released and is in-flight.
4676         pub fn get_latest_unblocked_monitor_update_id(&self) -> u64 {
4677                 if self.context.blocked_monitor_updates.is_empty() { return self.context.get_latest_monitor_update_id(); }
4678                 self.context.blocked_monitor_updates[0].update.update_id - 1
4679         }
4680
4681         /// Returns the next blocked monitor update, if one exists, and a bool which indicates a
4682         /// further blocked monitor update exists after the next.
4683         pub fn unblock_next_blocked_monitor_update(&mut self) -> Option<(ChannelMonitorUpdate, bool)> {
4684                 if self.context.blocked_monitor_updates.is_empty() { return None; }
4685                 Some((self.context.blocked_monitor_updates.remove(0).update,
4686                         !self.context.blocked_monitor_updates.is_empty()))
4687         }
4688
4689         /// Pushes a new monitor update into our monitor update queue, returning it if it should be
4690         /// immediately given to the user for persisting or `None` if it should be held as blocked.
4691         fn push_ret_blockable_mon_update(&mut self, update: ChannelMonitorUpdate)
4692         -> Option<ChannelMonitorUpdate> {
4693                 let release_monitor = self.context.blocked_monitor_updates.is_empty();
4694                 if !release_monitor {
4695                         self.context.blocked_monitor_updates.push(PendingChannelMonitorUpdate {
4696                                 update,
4697                         });
4698                         None
4699                 } else {
4700                         Some(update)
4701                 }
4702         }
4703
4704         pub fn blocked_monitor_updates_pending(&self) -> usize {
4705                 self.context.blocked_monitor_updates.len()
4706         }
4707
4708         /// Returns true if the channel is awaiting the persistence of the initial ChannelMonitor.
4709         /// If the channel is outbound, this implies we have not yet broadcasted the funding
4710         /// transaction. If the channel is inbound, this implies simply that the channel has not
4711         /// advanced state.
4712         pub fn is_awaiting_initial_mon_persist(&self) -> bool {
4713                 if !self.is_awaiting_monitor_update() { return false; }
4714                 if self.context.channel_state &
4715                         !(ChannelState::TheirChannelReady as u32 | ChannelState::PeerDisconnected as u32 | ChannelState::MonitorUpdateInProgress as u32 | ChannelState::WaitingForBatch as u32)
4716                                 == ChannelState::FundingSent as u32 {
4717                         // If we're not a 0conf channel, we'll be waiting on a monitor update with only
4718                         // FundingSent set, though our peer could have sent their channel_ready.
4719                         debug_assert!(self.context.minimum_depth.unwrap_or(1) > 0);
4720                         return true;
4721                 }
4722                 if self.context.cur_holder_commitment_transaction_number == INITIAL_COMMITMENT_NUMBER - 1 &&
4723                         self.context.cur_counterparty_commitment_transaction_number == INITIAL_COMMITMENT_NUMBER - 1 {
4724                         // If we're a 0-conf channel, we'll move beyond FundingSent immediately even while
4725                         // waiting for the initial monitor persistence. Thus, we check if our commitment
4726                         // transaction numbers have both been iterated only exactly once (for the
4727                         // funding_signed), and we're awaiting monitor update.
4728                         //
4729                         // If we got here, we shouldn't have yet broadcasted the funding transaction (as the
4730                         // only way to get an awaiting-monitor-update state during initial funding is if the
4731                         // initial monitor persistence is still pending).
4732                         //
4733                         // Because deciding we're awaiting initial broadcast spuriously could result in
4734                         // funds-loss (as we don't have a monitor, but have the funding transaction confirmed),
4735                         // we hard-assert here, even in production builds.
4736                         if self.context.is_outbound() { assert!(self.context.funding_transaction.is_some()); }
4737                         assert!(self.context.monitor_pending_channel_ready);
4738                         assert_eq!(self.context.latest_monitor_update_id, 0);
4739                         return true;
4740                 }
4741                 false
4742         }
4743
4744         /// Returns true if our channel_ready has been sent
4745         pub fn is_our_channel_ready(&self) -> bool {
4746                 (self.context.channel_state & ChannelState::OurChannelReady as u32) != 0 || self.context.channel_state & !STATE_FLAGS >= ChannelState::ChannelReady as u32
4747         }
4748
4749         /// Returns true if our peer has either initiated or agreed to shut down the channel.
4750         pub fn received_shutdown(&self) -> bool {
4751                 (self.context.channel_state & ChannelState::RemoteShutdownSent as u32) != 0
4752         }
4753
4754         /// Returns true if we either initiated or agreed to shut down the channel.
4755         pub fn sent_shutdown(&self) -> bool {
4756                 (self.context.channel_state & ChannelState::LocalShutdownSent as u32) != 0
4757         }
4758
4759         /// Returns true if this channel is fully shut down. True here implies that no further actions
4760         /// may/will be taken on this channel, and thus this object should be freed. Any future changes
4761         /// will be handled appropriately by the chain monitor.
4762         pub fn is_shutdown(&self) -> bool {
4763                 if (self.context.channel_state & ChannelState::ShutdownComplete as u32) == ChannelState::ShutdownComplete as u32  {
4764                         assert!(self.context.channel_state == ChannelState::ShutdownComplete as u32);
4765                         true
4766                 } else { false }
4767         }
4768
4769         pub fn channel_update_status(&self) -> ChannelUpdateStatus {
4770                 self.context.channel_update_status
4771         }
4772
4773         pub fn set_channel_update_status(&mut self, status: ChannelUpdateStatus) {
4774                 self.context.update_time_counter += 1;
4775                 self.context.channel_update_status = status;
4776         }
4777
4778         fn check_get_channel_ready(&mut self, height: u32) -> Option<msgs::ChannelReady> {
4779                 // Called:
4780                 //  * always when a new block/transactions are confirmed with the new height
4781                 //  * when funding is signed with a height of 0
4782                 if self.context.funding_tx_confirmation_height == 0 && self.context.minimum_depth != Some(0) {
4783                         return None;
4784                 }
4785
4786                 let funding_tx_confirmations = height as i64 - self.context.funding_tx_confirmation_height as i64 + 1;
4787                 if funding_tx_confirmations <= 0 {
4788                         self.context.funding_tx_confirmation_height = 0;
4789                 }
4790
4791                 if funding_tx_confirmations < self.context.minimum_depth.unwrap_or(0) as i64 {
4792                         return None;
4793                 }
4794
4795                 // Note that we don't include ChannelState::WaitingForBatch as we don't want to send
4796                 // channel_ready until the entire batch is ready.
4797                 let non_shutdown_state = self.context.channel_state & (!MULTI_STATE_FLAGS);
4798                 let need_commitment_update = if non_shutdown_state == ChannelState::FundingSent as u32 {
4799                         self.context.channel_state |= ChannelState::OurChannelReady as u32;
4800                         true
4801                 } else if non_shutdown_state == (ChannelState::FundingSent as u32 | ChannelState::TheirChannelReady as u32) {
4802                         self.context.channel_state = ChannelState::ChannelReady as u32 | (self.context.channel_state & MULTI_STATE_FLAGS);
4803                         self.context.update_time_counter += 1;
4804                         true
4805                 } else if non_shutdown_state == (ChannelState::FundingSent as u32 | ChannelState::OurChannelReady as u32) {
4806                         // We got a reorg but not enough to trigger a force close, just ignore.
4807                         false
4808                 } else {
4809                         if self.context.funding_tx_confirmation_height != 0 && self.context.channel_state & !STATE_FLAGS < ChannelState::ChannelReady as u32 {
4810                                 // We should never see a funding transaction on-chain until we've received
4811                                 // funding_signed (if we're an outbound channel), or seen funding_generated (if we're
4812                                 // an inbound channel - before that we have no known funding TXID). The fuzzer,
4813                                 // however, may do this and we shouldn't treat it as a bug.
4814                                 #[cfg(not(fuzzing))]
4815                                 panic!("Started confirming a channel in a state pre-FundingSent: {}.\n\
4816                                         Do NOT broadcast a funding transaction manually - let LDK do it for you!",
4817                                         self.context.channel_state);
4818                         }
4819                         // We got a reorg but not enough to trigger a force close, just ignore.
4820                         false
4821                 };
4822
4823                 if need_commitment_update {
4824                         if self.context.channel_state & (ChannelState::MonitorUpdateInProgress as u32) == 0 {
4825                                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == 0 {
4826                                         let next_per_commitment_point =
4827                                                 self.context.holder_signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER - 1, &self.context.secp_ctx);
4828                                         return Some(msgs::ChannelReady {
4829                                                 channel_id: self.context.channel_id,
4830                                                 next_per_commitment_point,
4831                                                 short_channel_id_alias: Some(self.context.outbound_scid_alias),
4832                                         });
4833                                 }
4834                         } else {
4835                                 self.context.monitor_pending_channel_ready = true;
4836                         }
4837                 }
4838                 None
4839         }
4840
4841         /// When a transaction is confirmed, we check whether it is or spends the funding transaction
4842         /// In the first case, we store the confirmation height and calculating the short channel id.
4843         /// In the second, we simply return an Err indicating we need to be force-closed now.
4844         pub fn transactions_confirmed<NS: Deref, L: Deref>(
4845                 &mut self, block_hash: &BlockHash, height: u32, txdata: &TransactionData,
4846                 chain_hash: ChainHash, node_signer: &NS, user_config: &UserConfig, logger: &L
4847         ) -> Result<(Option<msgs::ChannelReady>, Option<msgs::AnnouncementSignatures>), ClosureReason>
4848         where
4849                 NS::Target: NodeSigner,
4850                 L::Target: Logger
4851         {
4852                 let mut msgs = (None, None);
4853                 if let Some(funding_txo) = self.context.get_funding_txo() {
4854                         for &(index_in_block, tx) in txdata.iter() {
4855                                 // Check if the transaction is the expected funding transaction, and if it is,
4856                                 // check that it pays the right amount to the right script.
4857                                 if self.context.funding_tx_confirmation_height == 0 {
4858                                         if tx.txid() == funding_txo.txid {
4859                                                 let txo_idx = funding_txo.index as usize;
4860                                                 if txo_idx >= tx.output.len() || tx.output[txo_idx].script_pubkey != self.context.get_funding_redeemscript().to_v0_p2wsh() ||
4861                                                                 tx.output[txo_idx].value != self.context.channel_value_satoshis {
4862                                                         if self.context.is_outbound() {
4863                                                                 // If we generated the funding transaction and it doesn't match what it
4864                                                                 // should, the client is really broken and we should just panic and
4865                                                                 // tell them off. That said, because hash collisions happen with high
4866                                                                 // probability in fuzzing mode, if we're fuzzing we just close the
4867                                                                 // channel and move on.
4868                                                                 #[cfg(not(fuzzing))]
4869                                                                 panic!("Client called ChannelManager::funding_transaction_generated with bogus transaction!");
4870                                                         }
4871                                                         self.context.update_time_counter += 1;
4872                                                         let err_reason = "funding tx had wrong script/value or output index";
4873                                                         return Err(ClosureReason::ProcessingError { err: err_reason.to_owned() });
4874                                                 } else {
4875                                                         if self.context.is_outbound() {
4876                                                                 if !tx.is_coin_base() {
4877                                                                         for input in tx.input.iter() {
4878                                                                                 if input.witness.is_empty() {
4879                                                                                         // We generated a malleable funding transaction, implying we've
4880                                                                                         // just exposed ourselves to funds loss to our counterparty.
4881                                                                                         #[cfg(not(fuzzing))]
4882                                                                                         panic!("Client called ChannelManager::funding_transaction_generated with bogus transaction!");
4883                                                                                 }
4884                                                                         }
4885                                                                 }
4886                                                         }
4887                                                         self.context.funding_tx_confirmation_height = height;
4888                                                         self.context.funding_tx_confirmed_in = Some(*block_hash);
4889                                                         self.context.short_channel_id = match scid_from_parts(height as u64, index_in_block as u64, txo_idx as u64) {
4890                                                                 Ok(scid) => Some(scid),
4891                                                                 Err(_) => panic!("Block was bogus - either height was > 16 million, had > 16 million transactions, or had > 65k outputs"),
4892                                                         }
4893                                                 }
4894                                                 // If this is a coinbase transaction and not a 0-conf channel
4895                                                 // we should update our min_depth to 100 to handle coinbase maturity
4896                                                 if tx.is_coin_base() &&
4897                                                         self.context.minimum_depth.unwrap_or(0) > 0 &&
4898                                                         self.context.minimum_depth.unwrap_or(0) < COINBASE_MATURITY {
4899                                                         self.context.minimum_depth = Some(COINBASE_MATURITY);
4900                                                 }
4901                                         }
4902                                         // If we allow 1-conf funding, we may need to check for channel_ready here and
4903                                         // send it immediately instead of waiting for a best_block_updated call (which
4904                                         // may have already happened for this block).
4905                                         if let Some(channel_ready) = self.check_get_channel_ready(height) {
4906                                                 log_info!(logger, "Sending a channel_ready to our peer for channel {}", &self.context.channel_id);
4907                                                 let announcement_sigs = self.get_announcement_sigs(node_signer, chain_hash, user_config, height, logger);
4908                                                 msgs = (Some(channel_ready), announcement_sigs);
4909                                         }
4910                                 }
4911                                 for inp in tx.input.iter() {
4912                                         if inp.previous_output == funding_txo.into_bitcoin_outpoint() {
4913                                                 log_info!(logger, "Detected channel-closing tx {} spending {}:{}, closing channel {}", tx.txid(), inp.previous_output.txid, inp.previous_output.vout, &self.context.channel_id());
4914                                                 return Err(ClosureReason::CommitmentTxConfirmed);
4915                                         }
4916                                 }
4917                         }
4918                 }
4919                 Ok(msgs)
4920         }
4921
4922         /// When a new block is connected, we check the height of the block against outbound holding
4923         /// cell HTLCs in case we need to give up on them prematurely and time them out. Everything
4924         /// else (e.g. commitment transaction broadcasts, HTLC transaction broadcasting, etc) is
4925         /// handled by the ChannelMonitor.
4926         ///
4927         /// If we return Err, the channel may have been closed, at which point the standard
4928         /// requirements apply - no calls may be made except those explicitly stated to be allowed
4929         /// post-shutdown.
4930         ///
4931         /// May return some HTLCs (and their payment_hash) which have timed out and should be failed
4932         /// back.
4933         pub fn best_block_updated<NS: Deref, L: Deref>(
4934                 &mut self, height: u32, highest_header_time: u32, chain_hash: ChainHash,
4935                 node_signer: &NS, user_config: &UserConfig, logger: &L
4936         ) -> Result<(Option<msgs::ChannelReady>, Vec<(HTLCSource, PaymentHash)>, Option<msgs::AnnouncementSignatures>), ClosureReason>
4937         where
4938                 NS::Target: NodeSigner,
4939                 L::Target: Logger
4940         {
4941                 self.do_best_block_updated(height, highest_header_time, Some((chain_hash, node_signer, user_config)), logger)
4942         }
4943
4944         fn do_best_block_updated<NS: Deref, L: Deref>(
4945                 &mut self, height: u32, highest_header_time: u32,
4946                 chain_node_signer: Option<(ChainHash, &NS, &UserConfig)>, logger: &L
4947         ) -> Result<(Option<msgs::ChannelReady>, Vec<(HTLCSource, PaymentHash)>, Option<msgs::AnnouncementSignatures>), ClosureReason>
4948         where
4949                 NS::Target: NodeSigner,
4950                 L::Target: Logger
4951         {
4952                 let mut timed_out_htlcs = Vec::new();
4953                 // This mirrors the check in ChannelManager::decode_update_add_htlc_onion, refusing to
4954                 // forward an HTLC when our counterparty should almost certainly just fail it for expiring
4955                 // ~now.
4956                 let unforwarded_htlc_cltv_limit = height + LATENCY_GRACE_PERIOD_BLOCKS;
4957                 self.context.holding_cell_htlc_updates.retain(|htlc_update| {
4958                         match htlc_update {
4959                                 &HTLCUpdateAwaitingACK::AddHTLC { ref payment_hash, ref source, ref cltv_expiry, .. } => {
4960                                         if *cltv_expiry <= unforwarded_htlc_cltv_limit {
4961                                                 timed_out_htlcs.push((source.clone(), payment_hash.clone()));
4962                                                 false
4963                                         } else { true }
4964                                 },
4965                                 _ => true
4966                         }
4967                 });
4968
4969                 self.context.update_time_counter = cmp::max(self.context.update_time_counter, highest_header_time);
4970
4971                 if let Some(channel_ready) = self.check_get_channel_ready(height) {
4972                         let announcement_sigs = if let Some((chain_hash, node_signer, user_config)) = chain_node_signer {
4973                                 self.get_announcement_sigs(node_signer, chain_hash, user_config, height, logger)
4974                         } else { None };
4975                         log_info!(logger, "Sending a channel_ready to our peer for channel {}", &self.context.channel_id);
4976                         return Ok((Some(channel_ready), timed_out_htlcs, announcement_sigs));
4977                 }
4978
4979                 let non_shutdown_state = self.context.channel_state & (!MULTI_STATE_FLAGS);
4980                 if non_shutdown_state & !STATE_FLAGS >= ChannelState::ChannelReady as u32 ||
4981                    (non_shutdown_state & ChannelState::OurChannelReady as u32) == ChannelState::OurChannelReady as u32 {
4982                         let mut funding_tx_confirmations = height as i64 - self.context.funding_tx_confirmation_height as i64 + 1;
4983                         if self.context.funding_tx_confirmation_height == 0 {
4984                                 // Note that check_get_channel_ready may reset funding_tx_confirmation_height to
4985                                 // zero if it has been reorged out, however in either case, our state flags
4986                                 // indicate we've already sent a channel_ready
4987                                 funding_tx_confirmations = 0;
4988                         }
4989
4990                         // If we've sent channel_ready (or have both sent and received channel_ready), and
4991                         // the funding transaction has become unconfirmed,
4992                         // close the channel and hope we can get the latest state on chain (because presumably
4993                         // the funding transaction is at least still in the mempool of most nodes).
4994                         //
4995                         // Note that ideally we wouldn't force-close if we see *any* reorg on a 1-conf or
4996                         // 0-conf channel, but not doing so may lead to the
4997                         // `ChannelManager::short_to_chan_info` map  being inconsistent, so we currently have
4998                         // to.
4999                         if funding_tx_confirmations == 0 && self.context.funding_tx_confirmed_in.is_some() {
5000                                 let err_reason = format!("Funding transaction was un-confirmed. Locked at {} confs, now have {} confs.",
5001                                         self.context.minimum_depth.unwrap(), funding_tx_confirmations);
5002                                 return Err(ClosureReason::ProcessingError { err: err_reason });
5003                         }
5004                 } else if !self.context.is_outbound() && self.context.funding_tx_confirmed_in.is_none() &&
5005                                 height >= self.context.channel_creation_height + FUNDING_CONF_DEADLINE_BLOCKS {
5006                         log_info!(logger, "Closing channel {} due to funding timeout", &self.context.channel_id);
5007                         // If funding_tx_confirmed_in is unset, the channel must not be active
5008                         assert!(non_shutdown_state & !STATE_FLAGS <= ChannelState::ChannelReady as u32);
5009                         assert_eq!(non_shutdown_state & ChannelState::OurChannelReady as u32, 0);
5010                         return Err(ClosureReason::FundingTimedOut);
5011                 }
5012
5013                 let announcement_sigs = if let Some((chain_hash, node_signer, user_config)) = chain_node_signer {
5014                         self.get_announcement_sigs(node_signer, chain_hash, user_config, height, logger)
5015                 } else { None };
5016                 Ok((None, timed_out_htlcs, announcement_sigs))
5017         }
5018
5019         /// Indicates the funding transaction is no longer confirmed in the main chain. This may
5020         /// force-close the channel, but may also indicate a harmless reorganization of a block or two
5021         /// before the channel has reached channel_ready and we can just wait for more blocks.
5022         pub fn funding_transaction_unconfirmed<L: Deref>(&mut self, logger: &L) -> Result<(), ClosureReason> where L::Target: Logger {
5023                 if self.context.funding_tx_confirmation_height != 0 {
5024                         // We handle the funding disconnection by calling best_block_updated with a height one
5025                         // below where our funding was connected, implying a reorg back to conf_height - 1.
5026                         let reorg_height = self.context.funding_tx_confirmation_height - 1;
5027                         // We use the time field to bump the current time we set on channel updates if its
5028                         // larger. If we don't know that time has moved forward, we can just set it to the last
5029                         // time we saw and it will be ignored.
5030                         let best_time = self.context.update_time_counter;
5031                         match self.do_best_block_updated(reorg_height, best_time, None::<(ChainHash, &&NodeSigner, &UserConfig)>, logger) {
5032                                 Ok((channel_ready, timed_out_htlcs, announcement_sigs)) => {
5033                                         assert!(channel_ready.is_none(), "We can't generate a funding with 0 confirmations?");
5034                                         assert!(timed_out_htlcs.is_empty(), "We can't have accepted HTLCs with a timeout before our funding confirmation?");
5035                                         assert!(announcement_sigs.is_none(), "We can't generate an announcement_sigs with 0 confirmations?");
5036                                         Ok(())
5037                                 },
5038                                 Err(e) => Err(e)
5039                         }
5040                 } else {
5041                         // We never learned about the funding confirmation anyway, just ignore
5042                         Ok(())
5043                 }
5044         }
5045
5046         // Methods to get unprompted messages to send to the remote end (or where we already returned
5047         // something in the handler for the message that prompted this message):
5048
5049         /// Gets an UnsignedChannelAnnouncement for this channel. The channel must be publicly
5050         /// announceable and available for use (have exchanged [`ChannelReady`] messages in both
5051         /// directions). Should be used for both broadcasted announcements and in response to an
5052         /// AnnouncementSignatures message from the remote peer.
5053         ///
5054         /// Will only fail if we're not in a state where channel_announcement may be sent (including
5055         /// closing).
5056         ///
5057         /// This will only return ChannelError::Ignore upon failure.
5058         ///
5059         /// [`ChannelReady`]: crate::ln::msgs::ChannelReady
5060         fn get_channel_announcement<NS: Deref>(
5061                 &self, node_signer: &NS, chain_hash: ChainHash, user_config: &UserConfig,
5062         ) -> Result<msgs::UnsignedChannelAnnouncement, ChannelError> where NS::Target: NodeSigner {
5063                 if !self.context.config.announced_channel {
5064                         return Err(ChannelError::Ignore("Channel is not available for public announcements".to_owned()));
5065                 }
5066                 if !self.context.is_usable() {
5067                         return Err(ChannelError::Ignore("Cannot get a ChannelAnnouncement if the channel is not currently usable".to_owned()));
5068                 }
5069
5070                 let short_channel_id = self.context.get_short_channel_id()
5071                         .ok_or(ChannelError::Ignore("Cannot get a ChannelAnnouncement if the channel has not been confirmed yet".to_owned()))?;
5072                 let node_id = NodeId::from_pubkey(&node_signer.get_node_id(Recipient::Node)
5073                         .map_err(|_| ChannelError::Ignore("Failed to retrieve own public key".to_owned()))?);
5074                 let counterparty_node_id = NodeId::from_pubkey(&self.context.get_counterparty_node_id());
5075                 let were_node_one = node_id.as_slice() < counterparty_node_id.as_slice();
5076
5077                 let msg = msgs::UnsignedChannelAnnouncement {
5078                         features: channelmanager::provided_channel_features(&user_config),
5079                         chain_hash,
5080                         short_channel_id,
5081                         node_id_1: if were_node_one { node_id } else { counterparty_node_id },
5082                         node_id_2: if were_node_one { counterparty_node_id } else { node_id },
5083                         bitcoin_key_1: NodeId::from_pubkey(if were_node_one { &self.context.get_holder_pubkeys().funding_pubkey } else { self.context.counterparty_funding_pubkey() }),
5084                         bitcoin_key_2: NodeId::from_pubkey(if were_node_one { self.context.counterparty_funding_pubkey() } else { &self.context.get_holder_pubkeys().funding_pubkey }),
5085                         excess_data: Vec::new(),
5086                 };
5087
5088                 Ok(msg)
5089         }
5090
5091         fn get_announcement_sigs<NS: Deref, L: Deref>(
5092                 &mut self, node_signer: &NS, chain_hash: ChainHash, user_config: &UserConfig,
5093                 best_block_height: u32, logger: &L
5094         ) -> Option<msgs::AnnouncementSignatures>
5095         where
5096                 NS::Target: NodeSigner,
5097                 L::Target: Logger
5098         {
5099                 if self.context.funding_tx_confirmation_height == 0 || self.context.funding_tx_confirmation_height + 5 > best_block_height {
5100                         return None;
5101                 }
5102
5103                 if !self.context.is_usable() {
5104                         return None;
5105                 }
5106
5107                 if self.context.channel_state & ChannelState::PeerDisconnected as u32 != 0 {
5108                         log_trace!(logger, "Cannot create an announcement_signatures as our peer is disconnected");
5109                         return None;
5110                 }
5111
5112                 if self.context.announcement_sigs_state != AnnouncementSigsState::NotSent {
5113                         return None;
5114                 }
5115
5116                 log_trace!(logger, "Creating an announcement_signatures message for channel {}", &self.context.channel_id());
5117                 let announcement = match self.get_channel_announcement(node_signer, chain_hash, user_config) {
5118                         Ok(a) => a,
5119                         Err(e) => {
5120                                 log_trace!(logger, "{:?}", e);
5121                                 return None;
5122                         }
5123                 };
5124                 let our_node_sig = match node_signer.sign_gossip_message(msgs::UnsignedGossipMessage::ChannelAnnouncement(&announcement)) {
5125                         Err(_) => {
5126                                 log_error!(logger, "Failed to generate node signature for channel_announcement. Channel will not be announced!");
5127                                 return None;
5128                         },
5129                         Ok(v) => v
5130                 };
5131                 match &self.context.holder_signer {
5132                         ChannelSignerType::Ecdsa(ecdsa) => {
5133                                 let our_bitcoin_sig = match ecdsa.sign_channel_announcement_with_funding_key(&announcement, &self.context.secp_ctx) {
5134                                         Err(_) => {
5135                                                 log_error!(logger, "Signer rejected channel_announcement signing. Channel will not be announced!");
5136                                                 return None;
5137                                         },
5138                                         Ok(v) => v
5139                                 };
5140                                 let short_channel_id = match self.context.get_short_channel_id() {
5141                                         Some(scid) => scid,
5142                                         None => return None,
5143                                 };
5144
5145                                 self.context.announcement_sigs_state = AnnouncementSigsState::MessageSent;
5146
5147                                 Some(msgs::AnnouncementSignatures {
5148                                         channel_id: self.context.channel_id(),
5149                                         short_channel_id,
5150                                         node_signature: our_node_sig,
5151                                         bitcoin_signature: our_bitcoin_sig,
5152                                 })
5153                         }
5154                 }
5155         }
5156
5157         /// Signs the given channel announcement, returning a ChannelError::Ignore if no keys are
5158         /// available.
5159         fn sign_channel_announcement<NS: Deref>(
5160                 &self, node_signer: &NS, announcement: msgs::UnsignedChannelAnnouncement
5161         ) -> Result<msgs::ChannelAnnouncement, ChannelError> where NS::Target: NodeSigner {
5162                 if let Some((their_node_sig, their_bitcoin_sig)) = self.context.announcement_sigs {
5163                         let our_node_key = NodeId::from_pubkey(&node_signer.get_node_id(Recipient::Node)
5164                                 .map_err(|_| ChannelError::Ignore("Signer failed to retrieve own public key".to_owned()))?);
5165                         let were_node_one = announcement.node_id_1 == our_node_key;
5166
5167                         let our_node_sig = node_signer.sign_gossip_message(msgs::UnsignedGossipMessage::ChannelAnnouncement(&announcement))
5168                                 .map_err(|_| ChannelError::Ignore("Failed to generate node signature for channel_announcement".to_owned()))?;
5169                         match &self.context.holder_signer {
5170                                 ChannelSignerType::Ecdsa(ecdsa) => {
5171                                         let our_bitcoin_sig = ecdsa.sign_channel_announcement_with_funding_key(&announcement, &self.context.secp_ctx)
5172                                                 .map_err(|_| ChannelError::Ignore("Signer rejected channel_announcement".to_owned()))?;
5173                                         Ok(msgs::ChannelAnnouncement {
5174                                                 node_signature_1: if were_node_one { our_node_sig } else { their_node_sig },
5175                                                 node_signature_2: if were_node_one { their_node_sig } else { our_node_sig },
5176                                                 bitcoin_signature_1: if were_node_one { our_bitcoin_sig } else { their_bitcoin_sig },
5177                                                 bitcoin_signature_2: if were_node_one { their_bitcoin_sig } else { our_bitcoin_sig },
5178                                                 contents: announcement,
5179                                         })
5180                                 }
5181                         }
5182                 } else {
5183                         Err(ChannelError::Ignore("Attempted to sign channel announcement before we'd received announcement_signatures".to_string()))
5184                 }
5185         }
5186
5187         /// Processes an incoming announcement_signatures message, providing a fully-signed
5188         /// channel_announcement message which we can broadcast and storing our counterparty's
5189         /// signatures for later reconstruction/rebroadcast of the channel_announcement.
5190         pub fn announcement_signatures<NS: Deref>(
5191                 &mut self, node_signer: &NS, chain_hash: ChainHash, best_block_height: u32,
5192                 msg: &msgs::AnnouncementSignatures, user_config: &UserConfig
5193         ) -> Result<msgs::ChannelAnnouncement, ChannelError> where NS::Target: NodeSigner {
5194                 let announcement = self.get_channel_announcement(node_signer, chain_hash, user_config)?;
5195
5196                 let msghash = hash_to_message!(&Sha256d::hash(&announcement.encode()[..])[..]);
5197
5198                 if self.context.secp_ctx.verify_ecdsa(&msghash, &msg.node_signature, &self.context.get_counterparty_node_id()).is_err() {
5199                         return Err(ChannelError::Close(format!(
5200                                 "Bad announcement_signatures. Failed to verify node_signature. UnsignedChannelAnnouncement used for verification is {:?}. their_node_key is {:?}",
5201                                  &announcement, self.context.get_counterparty_node_id())));
5202                 }
5203                 if self.context.secp_ctx.verify_ecdsa(&msghash, &msg.bitcoin_signature, self.context.counterparty_funding_pubkey()).is_err() {
5204                         return Err(ChannelError::Close(format!(
5205                                 "Bad announcement_signatures. Failed to verify bitcoin_signature. UnsignedChannelAnnouncement used for verification is {:?}. their_bitcoin_key is ({:?})",
5206                                 &announcement, self.context.counterparty_funding_pubkey())));
5207                 }
5208
5209                 self.context.announcement_sigs = Some((msg.node_signature, msg.bitcoin_signature));
5210                 if self.context.funding_tx_confirmation_height == 0 || self.context.funding_tx_confirmation_height + 5 > best_block_height {
5211                         return Err(ChannelError::Ignore(
5212                                 "Got announcement_signatures prior to the required six confirmations - we may not have received a block yet that our peer has".to_owned()));
5213                 }
5214
5215                 self.sign_channel_announcement(node_signer, announcement)
5216         }
5217
5218         /// Gets a signed channel_announcement for this channel, if we previously received an
5219         /// announcement_signatures from our counterparty.
5220         pub fn get_signed_channel_announcement<NS: Deref>(
5221                 &self, node_signer: &NS, chain_hash: ChainHash, best_block_height: u32, user_config: &UserConfig
5222         ) -> Option<msgs::ChannelAnnouncement> where NS::Target: NodeSigner {
5223                 if self.context.funding_tx_confirmation_height == 0 || self.context.funding_tx_confirmation_height + 5 > best_block_height {
5224                         return None;
5225                 }
5226                 let announcement = match self.get_channel_announcement(node_signer, chain_hash, user_config) {
5227                         Ok(res) => res,
5228                         Err(_) => return None,
5229                 };
5230                 match self.sign_channel_announcement(node_signer, announcement) {
5231                         Ok(res) => Some(res),
5232                         Err(_) => None,
5233                 }
5234         }
5235
5236         /// May panic if called on a channel that wasn't immediately-previously
5237         /// self.remove_uncommitted_htlcs_and_mark_paused()'d
5238         pub fn get_channel_reestablish<L: Deref>(&mut self, logger: &L) -> msgs::ChannelReestablish where L::Target: Logger {
5239                 assert_eq!(self.context.channel_state & ChannelState::PeerDisconnected as u32, ChannelState::PeerDisconnected as u32);
5240                 assert_ne!(self.context.cur_counterparty_commitment_transaction_number, INITIAL_COMMITMENT_NUMBER);
5241                 // Prior to static_remotekey, my_current_per_commitment_point was critical to claiming
5242                 // current to_remote balances. However, it no longer has any use, and thus is now simply
5243                 // set to a dummy (but valid, as required by the spec) public key.
5244                 // fuzzing mode marks a subset of pubkeys as invalid so that we can hit "invalid pubkey"
5245                 // branches, but we unwrap it below, so we arbitrarily select a dummy pubkey which is both
5246                 // valid, and valid in fuzzing mode's arbitrary validity criteria:
5247                 let mut pk = [2; 33]; pk[1] = 0xff;
5248                 let dummy_pubkey = PublicKey::from_slice(&pk).unwrap();
5249                 let remote_last_secret = if self.context.cur_counterparty_commitment_transaction_number + 1 < INITIAL_COMMITMENT_NUMBER {
5250                         let remote_last_secret = self.context.commitment_secrets.get_secret(self.context.cur_counterparty_commitment_transaction_number + 2).unwrap();
5251                         log_trace!(logger, "Enough info to generate a Data Loss Protect with per_commitment_secret {} for channel {}", log_bytes!(remote_last_secret), &self.context.channel_id());
5252                         remote_last_secret
5253                 } else {
5254                         log_info!(logger, "Sending a data_loss_protect with no previous remote per_commitment_secret for channel {}", &self.context.channel_id());
5255                         [0;32]
5256                 };
5257                 self.mark_awaiting_response();
5258                 msgs::ChannelReestablish {
5259                         channel_id: self.context.channel_id(),
5260                         // The protocol has two different commitment number concepts - the "commitment
5261                         // transaction number", which starts from 0 and counts up, and the "revocation key
5262                         // index" which starts at INITIAL_COMMITMENT_NUMBER and counts down. We track
5263                         // commitment transaction numbers by the index which will be used to reveal the
5264                         // revocation key for that commitment transaction, which means we have to convert them
5265                         // to protocol-level commitment numbers here...
5266
5267                         // next_local_commitment_number is the next commitment_signed number we expect to
5268                         // receive (indicating if they need to resend one that we missed).
5269                         next_local_commitment_number: INITIAL_COMMITMENT_NUMBER - self.context.cur_holder_commitment_transaction_number,
5270                         // We have to set next_remote_commitment_number to the next revoke_and_ack we expect to
5271                         // receive, however we track it by the next commitment number for a remote transaction
5272                         // (which is one further, as they always revoke previous commitment transaction, not
5273                         // the one we send) so we have to decrement by 1. Note that if
5274                         // cur_counterparty_commitment_transaction_number is INITIAL_COMMITMENT_NUMBER we will have
5275                         // dropped this channel on disconnect as it hasn't yet reached FundingSent so we can't
5276                         // overflow here.
5277                         next_remote_commitment_number: INITIAL_COMMITMENT_NUMBER - self.context.cur_counterparty_commitment_transaction_number - 1,
5278                         your_last_per_commitment_secret: remote_last_secret,
5279                         my_current_per_commitment_point: dummy_pubkey,
5280                         // TODO(dual_funding): If we've sent `commtiment_signed` for an interactive transaction
5281                         // construction but have not received `tx_signatures` we MUST set `next_funding_txid` to the
5282                         // txid of that interactive transaction, else we MUST NOT set it.
5283                         next_funding_txid: None,
5284                 }
5285         }
5286
5287
5288         // Send stuff to our remote peers:
5289
5290         /// Queues up an outbound HTLC to send by placing it in the holding cell. You should call
5291         /// [`Self::maybe_free_holding_cell_htlcs`] in order to actually generate and send the
5292         /// commitment update.
5293         ///
5294         /// `Err`s will only be [`ChannelError::Ignore`].
5295         pub fn queue_add_htlc<F: Deref, L: Deref>(
5296                 &mut self, amount_msat: u64, payment_hash: PaymentHash, cltv_expiry: u32, source: HTLCSource,
5297                 onion_routing_packet: msgs::OnionPacket, skimmed_fee_msat: Option<u64>,
5298                 fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L
5299         ) -> Result<(), ChannelError>
5300         where F::Target: FeeEstimator, L::Target: Logger
5301         {
5302                 self
5303                         .send_htlc(amount_msat, payment_hash, cltv_expiry, source, onion_routing_packet, true,
5304                                 skimmed_fee_msat, fee_estimator, logger)
5305                         .map(|msg_opt| assert!(msg_opt.is_none(), "We forced holding cell?"))
5306                         .map_err(|err| {
5307                                 if let ChannelError::Ignore(_) = err { /* fine */ }
5308                                 else { debug_assert!(false, "Queueing cannot trigger channel failure"); }
5309                                 err
5310                         })
5311         }
5312
5313         /// Adds a pending outbound HTLC to this channel, note that you probably want
5314         /// [`Self::send_htlc_and_commit`] instead cause you'll want both messages at once.
5315         ///
5316         /// This returns an optional UpdateAddHTLC as we may be in a state where we cannot add HTLCs on
5317         /// the wire:
5318         /// * In cases where we're waiting on the remote peer to send us a revoke_and_ack, we
5319         ///   wouldn't be able to determine what they actually ACK'ed if we have two sets of updates
5320         ///   awaiting ACK.
5321         /// * In cases where we're marked MonitorUpdateInProgress, we cannot commit to a new state as
5322         ///   we may not yet have sent the previous commitment update messages and will need to
5323         ///   regenerate them.
5324         ///
5325         /// You MUST call [`Self::send_commitment_no_state_update`] prior to calling any other methods
5326         /// on this [`Channel`] if `force_holding_cell` is false.
5327         ///
5328         /// `Err`s will only be [`ChannelError::Ignore`].
5329         fn send_htlc<F: Deref, L: Deref>(
5330                 &mut self, amount_msat: u64, payment_hash: PaymentHash, cltv_expiry: u32, source: HTLCSource,
5331                 onion_routing_packet: msgs::OnionPacket, mut force_holding_cell: bool,
5332                 skimmed_fee_msat: Option<u64>, fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L
5333         ) -> Result<Option<msgs::UpdateAddHTLC>, ChannelError>
5334         where F::Target: FeeEstimator, L::Target: Logger
5335         {
5336                 if (self.context.channel_state & (ChannelState::ChannelReady as u32 | BOTH_SIDES_SHUTDOWN_MASK)) != (ChannelState::ChannelReady as u32) {
5337                         return Err(ChannelError::Ignore("Cannot send HTLC until channel is fully established and we haven't started shutting down".to_owned()));
5338                 }
5339                 let channel_total_msat = self.context.channel_value_satoshis * 1000;
5340                 if amount_msat > channel_total_msat {
5341                         return Err(ChannelError::Ignore(format!("Cannot send amount {}, because it is more than the total value of the channel {}", amount_msat, channel_total_msat)));
5342                 }
5343
5344                 if amount_msat == 0 {
5345                         return Err(ChannelError::Ignore("Cannot send 0-msat HTLC".to_owned()));
5346                 }
5347
5348                 let available_balances = self.context.get_available_balances(fee_estimator);
5349                 if amount_msat < available_balances.next_outbound_htlc_minimum_msat {
5350                         return Err(ChannelError::Ignore(format!("Cannot send less than our next-HTLC minimum - {} msat",
5351                                 available_balances.next_outbound_htlc_minimum_msat)));
5352                 }
5353
5354                 if amount_msat > available_balances.next_outbound_htlc_limit_msat {
5355                         return Err(ChannelError::Ignore(format!("Cannot send more than our next-HTLC maximum - {} msat",
5356                                 available_balances.next_outbound_htlc_limit_msat)));
5357                 }
5358
5359                 if (self.context.channel_state & (ChannelState::PeerDisconnected as u32)) != 0 {
5360                         // Note that this should never really happen, if we're !is_live() on receipt of an
5361                         // incoming HTLC for relay will result in us rejecting the HTLC and we won't allow
5362                         // the user to send directly into a !is_live() channel. However, if we
5363                         // disconnected during the time the previous hop was doing the commitment dance we may
5364                         // end up getting here after the forwarding delay. In any case, returning an
5365                         // IgnoreError will get ChannelManager to do the right thing and fail backwards now.
5366                         return Err(ChannelError::Ignore("Cannot send an HTLC while disconnected from channel counterparty".to_owned()));
5367                 }
5368
5369                 let need_holding_cell = (self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32 | ChannelState::MonitorUpdateInProgress as u32)) != 0;
5370                 log_debug!(logger, "Pushing new outbound HTLC with hash {} for {} msat {}",
5371                         payment_hash, amount_msat,
5372                         if force_holding_cell { "into holding cell" }
5373                         else if need_holding_cell { "into holding cell as we're awaiting an RAA or monitor" }
5374                         else { "to peer" });
5375
5376                 if need_holding_cell {
5377                         force_holding_cell = true;
5378                 }
5379
5380                 // Now update local state:
5381                 if force_holding_cell {
5382                         self.context.holding_cell_htlc_updates.push(HTLCUpdateAwaitingACK::AddHTLC {
5383                                 amount_msat,
5384                                 payment_hash,
5385                                 cltv_expiry,
5386                                 source,
5387                                 onion_routing_packet,
5388                                 skimmed_fee_msat,
5389                         });
5390                         return Ok(None);
5391                 }
5392
5393                 self.context.pending_outbound_htlcs.push(OutboundHTLCOutput {
5394                         htlc_id: self.context.next_holder_htlc_id,
5395                         amount_msat,
5396                         payment_hash: payment_hash.clone(),
5397                         cltv_expiry,
5398                         state: OutboundHTLCState::LocalAnnounced(Box::new(onion_routing_packet.clone())),
5399                         source,
5400                         skimmed_fee_msat,
5401                 });
5402
5403                 let res = msgs::UpdateAddHTLC {
5404                         channel_id: self.context.channel_id,
5405                         htlc_id: self.context.next_holder_htlc_id,
5406                         amount_msat,
5407                         payment_hash,
5408                         cltv_expiry,
5409                         onion_routing_packet,
5410                         skimmed_fee_msat,
5411                 };
5412                 self.context.next_holder_htlc_id += 1;
5413
5414                 Ok(Some(res))
5415         }
5416
5417         fn build_commitment_no_status_check<L: Deref>(&mut self, logger: &L) -> ChannelMonitorUpdate where L::Target: Logger {
5418                 log_trace!(logger, "Updating HTLC state for a newly-sent commitment_signed...");
5419                 // We can upgrade the status of some HTLCs that are waiting on a commitment, even if we
5420                 // fail to generate this, we still are at least at a position where upgrading their status
5421                 // is acceptable.
5422                 for htlc in self.context.pending_inbound_htlcs.iter_mut() {
5423                         let new_state = if let &InboundHTLCState::AwaitingRemoteRevokeToAnnounce(ref forward_info) = &htlc.state {
5424                                 Some(InboundHTLCState::AwaitingAnnouncedRemoteRevoke(forward_info.clone()))
5425                         } else { None };
5426                         if let Some(state) = new_state {
5427                                 log_trace!(logger, " ...promoting inbound AwaitingRemoteRevokeToAnnounce {} to AwaitingAnnouncedRemoteRevoke", &htlc.payment_hash);
5428                                 htlc.state = state;
5429                         }
5430                 }
5431                 for htlc in self.context.pending_outbound_htlcs.iter_mut() {
5432                         if let &mut OutboundHTLCState::AwaitingRemoteRevokeToRemove(ref mut outcome) = &mut htlc.state {
5433                                 log_trace!(logger, " ...promoting outbound AwaitingRemoteRevokeToRemove {} to AwaitingRemovedRemoteRevoke", &htlc.payment_hash);
5434                                 // Grab the preimage, if it exists, instead of cloning
5435                                 let mut reason = OutboundHTLCOutcome::Success(None);
5436                                 mem::swap(outcome, &mut reason);
5437                                 htlc.state = OutboundHTLCState::AwaitingRemovedRemoteRevoke(reason);
5438                         }
5439                 }
5440                 if let Some((feerate, update_state)) = self.context.pending_update_fee {
5441                         if update_state == FeeUpdateState::AwaitingRemoteRevokeToAnnounce {
5442                                 debug_assert!(!self.context.is_outbound());
5443                                 log_trace!(logger, " ...promoting inbound AwaitingRemoteRevokeToAnnounce fee update {} to Committed", feerate);
5444                                 self.context.feerate_per_kw = feerate;
5445                                 self.context.pending_update_fee = None;
5446                         }
5447                 }
5448                 self.context.resend_order = RAACommitmentOrder::RevokeAndACKFirst;
5449
5450                 let (mut htlcs_ref, counterparty_commitment_tx) =
5451                         self.build_commitment_no_state_update(logger);
5452                 let counterparty_commitment_txid = counterparty_commitment_tx.trust().txid();
5453                 let htlcs: Vec<(HTLCOutputInCommitment, Option<Box<HTLCSource>>)> =
5454                         htlcs_ref.drain(..).map(|(htlc, htlc_source)| (htlc, htlc_source.map(|source_ref| Box::new(source_ref.clone())))).collect();
5455
5456                 if self.context.announcement_sigs_state == AnnouncementSigsState::MessageSent {
5457                         self.context.announcement_sigs_state = AnnouncementSigsState::Committed;
5458                 }
5459
5460                 self.context.latest_monitor_update_id += 1;
5461                 let monitor_update = ChannelMonitorUpdate {
5462                         update_id: self.context.latest_monitor_update_id,
5463                         updates: vec![ChannelMonitorUpdateStep::LatestCounterpartyCommitmentTXInfo {
5464                                 commitment_txid: counterparty_commitment_txid,
5465                                 htlc_outputs: htlcs.clone(),
5466                                 commitment_number: self.context.cur_counterparty_commitment_transaction_number,
5467                                 their_per_commitment_point: self.context.counterparty_cur_commitment_point.unwrap(),
5468                                 feerate_per_kw: Some(counterparty_commitment_tx.feerate_per_kw()),
5469                                 to_broadcaster_value_sat: Some(counterparty_commitment_tx.to_broadcaster_value_sat()),
5470                                 to_countersignatory_value_sat: Some(counterparty_commitment_tx.to_countersignatory_value_sat()),
5471                         }]
5472                 };
5473                 self.context.channel_state |= ChannelState::AwaitingRemoteRevoke as u32;
5474                 monitor_update
5475         }
5476
5477         fn build_commitment_no_state_update<L: Deref>(&self, logger: &L)
5478         -> (Vec<(HTLCOutputInCommitment, Option<&HTLCSource>)>, CommitmentTransaction)
5479         where L::Target: Logger
5480         {
5481                 let counterparty_keys = self.context.build_remote_transaction_keys();
5482                 let commitment_stats = self.context.build_commitment_transaction(self.context.cur_counterparty_commitment_transaction_number, &counterparty_keys, false, true, logger);
5483                 let counterparty_commitment_tx = commitment_stats.tx;
5484
5485                 #[cfg(any(test, fuzzing))]
5486                 {
5487                         if !self.context.is_outbound() {
5488                                 let projected_commit_tx_info = self.context.next_remote_commitment_tx_fee_info_cached.lock().unwrap().take();
5489                                 *self.context.next_local_commitment_tx_fee_info_cached.lock().unwrap() = None;
5490                                 if let Some(info) = projected_commit_tx_info {
5491                                         let total_pending_htlcs = self.context.pending_inbound_htlcs.len() + self.context.pending_outbound_htlcs.len();
5492                                         if info.total_pending_htlcs == total_pending_htlcs
5493                                                 && info.next_holder_htlc_id == self.context.next_holder_htlc_id
5494                                                 && info.next_counterparty_htlc_id == self.context.next_counterparty_htlc_id
5495                                                 && info.feerate == self.context.feerate_per_kw {
5496                                                         let actual_fee = commit_tx_fee_msat(self.context.feerate_per_kw, commitment_stats.num_nondust_htlcs, self.context.get_channel_type());
5497                                                         assert_eq!(actual_fee, info.fee);
5498                                                 }
5499                                 }
5500                         }
5501                 }
5502
5503                 (commitment_stats.htlcs_included, counterparty_commitment_tx)
5504         }
5505
5506         /// Only fails in case of signer rejection. Used for channel_reestablish commitment_signed
5507         /// generation when we shouldn't change HTLC/channel state.
5508         fn send_commitment_no_state_update<L: Deref>(&self, logger: &L) -> Result<(msgs::CommitmentSigned, (Txid, Vec<(HTLCOutputInCommitment, Option<&HTLCSource>)>)), ChannelError> where L::Target: Logger {
5509                 // Get the fee tests from `build_commitment_no_state_update`
5510                 #[cfg(any(test, fuzzing))]
5511                 self.build_commitment_no_state_update(logger);
5512
5513                 let counterparty_keys = self.context.build_remote_transaction_keys();
5514                 let commitment_stats = self.context.build_commitment_transaction(self.context.cur_counterparty_commitment_transaction_number, &counterparty_keys, false, true, logger);
5515                 let counterparty_commitment_txid = commitment_stats.tx.trust().txid();
5516
5517                 match &self.context.holder_signer {
5518                         ChannelSignerType::Ecdsa(ecdsa) => {
5519                                 let (signature, htlc_signatures);
5520
5521                                 {
5522                                         let mut htlcs = Vec::with_capacity(commitment_stats.htlcs_included.len());
5523                                         for &(ref htlc, _) in commitment_stats.htlcs_included.iter() {
5524                                                 htlcs.push(htlc);
5525                                         }
5526
5527                                         let res = ecdsa.sign_counterparty_commitment(&commitment_stats.tx, commitment_stats.preimages, &self.context.secp_ctx)
5528                                                 .map_err(|_| ChannelError::Close("Failed to get signatures for new commitment_signed".to_owned()))?;
5529                                         signature = res.0;
5530                                         htlc_signatures = res.1;
5531
5532                                         log_trace!(logger, "Signed remote commitment tx {} (txid {}) with redeemscript {} -> {} in channel {}",
5533                                                 encode::serialize_hex(&commitment_stats.tx.trust().built_transaction().transaction),
5534                                                 &counterparty_commitment_txid, encode::serialize_hex(&self.context.get_funding_redeemscript()),
5535                                                 log_bytes!(signature.serialize_compact()[..]), &self.context.channel_id());
5536
5537                                         for (ref htlc_sig, ref htlc) in htlc_signatures.iter().zip(htlcs) {
5538                                                 log_trace!(logger, "Signed remote HTLC tx {} with redeemscript {} with pubkey {} -> {} in channel {}",
5539                                                         encode::serialize_hex(&chan_utils::build_htlc_transaction(&counterparty_commitment_txid, commitment_stats.feerate_per_kw, self.context.get_holder_selected_contest_delay(), htlc, &self.context.channel_type, &counterparty_keys.broadcaster_delayed_payment_key, &counterparty_keys.revocation_key)),
5540                                                         encode::serialize_hex(&chan_utils::get_htlc_redeemscript(&htlc, &self.context.channel_type, &counterparty_keys)),
5541                                                         log_bytes!(counterparty_keys.broadcaster_htlc_key.serialize()),
5542                                                         log_bytes!(htlc_sig.serialize_compact()[..]), &self.context.channel_id());
5543                                         }
5544                                 }
5545
5546                                 Ok((msgs::CommitmentSigned {
5547                                         channel_id: self.context.channel_id,
5548                                         signature,
5549                                         htlc_signatures,
5550                                         #[cfg(taproot)]
5551                                         partial_signature_with_nonce: None,
5552                                 }, (counterparty_commitment_txid, commitment_stats.htlcs_included)))
5553                         }
5554                 }
5555         }
5556
5557         /// Adds a pending outbound HTLC to this channel, and builds a new remote commitment
5558         /// transaction and generates the corresponding [`ChannelMonitorUpdate`] in one go.
5559         ///
5560         /// Shorthand for calling [`Self::send_htlc`] followed by a commitment update, see docs on
5561         /// [`Self::send_htlc`] and [`Self::build_commitment_no_state_update`] for more info.
5562         pub fn send_htlc_and_commit<F: Deref, L: Deref>(
5563                 &mut self, amount_msat: u64, payment_hash: PaymentHash, cltv_expiry: u32,
5564                 source: HTLCSource, onion_routing_packet: msgs::OnionPacket, skimmed_fee_msat: Option<u64>,
5565                 fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L
5566         ) -> Result<Option<ChannelMonitorUpdate>, ChannelError>
5567         where F::Target: FeeEstimator, L::Target: Logger
5568         {
5569                 let send_res = self.send_htlc(amount_msat, payment_hash, cltv_expiry, source,
5570                         onion_routing_packet, false, skimmed_fee_msat, fee_estimator, logger);
5571                 if let Err(e) = &send_res { if let ChannelError::Ignore(_) = e {} else { debug_assert!(false, "Sending cannot trigger channel failure"); } }
5572                 match send_res? {
5573                         Some(_) => {
5574                                 let monitor_update = self.build_commitment_no_status_check(logger);
5575                                 self.monitor_updating_paused(false, true, false, Vec::new(), Vec::new(), Vec::new());
5576                                 Ok(self.push_ret_blockable_mon_update(monitor_update))
5577                         },
5578                         None => Ok(None)
5579                 }
5580         }
5581
5582         /// Applies the `ChannelUpdate` and returns a boolean indicating whether a change actually
5583         /// happened.
5584         pub fn channel_update(&mut self, msg: &msgs::ChannelUpdate) -> Result<bool, ChannelError> {
5585                 let new_forwarding_info = Some(CounterpartyForwardingInfo {
5586                         fee_base_msat: msg.contents.fee_base_msat,
5587                         fee_proportional_millionths: msg.contents.fee_proportional_millionths,
5588                         cltv_expiry_delta: msg.contents.cltv_expiry_delta
5589                 });
5590                 let did_change = self.context.counterparty_forwarding_info != new_forwarding_info;
5591                 if did_change {
5592                         self.context.counterparty_forwarding_info = new_forwarding_info;
5593                 }
5594
5595                 Ok(did_change)
5596         }
5597
5598         /// Begins the shutdown process, getting a message for the remote peer and returning all
5599         /// holding cell HTLCs for payment failure.
5600         ///
5601         /// May jump to the channel being fully shutdown (see [`Self::is_shutdown`]) in which case no
5602         /// [`ChannelMonitorUpdate`] will be returned).
5603         pub fn get_shutdown(&mut self, signer_provider: &SP, their_features: &InitFeatures,
5604                 target_feerate_sats_per_kw: Option<u32>, override_shutdown_script: Option<ShutdownScript>)
5605         -> Result<(msgs::Shutdown, Option<ChannelMonitorUpdate>, Vec<(HTLCSource, PaymentHash)>, Option<ShutdownResult>), APIError>
5606         {
5607                 for htlc in self.context.pending_outbound_htlcs.iter() {
5608                         if let OutboundHTLCState::LocalAnnounced(_) = htlc.state {
5609                                 return Err(APIError::APIMisuseError{err: "Cannot begin shutdown with pending HTLCs. Process pending events first".to_owned()});
5610                         }
5611                 }
5612                 if self.context.channel_state & BOTH_SIDES_SHUTDOWN_MASK != 0 {
5613                         if (self.context.channel_state & ChannelState::LocalShutdownSent as u32) == ChannelState::LocalShutdownSent as u32 {
5614                                 return Err(APIError::APIMisuseError{err: "Shutdown already in progress".to_owned()});
5615                         }
5616                         else if (self.context.channel_state & ChannelState::RemoteShutdownSent as u32) == ChannelState::RemoteShutdownSent as u32 {
5617                                 return Err(APIError::ChannelUnavailable{err: "Shutdown already in progress by remote".to_owned()});
5618                         }
5619                 }
5620                 if self.context.shutdown_scriptpubkey.is_some() && override_shutdown_script.is_some() {
5621                         return Err(APIError::APIMisuseError{err: "Cannot override shutdown script for a channel with one already set".to_owned()});
5622                 }
5623                 assert_eq!(self.context.channel_state & ChannelState::ShutdownComplete as u32, 0);
5624                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32 | ChannelState::MonitorUpdateInProgress as u32) != 0 {
5625                         return Err(APIError::ChannelUnavailable{err: "Cannot begin shutdown while peer is disconnected or we're waiting on a monitor update, maybe force-close instead?".to_owned()});
5626                 }
5627
5628                 // If we haven't funded the channel yet, we don't need to bother ensuring the shutdown
5629                 // script is set, we just force-close and call it a day.
5630                 let mut chan_closed = false;
5631                 if self.context.channel_state & !STATE_FLAGS < ChannelState::FundingSent as u32 {
5632                         chan_closed = true;
5633                 }
5634
5635                 let update_shutdown_script = match self.context.shutdown_scriptpubkey {
5636                         Some(_) => false,
5637                         None if !chan_closed => {
5638                                 // use override shutdown script if provided
5639                                 let shutdown_scriptpubkey = match override_shutdown_script {
5640                                         Some(script) => script,
5641                                         None => {
5642                                                 // otherwise, use the shutdown scriptpubkey provided by the signer
5643                                                 match signer_provider.get_shutdown_scriptpubkey() {
5644                                                         Ok(scriptpubkey) => scriptpubkey,
5645                                                         Err(_) => return Err(APIError::ChannelUnavailable{err: "Failed to get shutdown scriptpubkey".to_owned()}),
5646                                                 }
5647                                         },
5648                                 };
5649                                 if !shutdown_scriptpubkey.is_compatible(their_features) {
5650                                         return Err(APIError::IncompatibleShutdownScript { script: shutdown_scriptpubkey.clone() });
5651                                 }
5652                                 self.context.shutdown_scriptpubkey = Some(shutdown_scriptpubkey);
5653                                 true
5654                         },
5655                         None => false,
5656                 };
5657
5658                 // From here on out, we may not fail!
5659                 self.context.target_closing_feerate_sats_per_kw = target_feerate_sats_per_kw;
5660                 let shutdown_result = if self.context.channel_state & !STATE_FLAGS < ChannelState::FundingSent as u32 {
5661                         let shutdown_result = ShutdownResult {
5662                                 monitor_update: None,
5663                                 dropped_outbound_htlcs: Vec::new(),
5664                                 unbroadcasted_batch_funding_txid: self.context.unbroadcasted_batch_funding_txid(),
5665                         };
5666                         self.context.channel_state = ChannelState::ShutdownComplete as u32;
5667                         Some(shutdown_result)
5668                 } else {
5669                         self.context.channel_state |= ChannelState::LocalShutdownSent as u32;
5670                         None
5671                 };
5672                 self.context.update_time_counter += 1;
5673
5674                 let monitor_update = if update_shutdown_script {
5675                         self.context.latest_monitor_update_id += 1;
5676                         let monitor_update = ChannelMonitorUpdate {
5677                                 update_id: self.context.latest_monitor_update_id,
5678                                 updates: vec![ChannelMonitorUpdateStep::ShutdownScript {
5679                                         scriptpubkey: self.get_closing_scriptpubkey(),
5680                                 }],
5681                         };
5682                         self.monitor_updating_paused(false, false, false, Vec::new(), Vec::new(), Vec::new());
5683                         self.push_ret_blockable_mon_update(monitor_update)
5684                 } else { None };
5685                 let shutdown = msgs::Shutdown {
5686                         channel_id: self.context.channel_id,
5687                         scriptpubkey: self.get_closing_scriptpubkey(),
5688                 };
5689
5690                 // Go ahead and drop holding cell updates as we'd rather fail payments than wait to send
5691                 // our shutdown until we've committed all of the pending changes.
5692                 self.context.holding_cell_update_fee = None;
5693                 let mut dropped_outbound_htlcs = Vec::with_capacity(self.context.holding_cell_htlc_updates.len());
5694                 self.context.holding_cell_htlc_updates.retain(|htlc_update| {
5695                         match htlc_update {
5696                                 &HTLCUpdateAwaitingACK::AddHTLC { ref payment_hash, ref source, .. } => {
5697                                         dropped_outbound_htlcs.push((source.clone(), payment_hash.clone()));
5698                                         false
5699                                 },
5700                                 _ => true
5701                         }
5702                 });
5703
5704                 debug_assert!(!self.is_shutdown() || monitor_update.is_none(),
5705                         "we can't both complete shutdown and return a monitor update");
5706
5707                 Ok((shutdown, monitor_update, dropped_outbound_htlcs, shutdown_result))
5708         }
5709
5710         pub fn inflight_htlc_sources(&self) -> impl Iterator<Item=(&HTLCSource, &PaymentHash)> {
5711                 self.context.holding_cell_htlc_updates.iter()
5712                         .flat_map(|htlc_update| {
5713                                 match htlc_update {
5714                                         HTLCUpdateAwaitingACK::AddHTLC { source, payment_hash, .. }
5715                                                 => Some((source, payment_hash)),
5716                                         _ => None,
5717                                 }
5718                         })
5719                         .chain(self.context.pending_outbound_htlcs.iter().map(|htlc| (&htlc.source, &htlc.payment_hash)))
5720         }
5721 }
5722
5723 /// A not-yet-funded outbound (from holder) channel using V1 channel establishment.
5724 pub(super) struct OutboundV1Channel<SP: Deref> where SP::Target: SignerProvider {
5725         pub context: ChannelContext<SP>,
5726         pub unfunded_context: UnfundedChannelContext,
5727 }
5728
5729 impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
5730         pub fn new<ES: Deref, F: Deref>(
5731                 fee_estimator: &LowerBoundedFeeEstimator<F>, entropy_source: &ES, signer_provider: &SP, counterparty_node_id: PublicKey, their_features: &InitFeatures,
5732                 channel_value_satoshis: u64, push_msat: u64, user_id: u128, config: &UserConfig, current_chain_height: u32,
5733                 outbound_scid_alias: u64
5734         ) -> Result<OutboundV1Channel<SP>, APIError>
5735         where ES::Target: EntropySource,
5736               F::Target: FeeEstimator
5737         {
5738                 let holder_selected_contest_delay = config.channel_handshake_config.our_to_self_delay;
5739                 let channel_keys_id = signer_provider.generate_channel_keys_id(false, channel_value_satoshis, user_id);
5740                 let holder_signer = signer_provider.derive_channel_signer(channel_value_satoshis, channel_keys_id);
5741                 let pubkeys = holder_signer.pubkeys().clone();
5742
5743                 if !their_features.supports_wumbo() && channel_value_satoshis > MAX_FUNDING_SATOSHIS_NO_WUMBO {
5744                         return Err(APIError::APIMisuseError{err: format!("funding_value must not exceed {}, it was {}", MAX_FUNDING_SATOSHIS_NO_WUMBO, channel_value_satoshis)});
5745                 }
5746                 if channel_value_satoshis >= TOTAL_BITCOIN_SUPPLY_SATOSHIS {
5747                         return Err(APIError::APIMisuseError{err: format!("funding_value must be smaller than the total bitcoin supply, it was {}", channel_value_satoshis)});
5748                 }
5749                 let channel_value_msat = channel_value_satoshis * 1000;
5750                 if push_msat > channel_value_msat {
5751                         return Err(APIError::APIMisuseError { err: format!("Push value ({}) was larger than channel_value ({})", push_msat, channel_value_msat) });
5752                 }
5753                 if holder_selected_contest_delay < BREAKDOWN_TIMEOUT {
5754                         return Err(APIError::APIMisuseError {err: format!("Configured with an unreasonable our_to_self_delay ({}) putting user funds at risks", holder_selected_contest_delay)});
5755                 }
5756                 let holder_selected_channel_reserve_satoshis = get_holder_selected_channel_reserve_satoshis(channel_value_satoshis, config);
5757                 if holder_selected_channel_reserve_satoshis < MIN_CHAN_DUST_LIMIT_SATOSHIS {
5758                         // Protocol level safety check in place, although it should never happen because
5759                         // of `MIN_THEIR_CHAN_RESERVE_SATOSHIS`
5760                         return Err(APIError::APIMisuseError { err: format!("Holder selected channel  reserve below implemention limit dust_limit_satoshis {}", holder_selected_channel_reserve_satoshis) });
5761                 }
5762
5763                 let channel_type = Self::get_initial_channel_type(&config, their_features);
5764                 debug_assert!(channel_type.is_subset(&channelmanager::provided_channel_type_features(&config)));
5765
5766                 let (commitment_conf_target, anchor_outputs_value_msat)  = if channel_type.supports_anchors_zero_fee_htlc_tx() {
5767                         (ConfirmationTarget::AnchorChannelFee, ANCHOR_OUTPUT_VALUE_SATOSHI * 2 * 1000)
5768                 } else {
5769                         (ConfirmationTarget::NonAnchorChannelFee, 0)
5770                 };
5771                 let commitment_feerate = fee_estimator.bounded_sat_per_1000_weight(commitment_conf_target);
5772
5773                 let value_to_self_msat = channel_value_satoshis * 1000 - push_msat;
5774                 let commitment_tx_fee = commit_tx_fee_msat(commitment_feerate, MIN_AFFORDABLE_HTLC_COUNT, &channel_type);
5775                 if value_to_self_msat.saturating_sub(anchor_outputs_value_msat) < commitment_tx_fee {
5776                         return Err(APIError::APIMisuseError{ err: format!("Funding amount ({}) can't even pay fee for initial commitment transaction fee of {}.", value_to_self_msat / 1000, commitment_tx_fee / 1000) });
5777                 }
5778
5779                 let mut secp_ctx = Secp256k1::new();
5780                 secp_ctx.seeded_randomize(&entropy_source.get_secure_random_bytes());
5781
5782                 let shutdown_scriptpubkey = if config.channel_handshake_config.commit_upfront_shutdown_pubkey {
5783                         match signer_provider.get_shutdown_scriptpubkey() {
5784                                 Ok(scriptpubkey) => Some(scriptpubkey),
5785                                 Err(_) => return Err(APIError::ChannelUnavailable { err: "Failed to get shutdown scriptpubkey".to_owned()}),
5786                         }
5787                 } else { None };
5788
5789                 if let Some(shutdown_scriptpubkey) = &shutdown_scriptpubkey {
5790                         if !shutdown_scriptpubkey.is_compatible(&their_features) {
5791                                 return Err(APIError::IncompatibleShutdownScript { script: shutdown_scriptpubkey.clone() });
5792                         }
5793                 }
5794
5795                 let destination_script = match signer_provider.get_destination_script() {
5796                         Ok(script) => script,
5797                         Err(_) => return Err(APIError::ChannelUnavailable { err: "Failed to get destination script".to_owned()}),
5798                 };
5799
5800                 let temporary_channel_id = ChannelId::temporary_from_entropy_source(entropy_source);
5801
5802                 Ok(Self {
5803                         context: ChannelContext {
5804                                 user_id,
5805
5806                                 config: LegacyChannelConfig {
5807                                         options: config.channel_config.clone(),
5808                                         announced_channel: config.channel_handshake_config.announced_channel,
5809                                         commit_upfront_shutdown_pubkey: config.channel_handshake_config.commit_upfront_shutdown_pubkey,
5810                                 },
5811
5812                                 prev_config: None,
5813
5814                                 inbound_handshake_limits_override: Some(config.channel_handshake_limits.clone()),
5815
5816                                 channel_id: temporary_channel_id,
5817                                 temporary_channel_id: Some(temporary_channel_id),
5818                                 channel_state: ChannelState::OurInitSent as u32,
5819                                 announcement_sigs_state: AnnouncementSigsState::NotSent,
5820                                 secp_ctx,
5821                                 channel_value_satoshis,
5822
5823                                 latest_monitor_update_id: 0,
5824
5825                                 holder_signer: ChannelSignerType::Ecdsa(holder_signer),
5826                                 shutdown_scriptpubkey,
5827                                 destination_script,
5828
5829                                 cur_holder_commitment_transaction_number: INITIAL_COMMITMENT_NUMBER,
5830                                 cur_counterparty_commitment_transaction_number: INITIAL_COMMITMENT_NUMBER,
5831                                 value_to_self_msat,
5832
5833                                 pending_inbound_htlcs: Vec::new(),
5834                                 pending_outbound_htlcs: Vec::new(),
5835                                 holding_cell_htlc_updates: Vec::new(),
5836                                 pending_update_fee: None,
5837                                 holding_cell_update_fee: None,
5838                                 next_holder_htlc_id: 0,
5839                                 next_counterparty_htlc_id: 0,
5840                                 update_time_counter: 1,
5841
5842                                 resend_order: RAACommitmentOrder::CommitmentFirst,
5843
5844                                 monitor_pending_channel_ready: false,
5845                                 monitor_pending_revoke_and_ack: false,
5846                                 monitor_pending_commitment_signed: false,
5847                                 monitor_pending_forwards: Vec::new(),
5848                                 monitor_pending_failures: Vec::new(),
5849                                 monitor_pending_finalized_fulfills: Vec::new(),
5850
5851                                 #[cfg(debug_assertions)]
5852                                 holder_max_commitment_tx_output: Mutex::new((channel_value_satoshis * 1000 - push_msat, push_msat)),
5853                                 #[cfg(debug_assertions)]
5854                                 counterparty_max_commitment_tx_output: Mutex::new((channel_value_satoshis * 1000 - push_msat, push_msat)),
5855
5856                                 last_sent_closing_fee: None,
5857                                 pending_counterparty_closing_signed: None,
5858                                 closing_fee_limits: None,
5859                                 target_closing_feerate_sats_per_kw: None,
5860
5861                                 funding_tx_confirmed_in: None,
5862                                 funding_tx_confirmation_height: 0,
5863                                 short_channel_id: None,
5864                                 channel_creation_height: current_chain_height,
5865
5866                                 feerate_per_kw: commitment_feerate,
5867                                 counterparty_dust_limit_satoshis: 0,
5868                                 holder_dust_limit_satoshis: MIN_CHAN_DUST_LIMIT_SATOSHIS,
5869                                 counterparty_max_htlc_value_in_flight_msat: 0,
5870                                 holder_max_htlc_value_in_flight_msat: get_holder_max_htlc_value_in_flight_msat(channel_value_satoshis, &config.channel_handshake_config),
5871                                 counterparty_selected_channel_reserve_satoshis: None, // Filled in in accept_channel
5872                                 holder_selected_channel_reserve_satoshis,
5873                                 counterparty_htlc_minimum_msat: 0,
5874                                 holder_htlc_minimum_msat: if config.channel_handshake_config.our_htlc_minimum_msat == 0 { 1 } else { config.channel_handshake_config.our_htlc_minimum_msat },
5875                                 counterparty_max_accepted_htlcs: 0,
5876                                 holder_max_accepted_htlcs: cmp::min(config.channel_handshake_config.our_max_accepted_htlcs, MAX_HTLCS),
5877                                 minimum_depth: None, // Filled in in accept_channel
5878
5879                                 counterparty_forwarding_info: None,
5880
5881                                 channel_transaction_parameters: ChannelTransactionParameters {
5882                                         holder_pubkeys: pubkeys,
5883                                         holder_selected_contest_delay: config.channel_handshake_config.our_to_self_delay,
5884                                         is_outbound_from_holder: true,
5885                                         counterparty_parameters: None,
5886                                         funding_outpoint: None,
5887                                         channel_type_features: channel_type.clone()
5888                                 },
5889                                 funding_transaction: None,
5890                                 is_batch_funding: None,
5891
5892                                 counterparty_cur_commitment_point: None,
5893                                 counterparty_prev_commitment_point: None,
5894                                 counterparty_node_id,
5895
5896                                 counterparty_shutdown_scriptpubkey: None,
5897
5898                                 commitment_secrets: CounterpartyCommitmentSecrets::new(),
5899
5900                                 channel_update_status: ChannelUpdateStatus::Enabled,
5901                                 closing_signed_in_flight: false,
5902
5903                                 announcement_sigs: None,
5904
5905                                 #[cfg(any(test, fuzzing))]
5906                                 next_local_commitment_tx_fee_info_cached: Mutex::new(None),
5907                                 #[cfg(any(test, fuzzing))]
5908                                 next_remote_commitment_tx_fee_info_cached: Mutex::new(None),
5909
5910                                 workaround_lnd_bug_4006: None,
5911                                 sent_message_awaiting_response: None,
5912
5913                                 latest_inbound_scid_alias: None,
5914                                 outbound_scid_alias,
5915
5916                                 channel_pending_event_emitted: false,
5917                                 channel_ready_event_emitted: false,
5918
5919                                 #[cfg(any(test, fuzzing))]
5920                                 historical_inbound_htlc_fulfills: HashSet::new(),
5921
5922                                 channel_type,
5923                                 channel_keys_id,
5924
5925                                 blocked_monitor_updates: Vec::new(),
5926                         },
5927                         unfunded_context: UnfundedChannelContext { unfunded_channel_age_ticks: 0 }
5928                 })
5929         }
5930
5931         /// If an Err is returned, it is a ChannelError::Close (for get_funding_created)
5932         fn get_funding_created_signature<L: Deref>(&mut self, logger: &L) -> Result<Signature, ChannelError> where L::Target: Logger {
5933                 let counterparty_keys = self.context.build_remote_transaction_keys();
5934                 let counterparty_initial_commitment_tx = self.context.build_commitment_transaction(self.context.cur_counterparty_commitment_transaction_number, &counterparty_keys, false, false, logger).tx;
5935                 match &self.context.holder_signer {
5936                         // TODO (taproot|arik): move match into calling method for Taproot
5937                         ChannelSignerType::Ecdsa(ecdsa) => {
5938                                 Ok(ecdsa.sign_counterparty_commitment(&counterparty_initial_commitment_tx, Vec::new(), &self.context.secp_ctx)
5939                                         .map_err(|_| ChannelError::Close("Failed to get signatures for new commitment_signed".to_owned()))?.0)
5940                         }
5941                 }
5942         }
5943
5944         /// Updates channel state with knowledge of the funding transaction's txid/index, and generates
5945         /// a funding_created message for the remote peer.
5946         /// Panics if called at some time other than immediately after initial handshake, if called twice,
5947         /// or if called on an inbound channel.
5948         /// Note that channel_id changes during this call!
5949         /// Do NOT broadcast the funding transaction until after a successful funding_signed call!
5950         /// If an Err is returned, it is a ChannelError::Close.
5951         pub fn get_funding_created<L: Deref>(mut self, funding_transaction: Transaction, funding_txo: OutPoint, is_batch_funding: bool, logger: &L)
5952         -> Result<(Channel<SP>, msgs::FundingCreated), (Self, ChannelError)> where L::Target: Logger {
5953                 if !self.context.is_outbound() {
5954                         panic!("Tried to create outbound funding_created message on an inbound channel!");
5955                 }
5956                 if self.context.channel_state != (ChannelState::OurInitSent as u32 | ChannelState::TheirInitSent as u32) {
5957                         panic!("Tried to get a funding_created messsage at a time other than immediately after initial handshake completion (or tried to get funding_created twice)");
5958                 }
5959                 if self.context.commitment_secrets.get_min_seen_secret() != (1 << 48) ||
5960                                 self.context.cur_counterparty_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER ||
5961                                 self.context.cur_holder_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER {
5962                         panic!("Should not have advanced channel commitment tx numbers prior to funding_created");
5963                 }
5964
5965                 self.context.channel_transaction_parameters.funding_outpoint = Some(funding_txo);
5966                 self.context.holder_signer.as_mut().provide_channel_parameters(&self.context.channel_transaction_parameters);
5967
5968                 let signature = match self.get_funding_created_signature(logger) {
5969                         Ok(res) => res,
5970                         Err(e) => {
5971                                 log_error!(logger, "Got bad signatures: {:?}!", e);
5972                                 self.context.channel_transaction_parameters.funding_outpoint = None;
5973                                 return Err((self, e));
5974                         }
5975                 };
5976
5977                 let temporary_channel_id = self.context.channel_id;
5978
5979                 // Now that we're past error-generating stuff, update our local state:
5980
5981                 self.context.channel_state = ChannelState::FundingCreated as u32;
5982                 self.context.channel_id = funding_txo.to_channel_id();
5983
5984                 // If the funding transaction is a coinbase transaction, we need to set the minimum depth to 100.
5985                 // We can skip this if it is a zero-conf channel.
5986                 if funding_transaction.is_coin_base() &&
5987                         self.context.minimum_depth.unwrap_or(0) > 0 &&
5988                         self.context.minimum_depth.unwrap_or(0) < COINBASE_MATURITY {
5989                         self.context.minimum_depth = Some(COINBASE_MATURITY);
5990                 }
5991
5992                 self.context.funding_transaction = Some(funding_transaction);
5993                 self.context.is_batch_funding = Some(()).filter(|_| is_batch_funding);
5994
5995                 let channel = Channel {
5996                         context: self.context,
5997                 };
5998
5999                 Ok((channel, msgs::FundingCreated {
6000                         temporary_channel_id,
6001                         funding_txid: funding_txo.txid,
6002                         funding_output_index: funding_txo.index,
6003                         signature,
6004                         #[cfg(taproot)]
6005                         partial_signature_with_nonce: None,
6006                         #[cfg(taproot)]
6007                         next_local_nonce: None,
6008                 }))
6009         }
6010
6011         fn get_initial_channel_type(config: &UserConfig, their_features: &InitFeatures) -> ChannelTypeFeatures {
6012                 // The default channel type (ie the first one we try) depends on whether the channel is
6013                 // public - if it is, we just go with `only_static_remotekey` as it's the only option
6014                 // available. If it's private, we first try `scid_privacy` as it provides better privacy
6015                 // with no other changes, and fall back to `only_static_remotekey`.
6016                 let mut ret = ChannelTypeFeatures::only_static_remote_key();
6017                 if !config.channel_handshake_config.announced_channel &&
6018                         config.channel_handshake_config.negotiate_scid_privacy &&
6019                         their_features.supports_scid_privacy() {
6020                         ret.set_scid_privacy_required();
6021                 }
6022
6023                 // Optionally, if the user would like to negotiate the `anchors_zero_fee_htlc_tx` option, we
6024                 // set it now. If they don't understand it, we'll fall back to our default of
6025                 // `only_static_remotekey`.
6026                 if config.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx &&
6027                         their_features.supports_anchors_zero_fee_htlc_tx() {
6028                         ret.set_anchors_zero_fee_htlc_tx_required();
6029                 }
6030
6031                 ret
6032         }
6033
6034         /// If we receive an error message, it may only be a rejection of the channel type we tried,
6035         /// not of our ability to open any channel at all. Thus, on error, we should first call this
6036         /// and see if we get a new `OpenChannel` message, otherwise the channel is failed.
6037         pub(crate) fn maybe_handle_error_without_close<F: Deref>(
6038                 &mut self, chain_hash: ChainHash, fee_estimator: &LowerBoundedFeeEstimator<F>
6039         ) -> Result<msgs::OpenChannel, ()>
6040         where
6041                 F::Target: FeeEstimator
6042         {
6043                 if !self.context.is_outbound() || self.context.channel_state != ChannelState::OurInitSent as u32 { return Err(()); }
6044                 if self.context.channel_type == ChannelTypeFeatures::only_static_remote_key() {
6045                         // We've exhausted our options
6046                         return Err(());
6047                 }
6048                 // We support opening a few different types of channels. Try removing our additional
6049                 // features one by one until we've either arrived at our default or the counterparty has
6050                 // accepted one.
6051                 //
6052                 // Due to the order below, we may not negotiate `option_anchors_zero_fee_htlc_tx` if the
6053                 // counterparty doesn't support `option_scid_privacy`. Since `get_initial_channel_type`
6054                 // checks whether the counterparty supports every feature, this would only happen if the
6055                 // counterparty is advertising the feature, but rejecting channels proposing the feature for
6056                 // whatever reason.
6057                 if self.context.channel_type.supports_anchors_zero_fee_htlc_tx() {
6058                         self.context.channel_type.clear_anchors_zero_fee_htlc_tx();
6059                         self.context.feerate_per_kw = fee_estimator.bounded_sat_per_1000_weight(ConfirmationTarget::NonAnchorChannelFee);
6060                         assert!(!self.context.channel_transaction_parameters.channel_type_features.supports_anchors_nonzero_fee_htlc_tx());
6061                 } else if self.context.channel_type.supports_scid_privacy() {
6062                         self.context.channel_type.clear_scid_privacy();
6063                 } else {
6064                         self.context.channel_type = ChannelTypeFeatures::only_static_remote_key();
6065                 }
6066                 self.context.channel_transaction_parameters.channel_type_features = self.context.channel_type.clone();
6067                 Ok(self.get_open_channel(chain_hash))
6068         }
6069
6070         pub fn get_open_channel(&self, chain_hash: ChainHash) -> msgs::OpenChannel {
6071                 if !self.context.is_outbound() {
6072                         panic!("Tried to open a channel for an inbound channel?");
6073                 }
6074                 if self.context.channel_state != ChannelState::OurInitSent as u32 {
6075                         panic!("Cannot generate an open_channel after we've moved forward");
6076                 }
6077
6078                 if self.context.cur_holder_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER {
6079                         panic!("Tried to send an open_channel for a channel that has already advanced");
6080                 }
6081
6082                 let first_per_commitment_point = self.context.holder_signer.as_ref().get_per_commitment_point(self.context.cur_holder_commitment_transaction_number, &self.context.secp_ctx);
6083                 let keys = self.context.get_holder_pubkeys();
6084
6085                 msgs::OpenChannel {
6086                         chain_hash,
6087                         temporary_channel_id: self.context.channel_id,
6088                         funding_satoshis: self.context.channel_value_satoshis,
6089                         push_msat: self.context.channel_value_satoshis * 1000 - self.context.value_to_self_msat,
6090                         dust_limit_satoshis: self.context.holder_dust_limit_satoshis,
6091                         max_htlc_value_in_flight_msat: self.context.holder_max_htlc_value_in_flight_msat,
6092                         channel_reserve_satoshis: self.context.holder_selected_channel_reserve_satoshis,
6093                         htlc_minimum_msat: self.context.holder_htlc_minimum_msat,
6094                         feerate_per_kw: self.context.feerate_per_kw as u32,
6095                         to_self_delay: self.context.get_holder_selected_contest_delay(),
6096                         max_accepted_htlcs: self.context.holder_max_accepted_htlcs,
6097                         funding_pubkey: keys.funding_pubkey,
6098                         revocation_basepoint: keys.revocation_basepoint,
6099                         payment_point: keys.payment_point,
6100                         delayed_payment_basepoint: keys.delayed_payment_basepoint,
6101                         htlc_basepoint: keys.htlc_basepoint,
6102                         first_per_commitment_point,
6103                         channel_flags: if self.context.config.announced_channel {1} else {0},
6104                         shutdown_scriptpubkey: Some(match &self.context.shutdown_scriptpubkey {
6105                                 Some(script) => script.clone().into_inner(),
6106                                 None => Builder::new().into_script(),
6107                         }),
6108                         channel_type: Some(self.context.channel_type.clone()),
6109                 }
6110         }
6111
6112         // Message handlers
6113         pub fn accept_channel(&mut self, msg: &msgs::AcceptChannel, default_limits: &ChannelHandshakeLimits, their_features: &InitFeatures) -> Result<(), ChannelError> {
6114                 let peer_limits = if let Some(ref limits) = self.context.inbound_handshake_limits_override { limits } else { default_limits };
6115
6116                 // Check sanity of message fields:
6117                 if !self.context.is_outbound() {
6118                         return Err(ChannelError::Close("Got an accept_channel message from an inbound peer".to_owned()));
6119                 }
6120                 if self.context.channel_state != ChannelState::OurInitSent as u32 {
6121                         return Err(ChannelError::Close("Got an accept_channel message at a strange time".to_owned()));
6122                 }
6123                 if msg.dust_limit_satoshis > 21000000 * 100000000 {
6124                         return Err(ChannelError::Close(format!("Peer never wants payout outputs? dust_limit_satoshis was {}", msg.dust_limit_satoshis)));
6125                 }
6126                 if msg.channel_reserve_satoshis > self.context.channel_value_satoshis {
6127                         return Err(ChannelError::Close(format!("Bogus channel_reserve_satoshis ({}). Must not be greater than ({})", msg.channel_reserve_satoshis, self.context.channel_value_satoshis)));
6128                 }
6129                 if msg.dust_limit_satoshis > self.context.holder_selected_channel_reserve_satoshis {
6130                         return Err(ChannelError::Close(format!("Dust limit ({}) is bigger than our channel reserve ({})", msg.dust_limit_satoshis, self.context.holder_selected_channel_reserve_satoshis)));
6131                 }
6132                 if msg.channel_reserve_satoshis > self.context.channel_value_satoshis - self.context.holder_selected_channel_reserve_satoshis {
6133                         return Err(ChannelError::Close(format!("Bogus channel_reserve_satoshis ({}). Must not be greater than channel value minus our reserve ({})",
6134                                 msg.channel_reserve_satoshis, self.context.channel_value_satoshis - self.context.holder_selected_channel_reserve_satoshis)));
6135                 }
6136                 let full_channel_value_msat = (self.context.channel_value_satoshis - msg.channel_reserve_satoshis) * 1000;
6137                 if msg.htlc_minimum_msat >= full_channel_value_msat {
6138                         return Err(ChannelError::Close(format!("Minimum htlc value ({}) is full channel value ({})", msg.htlc_minimum_msat, full_channel_value_msat)));
6139                 }
6140                 let max_delay_acceptable = u16::min(peer_limits.their_to_self_delay, MAX_LOCAL_BREAKDOWN_TIMEOUT);
6141                 if msg.to_self_delay > max_delay_acceptable {
6142                         return Err(ChannelError::Close(format!("They wanted our payments to be delayed by a needlessly long period. Upper limit: {}. Actual: {}", max_delay_acceptable, msg.to_self_delay)));
6143                 }
6144                 if msg.max_accepted_htlcs < 1 {
6145                         return Err(ChannelError::Close("0 max_accepted_htlcs makes for a useless channel".to_owned()));
6146                 }
6147                 if msg.max_accepted_htlcs > MAX_HTLCS {
6148                         return Err(ChannelError::Close(format!("max_accepted_htlcs was {}. It must not be larger than {}", msg.max_accepted_htlcs, MAX_HTLCS)));
6149                 }
6150
6151                 // Now check against optional parameters as set by config...
6152                 if msg.htlc_minimum_msat > peer_limits.max_htlc_minimum_msat {
6153                         return Err(ChannelError::Close(format!("htlc_minimum_msat ({}) is higher than the user specified limit ({})", msg.htlc_minimum_msat, peer_limits.max_htlc_minimum_msat)));
6154                 }
6155                 if msg.max_htlc_value_in_flight_msat < peer_limits.min_max_htlc_value_in_flight_msat {
6156                         return Err(ChannelError::Close(format!("max_htlc_value_in_flight_msat ({}) is less than the user specified limit ({})", msg.max_htlc_value_in_flight_msat, peer_limits.min_max_htlc_value_in_flight_msat)));
6157                 }
6158                 if msg.channel_reserve_satoshis > peer_limits.max_channel_reserve_satoshis {
6159                         return Err(ChannelError::Close(format!("channel_reserve_satoshis ({}) is higher than the user specified limit ({})", msg.channel_reserve_satoshis, peer_limits.max_channel_reserve_satoshis)));
6160                 }
6161                 if msg.max_accepted_htlcs < peer_limits.min_max_accepted_htlcs {
6162                         return Err(ChannelError::Close(format!("max_accepted_htlcs ({}) is less than the user specified limit ({})", msg.max_accepted_htlcs, peer_limits.min_max_accepted_htlcs)));
6163                 }
6164                 if msg.dust_limit_satoshis < MIN_CHAN_DUST_LIMIT_SATOSHIS {
6165                         return Err(ChannelError::Close(format!("dust_limit_satoshis ({}) is less than the implementation limit ({})", msg.dust_limit_satoshis, MIN_CHAN_DUST_LIMIT_SATOSHIS)));
6166                 }
6167                 if msg.dust_limit_satoshis > MAX_CHAN_DUST_LIMIT_SATOSHIS {
6168                         return Err(ChannelError::Close(format!("dust_limit_satoshis ({}) is greater than the implementation limit ({})", msg.dust_limit_satoshis, MAX_CHAN_DUST_LIMIT_SATOSHIS)));
6169                 }
6170                 if msg.minimum_depth > peer_limits.max_minimum_depth {
6171                         return Err(ChannelError::Close(format!("We consider the minimum depth to be unreasonably large. Expected minimum: ({}). Actual: ({})", peer_limits.max_minimum_depth, msg.minimum_depth)));
6172                 }
6173
6174                 if let Some(ty) = &msg.channel_type {
6175                         if *ty != self.context.channel_type {
6176                                 return Err(ChannelError::Close("Channel Type in accept_channel didn't match the one sent in open_channel.".to_owned()));
6177                         }
6178                 } else if their_features.supports_channel_type() {
6179                         // Assume they've accepted the channel type as they said they understand it.
6180                 } else {
6181                         let channel_type = ChannelTypeFeatures::from_init(&their_features);
6182                         if channel_type != ChannelTypeFeatures::only_static_remote_key() {
6183                                 return Err(ChannelError::Close("Only static_remote_key is supported for non-negotiated channel types".to_owned()));
6184                         }
6185                         self.context.channel_type = channel_type.clone();
6186                         self.context.channel_transaction_parameters.channel_type_features = channel_type;
6187                 }
6188
6189                 let counterparty_shutdown_scriptpubkey = if their_features.supports_upfront_shutdown_script() {
6190                         match &msg.shutdown_scriptpubkey {
6191                                 &Some(ref script) => {
6192                                         // Peer is signaling upfront_shutdown and has opt-out with a 0-length script. We don't enforce anything
6193                                         if script.len() == 0 {
6194                                                 None
6195                                         } else {
6196                                                 if !script::is_bolt2_compliant(&script, their_features) {
6197                                                         return Err(ChannelError::Close(format!("Peer is signaling upfront_shutdown but has provided an unacceptable scriptpubkey format: {}", script)));
6198                                                 }
6199                                                 Some(script.clone())
6200                                         }
6201                                 },
6202                                 // Peer is signaling upfront shutdown but don't opt-out with correct mechanism (a.k.a 0-length script). Peer looks buggy, we fail the channel
6203                                 &None => {
6204                                         return Err(ChannelError::Close("Peer is signaling upfront_shutdown but we don't get any script. Use 0-length script to opt-out".to_owned()));
6205                                 }
6206                         }
6207                 } else { None };
6208
6209                 self.context.counterparty_dust_limit_satoshis = msg.dust_limit_satoshis;
6210                 self.context.counterparty_max_htlc_value_in_flight_msat = cmp::min(msg.max_htlc_value_in_flight_msat, self.context.channel_value_satoshis * 1000);
6211                 self.context.counterparty_selected_channel_reserve_satoshis = Some(msg.channel_reserve_satoshis);
6212                 self.context.counterparty_htlc_minimum_msat = msg.htlc_minimum_msat;
6213                 self.context.counterparty_max_accepted_htlcs = msg.max_accepted_htlcs;
6214
6215                 if peer_limits.trust_own_funding_0conf {
6216                         self.context.minimum_depth = Some(msg.minimum_depth);
6217                 } else {
6218                         self.context.minimum_depth = Some(cmp::max(1, msg.minimum_depth));
6219                 }
6220
6221                 let counterparty_pubkeys = ChannelPublicKeys {
6222                         funding_pubkey: msg.funding_pubkey,
6223                         revocation_basepoint: msg.revocation_basepoint,
6224                         payment_point: msg.payment_point,
6225                         delayed_payment_basepoint: msg.delayed_payment_basepoint,
6226                         htlc_basepoint: msg.htlc_basepoint
6227                 };
6228
6229                 self.context.channel_transaction_parameters.counterparty_parameters = Some(CounterpartyChannelTransactionParameters {
6230                         selected_contest_delay: msg.to_self_delay,
6231                         pubkeys: counterparty_pubkeys,
6232                 });
6233
6234                 self.context.counterparty_cur_commitment_point = Some(msg.first_per_commitment_point);
6235                 self.context.counterparty_shutdown_scriptpubkey = counterparty_shutdown_scriptpubkey;
6236
6237                 self.context.channel_state = ChannelState::OurInitSent as u32 | ChannelState::TheirInitSent as u32;
6238                 self.context.inbound_handshake_limits_override = None; // We're done enforcing limits on our peer's handshake now.
6239
6240                 Ok(())
6241         }
6242 }
6243
6244 /// A not-yet-funded inbound (from counterparty) channel using V1 channel establishment.
6245 pub(super) struct InboundV1Channel<SP: Deref> where SP::Target: SignerProvider {
6246         pub context: ChannelContext<SP>,
6247         pub unfunded_context: UnfundedChannelContext,
6248 }
6249
6250 impl<SP: Deref> InboundV1Channel<SP> where SP::Target: SignerProvider {
6251         /// Creates a new channel from a remote sides' request for one.
6252         /// Assumes chain_hash has already been checked and corresponds with what we expect!
6253         pub fn new<ES: Deref, F: Deref, L: Deref>(
6254                 fee_estimator: &LowerBoundedFeeEstimator<F>, entropy_source: &ES, signer_provider: &SP,
6255                 counterparty_node_id: PublicKey, our_supported_features: &ChannelTypeFeatures,
6256                 their_features: &InitFeatures, msg: &msgs::OpenChannel, user_id: u128, config: &UserConfig,
6257                 current_chain_height: u32, logger: &L, is_0conf: bool,
6258         ) -> Result<InboundV1Channel<SP>, ChannelError>
6259                 where ES::Target: EntropySource,
6260                           F::Target: FeeEstimator,
6261                           L::Target: Logger,
6262         {
6263                 let announced_channel = if (msg.channel_flags & 1) == 1 { true } else { false };
6264
6265                 // First check the channel type is known, failing before we do anything else if we don't
6266                 // support this channel type.
6267                 let channel_type = if let Some(channel_type) = &msg.channel_type {
6268                         if channel_type.supports_any_optional_bits() {
6269                                 return Err(ChannelError::Close("Channel Type field contained optional bits - this is not allowed".to_owned()));
6270                         }
6271
6272                         // We only support the channel types defined by the `ChannelManager` in
6273                         // `provided_channel_type_features`. The channel type must always support
6274                         // `static_remote_key`.
6275                         if !channel_type.requires_static_remote_key() {
6276                                 return Err(ChannelError::Close("Channel Type was not understood - we require static remote key".to_owned()));
6277                         }
6278                         // Make sure we support all of the features behind the channel type.
6279                         if !channel_type.is_subset(our_supported_features) {
6280                                 return Err(ChannelError::Close("Channel Type contains unsupported features".to_owned()));
6281                         }
6282                         if channel_type.requires_scid_privacy() && announced_channel {
6283                                 return Err(ChannelError::Close("SCID Alias/Privacy Channel Type cannot be set on a public channel".to_owned()));
6284                         }
6285                         channel_type.clone()
6286                 } else {
6287                         let channel_type = ChannelTypeFeatures::from_init(&their_features);
6288                         if channel_type != ChannelTypeFeatures::only_static_remote_key() {
6289                                 return Err(ChannelError::Close("Only static_remote_key is supported for non-negotiated channel types".to_owned()));
6290                         }
6291                         channel_type
6292                 };
6293
6294                 let channel_keys_id = signer_provider.generate_channel_keys_id(true, msg.funding_satoshis, user_id);
6295                 let holder_signer = signer_provider.derive_channel_signer(msg.funding_satoshis, channel_keys_id);
6296                 let pubkeys = holder_signer.pubkeys().clone();
6297                 let counterparty_pubkeys = ChannelPublicKeys {
6298                         funding_pubkey: msg.funding_pubkey,
6299                         revocation_basepoint: msg.revocation_basepoint,
6300                         payment_point: msg.payment_point,
6301                         delayed_payment_basepoint: msg.delayed_payment_basepoint,
6302                         htlc_basepoint: msg.htlc_basepoint
6303                 };
6304
6305                 if config.channel_handshake_config.our_to_self_delay < BREAKDOWN_TIMEOUT {
6306                         return Err(ChannelError::Close(format!("Configured with an unreasonable our_to_self_delay ({}) putting user funds at risks. It must be greater than {}", config.channel_handshake_config.our_to_self_delay, BREAKDOWN_TIMEOUT)));
6307                 }
6308
6309                 // Check sanity of message fields:
6310                 if msg.funding_satoshis > config.channel_handshake_limits.max_funding_satoshis {
6311                         return Err(ChannelError::Close(format!("Per our config, funding must be at most {}. It was {}", config.channel_handshake_limits.max_funding_satoshis, msg.funding_satoshis)));
6312                 }
6313                 if msg.funding_satoshis >= TOTAL_BITCOIN_SUPPLY_SATOSHIS {
6314                         return Err(ChannelError::Close(format!("Funding must be smaller than the total bitcoin supply. It was {}", msg.funding_satoshis)));
6315                 }
6316                 if msg.channel_reserve_satoshis > msg.funding_satoshis {
6317                         return Err(ChannelError::Close(format!("Bogus channel_reserve_satoshis ({}). Must be not greater than funding_satoshis: {}", msg.channel_reserve_satoshis, msg.funding_satoshis)));
6318                 }
6319                 let full_channel_value_msat = (msg.funding_satoshis - msg.channel_reserve_satoshis) * 1000;
6320                 if msg.push_msat > full_channel_value_msat {
6321                         return Err(ChannelError::Close(format!("push_msat {} was larger than channel amount minus reserve ({})", msg.push_msat, full_channel_value_msat)));
6322                 }
6323                 if msg.dust_limit_satoshis > msg.funding_satoshis {
6324                         return Err(ChannelError::Close(format!("dust_limit_satoshis {} was larger than funding_satoshis {}. Peer never wants payout outputs?", msg.dust_limit_satoshis, msg.funding_satoshis)));
6325                 }
6326                 if msg.htlc_minimum_msat >= full_channel_value_msat {
6327                         return Err(ChannelError::Close(format!("Minimum htlc value ({}) was larger than full channel value ({})", msg.htlc_minimum_msat, full_channel_value_msat)));
6328                 }
6329                 Channel::<SP>::check_remote_fee(&channel_type, fee_estimator, msg.feerate_per_kw, None, logger)?;
6330
6331                 let max_counterparty_selected_contest_delay = u16::min(config.channel_handshake_limits.their_to_self_delay, MAX_LOCAL_BREAKDOWN_TIMEOUT);
6332                 if msg.to_self_delay > max_counterparty_selected_contest_delay {
6333                         return Err(ChannelError::Close(format!("They wanted our payments to be delayed by a needlessly long period. Upper limit: {}. Actual: {}", max_counterparty_selected_contest_delay, msg.to_self_delay)));
6334                 }
6335                 if msg.max_accepted_htlcs < 1 {
6336                         return Err(ChannelError::Close("0 max_accepted_htlcs makes for a useless channel".to_owned()));
6337                 }
6338                 if msg.max_accepted_htlcs > MAX_HTLCS {
6339                         return Err(ChannelError::Close(format!("max_accepted_htlcs was {}. It must not be larger than {}", msg.max_accepted_htlcs, MAX_HTLCS)));
6340                 }
6341
6342                 // Now check against optional parameters as set by config...
6343                 if msg.funding_satoshis < config.channel_handshake_limits.min_funding_satoshis {
6344                         return Err(ChannelError::Close(format!("Funding satoshis ({}) is less than the user specified limit ({})", msg.funding_satoshis, config.channel_handshake_limits.min_funding_satoshis)));
6345                 }
6346                 if msg.htlc_minimum_msat > config.channel_handshake_limits.max_htlc_minimum_msat {
6347                         return Err(ChannelError::Close(format!("htlc_minimum_msat ({}) is higher than the user specified limit ({})", msg.htlc_minimum_msat,  config.channel_handshake_limits.max_htlc_minimum_msat)));
6348                 }
6349                 if msg.max_htlc_value_in_flight_msat < config.channel_handshake_limits.min_max_htlc_value_in_flight_msat {
6350                         return Err(ChannelError::Close(format!("max_htlc_value_in_flight_msat ({}) is less than the user specified limit ({})", msg.max_htlc_value_in_flight_msat, config.channel_handshake_limits.min_max_htlc_value_in_flight_msat)));
6351                 }
6352                 if msg.channel_reserve_satoshis > config.channel_handshake_limits.max_channel_reserve_satoshis {
6353                         return Err(ChannelError::Close(format!("channel_reserve_satoshis ({}) is higher than the user specified limit ({})", msg.channel_reserve_satoshis, config.channel_handshake_limits.max_channel_reserve_satoshis)));
6354                 }
6355                 if msg.max_accepted_htlcs < config.channel_handshake_limits.min_max_accepted_htlcs {
6356                         return Err(ChannelError::Close(format!("max_accepted_htlcs ({}) is less than the user specified limit ({})", msg.max_accepted_htlcs, config.channel_handshake_limits.min_max_accepted_htlcs)));
6357                 }
6358                 if msg.dust_limit_satoshis < MIN_CHAN_DUST_LIMIT_SATOSHIS {
6359                         return Err(ChannelError::Close(format!("dust_limit_satoshis ({}) is less than the implementation limit ({})", msg.dust_limit_satoshis, MIN_CHAN_DUST_LIMIT_SATOSHIS)));
6360                 }
6361                 if msg.dust_limit_satoshis >  MAX_CHAN_DUST_LIMIT_SATOSHIS {
6362                         return Err(ChannelError::Close(format!("dust_limit_satoshis ({}) is greater than the implementation limit ({})", msg.dust_limit_satoshis, MAX_CHAN_DUST_LIMIT_SATOSHIS)));
6363                 }
6364
6365                 // Convert things into internal flags and prep our state:
6366
6367                 if config.channel_handshake_limits.force_announced_channel_preference {
6368                         if config.channel_handshake_config.announced_channel != announced_channel {
6369                                 return Err(ChannelError::Close("Peer tried to open channel but their announcement preference is different from ours".to_owned()));
6370                         }
6371                 }
6372
6373                 let holder_selected_channel_reserve_satoshis = get_holder_selected_channel_reserve_satoshis(msg.funding_satoshis, config);
6374                 if holder_selected_channel_reserve_satoshis < MIN_CHAN_DUST_LIMIT_SATOSHIS {
6375                         // Protocol level safety check in place, although it should never happen because
6376                         // of `MIN_THEIR_CHAN_RESERVE_SATOSHIS`
6377                         return Err(ChannelError::Close(format!("Suitable channel reserve not found. remote_channel_reserve was ({}). dust_limit_satoshis is ({}).", holder_selected_channel_reserve_satoshis, MIN_CHAN_DUST_LIMIT_SATOSHIS)));
6378                 }
6379                 if holder_selected_channel_reserve_satoshis * 1000 >= full_channel_value_msat {
6380                         return Err(ChannelError::Close(format!("Suitable channel reserve not found. remote_channel_reserve was ({})msats. Channel value is ({} - {})msats.", holder_selected_channel_reserve_satoshis * 1000, full_channel_value_msat, msg.push_msat)));
6381                 }
6382                 if msg.channel_reserve_satoshis < MIN_CHAN_DUST_LIMIT_SATOSHIS {
6383                         log_debug!(logger, "channel_reserve_satoshis ({}) is smaller than our dust limit ({}). We can broadcast stale states without any risk, implying this channel is very insecure for our counterparty.",
6384                                 msg.channel_reserve_satoshis, MIN_CHAN_DUST_LIMIT_SATOSHIS);
6385                 }
6386                 if holder_selected_channel_reserve_satoshis < msg.dust_limit_satoshis {
6387                         return Err(ChannelError::Close(format!("Dust limit ({}) too high for the channel reserve we require the remote to keep ({})", msg.dust_limit_satoshis, holder_selected_channel_reserve_satoshis)));
6388                 }
6389
6390                 // check if the funder's amount for the initial commitment tx is sufficient
6391                 // for full fee payment plus a few HTLCs to ensure the channel will be useful.
6392                 let anchor_outputs_value = if channel_type.supports_anchors_zero_fee_htlc_tx() {
6393                         ANCHOR_OUTPUT_VALUE_SATOSHI * 2
6394                 } else {
6395                         0
6396                 };
6397                 let funders_amount_msat = msg.funding_satoshis * 1000 - msg.push_msat;
6398                 let commitment_tx_fee = commit_tx_fee_msat(msg.feerate_per_kw, MIN_AFFORDABLE_HTLC_COUNT, &channel_type) / 1000;
6399                 if (funders_amount_msat / 1000).saturating_sub(anchor_outputs_value) < commitment_tx_fee {
6400                         return Err(ChannelError::Close(format!("Funding amount ({} sats) can't even pay fee for initial commitment transaction fee of {} sats.", (funders_amount_msat / 1000).saturating_sub(anchor_outputs_value), commitment_tx_fee)));
6401                 }
6402
6403                 let to_remote_satoshis = funders_amount_msat / 1000 - commitment_tx_fee - anchor_outputs_value;
6404                 // While it's reasonable for us to not meet the channel reserve initially (if they don't
6405                 // want to push much to us), our counterparty should always have more than our reserve.
6406                 if to_remote_satoshis < holder_selected_channel_reserve_satoshis {
6407                         return Err(ChannelError::Close("Insufficient funding amount for initial reserve".to_owned()));
6408                 }
6409
6410                 let counterparty_shutdown_scriptpubkey = if their_features.supports_upfront_shutdown_script() {
6411                         match &msg.shutdown_scriptpubkey {
6412                                 &Some(ref script) => {
6413                                         // Peer is signaling upfront_shutdown and has opt-out with a 0-length script. We don't enforce anything
6414                                         if script.len() == 0 {
6415                                                 None
6416                                         } else {
6417                                                 if !script::is_bolt2_compliant(&script, their_features) {
6418                                                         return Err(ChannelError::Close(format!("Peer is signaling upfront_shutdown but has provided an unacceptable scriptpubkey format: {}", script)))
6419                                                 }
6420                                                 Some(script.clone())
6421                                         }
6422                                 },
6423                                 // Peer is signaling upfront shutdown but don't opt-out with correct mechanism (a.k.a 0-length script). Peer looks buggy, we fail the channel
6424                                 &None => {
6425                                         return Err(ChannelError::Close("Peer is signaling upfront_shutdown but we don't get any script. Use 0-length script to opt-out".to_owned()));
6426                                 }
6427                         }
6428                 } else { None };
6429
6430                 let shutdown_scriptpubkey = if config.channel_handshake_config.commit_upfront_shutdown_pubkey {
6431                         match signer_provider.get_shutdown_scriptpubkey() {
6432                                 Ok(scriptpubkey) => Some(scriptpubkey),
6433                                 Err(_) => return Err(ChannelError::Close("Failed to get upfront shutdown scriptpubkey".to_owned())),
6434                         }
6435                 } else { None };
6436
6437                 if let Some(shutdown_scriptpubkey) = &shutdown_scriptpubkey {
6438                         if !shutdown_scriptpubkey.is_compatible(&their_features) {
6439                                 return Err(ChannelError::Close(format!("Provided a scriptpubkey format not accepted by peer: {}", shutdown_scriptpubkey)));
6440                         }
6441                 }
6442
6443                 let destination_script = match signer_provider.get_destination_script() {
6444                         Ok(script) => script,
6445                         Err(_) => return Err(ChannelError::Close("Failed to get destination script".to_owned())),
6446                 };
6447
6448                 let mut secp_ctx = Secp256k1::new();
6449                 secp_ctx.seeded_randomize(&entropy_source.get_secure_random_bytes());
6450
6451                 let minimum_depth = if is_0conf {
6452                         Some(0)
6453                 } else {
6454                         Some(cmp::max(config.channel_handshake_config.minimum_depth, 1))
6455                 };
6456
6457                 let chan = Self {
6458                         context: ChannelContext {
6459                                 user_id,
6460
6461                                 config: LegacyChannelConfig {
6462                                         options: config.channel_config.clone(),
6463                                         announced_channel,
6464                                         commit_upfront_shutdown_pubkey: config.channel_handshake_config.commit_upfront_shutdown_pubkey,
6465                                 },
6466
6467                                 prev_config: None,
6468
6469                                 inbound_handshake_limits_override: None,
6470
6471                                 temporary_channel_id: Some(msg.temporary_channel_id),
6472                                 channel_id: msg.temporary_channel_id,
6473                                 channel_state: (ChannelState::OurInitSent as u32) | (ChannelState::TheirInitSent as u32),
6474                                 announcement_sigs_state: AnnouncementSigsState::NotSent,
6475                                 secp_ctx,
6476
6477                                 latest_monitor_update_id: 0,
6478
6479                                 holder_signer: ChannelSignerType::Ecdsa(holder_signer),
6480                                 shutdown_scriptpubkey,
6481                                 destination_script,
6482
6483                                 cur_holder_commitment_transaction_number: INITIAL_COMMITMENT_NUMBER,
6484                                 cur_counterparty_commitment_transaction_number: INITIAL_COMMITMENT_NUMBER,
6485                                 value_to_self_msat: msg.push_msat,
6486
6487                                 pending_inbound_htlcs: Vec::new(),
6488                                 pending_outbound_htlcs: Vec::new(),
6489                                 holding_cell_htlc_updates: Vec::new(),
6490                                 pending_update_fee: None,
6491                                 holding_cell_update_fee: None,
6492                                 next_holder_htlc_id: 0,
6493                                 next_counterparty_htlc_id: 0,
6494                                 update_time_counter: 1,
6495
6496                                 resend_order: RAACommitmentOrder::CommitmentFirst,
6497
6498                                 monitor_pending_channel_ready: false,
6499                                 monitor_pending_revoke_and_ack: false,
6500                                 monitor_pending_commitment_signed: false,
6501                                 monitor_pending_forwards: Vec::new(),
6502                                 monitor_pending_failures: Vec::new(),
6503                                 monitor_pending_finalized_fulfills: Vec::new(),
6504
6505                                 #[cfg(debug_assertions)]
6506                                 holder_max_commitment_tx_output: Mutex::new((msg.push_msat, msg.funding_satoshis * 1000 - msg.push_msat)),
6507                                 #[cfg(debug_assertions)]
6508                                 counterparty_max_commitment_tx_output: Mutex::new((msg.push_msat, msg.funding_satoshis * 1000 - msg.push_msat)),
6509
6510                                 last_sent_closing_fee: None,
6511                                 pending_counterparty_closing_signed: None,
6512                                 closing_fee_limits: None,
6513                                 target_closing_feerate_sats_per_kw: None,
6514
6515                                 funding_tx_confirmed_in: None,
6516                                 funding_tx_confirmation_height: 0,
6517                                 short_channel_id: None,
6518                                 channel_creation_height: current_chain_height,
6519
6520                                 feerate_per_kw: msg.feerate_per_kw,
6521                                 channel_value_satoshis: msg.funding_satoshis,
6522                                 counterparty_dust_limit_satoshis: msg.dust_limit_satoshis,
6523                                 holder_dust_limit_satoshis: MIN_CHAN_DUST_LIMIT_SATOSHIS,
6524                                 counterparty_max_htlc_value_in_flight_msat: cmp::min(msg.max_htlc_value_in_flight_msat, msg.funding_satoshis * 1000),
6525                                 holder_max_htlc_value_in_flight_msat: get_holder_max_htlc_value_in_flight_msat(msg.funding_satoshis, &config.channel_handshake_config),
6526                                 counterparty_selected_channel_reserve_satoshis: Some(msg.channel_reserve_satoshis),
6527                                 holder_selected_channel_reserve_satoshis,
6528                                 counterparty_htlc_minimum_msat: msg.htlc_minimum_msat,
6529                                 holder_htlc_minimum_msat: if config.channel_handshake_config.our_htlc_minimum_msat == 0 { 1 } else { config.channel_handshake_config.our_htlc_minimum_msat },
6530                                 counterparty_max_accepted_htlcs: msg.max_accepted_htlcs,
6531                                 holder_max_accepted_htlcs: cmp::min(config.channel_handshake_config.our_max_accepted_htlcs, MAX_HTLCS),
6532                                 minimum_depth,
6533
6534                                 counterparty_forwarding_info: None,
6535
6536                                 channel_transaction_parameters: ChannelTransactionParameters {
6537                                         holder_pubkeys: pubkeys,
6538                                         holder_selected_contest_delay: config.channel_handshake_config.our_to_self_delay,
6539                                         is_outbound_from_holder: false,
6540                                         counterparty_parameters: Some(CounterpartyChannelTransactionParameters {
6541                                                 selected_contest_delay: msg.to_self_delay,
6542                                                 pubkeys: counterparty_pubkeys,
6543                                         }),
6544                                         funding_outpoint: None,
6545                                         channel_type_features: channel_type.clone()
6546                                 },
6547                                 funding_transaction: None,
6548                                 is_batch_funding: None,
6549
6550                                 counterparty_cur_commitment_point: Some(msg.first_per_commitment_point),
6551                                 counterparty_prev_commitment_point: None,
6552                                 counterparty_node_id,
6553
6554                                 counterparty_shutdown_scriptpubkey,
6555
6556                                 commitment_secrets: CounterpartyCommitmentSecrets::new(),
6557
6558                                 channel_update_status: ChannelUpdateStatus::Enabled,
6559                                 closing_signed_in_flight: false,
6560
6561                                 announcement_sigs: None,
6562
6563                                 #[cfg(any(test, fuzzing))]
6564                                 next_local_commitment_tx_fee_info_cached: Mutex::new(None),
6565                                 #[cfg(any(test, fuzzing))]
6566                                 next_remote_commitment_tx_fee_info_cached: Mutex::new(None),
6567
6568                                 workaround_lnd_bug_4006: None,
6569                                 sent_message_awaiting_response: None,
6570
6571                                 latest_inbound_scid_alias: None,
6572                                 outbound_scid_alias: 0,
6573
6574                                 channel_pending_event_emitted: false,
6575                                 channel_ready_event_emitted: false,
6576
6577                                 #[cfg(any(test, fuzzing))]
6578                                 historical_inbound_htlc_fulfills: HashSet::new(),
6579
6580                                 channel_type,
6581                                 channel_keys_id,
6582
6583                                 blocked_monitor_updates: Vec::new(),
6584                         },
6585                         unfunded_context: UnfundedChannelContext { unfunded_channel_age_ticks: 0 }
6586                 };
6587
6588                 Ok(chan)
6589         }
6590
6591         /// Marks an inbound channel as accepted and generates a [`msgs::AcceptChannel`] message which
6592         /// should be sent back to the counterparty node.
6593         ///
6594         /// [`msgs::AcceptChannel`]: crate::ln::msgs::AcceptChannel
6595         pub fn accept_inbound_channel(&mut self) -> msgs::AcceptChannel {
6596                 if self.context.is_outbound() {
6597                         panic!("Tried to send accept_channel for an outbound channel?");
6598                 }
6599                 if self.context.channel_state != (ChannelState::OurInitSent as u32) | (ChannelState::TheirInitSent as u32) {
6600                         panic!("Tried to send accept_channel after channel had moved forward");
6601                 }
6602                 if self.context.cur_holder_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER {
6603                         panic!("Tried to send an accept_channel for a channel that has already advanced");
6604                 }
6605
6606                 self.generate_accept_channel_message()
6607         }
6608
6609         /// This function is used to explicitly generate a [`msgs::AcceptChannel`] message for an
6610         /// inbound channel. If the intention is to accept an inbound channel, use
6611         /// [`InboundV1Channel::accept_inbound_channel`] instead.
6612         ///
6613         /// [`msgs::AcceptChannel`]: crate::ln::msgs::AcceptChannel
6614         fn generate_accept_channel_message(&self) -> msgs::AcceptChannel {
6615                 let first_per_commitment_point = self.context.holder_signer.as_ref().get_per_commitment_point(self.context.cur_holder_commitment_transaction_number, &self.context.secp_ctx);
6616                 let keys = self.context.get_holder_pubkeys();
6617
6618                 msgs::AcceptChannel {
6619                         temporary_channel_id: self.context.channel_id,
6620                         dust_limit_satoshis: self.context.holder_dust_limit_satoshis,
6621                         max_htlc_value_in_flight_msat: self.context.holder_max_htlc_value_in_flight_msat,
6622                         channel_reserve_satoshis: self.context.holder_selected_channel_reserve_satoshis,
6623                         htlc_minimum_msat: self.context.holder_htlc_minimum_msat,
6624                         minimum_depth: self.context.minimum_depth.unwrap(),
6625                         to_self_delay: self.context.get_holder_selected_contest_delay(),
6626                         max_accepted_htlcs: self.context.holder_max_accepted_htlcs,
6627                         funding_pubkey: keys.funding_pubkey,
6628                         revocation_basepoint: keys.revocation_basepoint,
6629                         payment_point: keys.payment_point,
6630                         delayed_payment_basepoint: keys.delayed_payment_basepoint,
6631                         htlc_basepoint: keys.htlc_basepoint,
6632                         first_per_commitment_point,
6633                         shutdown_scriptpubkey: Some(match &self.context.shutdown_scriptpubkey {
6634                                 Some(script) => script.clone().into_inner(),
6635                                 None => Builder::new().into_script(),
6636                         }),
6637                         channel_type: Some(self.context.channel_type.clone()),
6638                         #[cfg(taproot)]
6639                         next_local_nonce: None,
6640                 }
6641         }
6642
6643         /// Enables the possibility for tests to extract a [`msgs::AcceptChannel`] message for an
6644         /// inbound channel without accepting it.
6645         ///
6646         /// [`msgs::AcceptChannel`]: crate::ln::msgs::AcceptChannel
6647         #[cfg(test)]
6648         pub fn get_accept_channel_message(&self) -> msgs::AcceptChannel {
6649                 self.generate_accept_channel_message()
6650         }
6651
6652         fn funding_created_signature<L: Deref>(&mut self, sig: &Signature, logger: &L) -> Result<(CommitmentTransaction, CommitmentTransaction, Signature), ChannelError> where L::Target: Logger {
6653                 let funding_script = self.context.get_funding_redeemscript();
6654
6655                 let keys = self.context.build_holder_transaction_keys(self.context.cur_holder_commitment_transaction_number);
6656                 let initial_commitment_tx = self.context.build_commitment_transaction(self.context.cur_holder_commitment_transaction_number, &keys, true, false, logger).tx;
6657                 {
6658                         let trusted_tx = initial_commitment_tx.trust();
6659                         let initial_commitment_bitcoin_tx = trusted_tx.built_transaction();
6660                         let sighash = initial_commitment_bitcoin_tx.get_sighash_all(&funding_script, self.context.channel_value_satoshis);
6661                         // They sign the holder commitment transaction...
6662                         log_trace!(logger, "Checking funding_created tx signature {} by key {} against tx {} (sighash {}) with redeemscript {} for channel {}.",
6663                                 log_bytes!(sig.serialize_compact()[..]), log_bytes!(self.context.counterparty_funding_pubkey().serialize()),
6664                                 encode::serialize_hex(&initial_commitment_bitcoin_tx.transaction), log_bytes!(sighash[..]),
6665                                 encode::serialize_hex(&funding_script), &self.context.channel_id());
6666                         secp_check!(self.context.secp_ctx.verify_ecdsa(&sighash, &sig, self.context.counterparty_funding_pubkey()), "Invalid funding_created signature from peer".to_owned());
6667                 }
6668
6669                 let counterparty_keys = self.context.build_remote_transaction_keys();
6670                 let counterparty_initial_commitment_tx = self.context.build_commitment_transaction(self.context.cur_counterparty_commitment_transaction_number, &counterparty_keys, false, false, logger).tx;
6671
6672                 let counterparty_trusted_tx = counterparty_initial_commitment_tx.trust();
6673                 let counterparty_initial_bitcoin_tx = counterparty_trusted_tx.built_transaction();
6674                 log_trace!(logger, "Initial counterparty tx for channel {} is: txid {} tx {}",
6675                         &self.context.channel_id(), counterparty_initial_bitcoin_tx.txid, encode::serialize_hex(&counterparty_initial_bitcoin_tx.transaction));
6676
6677                 match &self.context.holder_signer {
6678                         // TODO (arik): move match into calling method for Taproot
6679                         ChannelSignerType::Ecdsa(ecdsa) => {
6680                                 let counterparty_signature = ecdsa.sign_counterparty_commitment(&counterparty_initial_commitment_tx, Vec::new(), &self.context.secp_ctx)
6681                                         .map_err(|_| ChannelError::Close("Failed to get signatures for new commitment_signed".to_owned()))?.0;
6682
6683                                 // We sign "counterparty" commitment transaction, allowing them to broadcast the tx if they wish.
6684                                 Ok((counterparty_initial_commitment_tx, initial_commitment_tx, counterparty_signature))
6685                         }
6686                 }
6687         }
6688
6689         pub fn funding_created<L: Deref>(
6690                 mut self, msg: &msgs::FundingCreated, best_block: BestBlock, signer_provider: &SP, logger: &L
6691         ) -> Result<(Channel<SP>, msgs::FundingSigned, ChannelMonitor<<SP::Target as SignerProvider>::Signer>), (Self, ChannelError)>
6692         where
6693                 L::Target: Logger
6694         {
6695                 if self.context.is_outbound() {
6696                         return Err((self, ChannelError::Close("Received funding_created for an outbound channel?".to_owned())));
6697                 }
6698                 if self.context.channel_state != (ChannelState::OurInitSent as u32 | ChannelState::TheirInitSent as u32) {
6699                         // BOLT 2 says that if we disconnect before we send funding_signed we SHOULD NOT
6700                         // remember the channel, so it's safe to just send an error_message here and drop the
6701                         // channel.
6702                         return Err((self, ChannelError::Close("Received funding_created after we got the channel!".to_owned())));
6703                 }
6704                 if self.context.commitment_secrets.get_min_seen_secret() != (1 << 48) ||
6705                                 self.context.cur_counterparty_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER ||
6706                                 self.context.cur_holder_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER {
6707                         panic!("Should not have advanced channel commitment tx numbers prior to funding_created");
6708                 }
6709
6710                 let funding_txo = OutPoint { txid: msg.funding_txid, index: msg.funding_output_index };
6711                 self.context.channel_transaction_parameters.funding_outpoint = Some(funding_txo);
6712                 // This is an externally observable change before we finish all our checks.  In particular
6713                 // funding_created_signature may fail.
6714                 self.context.holder_signer.as_mut().provide_channel_parameters(&self.context.channel_transaction_parameters);
6715
6716                 let (counterparty_initial_commitment_tx, initial_commitment_tx, signature) = match self.funding_created_signature(&msg.signature, logger) {
6717                         Ok(res) => res,
6718                         Err(ChannelError::Close(e)) => {
6719                                 self.context.channel_transaction_parameters.funding_outpoint = None;
6720                                 return Err((self, ChannelError::Close(e)));
6721                         },
6722                         Err(e) => {
6723                                 // The only error we know how to handle is ChannelError::Close, so we fall over here
6724                                 // to make sure we don't continue with an inconsistent state.
6725                                 panic!("unexpected error type from funding_created_signature {:?}", e);
6726                         }
6727                 };
6728
6729                 let holder_commitment_tx = HolderCommitmentTransaction::new(
6730                         initial_commitment_tx,
6731                         msg.signature,
6732                         Vec::new(),
6733                         &self.context.get_holder_pubkeys().funding_pubkey,
6734                         self.context.counterparty_funding_pubkey()
6735                 );
6736
6737                 if let Err(_) = self.context.holder_signer.as_ref().validate_holder_commitment(&holder_commitment_tx, Vec::new()) {
6738                         return Err((self, ChannelError::Close("Failed to validate our commitment".to_owned())));
6739                 }
6740
6741                 // Now that we're past error-generating stuff, update our local state:
6742
6743                 let funding_redeemscript = self.context.get_funding_redeemscript();
6744                 let funding_txo_script = funding_redeemscript.to_v0_p2wsh();
6745                 let obscure_factor = get_commitment_transaction_number_obscure_factor(&self.context.get_holder_pubkeys().payment_point, &self.context.get_counterparty_pubkeys().payment_point, self.context.is_outbound());
6746                 let shutdown_script = self.context.shutdown_scriptpubkey.clone().map(|script| script.into_inner());
6747                 let mut monitor_signer = signer_provider.derive_channel_signer(self.context.channel_value_satoshis, self.context.channel_keys_id);
6748                 monitor_signer.provide_channel_parameters(&self.context.channel_transaction_parameters);
6749                 let channel_monitor = ChannelMonitor::new(self.context.secp_ctx.clone(), monitor_signer,
6750                                                           shutdown_script, self.context.get_holder_selected_contest_delay(),
6751                                                           &self.context.destination_script, (funding_txo, funding_txo_script.clone()),
6752                                                           &self.context.channel_transaction_parameters,
6753                                                           funding_redeemscript.clone(), self.context.channel_value_satoshis,
6754                                                           obscure_factor,
6755                                                           holder_commitment_tx, best_block, self.context.counterparty_node_id);
6756
6757                 channel_monitor.provide_initial_counterparty_commitment_tx(
6758                         counterparty_initial_commitment_tx.trust().txid(), Vec::new(),
6759                         self.context.cur_counterparty_commitment_transaction_number,
6760                         self.context.counterparty_cur_commitment_point.unwrap(), self.context.feerate_per_kw,
6761                         counterparty_initial_commitment_tx.to_broadcaster_value_sat(),
6762                         counterparty_initial_commitment_tx.to_countersignatory_value_sat(), logger);
6763
6764                 self.context.channel_state = ChannelState::FundingSent as u32;
6765                 self.context.channel_id = funding_txo.to_channel_id();
6766                 self.context.cur_counterparty_commitment_transaction_number -= 1;
6767                 self.context.cur_holder_commitment_transaction_number -= 1;
6768
6769                 log_info!(logger, "Generated funding_signed for peer for channel {}", &self.context.channel_id());
6770
6771                 // Promote the channel to a full-fledged one now that we have updated the state and have a
6772                 // `ChannelMonitor`.
6773                 let mut channel = Channel {
6774                         context: self.context,
6775                 };
6776                 let channel_id = channel.context.channel_id.clone();
6777                 let need_channel_ready = channel.check_get_channel_ready(0).is_some();
6778                 channel.monitor_updating_paused(false, false, need_channel_ready, Vec::new(), Vec::new(), Vec::new());
6779
6780                 Ok((channel, msgs::FundingSigned {
6781                         channel_id,
6782                         signature,
6783                         #[cfg(taproot)]
6784                         partial_signature_with_nonce: None,
6785                 }, channel_monitor))
6786         }
6787 }
6788
6789 const SERIALIZATION_VERSION: u8 = 3;
6790 const MIN_SERIALIZATION_VERSION: u8 = 2;
6791
6792 impl_writeable_tlv_based_enum!(InboundHTLCRemovalReason,;
6793         (0, FailRelay),
6794         (1, FailMalformed),
6795         (2, Fulfill),
6796 );
6797
6798 impl Writeable for ChannelUpdateStatus {
6799         fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
6800                 // We only care about writing out the current state as it was announced, ie only either
6801                 // Enabled or Disabled. In the case of DisabledStaged, we most recently announced the
6802                 // channel as enabled, so we write 0. For EnabledStaged, we similarly write a 1.
6803                 match self {
6804                         ChannelUpdateStatus::Enabled => 0u8.write(writer)?,
6805                         ChannelUpdateStatus::DisabledStaged(_) => 0u8.write(writer)?,
6806                         ChannelUpdateStatus::EnabledStaged(_) => 1u8.write(writer)?,
6807                         ChannelUpdateStatus::Disabled => 1u8.write(writer)?,
6808                 }
6809                 Ok(())
6810         }
6811 }
6812
6813 impl Readable for ChannelUpdateStatus {
6814         fn read<R: io::Read>(reader: &mut R) -> Result<Self, DecodeError> {
6815                 Ok(match <u8 as Readable>::read(reader)? {
6816                         0 => ChannelUpdateStatus::Enabled,
6817                         1 => ChannelUpdateStatus::Disabled,
6818                         _ => return Err(DecodeError::InvalidValue),
6819                 })
6820         }
6821 }
6822
6823 impl Writeable for AnnouncementSigsState {
6824         fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
6825                 // We only care about writing out the current state as if we had just disconnected, at
6826                 // which point we always set anything but AnnouncementSigsReceived to NotSent.
6827                 match self {
6828                         AnnouncementSigsState::NotSent => 0u8.write(writer),
6829                         AnnouncementSigsState::MessageSent => 0u8.write(writer),
6830                         AnnouncementSigsState::Committed => 0u8.write(writer),
6831                         AnnouncementSigsState::PeerReceived => 1u8.write(writer),
6832                 }
6833         }
6834 }
6835
6836 impl Readable for AnnouncementSigsState {
6837         fn read<R: io::Read>(reader: &mut R) -> Result<Self, DecodeError> {
6838                 Ok(match <u8 as Readable>::read(reader)? {
6839                         0 => AnnouncementSigsState::NotSent,
6840                         1 => AnnouncementSigsState::PeerReceived,
6841                         _ => return Err(DecodeError::InvalidValue),
6842                 })
6843         }
6844 }
6845
6846 impl<SP: Deref> Writeable for Channel<SP> where SP::Target: SignerProvider {
6847         fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
6848                 // Note that we write out as if remove_uncommitted_htlcs_and_mark_paused had just been
6849                 // called.
6850
6851                 write_ver_prefix!(writer, MIN_SERIALIZATION_VERSION, MIN_SERIALIZATION_VERSION);
6852
6853                 // `user_id` used to be a single u64 value. In order to remain backwards compatible with
6854                 // versions prior to 0.0.113, the u128 is serialized as two separate u64 values. We write
6855                 // the low bytes now and the optional high bytes later.
6856                 let user_id_low = self.context.user_id as u64;
6857                 user_id_low.write(writer)?;
6858
6859                 // Version 1 deserializers expected to read parts of the config object here. Version 2
6860                 // deserializers (0.0.99) now read config through TLVs, and as we now require them for
6861                 // `minimum_depth` we simply write dummy values here.
6862                 writer.write_all(&[0; 8])?;
6863
6864                 self.context.channel_id.write(writer)?;
6865                 (self.context.channel_state | ChannelState::PeerDisconnected as u32).write(writer)?;
6866                 self.context.channel_value_satoshis.write(writer)?;
6867
6868                 self.context.latest_monitor_update_id.write(writer)?;
6869
6870                 let mut key_data = VecWriter(Vec::new());
6871                 // TODO (taproot|arik): Introduce serialization distinction for non-ECDSA signers.
6872                 self.context.holder_signer.as_ecdsa().expect("Only ECDSA signers may be serialized").write(&mut key_data)?;
6873                 assert!(key_data.0.len() < core::usize::MAX);
6874                 assert!(key_data.0.len() < core::u32::MAX as usize);
6875                 (key_data.0.len() as u32).write(writer)?;
6876                 writer.write_all(&key_data.0[..])?;
6877
6878                 // Write out the old serialization for shutdown_pubkey for backwards compatibility, if
6879                 // deserialized from that format.
6880                 match self.context.shutdown_scriptpubkey.as_ref().and_then(|script| script.as_legacy_pubkey()) {
6881                         Some(shutdown_pubkey) => shutdown_pubkey.write(writer)?,
6882                         None => [0u8; PUBLIC_KEY_SIZE].write(writer)?,
6883                 }
6884                 self.context.destination_script.write(writer)?;
6885
6886                 self.context.cur_holder_commitment_transaction_number.write(writer)?;
6887                 self.context.cur_counterparty_commitment_transaction_number.write(writer)?;
6888                 self.context.value_to_self_msat.write(writer)?;
6889
6890                 let mut dropped_inbound_htlcs = 0;
6891                 for htlc in self.context.pending_inbound_htlcs.iter() {
6892                         if let InboundHTLCState::RemoteAnnounced(_) = htlc.state {
6893                                 dropped_inbound_htlcs += 1;
6894                         }
6895                 }
6896                 (self.context.pending_inbound_htlcs.len() as u64 - dropped_inbound_htlcs).write(writer)?;
6897                 for htlc in self.context.pending_inbound_htlcs.iter() {
6898                         if let &InboundHTLCState::RemoteAnnounced(_) = &htlc.state {
6899                                 continue; // Drop
6900                         }
6901                         htlc.htlc_id.write(writer)?;
6902                         htlc.amount_msat.write(writer)?;
6903                         htlc.cltv_expiry.write(writer)?;
6904                         htlc.payment_hash.write(writer)?;
6905                         match &htlc.state {
6906                                 &InboundHTLCState::RemoteAnnounced(_) => unreachable!(),
6907                                 &InboundHTLCState::AwaitingRemoteRevokeToAnnounce(ref htlc_state) => {
6908                                         1u8.write(writer)?;
6909                                         htlc_state.write(writer)?;
6910                                 },
6911                                 &InboundHTLCState::AwaitingAnnouncedRemoteRevoke(ref htlc_state) => {
6912                                         2u8.write(writer)?;
6913                                         htlc_state.write(writer)?;
6914                                 },
6915                                 &InboundHTLCState::Committed => {
6916                                         3u8.write(writer)?;
6917                                 },
6918                                 &InboundHTLCState::LocalRemoved(ref removal_reason) => {
6919                                         4u8.write(writer)?;
6920                                         removal_reason.write(writer)?;
6921                                 },
6922                         }
6923                 }
6924
6925                 let mut preimages: Vec<&Option<PaymentPreimage>> = vec![];
6926                 let mut pending_outbound_skimmed_fees: Vec<Option<u64>> = Vec::new();
6927
6928                 (self.context.pending_outbound_htlcs.len() as u64).write(writer)?;
6929                 for (idx, htlc) in self.context.pending_outbound_htlcs.iter().enumerate() {
6930                         htlc.htlc_id.write(writer)?;
6931                         htlc.amount_msat.write(writer)?;
6932                         htlc.cltv_expiry.write(writer)?;
6933                         htlc.payment_hash.write(writer)?;
6934                         htlc.source.write(writer)?;
6935                         match &htlc.state {
6936                                 &OutboundHTLCState::LocalAnnounced(ref onion_packet) => {
6937                                         0u8.write(writer)?;
6938                                         onion_packet.write(writer)?;
6939                                 },
6940                                 &OutboundHTLCState::Committed => {
6941                                         1u8.write(writer)?;
6942                                 },
6943                                 &OutboundHTLCState::RemoteRemoved(_) => {
6944                                         // Treat this as a Committed because we haven't received the CS - they'll
6945                                         // resend the claim/fail on reconnect as we all (hopefully) the missing CS.
6946                                         1u8.write(writer)?;
6947                                 },
6948                                 &OutboundHTLCState::AwaitingRemoteRevokeToRemove(ref outcome) => {
6949                                         3u8.write(writer)?;
6950                                         if let OutboundHTLCOutcome::Success(preimage) = outcome {
6951                                                 preimages.push(preimage);
6952                                         }
6953                                         let reason: Option<&HTLCFailReason> = outcome.into();
6954                                         reason.write(writer)?;
6955                                 }
6956                                 &OutboundHTLCState::AwaitingRemovedRemoteRevoke(ref outcome) => {
6957                                         4u8.write(writer)?;
6958                                         if let OutboundHTLCOutcome::Success(preimage) = outcome {
6959                                                 preimages.push(preimage);
6960                                         }
6961                                         let reason: Option<&HTLCFailReason> = outcome.into();
6962                                         reason.write(writer)?;
6963                                 }
6964                         }
6965                         if let Some(skimmed_fee) = htlc.skimmed_fee_msat {
6966                                 if pending_outbound_skimmed_fees.is_empty() {
6967                                         for _ in 0..idx { pending_outbound_skimmed_fees.push(None); }
6968                                 }
6969                                 pending_outbound_skimmed_fees.push(Some(skimmed_fee));
6970                         } else if !pending_outbound_skimmed_fees.is_empty() {
6971                                 pending_outbound_skimmed_fees.push(None);
6972                         }
6973                 }
6974
6975                 let mut holding_cell_skimmed_fees: Vec<Option<u64>> = Vec::new();
6976                 (self.context.holding_cell_htlc_updates.len() as u64).write(writer)?;
6977                 for (idx, update) in self.context.holding_cell_htlc_updates.iter().enumerate() {
6978                         match update {
6979                                 &HTLCUpdateAwaitingACK::AddHTLC {
6980                                         ref amount_msat, ref cltv_expiry, ref payment_hash, ref source, ref onion_routing_packet,
6981                                         skimmed_fee_msat,
6982                                 } => {
6983                                         0u8.write(writer)?;
6984                                         amount_msat.write(writer)?;
6985                                         cltv_expiry.write(writer)?;
6986                                         payment_hash.write(writer)?;
6987                                         source.write(writer)?;
6988                                         onion_routing_packet.write(writer)?;
6989
6990                                         if let Some(skimmed_fee) = skimmed_fee_msat {
6991                                                 if holding_cell_skimmed_fees.is_empty() {
6992                                                         for _ in 0..idx { holding_cell_skimmed_fees.push(None); }
6993                                                 }
6994                                                 holding_cell_skimmed_fees.push(Some(skimmed_fee));
6995                                         } else if !holding_cell_skimmed_fees.is_empty() { holding_cell_skimmed_fees.push(None); }
6996                                 },
6997                                 &HTLCUpdateAwaitingACK::ClaimHTLC { ref payment_preimage, ref htlc_id } => {
6998                                         1u8.write(writer)?;
6999                                         payment_preimage.write(writer)?;
7000                                         htlc_id.write(writer)?;
7001                                 },
7002                                 &HTLCUpdateAwaitingACK::FailHTLC { ref htlc_id, ref err_packet } => {
7003                                         2u8.write(writer)?;
7004                                         htlc_id.write(writer)?;
7005                                         err_packet.write(writer)?;
7006                                 }
7007                         }
7008                 }
7009
7010                 match self.context.resend_order {
7011                         RAACommitmentOrder::CommitmentFirst => 0u8.write(writer)?,
7012                         RAACommitmentOrder::RevokeAndACKFirst => 1u8.write(writer)?,
7013                 }
7014
7015                 self.context.monitor_pending_channel_ready.write(writer)?;
7016                 self.context.monitor_pending_revoke_and_ack.write(writer)?;
7017                 self.context.monitor_pending_commitment_signed.write(writer)?;
7018
7019                 (self.context.monitor_pending_forwards.len() as u64).write(writer)?;
7020                 for &(ref pending_forward, ref htlc_id) in self.context.monitor_pending_forwards.iter() {
7021                         pending_forward.write(writer)?;
7022                         htlc_id.write(writer)?;
7023                 }
7024
7025                 (self.context.monitor_pending_failures.len() as u64).write(writer)?;
7026                 for &(ref htlc_source, ref payment_hash, ref fail_reason) in self.context.monitor_pending_failures.iter() {
7027                         htlc_source.write(writer)?;
7028                         payment_hash.write(writer)?;
7029                         fail_reason.write(writer)?;
7030                 }
7031
7032                 if self.context.is_outbound() {
7033                         self.context.pending_update_fee.map(|(a, _)| a).write(writer)?;
7034                 } else if let Some((feerate, FeeUpdateState::AwaitingRemoteRevokeToAnnounce)) = self.context.pending_update_fee {
7035                         Some(feerate).write(writer)?;
7036                 } else {
7037                         // As for inbound HTLCs, if the update was only announced and never committed in a
7038                         // commitment_signed, drop it.
7039                         None::<u32>.write(writer)?;
7040                 }
7041                 self.context.holding_cell_update_fee.write(writer)?;
7042
7043                 self.context.next_holder_htlc_id.write(writer)?;
7044                 (self.context.next_counterparty_htlc_id - dropped_inbound_htlcs).write(writer)?;
7045                 self.context.update_time_counter.write(writer)?;
7046                 self.context.feerate_per_kw.write(writer)?;
7047
7048                 // Versions prior to 0.0.100 expected to read the fields of `last_sent_closing_fee` here,
7049                 // however we are supposed to restart shutdown fee negotiation on reconnect (and wipe
7050                 // `last_send_closing_fee` in `remove_uncommitted_htlcs_and_mark_paused`) so we should never
7051                 // consider the stale state on reload.
7052                 0u8.write(writer)?;
7053
7054                 self.context.funding_tx_confirmed_in.write(writer)?;
7055                 self.context.funding_tx_confirmation_height.write(writer)?;
7056                 self.context.short_channel_id.write(writer)?;
7057
7058                 self.context.counterparty_dust_limit_satoshis.write(writer)?;
7059                 self.context.holder_dust_limit_satoshis.write(writer)?;
7060                 self.context.counterparty_max_htlc_value_in_flight_msat.write(writer)?;
7061
7062                 // Note that this field is ignored by 0.0.99+ as the TLV Optional variant is used instead.
7063                 self.context.counterparty_selected_channel_reserve_satoshis.unwrap_or(0).write(writer)?;
7064
7065                 self.context.counterparty_htlc_minimum_msat.write(writer)?;
7066                 self.context.holder_htlc_minimum_msat.write(writer)?;
7067                 self.context.counterparty_max_accepted_htlcs.write(writer)?;
7068
7069                 // Note that this field is ignored by 0.0.99+ as the TLV Optional variant is used instead.
7070                 self.context.minimum_depth.unwrap_or(0).write(writer)?;
7071
7072                 match &self.context.counterparty_forwarding_info {
7073                         Some(info) => {
7074                                 1u8.write(writer)?;
7075                                 info.fee_base_msat.write(writer)?;
7076                                 info.fee_proportional_millionths.write(writer)?;
7077                                 info.cltv_expiry_delta.write(writer)?;
7078                         },
7079                         None => 0u8.write(writer)?
7080                 }
7081
7082                 self.context.channel_transaction_parameters.write(writer)?;
7083                 self.context.funding_transaction.write(writer)?;
7084
7085                 self.context.counterparty_cur_commitment_point.write(writer)?;
7086                 self.context.counterparty_prev_commitment_point.write(writer)?;
7087                 self.context.counterparty_node_id.write(writer)?;
7088
7089                 self.context.counterparty_shutdown_scriptpubkey.write(writer)?;
7090
7091                 self.context.commitment_secrets.write(writer)?;
7092
7093                 self.context.channel_update_status.write(writer)?;
7094
7095                 #[cfg(any(test, fuzzing))]
7096                 (self.context.historical_inbound_htlc_fulfills.len() as u64).write(writer)?;
7097                 #[cfg(any(test, fuzzing))]
7098                 for htlc in self.context.historical_inbound_htlc_fulfills.iter() {
7099                         htlc.write(writer)?;
7100                 }
7101
7102                 // If the channel type is something other than only-static-remote-key, then we need to have
7103                 // older clients fail to deserialize this channel at all. If the type is
7104                 // only-static-remote-key, we simply consider it "default" and don't write the channel type
7105                 // out at all.
7106                 let chan_type = if self.context.channel_type != ChannelTypeFeatures::only_static_remote_key() {
7107                         Some(&self.context.channel_type) } else { None };
7108
7109                 // The same logic applies for `holder_selected_channel_reserve_satoshis` values other than
7110                 // the default, and when `holder_max_htlc_value_in_flight_msat` is configured to be set to
7111                 // a different percentage of the channel value then 10%, which older versions of LDK used
7112                 // to set it to before the percentage was made configurable.
7113                 let serialized_holder_selected_reserve =
7114                         if self.context.holder_selected_channel_reserve_satoshis != get_legacy_default_holder_selected_channel_reserve_satoshis(self.context.channel_value_satoshis)
7115                         { Some(self.context.holder_selected_channel_reserve_satoshis) } else { None };
7116
7117                 let mut old_max_in_flight_percent_config = UserConfig::default().channel_handshake_config;
7118                 old_max_in_flight_percent_config.max_inbound_htlc_value_in_flight_percent_of_channel = MAX_IN_FLIGHT_PERCENT_LEGACY;
7119                 let serialized_holder_htlc_max_in_flight =
7120                         if self.context.holder_max_htlc_value_in_flight_msat != get_holder_max_htlc_value_in_flight_msat(self.context.channel_value_satoshis, &old_max_in_flight_percent_config)
7121                         { Some(self.context.holder_max_htlc_value_in_flight_msat) } else { None };
7122
7123                 let channel_pending_event_emitted = Some(self.context.channel_pending_event_emitted);
7124                 let channel_ready_event_emitted = Some(self.context.channel_ready_event_emitted);
7125
7126                 // `user_id` used to be a single u64 value. In order to remain backwards compatible with
7127                 // versions prior to 0.0.113, the u128 is serialized as two separate u64 values. Therefore,
7128                 // we write the high bytes as an option here.
7129                 let user_id_high_opt = Some((self.context.user_id >> 64) as u64);
7130
7131                 let holder_max_accepted_htlcs = if self.context.holder_max_accepted_htlcs == DEFAULT_MAX_HTLCS { None } else { Some(self.context.holder_max_accepted_htlcs) };
7132
7133                 write_tlv_fields!(writer, {
7134                         (0, self.context.announcement_sigs, option),
7135                         // minimum_depth and counterparty_selected_channel_reserve_satoshis used to have a
7136                         // default value instead of being Option<>al. Thus, to maintain compatibility we write
7137                         // them twice, once with their original default values above, and once as an option
7138                         // here. On the read side, old versions will simply ignore the odd-type entries here,
7139                         // and new versions map the default values to None and allow the TLV entries here to
7140                         // override that.
7141                         (1, self.context.minimum_depth, option),
7142                         (2, chan_type, option),
7143                         (3, self.context.counterparty_selected_channel_reserve_satoshis, option),
7144                         (4, serialized_holder_selected_reserve, option),
7145                         (5, self.context.config, required),
7146                         (6, serialized_holder_htlc_max_in_flight, option),
7147                         (7, self.context.shutdown_scriptpubkey, option),
7148                         (8, self.context.blocked_monitor_updates, optional_vec),
7149                         (9, self.context.target_closing_feerate_sats_per_kw, option),
7150                         (11, self.context.monitor_pending_finalized_fulfills, required_vec),
7151                         (13, self.context.channel_creation_height, required),
7152                         (15, preimages, required_vec),
7153                         (17, self.context.announcement_sigs_state, required),
7154                         (19, self.context.latest_inbound_scid_alias, option),
7155                         (21, self.context.outbound_scid_alias, required),
7156                         (23, channel_ready_event_emitted, option),
7157                         (25, user_id_high_opt, option),
7158                         (27, self.context.channel_keys_id, required),
7159                         (28, holder_max_accepted_htlcs, option),
7160                         (29, self.context.temporary_channel_id, option),
7161                         (31, channel_pending_event_emitted, option),
7162                         (35, pending_outbound_skimmed_fees, optional_vec),
7163                         (37, holding_cell_skimmed_fees, optional_vec),
7164                         (38, self.context.is_batch_funding, option),
7165                 });
7166
7167                 Ok(())
7168         }
7169 }
7170
7171 const MAX_ALLOC_SIZE: usize = 64*1024;
7172 impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c ChannelTypeFeatures)> for Channel<SP>
7173                 where
7174                         ES::Target: EntropySource,
7175                         SP::Target: SignerProvider
7176 {
7177         fn read<R : io::Read>(reader: &mut R, args: (&'a ES, &'b SP, u32, &'c ChannelTypeFeatures)) -> Result<Self, DecodeError> {
7178                 let (entropy_source, signer_provider, serialized_height, our_supported_features) = args;
7179                 let ver = read_ver_prefix!(reader, SERIALIZATION_VERSION);
7180
7181                 // `user_id` used to be a single u64 value. In order to remain backwards compatible with
7182                 // versions prior to 0.0.113, the u128 is serialized as two separate u64 values. We read
7183                 // the low bytes now and the high bytes later.
7184                 let user_id_low: u64 = Readable::read(reader)?;
7185
7186                 let mut config = Some(LegacyChannelConfig::default());
7187                 if ver == 1 {
7188                         // Read the old serialization of the ChannelConfig from version 0.0.98.
7189                         config.as_mut().unwrap().options.forwarding_fee_proportional_millionths = Readable::read(reader)?;
7190                         config.as_mut().unwrap().options.cltv_expiry_delta = Readable::read(reader)?;
7191                         config.as_mut().unwrap().announced_channel = Readable::read(reader)?;
7192                         config.as_mut().unwrap().commit_upfront_shutdown_pubkey = Readable::read(reader)?;
7193                 } else {
7194                         // Read the 8 bytes of backwards-compatibility ChannelConfig data.
7195                         let mut _val: u64 = Readable::read(reader)?;
7196                 }
7197
7198                 let channel_id = Readable::read(reader)?;
7199                 let channel_state = Readable::read(reader)?;
7200                 let channel_value_satoshis = Readable::read(reader)?;
7201
7202                 let latest_monitor_update_id = Readable::read(reader)?;
7203
7204                 let mut keys_data = None;
7205                 if ver <= 2 {
7206                         // Read the serialize signer bytes. We'll choose to deserialize them or not based on whether
7207                         // the `channel_keys_id` TLV is present below.
7208                         let keys_len: u32 = Readable::read(reader)?;
7209                         keys_data = Some(Vec::with_capacity(cmp::min(keys_len as usize, MAX_ALLOC_SIZE)));
7210                         while keys_data.as_ref().unwrap().len() != keys_len as usize {
7211                                 // Read 1KB at a time to avoid accidentally allocating 4GB on corrupted channel keys
7212                                 let mut data = [0; 1024];
7213                                 let read_slice = &mut data[0..cmp::min(1024, keys_len as usize - keys_data.as_ref().unwrap().len())];
7214                                 reader.read_exact(read_slice)?;
7215                                 keys_data.as_mut().unwrap().extend_from_slice(read_slice);
7216                         }
7217                 }
7218
7219                 // Read the old serialization for shutdown_pubkey, preferring the TLV field later if set.
7220                 let mut shutdown_scriptpubkey = match <PublicKey as Readable>::read(reader) {
7221                         Ok(pubkey) => Some(ShutdownScript::new_p2wpkh_from_pubkey(pubkey)),
7222                         Err(_) => None,
7223                 };
7224                 let destination_script = Readable::read(reader)?;
7225
7226                 let cur_holder_commitment_transaction_number = Readable::read(reader)?;
7227                 let cur_counterparty_commitment_transaction_number = Readable::read(reader)?;
7228                 let value_to_self_msat = Readable::read(reader)?;
7229
7230                 let pending_inbound_htlc_count: u64 = Readable::read(reader)?;
7231
7232                 let mut pending_inbound_htlcs = Vec::with_capacity(cmp::min(pending_inbound_htlc_count as usize, DEFAULT_MAX_HTLCS as usize));
7233                 for _ in 0..pending_inbound_htlc_count {
7234                         pending_inbound_htlcs.push(InboundHTLCOutput {
7235                                 htlc_id: Readable::read(reader)?,
7236                                 amount_msat: Readable::read(reader)?,
7237                                 cltv_expiry: Readable::read(reader)?,
7238                                 payment_hash: Readable::read(reader)?,
7239                                 state: match <u8 as Readable>::read(reader)? {
7240                                         1 => InboundHTLCState::AwaitingRemoteRevokeToAnnounce(Readable::read(reader)?),
7241                                         2 => InboundHTLCState::AwaitingAnnouncedRemoteRevoke(Readable::read(reader)?),
7242                                         3 => InboundHTLCState::Committed,
7243                                         4 => InboundHTLCState::LocalRemoved(Readable::read(reader)?),
7244                                         _ => return Err(DecodeError::InvalidValue),
7245                                 },
7246                         });
7247                 }
7248
7249                 let pending_outbound_htlc_count: u64 = Readable::read(reader)?;
7250                 let mut pending_outbound_htlcs = Vec::with_capacity(cmp::min(pending_outbound_htlc_count as usize, DEFAULT_MAX_HTLCS as usize));
7251                 for _ in 0..pending_outbound_htlc_count {
7252                         pending_outbound_htlcs.push(OutboundHTLCOutput {
7253                                 htlc_id: Readable::read(reader)?,
7254                                 amount_msat: Readable::read(reader)?,
7255                                 cltv_expiry: Readable::read(reader)?,
7256                                 payment_hash: Readable::read(reader)?,
7257                                 source: Readable::read(reader)?,
7258                                 state: match <u8 as Readable>::read(reader)? {
7259                                         0 => OutboundHTLCState::LocalAnnounced(Box::new(Readable::read(reader)?)),
7260                                         1 => OutboundHTLCState::Committed,
7261                                         2 => {
7262                                                 let option: Option<HTLCFailReason> = Readable::read(reader)?;
7263                                                 OutboundHTLCState::RemoteRemoved(option.into())
7264                                         },
7265                                         3 => {
7266                                                 let option: Option<HTLCFailReason> = Readable::read(reader)?;
7267                                                 OutboundHTLCState::AwaitingRemoteRevokeToRemove(option.into())
7268                                         },
7269                                         4 => {
7270                                                 let option: Option<HTLCFailReason> = Readable::read(reader)?;
7271                                                 OutboundHTLCState::AwaitingRemovedRemoteRevoke(option.into())
7272                                         },
7273                                         _ => return Err(DecodeError::InvalidValue),
7274                                 },
7275                                 skimmed_fee_msat: None,
7276                         });
7277                 }
7278
7279                 let holding_cell_htlc_update_count: u64 = Readable::read(reader)?;
7280                 let mut holding_cell_htlc_updates = Vec::with_capacity(cmp::min(holding_cell_htlc_update_count as usize, DEFAULT_MAX_HTLCS as usize*2));
7281                 for _ in 0..holding_cell_htlc_update_count {
7282                         holding_cell_htlc_updates.push(match <u8 as Readable>::read(reader)? {
7283                                 0 => HTLCUpdateAwaitingACK::AddHTLC {
7284                                         amount_msat: Readable::read(reader)?,
7285                                         cltv_expiry: Readable::read(reader)?,
7286                                         payment_hash: Readable::read(reader)?,
7287                                         source: Readable::read(reader)?,
7288                                         onion_routing_packet: Readable::read(reader)?,
7289                                         skimmed_fee_msat: None,
7290                                 },
7291                                 1 => HTLCUpdateAwaitingACK::ClaimHTLC {
7292                                         payment_preimage: Readable::read(reader)?,
7293                                         htlc_id: Readable::read(reader)?,
7294                                 },
7295                                 2 => HTLCUpdateAwaitingACK::FailHTLC {
7296                                         htlc_id: Readable::read(reader)?,
7297                                         err_packet: Readable::read(reader)?,
7298                                 },
7299                                 _ => return Err(DecodeError::InvalidValue),
7300                         });
7301                 }
7302
7303                 let resend_order = match <u8 as Readable>::read(reader)? {
7304                         0 => RAACommitmentOrder::CommitmentFirst,
7305                         1 => RAACommitmentOrder::RevokeAndACKFirst,
7306                         _ => return Err(DecodeError::InvalidValue),
7307                 };
7308
7309                 let monitor_pending_channel_ready = Readable::read(reader)?;
7310                 let monitor_pending_revoke_and_ack = Readable::read(reader)?;
7311                 let monitor_pending_commitment_signed = Readable::read(reader)?;
7312
7313                 let monitor_pending_forwards_count: u64 = Readable::read(reader)?;
7314                 let mut monitor_pending_forwards = Vec::with_capacity(cmp::min(monitor_pending_forwards_count as usize, DEFAULT_MAX_HTLCS as usize));
7315                 for _ in 0..monitor_pending_forwards_count {
7316                         monitor_pending_forwards.push((Readable::read(reader)?, Readable::read(reader)?));
7317                 }
7318
7319                 let monitor_pending_failures_count: u64 = Readable::read(reader)?;
7320                 let mut monitor_pending_failures = Vec::with_capacity(cmp::min(monitor_pending_failures_count as usize, DEFAULT_MAX_HTLCS as usize));
7321                 for _ in 0..monitor_pending_failures_count {
7322                         monitor_pending_failures.push((Readable::read(reader)?, Readable::read(reader)?, Readable::read(reader)?));
7323                 }
7324
7325                 let pending_update_fee_value: Option<u32> = Readable::read(reader)?;
7326
7327                 let holding_cell_update_fee = Readable::read(reader)?;
7328
7329                 let next_holder_htlc_id = Readable::read(reader)?;
7330                 let next_counterparty_htlc_id = Readable::read(reader)?;
7331                 let update_time_counter = Readable::read(reader)?;
7332                 let feerate_per_kw = Readable::read(reader)?;
7333
7334                 // Versions prior to 0.0.100 expected to read the fields of `last_sent_closing_fee` here,
7335                 // however we are supposed to restart shutdown fee negotiation on reconnect (and wipe
7336                 // `last_send_closing_fee` in `remove_uncommitted_htlcs_and_mark_paused`) so we should never
7337                 // consider the stale state on reload.
7338                 match <u8 as Readable>::read(reader)? {
7339                         0 => {},
7340                         1 => {
7341                                 let _: u32 = Readable::read(reader)?;
7342                                 let _: u64 = Readable::read(reader)?;
7343                                 let _: Signature = Readable::read(reader)?;
7344                         },
7345                         _ => return Err(DecodeError::InvalidValue),
7346                 }
7347
7348                 let funding_tx_confirmed_in = Readable::read(reader)?;
7349                 let funding_tx_confirmation_height = Readable::read(reader)?;
7350                 let short_channel_id = Readable::read(reader)?;
7351
7352                 let counterparty_dust_limit_satoshis = Readable::read(reader)?;
7353                 let holder_dust_limit_satoshis = Readable::read(reader)?;
7354                 let counterparty_max_htlc_value_in_flight_msat = Readable::read(reader)?;
7355                 let mut counterparty_selected_channel_reserve_satoshis = None;
7356                 if ver == 1 {
7357                         // Read the old serialization from version 0.0.98.
7358                         counterparty_selected_channel_reserve_satoshis = Some(Readable::read(reader)?);
7359                 } else {
7360                         // Read the 8 bytes of backwards-compatibility data.
7361                         let _dummy: u64 = Readable::read(reader)?;
7362                 }
7363                 let counterparty_htlc_minimum_msat = Readable::read(reader)?;
7364                 let holder_htlc_minimum_msat = Readable::read(reader)?;
7365                 let counterparty_max_accepted_htlcs = Readable::read(reader)?;
7366
7367                 let mut minimum_depth = None;
7368                 if ver == 1 {
7369                         // Read the old serialization from version 0.0.98.
7370                         minimum_depth = Some(Readable::read(reader)?);
7371                 } else {
7372                         // Read the 4 bytes of backwards-compatibility data.
7373                         let _dummy: u32 = Readable::read(reader)?;
7374                 }
7375
7376                 let counterparty_forwarding_info = match <u8 as Readable>::read(reader)? {
7377                         0 => None,
7378                         1 => Some(CounterpartyForwardingInfo {
7379                                 fee_base_msat: Readable::read(reader)?,
7380                                 fee_proportional_millionths: Readable::read(reader)?,
7381                                 cltv_expiry_delta: Readable::read(reader)?,
7382                         }),
7383                         _ => return Err(DecodeError::InvalidValue),
7384                 };
7385
7386                 let mut channel_parameters: ChannelTransactionParameters = Readable::read(reader)?;
7387                 let funding_transaction: Option<Transaction> = Readable::read(reader)?;
7388
7389                 let counterparty_cur_commitment_point = Readable::read(reader)?;
7390
7391                 let counterparty_prev_commitment_point = Readable::read(reader)?;
7392                 let counterparty_node_id = Readable::read(reader)?;
7393
7394                 let counterparty_shutdown_scriptpubkey = Readable::read(reader)?;
7395                 let commitment_secrets = Readable::read(reader)?;
7396
7397                 let channel_update_status = Readable::read(reader)?;
7398
7399                 #[cfg(any(test, fuzzing))]
7400                 let mut historical_inbound_htlc_fulfills = HashSet::new();
7401                 #[cfg(any(test, fuzzing))]
7402                 {
7403                         let htlc_fulfills_len: u64 = Readable::read(reader)?;
7404                         for _ in 0..htlc_fulfills_len {
7405                                 assert!(historical_inbound_htlc_fulfills.insert(Readable::read(reader)?));
7406                         }
7407                 }
7408
7409                 let pending_update_fee = if let Some(feerate) = pending_update_fee_value {
7410                         Some((feerate, if channel_parameters.is_outbound_from_holder {
7411                                 FeeUpdateState::Outbound
7412                         } else {
7413                                 FeeUpdateState::AwaitingRemoteRevokeToAnnounce
7414                         }))
7415                 } else {
7416                         None
7417                 };
7418
7419                 let mut announcement_sigs = None;
7420                 let mut target_closing_feerate_sats_per_kw = None;
7421                 let mut monitor_pending_finalized_fulfills = Some(Vec::new());
7422                 let mut holder_selected_channel_reserve_satoshis = Some(get_legacy_default_holder_selected_channel_reserve_satoshis(channel_value_satoshis));
7423                 let mut holder_max_htlc_value_in_flight_msat = Some(get_holder_max_htlc_value_in_flight_msat(channel_value_satoshis, &UserConfig::default().channel_handshake_config));
7424                 // Prior to supporting channel type negotiation, all of our channels were static_remotekey
7425                 // only, so we default to that if none was written.
7426                 let mut channel_type = Some(ChannelTypeFeatures::only_static_remote_key());
7427                 let mut channel_creation_height = Some(serialized_height);
7428                 let mut preimages_opt: Option<Vec<Option<PaymentPreimage>>> = None;
7429
7430                 // If we read an old Channel, for simplicity we just treat it as "we never sent an
7431                 // AnnouncementSignatures" which implies we'll re-send it on reconnect, but that's fine.
7432                 let mut announcement_sigs_state = Some(AnnouncementSigsState::NotSent);
7433                 let mut latest_inbound_scid_alias = None;
7434                 let mut outbound_scid_alias = None;
7435                 let mut channel_pending_event_emitted = None;
7436                 let mut channel_ready_event_emitted = None;
7437
7438                 let mut user_id_high_opt: Option<u64> = None;
7439                 let mut channel_keys_id: Option<[u8; 32]> = None;
7440                 let mut temporary_channel_id: Option<ChannelId> = None;
7441                 let mut holder_max_accepted_htlcs: Option<u16> = None;
7442
7443                 let mut blocked_monitor_updates = Some(Vec::new());
7444
7445                 let mut pending_outbound_skimmed_fees_opt: Option<Vec<Option<u64>>> = None;
7446                 let mut holding_cell_skimmed_fees_opt: Option<Vec<Option<u64>>> = None;
7447
7448                 let mut is_batch_funding: Option<()> = None;
7449
7450                 read_tlv_fields!(reader, {
7451                         (0, announcement_sigs, option),
7452                         (1, minimum_depth, option),
7453                         (2, channel_type, option),
7454                         (3, counterparty_selected_channel_reserve_satoshis, option),
7455                         (4, holder_selected_channel_reserve_satoshis, option),
7456                         (5, config, option), // Note that if none is provided we will *not* overwrite the existing one.
7457                         (6, holder_max_htlc_value_in_flight_msat, option),
7458                         (7, shutdown_scriptpubkey, option),
7459                         (8, blocked_monitor_updates, optional_vec),
7460                         (9, target_closing_feerate_sats_per_kw, option),
7461                         (11, monitor_pending_finalized_fulfills, optional_vec),
7462                         (13, channel_creation_height, option),
7463                         (15, preimages_opt, optional_vec),
7464                         (17, announcement_sigs_state, option),
7465                         (19, latest_inbound_scid_alias, option),
7466                         (21, outbound_scid_alias, option),
7467                         (23, channel_ready_event_emitted, option),
7468                         (25, user_id_high_opt, option),
7469                         (27, channel_keys_id, option),
7470                         (28, holder_max_accepted_htlcs, option),
7471                         (29, temporary_channel_id, option),
7472                         (31, channel_pending_event_emitted, option),
7473                         (35, pending_outbound_skimmed_fees_opt, optional_vec),
7474                         (37, holding_cell_skimmed_fees_opt, optional_vec),
7475                         (38, is_batch_funding, option),
7476                 });
7477
7478                 let (channel_keys_id, holder_signer) = if let Some(channel_keys_id) = channel_keys_id {
7479                         let mut holder_signer = signer_provider.derive_channel_signer(channel_value_satoshis, channel_keys_id);
7480                         // If we've gotten to the funding stage of the channel, populate the signer with its
7481                         // required channel parameters.
7482                         let non_shutdown_state = channel_state & (!MULTI_STATE_FLAGS);
7483                         if non_shutdown_state & !STATE_FLAGS >= (ChannelState::FundingCreated as u32) {
7484                                 holder_signer.provide_channel_parameters(&channel_parameters);
7485                         }
7486                         (channel_keys_id, holder_signer)
7487                 } else {
7488                         // `keys_data` can be `None` if we had corrupted data.
7489                         let keys_data = keys_data.ok_or(DecodeError::InvalidValue)?;
7490                         let holder_signer = signer_provider.read_chan_signer(&keys_data)?;
7491                         (holder_signer.channel_keys_id(), holder_signer)
7492                 };
7493
7494                 if let Some(preimages) = preimages_opt {
7495                         let mut iter = preimages.into_iter();
7496                         for htlc in pending_outbound_htlcs.iter_mut() {
7497                                 match &htlc.state {
7498                                         OutboundHTLCState::AwaitingRemoteRevokeToRemove(OutboundHTLCOutcome::Success(None)) => {
7499                                                 htlc.state = OutboundHTLCState::AwaitingRemoteRevokeToRemove(OutboundHTLCOutcome::Success(iter.next().ok_or(DecodeError::InvalidValue)?));
7500                                         }
7501                                         OutboundHTLCState::AwaitingRemovedRemoteRevoke(OutboundHTLCOutcome::Success(None)) => {
7502                                                 htlc.state = OutboundHTLCState::AwaitingRemovedRemoteRevoke(OutboundHTLCOutcome::Success(iter.next().ok_or(DecodeError::InvalidValue)?));
7503                                         }
7504                                         _ => {}
7505                                 }
7506                         }
7507                         // We expect all preimages to be consumed above
7508                         if iter.next().is_some() {
7509                                 return Err(DecodeError::InvalidValue);
7510                         }
7511                 }
7512
7513                 let chan_features = channel_type.as_ref().unwrap();
7514                 if !chan_features.is_subset(our_supported_features) {
7515                         // If the channel was written by a new version and negotiated with features we don't
7516                         // understand yet, refuse to read it.
7517                         return Err(DecodeError::UnknownRequiredFeature);
7518                 }
7519
7520                 // ChannelTransactionParameters may have had an empty features set upon deserialization.
7521                 // To account for that, we're proactively setting/overriding the field here.
7522                 channel_parameters.channel_type_features = chan_features.clone();
7523
7524                 let mut secp_ctx = Secp256k1::new();
7525                 secp_ctx.seeded_randomize(&entropy_source.get_secure_random_bytes());
7526
7527                 // `user_id` used to be a single u64 value. In order to remain backwards
7528                 // compatible with versions prior to 0.0.113, the u128 is serialized as two
7529                 // separate u64 values.
7530                 let user_id = user_id_low as u128 + ((user_id_high_opt.unwrap_or(0) as u128) << 64);
7531
7532                 let holder_max_accepted_htlcs = holder_max_accepted_htlcs.unwrap_or(DEFAULT_MAX_HTLCS);
7533
7534                 if let Some(skimmed_fees) = pending_outbound_skimmed_fees_opt {
7535                         let mut iter = skimmed_fees.into_iter();
7536                         for htlc in pending_outbound_htlcs.iter_mut() {
7537                                 htlc.skimmed_fee_msat = iter.next().ok_or(DecodeError::InvalidValue)?;
7538                         }
7539                         // We expect all skimmed fees to be consumed above
7540                         if iter.next().is_some() { return Err(DecodeError::InvalidValue) }
7541                 }
7542                 if let Some(skimmed_fees) = holding_cell_skimmed_fees_opt {
7543                         let mut iter = skimmed_fees.into_iter();
7544                         for htlc in holding_cell_htlc_updates.iter_mut() {
7545                                 if let HTLCUpdateAwaitingACK::AddHTLC { ref mut skimmed_fee_msat, .. } = htlc {
7546                                         *skimmed_fee_msat = iter.next().ok_or(DecodeError::InvalidValue)?;
7547                                 }
7548                         }
7549                         // We expect all skimmed fees to be consumed above
7550                         if iter.next().is_some() { return Err(DecodeError::InvalidValue) }
7551                 }
7552
7553                 Ok(Channel {
7554                         context: ChannelContext {
7555                                 user_id,
7556
7557                                 config: config.unwrap(),
7558
7559                                 prev_config: None,
7560
7561                                 // Note that we don't care about serializing handshake limits as we only ever serialize
7562                                 // channel data after the handshake has completed.
7563                                 inbound_handshake_limits_override: None,
7564
7565                                 channel_id,
7566                                 temporary_channel_id,
7567                                 channel_state,
7568                                 announcement_sigs_state: announcement_sigs_state.unwrap(),
7569                                 secp_ctx,
7570                                 channel_value_satoshis,
7571
7572                                 latest_monitor_update_id,
7573
7574                                 holder_signer: ChannelSignerType::Ecdsa(holder_signer),
7575                                 shutdown_scriptpubkey,
7576                                 destination_script,
7577
7578                                 cur_holder_commitment_transaction_number,
7579                                 cur_counterparty_commitment_transaction_number,
7580                                 value_to_self_msat,
7581
7582                                 holder_max_accepted_htlcs,
7583                                 pending_inbound_htlcs,
7584                                 pending_outbound_htlcs,
7585                                 holding_cell_htlc_updates,
7586
7587                                 resend_order,
7588
7589                                 monitor_pending_channel_ready,
7590                                 monitor_pending_revoke_and_ack,
7591                                 monitor_pending_commitment_signed,
7592                                 monitor_pending_forwards,
7593                                 monitor_pending_failures,
7594                                 monitor_pending_finalized_fulfills: monitor_pending_finalized_fulfills.unwrap(),
7595
7596                                 pending_update_fee,
7597                                 holding_cell_update_fee,
7598                                 next_holder_htlc_id,
7599                                 next_counterparty_htlc_id,
7600                                 update_time_counter,
7601                                 feerate_per_kw,
7602
7603                                 #[cfg(debug_assertions)]
7604                                 holder_max_commitment_tx_output: Mutex::new((0, 0)),
7605                                 #[cfg(debug_assertions)]
7606                                 counterparty_max_commitment_tx_output: Mutex::new((0, 0)),
7607
7608                                 last_sent_closing_fee: None,
7609                                 pending_counterparty_closing_signed: None,
7610                                 closing_fee_limits: None,
7611                                 target_closing_feerate_sats_per_kw,
7612
7613                                 funding_tx_confirmed_in,
7614                                 funding_tx_confirmation_height,
7615                                 short_channel_id,
7616                                 channel_creation_height: channel_creation_height.unwrap(),
7617
7618                                 counterparty_dust_limit_satoshis,
7619                                 holder_dust_limit_satoshis,
7620                                 counterparty_max_htlc_value_in_flight_msat,
7621                                 holder_max_htlc_value_in_flight_msat: holder_max_htlc_value_in_flight_msat.unwrap(),
7622                                 counterparty_selected_channel_reserve_satoshis,
7623                                 holder_selected_channel_reserve_satoshis: holder_selected_channel_reserve_satoshis.unwrap(),
7624                                 counterparty_htlc_minimum_msat,
7625                                 holder_htlc_minimum_msat,
7626                                 counterparty_max_accepted_htlcs,
7627                                 minimum_depth,
7628
7629                                 counterparty_forwarding_info,
7630
7631                                 channel_transaction_parameters: channel_parameters,
7632                                 funding_transaction,
7633                                 is_batch_funding,
7634
7635                                 counterparty_cur_commitment_point,
7636                                 counterparty_prev_commitment_point,
7637                                 counterparty_node_id,
7638
7639                                 counterparty_shutdown_scriptpubkey,
7640
7641                                 commitment_secrets,
7642
7643                                 channel_update_status,
7644                                 closing_signed_in_flight: false,
7645
7646                                 announcement_sigs,
7647
7648                                 #[cfg(any(test, fuzzing))]
7649                                 next_local_commitment_tx_fee_info_cached: Mutex::new(None),
7650                                 #[cfg(any(test, fuzzing))]
7651                                 next_remote_commitment_tx_fee_info_cached: Mutex::new(None),
7652
7653                                 workaround_lnd_bug_4006: None,
7654                                 sent_message_awaiting_response: None,
7655
7656                                 latest_inbound_scid_alias,
7657                                 // Later in the ChannelManager deserialization phase we scan for channels and assign scid aliases if its missing
7658                                 outbound_scid_alias: outbound_scid_alias.unwrap_or(0),
7659
7660                                 channel_pending_event_emitted: channel_pending_event_emitted.unwrap_or(true),
7661                                 channel_ready_event_emitted: channel_ready_event_emitted.unwrap_or(true),
7662
7663                                 #[cfg(any(test, fuzzing))]
7664                                 historical_inbound_htlc_fulfills,
7665
7666                                 channel_type: channel_type.unwrap(),
7667                                 channel_keys_id,
7668
7669                                 blocked_monitor_updates: blocked_monitor_updates.unwrap(),
7670                         }
7671                 })
7672         }
7673 }
7674
7675 #[cfg(test)]
7676 mod tests {
7677         use std::cmp;
7678         use bitcoin::blockdata::constants::ChainHash;
7679         use bitcoin::blockdata::script::{Script, Builder};
7680         use bitcoin::blockdata::transaction::{Transaction, TxOut};
7681         use bitcoin::blockdata::opcodes;
7682         use bitcoin::network::constants::Network;
7683         use hex;
7684         use crate::ln::PaymentHash;
7685         use crate::ln::channelmanager::{self, HTLCSource, PaymentId};
7686         use crate::ln::channel::InitFeatures;
7687         use crate::ln::channel::{Channel, ChannelState, InboundHTLCOutput, OutboundV1Channel, InboundV1Channel, OutboundHTLCOutput, InboundHTLCState, OutboundHTLCState, HTLCCandidate, HTLCInitiator, commit_tx_fee_msat};
7688         use crate::ln::channel::{MAX_FUNDING_SATOSHIS_NO_WUMBO, TOTAL_BITCOIN_SUPPLY_SATOSHIS, MIN_THEIR_CHAN_RESERVE_SATOSHIS};
7689         use crate::ln::features::ChannelTypeFeatures;
7690         use crate::ln::msgs::{ChannelUpdate, DecodeError, UnsignedChannelUpdate, MAX_VALUE_MSAT};
7691         use crate::ln::script::ShutdownScript;
7692         use crate::ln::chan_utils;
7693         use crate::ln::chan_utils::{htlc_success_tx_weight, htlc_timeout_tx_weight};
7694         use crate::chain::BestBlock;
7695         use crate::chain::chaininterface::{FeeEstimator, LowerBoundedFeeEstimator, ConfirmationTarget};
7696         use crate::sign::{ChannelSigner, InMemorySigner, EntropySource, SignerProvider};
7697         use crate::chain::transaction::OutPoint;
7698         use crate::routing::router::Path;
7699         use crate::util::config::UserConfig;
7700         use crate::util::errors::APIError;
7701         use crate::util::test_utils;
7702         use crate::util::test_utils::{OnGetShutdownScriptpubkey, TestKeysInterface};
7703         use bitcoin::secp256k1::{Secp256k1, ecdsa::Signature};
7704         use bitcoin::secp256k1::ffi::Signature as FFISignature;
7705         use bitcoin::secp256k1::{SecretKey,PublicKey};
7706         use bitcoin::hashes::sha256::Hash as Sha256;
7707         use bitcoin::hashes::Hash;
7708         use bitcoin::hash_types::WPubkeyHash;
7709         use bitcoin::PackedLockTime;
7710         use bitcoin::util::address::WitnessVersion;
7711         use crate::prelude::*;
7712
7713         struct TestFeeEstimator {
7714                 fee_est: u32
7715         }
7716         impl FeeEstimator for TestFeeEstimator {
7717                 fn get_est_sat_per_1000_weight(&self, _: ConfirmationTarget) -> u32 {
7718                         self.fee_est
7719                 }
7720         }
7721
7722         #[test]
7723         fn test_max_funding_satoshis_no_wumbo() {
7724                 assert_eq!(TOTAL_BITCOIN_SUPPLY_SATOSHIS, 21_000_000 * 100_000_000);
7725                 assert!(MAX_FUNDING_SATOSHIS_NO_WUMBO <= TOTAL_BITCOIN_SUPPLY_SATOSHIS,
7726                         "MAX_FUNDING_SATOSHIS_NO_WUMBO is greater than all satoshis in existence");
7727         }
7728
7729         #[test]
7730         fn test_no_fee_check_overflow() {
7731                 // Previously, calling `check_remote_fee` with a fee of 0xffffffff would overflow in
7732                 // arithmetic, causing a panic with debug assertions enabled.
7733                 let fee_est = TestFeeEstimator { fee_est: 42 };
7734                 let bounded_fee_estimator = LowerBoundedFeeEstimator::new(&fee_est);
7735                 assert!(Channel::<&TestKeysInterface>::check_remote_fee(
7736                         &ChannelTypeFeatures::only_static_remote_key(), &bounded_fee_estimator,
7737                         u32::max_value(), None, &&test_utils::TestLogger::new()).is_err());
7738         }
7739
7740         struct Keys {
7741                 signer: InMemorySigner,
7742         }
7743
7744         impl EntropySource for Keys {
7745                 fn get_secure_random_bytes(&self) -> [u8; 32] { [0; 32] }
7746         }
7747
7748         impl SignerProvider for Keys {
7749                 type Signer = InMemorySigner;
7750
7751                 fn generate_channel_keys_id(&self, _inbound: bool, _channel_value_satoshis: u64, _user_channel_id: u128) -> [u8; 32] {
7752                         self.signer.channel_keys_id()
7753                 }
7754
7755                 fn derive_channel_signer(&self, _channel_value_satoshis: u64, _channel_keys_id: [u8; 32]) -> Self::Signer {
7756                         self.signer.clone()
7757                 }
7758
7759                 fn read_chan_signer(&self, _data: &[u8]) -> Result<Self::Signer, DecodeError> { panic!(); }
7760
7761                 fn get_destination_script(&self) -> Result<Script, ()> {
7762                         let secp_ctx = Secp256k1::signing_only();
7763                         let channel_monitor_claim_key = SecretKey::from_slice(&hex::decode("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap()[..]).unwrap();
7764                         let channel_monitor_claim_key_hash = WPubkeyHash::hash(&PublicKey::from_secret_key(&secp_ctx, &channel_monitor_claim_key).serialize());
7765                         Ok(Builder::new().push_opcode(opcodes::all::OP_PUSHBYTES_0).push_slice(&channel_monitor_claim_key_hash[..]).into_script())
7766                 }
7767
7768                 fn get_shutdown_scriptpubkey(&self) -> Result<ShutdownScript, ()> {
7769                         let secp_ctx = Secp256k1::signing_only();
7770                         let channel_close_key = SecretKey::from_slice(&hex::decode("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap()[..]).unwrap();
7771                         Ok(ShutdownScript::new_p2wpkh_from_pubkey(PublicKey::from_secret_key(&secp_ctx, &channel_close_key)))
7772                 }
7773         }
7774
7775         #[cfg(all(feature = "_test_vectors", not(feature = "grind_signatures")))]
7776         fn public_from_secret_hex(secp_ctx: &Secp256k1<bitcoin::secp256k1::All>, hex: &str) -> PublicKey {
7777                 PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&hex::decode(hex).unwrap()[..]).unwrap())
7778         }
7779
7780         #[test]
7781         fn upfront_shutdown_script_incompatibility() {
7782                 let features = channelmanager::provided_init_features(&UserConfig::default()).clear_shutdown_anysegwit();
7783                 let non_v0_segwit_shutdown_script =
7784                         ShutdownScript::new_witness_program(WitnessVersion::V16, &[0, 40]).unwrap();
7785
7786                 let seed = [42; 32];
7787                 let network = Network::Testnet;
7788                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
7789                 keys_provider.expect(OnGetShutdownScriptpubkey {
7790                         returns: non_v0_segwit_shutdown_script.clone(),
7791                 });
7792
7793                 let secp_ctx = Secp256k1::new();
7794                 let node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
7795                 let config = UserConfig::default();
7796                 match OutboundV1Channel::<&TestKeysInterface>::new(&LowerBoundedFeeEstimator::new(&TestFeeEstimator { fee_est: 253 }), &&keys_provider, &&keys_provider, node_id, &features, 10000000, 100000, 42, &config, 0, 42) {
7797                         Err(APIError::IncompatibleShutdownScript { script }) => {
7798                                 assert_eq!(script.into_inner(), non_v0_segwit_shutdown_script.into_inner());
7799                         },
7800                         Err(e) => panic!("Unexpected error: {:?}", e),
7801                         Ok(_) => panic!("Expected error"),
7802                 }
7803         }
7804
7805         // Check that, during channel creation, we use the same feerate in the open channel message
7806         // as we do in the Channel object creation itself.
7807         #[test]
7808         fn test_open_channel_msg_fee() {
7809                 let original_fee = 253;
7810                 let mut fee_est = TestFeeEstimator{fee_est: original_fee };
7811                 let bounded_fee_estimator = LowerBoundedFeeEstimator::new(&fee_est);
7812                 let secp_ctx = Secp256k1::new();
7813                 let seed = [42; 32];
7814                 let network = Network::Testnet;
7815                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
7816
7817                 let node_a_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
7818                 let config = UserConfig::default();
7819                 let node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&bounded_fee_estimator, &&keys_provider, &&keys_provider, node_a_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42).unwrap();
7820
7821                 // Now change the fee so we can check that the fee in the open_channel message is the
7822                 // same as the old fee.
7823                 fee_est.fee_est = 500;
7824                 let open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network));
7825                 assert_eq!(open_channel_msg.feerate_per_kw, original_fee);
7826         }
7827
7828         #[test]
7829         fn test_holder_vs_counterparty_dust_limit() {
7830                 // Test that when calculating the local and remote commitment transaction fees, the correct
7831                 // dust limits are used.
7832                 let feeest = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
7833                 let secp_ctx = Secp256k1::new();
7834                 let seed = [42; 32];
7835                 let network = Network::Testnet;
7836                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
7837                 let logger = test_utils::TestLogger::new();
7838                 let best_block = BestBlock::from_network(network);
7839
7840                 // Go through the flow of opening a channel between two nodes, making sure
7841                 // they have different dust limits.
7842
7843                 // Create Node A's channel pointing to Node B's pubkey
7844                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
7845                 let config = UserConfig::default();
7846                 let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42).unwrap();
7847
7848                 // Create Node B's channel by receiving Node A's open_channel message
7849                 // Make sure A's dust limit is as we expect.
7850                 let open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network));
7851                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
7852                 let mut node_b_chan = InboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false).unwrap();
7853
7854                 // Node B --> Node A: accept channel, explicitly setting B's dust limit.
7855                 let mut accept_channel_msg = node_b_chan.accept_inbound_channel();
7856                 accept_channel_msg.dust_limit_satoshis = 546;
7857                 node_a_chan.accept_channel(&accept_channel_msg, &config.channel_handshake_limits, &channelmanager::provided_init_features(&config)).unwrap();
7858                 node_a_chan.context.holder_dust_limit_satoshis = 1560;
7859
7860                 // Node A --> Node B: funding created
7861                 let output_script = node_a_chan.context.get_funding_redeemscript();
7862                 let tx = Transaction { version: 1, lock_time: PackedLockTime::ZERO, input: Vec::new(), output: vec![TxOut {
7863                         value: 10000000, script_pubkey: output_script.clone(),
7864                 }]};
7865                 let funding_outpoint = OutPoint{ txid: tx.txid(), index: 0 };
7866                 let (mut node_a_chan, funding_created_msg) = node_a_chan.get_funding_created(tx.clone(), funding_outpoint, false, &&logger).map_err(|_| ()).unwrap();
7867                 let (_, funding_signed_msg, _) = node_b_chan.funding_created(&funding_created_msg, best_block, &&keys_provider, &&logger).map_err(|_| ()).unwrap();
7868
7869                 // Node B --> Node A: funding signed
7870                 let _ = node_a_chan.funding_signed(&funding_signed_msg, best_block, &&keys_provider, &&logger).unwrap();
7871
7872                 // Put some inbound and outbound HTLCs in A's channel.
7873                 let htlc_amount_msat = 11_092_000; // put an amount below A's effective dust limit but above B's.
7874                 node_a_chan.context.pending_inbound_htlcs.push(InboundHTLCOutput {
7875                         htlc_id: 0,
7876                         amount_msat: htlc_amount_msat,
7877                         payment_hash: PaymentHash(Sha256::hash(&[42; 32]).into_inner()),
7878                         cltv_expiry: 300000000,
7879                         state: InboundHTLCState::Committed,
7880                 });
7881
7882                 node_a_chan.context.pending_outbound_htlcs.push(OutboundHTLCOutput {
7883                         htlc_id: 1,
7884                         amount_msat: htlc_amount_msat, // put an amount below A's dust amount but above B's.
7885                         payment_hash: PaymentHash(Sha256::hash(&[43; 32]).into_inner()),
7886                         cltv_expiry: 200000000,
7887                         state: OutboundHTLCState::Committed,
7888                         source: HTLCSource::OutboundRoute {
7889                                 path: Path { hops: Vec::new(), blinded_tail: None },
7890                                 session_priv: SecretKey::from_slice(&hex::decode("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap()[..]).unwrap(),
7891                                 first_hop_htlc_msat: 548,
7892                                 payment_id: PaymentId([42; 32]),
7893                         },
7894                         skimmed_fee_msat: None,
7895                 });
7896
7897                 // Make sure when Node A calculates their local commitment transaction, none of the HTLCs pass
7898                 // the dust limit check.
7899                 let htlc_candidate = HTLCCandidate::new(htlc_amount_msat, HTLCInitiator::LocalOffered);
7900                 let local_commit_tx_fee = node_a_chan.context.next_local_commit_tx_fee_msat(htlc_candidate, None);
7901                 let local_commit_fee_0_htlcs = commit_tx_fee_msat(node_a_chan.context.feerate_per_kw, 0, node_a_chan.context.get_channel_type());
7902                 assert_eq!(local_commit_tx_fee, local_commit_fee_0_htlcs);
7903
7904                 // Finally, make sure that when Node A calculates the remote's commitment transaction fees, all
7905                 // of the HTLCs are seen to be above the dust limit.
7906                 node_a_chan.context.channel_transaction_parameters.is_outbound_from_holder = false;
7907                 let remote_commit_fee_3_htlcs = commit_tx_fee_msat(node_a_chan.context.feerate_per_kw, 3, node_a_chan.context.get_channel_type());
7908                 let htlc_candidate = HTLCCandidate::new(htlc_amount_msat, HTLCInitiator::LocalOffered);
7909                 let remote_commit_tx_fee = node_a_chan.context.next_remote_commit_tx_fee_msat(htlc_candidate, None);
7910                 assert_eq!(remote_commit_tx_fee, remote_commit_fee_3_htlcs);
7911         }
7912
7913         #[test]
7914         fn test_timeout_vs_success_htlc_dust_limit() {
7915                 // Make sure that when `next_remote_commit_tx_fee_msat` and `next_local_commit_tx_fee_msat`
7916                 // calculate the real dust limits for HTLCs (i.e. the dust limit given by the counterparty
7917                 // *plus* the fees paid for the HTLC) they don't swap `HTLC_SUCCESS_TX_WEIGHT` for
7918                 // `HTLC_TIMEOUT_TX_WEIGHT`, and vice versa.
7919                 let fee_est = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 253 });
7920                 let secp_ctx = Secp256k1::new();
7921                 let seed = [42; 32];
7922                 let network = Network::Testnet;
7923                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
7924
7925                 let node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
7926                 let config = UserConfig::default();
7927                 let mut chan = OutboundV1Channel::<&TestKeysInterface>::new(&fee_est, &&keys_provider, &&keys_provider, node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42).unwrap();
7928
7929                 let commitment_tx_fee_0_htlcs = commit_tx_fee_msat(chan.context.feerate_per_kw, 0, chan.context.get_channel_type());
7930                 let commitment_tx_fee_1_htlc = commit_tx_fee_msat(chan.context.feerate_per_kw, 1, chan.context.get_channel_type());
7931
7932                 // If HTLC_SUCCESS_TX_WEIGHT and HTLC_TIMEOUT_TX_WEIGHT were swapped: then this HTLC would be
7933                 // counted as dust when it shouldn't be.
7934                 let htlc_amt_above_timeout = ((253 * htlc_timeout_tx_weight(chan.context.get_channel_type()) / 1000) + chan.context.holder_dust_limit_satoshis + 1) * 1000;
7935                 let htlc_candidate = HTLCCandidate::new(htlc_amt_above_timeout, HTLCInitiator::LocalOffered);
7936                 let commitment_tx_fee = chan.context.next_local_commit_tx_fee_msat(htlc_candidate, None);
7937                 assert_eq!(commitment_tx_fee, commitment_tx_fee_1_htlc);
7938
7939                 // If swapped: this HTLC would be counted as non-dust when it shouldn't be.
7940                 let dust_htlc_amt_below_success = ((253 * htlc_success_tx_weight(chan.context.get_channel_type()) / 1000) + chan.context.holder_dust_limit_satoshis - 1) * 1000;
7941                 let htlc_candidate = HTLCCandidate::new(dust_htlc_amt_below_success, HTLCInitiator::RemoteOffered);
7942                 let commitment_tx_fee = chan.context.next_local_commit_tx_fee_msat(htlc_candidate, None);
7943                 assert_eq!(commitment_tx_fee, commitment_tx_fee_0_htlcs);
7944
7945                 chan.context.channel_transaction_parameters.is_outbound_from_holder = false;
7946
7947                 // If swapped: this HTLC would be counted as non-dust when it shouldn't be.
7948                 let dust_htlc_amt_above_timeout = ((253 * htlc_timeout_tx_weight(chan.context.get_channel_type()) / 1000) + chan.context.counterparty_dust_limit_satoshis + 1) * 1000;
7949                 let htlc_candidate = HTLCCandidate::new(dust_htlc_amt_above_timeout, HTLCInitiator::LocalOffered);
7950                 let commitment_tx_fee = chan.context.next_remote_commit_tx_fee_msat(htlc_candidate, None);
7951                 assert_eq!(commitment_tx_fee, commitment_tx_fee_0_htlcs);
7952
7953                 // If swapped: this HTLC would be counted as dust when it shouldn't be.
7954                 let htlc_amt_below_success = ((253 * htlc_success_tx_weight(chan.context.get_channel_type()) / 1000) + chan.context.counterparty_dust_limit_satoshis - 1) * 1000;
7955                 let htlc_candidate = HTLCCandidate::new(htlc_amt_below_success, HTLCInitiator::RemoteOffered);
7956                 let commitment_tx_fee = chan.context.next_remote_commit_tx_fee_msat(htlc_candidate, None);
7957                 assert_eq!(commitment_tx_fee, commitment_tx_fee_1_htlc);
7958         }
7959
7960         #[test]
7961         fn channel_reestablish_no_updates() {
7962                 let feeest = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
7963                 let logger = test_utils::TestLogger::new();
7964                 let secp_ctx = Secp256k1::new();
7965                 let seed = [42; 32];
7966                 let network = Network::Testnet;
7967                 let best_block = BestBlock::from_network(network);
7968                 let chain_hash = ChainHash::using_genesis_block(network);
7969                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
7970
7971                 // Go through the flow of opening a channel between two nodes.
7972
7973                 // Create Node A's channel pointing to Node B's pubkey
7974                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
7975                 let config = UserConfig::default();
7976                 let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42).unwrap();
7977
7978                 // Create Node B's channel by receiving Node A's open_channel message
7979                 let open_channel_msg = node_a_chan.get_open_channel(chain_hash);
7980                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
7981                 let mut node_b_chan = InboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false).unwrap();
7982
7983                 // Node B --> Node A: accept channel
7984                 let accept_channel_msg = node_b_chan.accept_inbound_channel();
7985                 node_a_chan.accept_channel(&accept_channel_msg, &config.channel_handshake_limits, &channelmanager::provided_init_features(&config)).unwrap();
7986
7987                 // Node A --> Node B: funding created
7988                 let output_script = node_a_chan.context.get_funding_redeemscript();
7989                 let tx = Transaction { version: 1, lock_time: PackedLockTime::ZERO, input: Vec::new(), output: vec![TxOut {
7990                         value: 10000000, script_pubkey: output_script.clone(),
7991                 }]};
7992                 let funding_outpoint = OutPoint{ txid: tx.txid(), index: 0 };
7993                 let (mut node_a_chan, funding_created_msg) = node_a_chan.get_funding_created(tx.clone(), funding_outpoint, false, &&logger).map_err(|_| ()).unwrap();
7994                 let (mut node_b_chan, funding_signed_msg, _) = node_b_chan.funding_created(&funding_created_msg, best_block, &&keys_provider, &&logger).map_err(|_| ()).unwrap();
7995
7996                 // Node B --> Node A: funding signed
7997                 let _ = node_a_chan.funding_signed(&funding_signed_msg, best_block, &&keys_provider, &&logger).unwrap();
7998
7999                 // Now disconnect the two nodes and check that the commitment point in
8000                 // Node B's channel_reestablish message is sane.
8001                 assert!(node_b_chan.remove_uncommitted_htlcs_and_mark_paused(&&logger).is_ok());
8002                 let msg = node_b_chan.get_channel_reestablish(&&logger);
8003                 assert_eq!(msg.next_local_commitment_number, 1); // now called next_commitment_number
8004                 assert_eq!(msg.next_remote_commitment_number, 0); // now called next_revocation_number
8005                 assert_eq!(msg.your_last_per_commitment_secret, [0; 32]);
8006
8007                 // Check that the commitment point in Node A's channel_reestablish message
8008                 // is sane.
8009                 assert!(node_a_chan.remove_uncommitted_htlcs_and_mark_paused(&&logger).is_ok());
8010                 let msg = node_a_chan.get_channel_reestablish(&&logger);
8011                 assert_eq!(msg.next_local_commitment_number, 1); // now called next_commitment_number
8012                 assert_eq!(msg.next_remote_commitment_number, 0); // now called next_revocation_number
8013                 assert_eq!(msg.your_last_per_commitment_secret, [0; 32]);
8014         }
8015
8016         #[test]
8017         fn test_configured_holder_max_htlc_value_in_flight() {
8018                 let feeest = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
8019                 let logger = test_utils::TestLogger::new();
8020                 let secp_ctx = Secp256k1::new();
8021                 let seed = [42; 32];
8022                 let network = Network::Testnet;
8023                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
8024                 let outbound_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
8025                 let inbound_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
8026
8027                 let mut config_2_percent = UserConfig::default();
8028                 config_2_percent.channel_handshake_config.max_inbound_htlc_value_in_flight_percent_of_channel = 2;
8029                 let mut config_99_percent = UserConfig::default();
8030                 config_99_percent.channel_handshake_config.max_inbound_htlc_value_in_flight_percent_of_channel = 99;
8031                 let mut config_0_percent = UserConfig::default();
8032                 config_0_percent.channel_handshake_config.max_inbound_htlc_value_in_flight_percent_of_channel = 0;
8033                 let mut config_101_percent = UserConfig::default();
8034                 config_101_percent.channel_handshake_config.max_inbound_htlc_value_in_flight_percent_of_channel = 101;
8035
8036                 // Test that `OutboundV1Channel::new` creates a channel with the correct value for
8037                 // `holder_max_htlc_value_in_flight_msat`, when configured with a valid percentage value,
8038                 // which is set to the lower bound + 1 (2%) of the `channel_value`.
8039                 let chan_1 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_2_percent), 10000000, 100000, 42, &config_2_percent, 0, 42).unwrap();
8040                 let chan_1_value_msat = chan_1.context.channel_value_satoshis * 1000;
8041                 assert_eq!(chan_1.context.holder_max_htlc_value_in_flight_msat, (chan_1_value_msat as f64 * 0.02) as u64);
8042
8043                 // Test with the upper bound - 1 of valid values (99%).
8044                 let chan_2 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_99_percent), 10000000, 100000, 42, &config_99_percent, 0, 42).unwrap();
8045                 let chan_2_value_msat = chan_2.context.channel_value_satoshis * 1000;
8046                 assert_eq!(chan_2.context.holder_max_htlc_value_in_flight_msat, (chan_2_value_msat as f64 * 0.99) as u64);
8047
8048                 let chan_1_open_channel_msg = chan_1.get_open_channel(ChainHash::using_genesis_block(network));
8049
8050                 // Test that `InboundV1Channel::new` creates a channel with the correct value for
8051                 // `holder_max_htlc_value_in_flight_msat`, when configured with a valid percentage value,
8052                 // which is set to the lower bound - 1 (2%) of the `channel_value`.
8053                 let chan_3 = InboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&config_2_percent), &channelmanager::provided_init_features(&config_2_percent), &chan_1_open_channel_msg, 7, &config_2_percent, 0, &&logger, /*is_0conf=*/false).unwrap();
8054                 let chan_3_value_msat = chan_3.context.channel_value_satoshis * 1000;
8055                 assert_eq!(chan_3.context.holder_max_htlc_value_in_flight_msat, (chan_3_value_msat as f64 * 0.02) as u64);
8056
8057                 // Test with the upper bound - 1 of valid values (99%).
8058                 let chan_4 = InboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&config_99_percent), &channelmanager::provided_init_features(&config_99_percent), &chan_1_open_channel_msg, 7, &config_99_percent, 0, &&logger, /*is_0conf=*/false).unwrap();
8059                 let chan_4_value_msat = chan_4.context.channel_value_satoshis * 1000;
8060                 assert_eq!(chan_4.context.holder_max_htlc_value_in_flight_msat, (chan_4_value_msat as f64 * 0.99) as u64);
8061
8062                 // Test that `OutboundV1Channel::new` uses the lower bound of the configurable percentage values (1%)
8063                 // if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a value less than 1.
8064                 let chan_5 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_0_percent), 10000000, 100000, 42, &config_0_percent, 0, 42).unwrap();
8065                 let chan_5_value_msat = chan_5.context.channel_value_satoshis * 1000;
8066                 assert_eq!(chan_5.context.holder_max_htlc_value_in_flight_msat, (chan_5_value_msat as f64 * 0.01) as u64);
8067
8068                 // Test that `OutboundV1Channel::new` uses the upper bound of the configurable percentage values
8069                 // (100%) if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a larger value
8070                 // than 100.
8071                 let chan_6 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_101_percent), 10000000, 100000, 42, &config_101_percent, 0, 42).unwrap();
8072                 let chan_6_value_msat = chan_6.context.channel_value_satoshis * 1000;
8073                 assert_eq!(chan_6.context.holder_max_htlc_value_in_flight_msat, chan_6_value_msat);
8074
8075                 // Test that `InboundV1Channel::new` uses the lower bound of the configurable percentage values (1%)
8076                 // if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a value less than 1.
8077                 let chan_7 = InboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&config_0_percent), &channelmanager::provided_init_features(&config_0_percent), &chan_1_open_channel_msg, 7, &config_0_percent, 0, &&logger, /*is_0conf=*/false).unwrap();
8078                 let chan_7_value_msat = chan_7.context.channel_value_satoshis * 1000;
8079                 assert_eq!(chan_7.context.holder_max_htlc_value_in_flight_msat, (chan_7_value_msat as f64 * 0.01) as u64);
8080
8081                 // Test that `InboundV1Channel::new` uses the upper bound of the configurable percentage values
8082                 // (100%) if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a larger value
8083                 // than 100.
8084                 let chan_8 = InboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&config_101_percent), &channelmanager::provided_init_features(&config_101_percent), &chan_1_open_channel_msg, 7, &config_101_percent, 0, &&logger, /*is_0conf=*/false).unwrap();
8085                 let chan_8_value_msat = chan_8.context.channel_value_satoshis * 1000;
8086                 assert_eq!(chan_8.context.holder_max_htlc_value_in_flight_msat, chan_8_value_msat);
8087         }
8088
8089         #[test]
8090         fn test_configured_holder_selected_channel_reserve_satoshis() {
8091
8092                 // Test that `OutboundV1Channel::new` and `InboundV1Channel::new` create a channel with the correct
8093                 // channel reserves, when `their_channel_reserve_proportional_millionths` is configured.
8094                 test_self_and_counterparty_channel_reserve(10_000_000, 0.02, 0.02);
8095
8096                 // Test with valid but unreasonably high channel reserves
8097                 // Requesting and accepting parties have requested for 49%-49% and 60%-30% channel reserve
8098                 test_self_and_counterparty_channel_reserve(10_000_000, 0.49, 0.49);
8099                 test_self_and_counterparty_channel_reserve(10_000_000, 0.60, 0.30);
8100
8101                 // Test with calculated channel reserve less than lower bound
8102                 // i.e `MIN_THEIR_CHAN_RESERVE_SATOSHIS`
8103                 test_self_and_counterparty_channel_reserve(100_000, 0.00002, 0.30);
8104
8105                 // Test with invalid channel reserves since sum of both is greater than or equal
8106                 // to channel value
8107                 test_self_and_counterparty_channel_reserve(10_000_000, 0.50, 0.50);
8108                 test_self_and_counterparty_channel_reserve(10_000_000, 0.60, 0.50);
8109         }
8110
8111         fn test_self_and_counterparty_channel_reserve(channel_value_satoshis: u64, outbound_selected_channel_reserve_perc: f64, inbound_selected_channel_reserve_perc: f64) {
8112                 let fee_est = LowerBoundedFeeEstimator::new(&TestFeeEstimator { fee_est: 15_000 });
8113                 let logger = test_utils::TestLogger::new();
8114                 let secp_ctx = Secp256k1::new();
8115                 let seed = [42; 32];
8116                 let network = Network::Testnet;
8117                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
8118                 let outbound_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
8119                 let inbound_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
8120
8121
8122                 let mut outbound_node_config = UserConfig::default();
8123                 outbound_node_config.channel_handshake_config.their_channel_reserve_proportional_millionths = (outbound_selected_channel_reserve_perc * 1_000_000.0) as u32;
8124                 let chan = OutboundV1Channel::<&TestKeysInterface>::new(&&fee_est, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&outbound_node_config), channel_value_satoshis, 100_000, 42, &outbound_node_config, 0, 42).unwrap();
8125
8126                 let expected_outbound_selected_chan_reserve = cmp::max(MIN_THEIR_CHAN_RESERVE_SATOSHIS, (chan.context.channel_value_satoshis as f64 * outbound_selected_channel_reserve_perc) as u64);
8127                 assert_eq!(chan.context.holder_selected_channel_reserve_satoshis, expected_outbound_selected_chan_reserve);
8128
8129                 let chan_open_channel_msg = chan.get_open_channel(ChainHash::using_genesis_block(network));
8130                 let mut inbound_node_config = UserConfig::default();
8131                 inbound_node_config.channel_handshake_config.their_channel_reserve_proportional_millionths = (inbound_selected_channel_reserve_perc * 1_000_000.0) as u32;
8132
8133                 if outbound_selected_channel_reserve_perc + inbound_selected_channel_reserve_perc < 1.0 {
8134                         let chan_inbound_node = InboundV1Channel::<&TestKeysInterface>::new(&&fee_est, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&inbound_node_config), &channelmanager::provided_init_features(&outbound_node_config), &chan_open_channel_msg, 7, &inbound_node_config, 0, &&logger, /*is_0conf=*/false).unwrap();
8135
8136                         let expected_inbound_selected_chan_reserve = cmp::max(MIN_THEIR_CHAN_RESERVE_SATOSHIS, (chan.context.channel_value_satoshis as f64 * inbound_selected_channel_reserve_perc) as u64);
8137
8138                         assert_eq!(chan_inbound_node.context.holder_selected_channel_reserve_satoshis, expected_inbound_selected_chan_reserve);
8139                         assert_eq!(chan_inbound_node.context.counterparty_selected_channel_reserve_satoshis.unwrap(), expected_outbound_selected_chan_reserve);
8140                 } else {
8141                         // Channel Negotiations failed
8142                         let result = InboundV1Channel::<&TestKeysInterface>::new(&&fee_est, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&inbound_node_config), &channelmanager::provided_init_features(&outbound_node_config), &chan_open_channel_msg, 7, &inbound_node_config, 0, &&logger, /*is_0conf=*/false);
8143                         assert!(result.is_err());
8144                 }
8145         }
8146
8147         #[test]
8148         fn channel_update() {
8149                 let feeest = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
8150                 let logger = test_utils::TestLogger::new();
8151                 let secp_ctx = Secp256k1::new();
8152                 let seed = [42; 32];
8153                 let network = Network::Testnet;
8154                 let best_block = BestBlock::from_network(network);
8155                 let chain_hash = ChainHash::using_genesis_block(network);
8156                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
8157
8158                 // Create Node A's channel pointing to Node B's pubkey
8159                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
8160                 let config = UserConfig::default();
8161                 let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42).unwrap();
8162
8163                 // Create Node B's channel by receiving Node A's open_channel message
8164                 // Make sure A's dust limit is as we expect.
8165                 let open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network));
8166                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
8167                 let mut node_b_chan = InboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false).unwrap();
8168
8169                 // Node B --> Node A: accept channel, explicitly setting B's dust limit.
8170                 let mut accept_channel_msg = node_b_chan.accept_inbound_channel();
8171                 accept_channel_msg.dust_limit_satoshis = 546;
8172                 node_a_chan.accept_channel(&accept_channel_msg, &config.channel_handshake_limits, &channelmanager::provided_init_features(&config)).unwrap();
8173                 node_a_chan.context.holder_dust_limit_satoshis = 1560;
8174
8175                 // Node A --> Node B: funding created
8176                 let output_script = node_a_chan.context.get_funding_redeemscript();
8177                 let tx = Transaction { version: 1, lock_time: PackedLockTime::ZERO, input: Vec::new(), output: vec![TxOut {
8178                         value: 10000000, script_pubkey: output_script.clone(),
8179                 }]};
8180                 let funding_outpoint = OutPoint{ txid: tx.txid(), index: 0 };
8181                 let (mut node_a_chan, funding_created_msg) = node_a_chan.get_funding_created(tx.clone(), funding_outpoint, false, &&logger).map_err(|_| ()).unwrap();
8182                 let (_, funding_signed_msg, _) = node_b_chan.funding_created(&funding_created_msg, best_block, &&keys_provider, &&logger).map_err(|_| ()).unwrap();
8183
8184                 // Node B --> Node A: funding signed
8185                 let _ = node_a_chan.funding_signed(&funding_signed_msg, best_block, &&keys_provider, &&logger).unwrap();
8186
8187                 // Make sure that receiving a channel update will update the Channel as expected.
8188                 let update = ChannelUpdate {
8189                         contents: UnsignedChannelUpdate {
8190                                 chain_hash,
8191                                 short_channel_id: 0,
8192                                 timestamp: 0,
8193                                 flags: 0,
8194                                 cltv_expiry_delta: 100,
8195                                 htlc_minimum_msat: 5,
8196                                 htlc_maximum_msat: MAX_VALUE_MSAT,
8197                                 fee_base_msat: 110,
8198                                 fee_proportional_millionths: 11,
8199                                 excess_data: Vec::new(),
8200                         },
8201                         signature: Signature::from(unsafe { FFISignature::new() })
8202                 };
8203                 assert!(node_a_chan.channel_update(&update).unwrap());
8204
8205                 // The counterparty can send an update with a higher minimum HTLC, but that shouldn't
8206                 // change our official htlc_minimum_msat.
8207                 assert_eq!(node_a_chan.context.holder_htlc_minimum_msat, 1);
8208                 match node_a_chan.context.counterparty_forwarding_info() {
8209                         Some(info) => {
8210                                 assert_eq!(info.cltv_expiry_delta, 100);
8211                                 assert_eq!(info.fee_base_msat, 110);
8212                                 assert_eq!(info.fee_proportional_millionths, 11);
8213                         },
8214                         None => panic!("expected counterparty forwarding info to be Some")
8215                 }
8216
8217                 assert!(!node_a_chan.channel_update(&update).unwrap());
8218         }
8219
8220         #[cfg(feature = "_test_vectors")]
8221         #[test]
8222         fn outbound_commitment_test() {
8223                 use bitcoin::util::sighash;
8224                 use bitcoin::consensus::encode::serialize;
8225                 use bitcoin::blockdata::transaction::EcdsaSighashType;
8226                 use bitcoin::hashes::hex::FromHex;
8227                 use bitcoin::hash_types::Txid;
8228                 use bitcoin::secp256k1::Message;
8229                 use crate::sign::{ChannelDerivationParameters, HTLCDescriptor, EcdsaChannelSigner};
8230                 use crate::ln::PaymentPreimage;
8231                 use crate::ln::channel::{HTLCOutputInCommitment ,TxCreationKeys};
8232                 use crate::ln::chan_utils::{ChannelPublicKeys, HolderCommitmentTransaction, CounterpartyChannelTransactionParameters};
8233                 use crate::util::logger::Logger;
8234                 use crate::sync::Arc;
8235
8236                 // Test vectors from BOLT 3 Appendices C and F (anchors):
8237                 let feeest = TestFeeEstimator{fee_est: 15000};
8238                 let logger : Arc<Logger> = Arc::new(test_utils::TestLogger::new());
8239                 let secp_ctx = Secp256k1::new();
8240
8241                 let mut signer = InMemorySigner::new(
8242                         &secp_ctx,
8243                         SecretKey::from_slice(&hex::decode("30ff4956bbdd3222d44cc5e8a1261dab1e07957bdac5ae88fe3261ef321f3749").unwrap()[..]).unwrap(),
8244                         SecretKey::from_slice(&hex::decode("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap()[..]).unwrap(),
8245                         SecretKey::from_slice(&hex::decode("1111111111111111111111111111111111111111111111111111111111111111").unwrap()[..]).unwrap(),
8246                         SecretKey::from_slice(&hex::decode("3333333333333333333333333333333333333333333333333333333333333333").unwrap()[..]).unwrap(),
8247                         SecretKey::from_slice(&hex::decode("1111111111111111111111111111111111111111111111111111111111111111").unwrap()[..]).unwrap(),
8248
8249                         // These aren't set in the test vectors:
8250                         [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff],
8251                         10_000_000,
8252                         [0; 32],
8253                         [0; 32],
8254                 );
8255
8256                 assert_eq!(signer.pubkeys().funding_pubkey.serialize()[..],
8257                                 hex::decode("023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb").unwrap()[..]);
8258                 let keys_provider = Keys { signer: signer.clone() };
8259
8260                 let counterparty_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
8261                 let mut config = UserConfig::default();
8262                 config.channel_handshake_config.announced_channel = false;
8263                 let mut chan = OutboundV1Channel::<&Keys>::new(&LowerBoundedFeeEstimator::new(&feeest), &&keys_provider, &&keys_provider, counterparty_node_id, &channelmanager::provided_init_features(&config), 10_000_000, 0, 42, &config, 0, 42).unwrap(); // Nothing uses their network key in this test
8264                 chan.context.holder_dust_limit_satoshis = 546;
8265                 chan.context.counterparty_selected_channel_reserve_satoshis = Some(0); // Filled in in accept_channel
8266
8267                 let funding_info = OutPoint{ txid: Txid::from_hex("8984484a580b825b9972d7adb15050b3ab624ccd731946b3eeddb92f4e7ef6be").unwrap(), index: 0 };
8268
8269                 let counterparty_pubkeys = ChannelPublicKeys {
8270                         funding_pubkey: public_from_secret_hex(&secp_ctx, "1552dfba4f6cf29a62a0af13c8d6981d36d0ef8d61ba10fb0fe90da7634d7e13"),
8271                         revocation_basepoint: PublicKey::from_slice(&hex::decode("02466d7fcae563e5cb09a0d1870bb580344804617879a14949cf22285f1bae3f27").unwrap()[..]).unwrap(),
8272                         payment_point: public_from_secret_hex(&secp_ctx, "4444444444444444444444444444444444444444444444444444444444444444"),
8273                         delayed_payment_basepoint: public_from_secret_hex(&secp_ctx, "1552dfba4f6cf29a62a0af13c8d6981d36d0ef8d61ba10fb0fe90da7634d7e13"),
8274                         htlc_basepoint: public_from_secret_hex(&secp_ctx, "4444444444444444444444444444444444444444444444444444444444444444")
8275                 };
8276                 chan.context.channel_transaction_parameters.counterparty_parameters = Some(
8277                         CounterpartyChannelTransactionParameters {
8278                                 pubkeys: counterparty_pubkeys.clone(),
8279                                 selected_contest_delay: 144
8280                         });
8281                 chan.context.channel_transaction_parameters.funding_outpoint = Some(funding_info);
8282                 signer.provide_channel_parameters(&chan.context.channel_transaction_parameters);
8283
8284                 assert_eq!(counterparty_pubkeys.payment_point.serialize()[..],
8285                            hex::decode("032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e668680991").unwrap()[..]);
8286
8287                 assert_eq!(counterparty_pubkeys.funding_pubkey.serialize()[..],
8288                            hex::decode("030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c1").unwrap()[..]);
8289
8290                 assert_eq!(counterparty_pubkeys.htlc_basepoint.serialize()[..],
8291                            hex::decode("032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e668680991").unwrap()[..]);
8292
8293                 // We can't just use build_holder_transaction_keys here as the per_commitment_secret is not
8294                 // derived from a commitment_seed, so instead we copy it here and call
8295                 // build_commitment_transaction.
8296                 let delayed_payment_base = &chan.context.holder_signer.as_ref().pubkeys().delayed_payment_basepoint;
8297                 let per_commitment_secret = SecretKey::from_slice(&hex::decode("1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100").unwrap()[..]).unwrap();
8298                 let per_commitment_point = PublicKey::from_secret_key(&secp_ctx, &per_commitment_secret);
8299                 let htlc_basepoint = &chan.context.holder_signer.as_ref().pubkeys().htlc_basepoint;
8300                 let keys = TxCreationKeys::derive_new(&secp_ctx, &per_commitment_point, delayed_payment_base, htlc_basepoint, &counterparty_pubkeys.revocation_basepoint, &counterparty_pubkeys.htlc_basepoint);
8301
8302                 macro_rules! test_commitment {
8303                         ( $counterparty_sig_hex: expr, $sig_hex: expr, $tx_hex: expr, $($remain:tt)* ) => {
8304                                 chan.context.channel_transaction_parameters.channel_type_features = ChannelTypeFeatures::only_static_remote_key();
8305                                 test_commitment_common!($counterparty_sig_hex, $sig_hex, $tx_hex, &ChannelTypeFeatures::only_static_remote_key(), $($remain)*);
8306                         };
8307                 }
8308
8309                 macro_rules! test_commitment_with_anchors {
8310                         ( $counterparty_sig_hex: expr, $sig_hex: expr, $tx_hex: expr, $($remain:tt)* ) => {
8311                                 chan.context.channel_transaction_parameters.channel_type_features = ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies();
8312                                 test_commitment_common!($counterparty_sig_hex, $sig_hex, $tx_hex, &ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies(), $($remain)*);
8313                         };
8314                 }
8315
8316                 macro_rules! test_commitment_common {
8317                         ( $counterparty_sig_hex: expr, $sig_hex: expr, $tx_hex: expr, $opt_anchors: expr, {
8318                                 $( { $htlc_idx: expr, $counterparty_htlc_sig_hex: expr, $htlc_sig_hex: expr, $htlc_tx_hex: expr } ), *
8319                         } ) => { {
8320                                 let (commitment_tx, htlcs): (_, Vec<HTLCOutputInCommitment>) = {
8321                                         let mut commitment_stats = chan.context.build_commitment_transaction(0xffffffffffff - 42, &keys, true, false, &logger);
8322
8323                                         let htlcs = commitment_stats.htlcs_included.drain(..)
8324                                                 .filter_map(|(htlc, _)| if htlc.transaction_output_index.is_some() { Some(htlc) } else { None })
8325                                                 .collect();
8326                                         (commitment_stats.tx, htlcs)
8327                                 };
8328                                 let trusted_tx = commitment_tx.trust();
8329                                 let unsigned_tx = trusted_tx.built_transaction();
8330                                 let redeemscript = chan.context.get_funding_redeemscript();
8331                                 let counterparty_signature = Signature::from_der(&hex::decode($counterparty_sig_hex).unwrap()[..]).unwrap();
8332                                 let sighash = unsigned_tx.get_sighash_all(&redeemscript, chan.context.channel_value_satoshis);
8333                                 log_trace!(logger, "unsigned_tx = {}", hex::encode(serialize(&unsigned_tx.transaction)));
8334                                 assert!(secp_ctx.verify_ecdsa(&sighash, &counterparty_signature, chan.context.counterparty_funding_pubkey()).is_ok(), "verify counterparty commitment sig");
8335
8336                                 let mut per_htlc: Vec<(HTLCOutputInCommitment, Option<Signature>)> = Vec::new();
8337                                 per_htlc.clear(); // Don't warn about excess mut for no-HTLC calls
8338                                 let mut counterparty_htlc_sigs = Vec::new();
8339                                 counterparty_htlc_sigs.clear(); // Don't warn about excess mut for no-HTLC calls
8340                                 $({
8341                                         let remote_signature = Signature::from_der(&hex::decode($counterparty_htlc_sig_hex).unwrap()[..]).unwrap();
8342                                         per_htlc.push((htlcs[$htlc_idx].clone(), Some(remote_signature)));
8343                                         counterparty_htlc_sigs.push(remote_signature);
8344                                 })*
8345                                 assert_eq!(htlcs.len(), per_htlc.len());
8346
8347                                 let holder_commitment_tx = HolderCommitmentTransaction::new(
8348                                         commitment_tx.clone(),
8349                                         counterparty_signature,
8350                                         counterparty_htlc_sigs,
8351                                         &chan.context.holder_signer.as_ref().pubkeys().funding_pubkey,
8352                                         chan.context.counterparty_funding_pubkey()
8353                                 );
8354                                 let holder_sig = signer.sign_holder_commitment(&holder_commitment_tx, &secp_ctx).unwrap();
8355                                 assert_eq!(Signature::from_der(&hex::decode($sig_hex).unwrap()[..]).unwrap(), holder_sig, "holder_sig");
8356
8357                                 let funding_redeemscript = chan.context.get_funding_redeemscript();
8358                                 let tx = holder_commitment_tx.add_holder_sig(&funding_redeemscript, holder_sig);
8359                                 assert_eq!(serialize(&tx)[..], hex::decode($tx_hex).unwrap()[..], "tx");
8360
8361                                 // ((htlc, counterparty_sig), (index, holder_sig))
8362                                 let mut htlc_counterparty_sig_iter = holder_commitment_tx.counterparty_htlc_sigs.iter();
8363
8364                                 $({
8365                                         log_trace!(logger, "verifying htlc {}", $htlc_idx);
8366                                         let remote_signature = Signature::from_der(&hex::decode($counterparty_htlc_sig_hex).unwrap()[..]).unwrap();
8367
8368                                         let ref htlc = htlcs[$htlc_idx];
8369                                         let mut htlc_tx = chan_utils::build_htlc_transaction(&unsigned_tx.txid, chan.context.feerate_per_kw,
8370                                                 chan.context.get_counterparty_selected_contest_delay().unwrap(),
8371                                                 &htlc, $opt_anchors, &keys.broadcaster_delayed_payment_key, &keys.revocation_key);
8372                                         let htlc_redeemscript = chan_utils::get_htlc_redeemscript(&htlc, $opt_anchors, &keys);
8373                                         let htlc_sighashtype = if $opt_anchors.supports_anchors_zero_fee_htlc_tx() { EcdsaSighashType::SinglePlusAnyoneCanPay } else { EcdsaSighashType::All };
8374                                         let htlc_sighash = Message::from_slice(&sighash::SighashCache::new(&htlc_tx).segwit_signature_hash(0, &htlc_redeemscript, htlc.amount_msat / 1000, htlc_sighashtype).unwrap()[..]).unwrap();
8375                                         assert!(secp_ctx.verify_ecdsa(&htlc_sighash, &remote_signature, &keys.countersignatory_htlc_key).is_ok(), "verify counterparty htlc sig");
8376
8377                                         let mut preimage: Option<PaymentPreimage> = None;
8378                                         if !htlc.offered {
8379                                                 for i in 0..5 {
8380                                                         let out = PaymentHash(Sha256::hash(&[i; 32]).into_inner());
8381                                                         if out == htlc.payment_hash {
8382                                                                 preimage = Some(PaymentPreimage([i; 32]));
8383                                                         }
8384                                                 }
8385
8386                                                 assert!(preimage.is_some());
8387                                         }
8388
8389                                         let htlc_counterparty_sig = htlc_counterparty_sig_iter.next().unwrap();
8390                                         let htlc_holder_sig = signer.sign_holder_htlc_transaction(&htlc_tx, 0, &HTLCDescriptor {
8391                                                 channel_derivation_parameters: ChannelDerivationParameters {
8392                                                         value_satoshis: chan.context.channel_value_satoshis,
8393                                                         keys_id: chan.context.channel_keys_id,
8394                                                         transaction_parameters: chan.context.channel_transaction_parameters.clone(),
8395                                                 },
8396                                                 commitment_txid: trusted_tx.txid(),
8397                                                 per_commitment_number: trusted_tx.commitment_number(),
8398                                                 per_commitment_point: trusted_tx.per_commitment_point(),
8399                                                 feerate_per_kw: trusted_tx.feerate_per_kw(),
8400                                                 htlc: htlc.clone(),
8401                                                 preimage: preimage.clone(),
8402                                                 counterparty_sig: *htlc_counterparty_sig,
8403                                         }, &secp_ctx).unwrap();
8404                                         let num_anchors = if $opt_anchors.supports_anchors_zero_fee_htlc_tx() { 2 } else { 0 };
8405                                         assert_eq!(htlc.transaction_output_index, Some($htlc_idx + num_anchors), "output index");
8406
8407                                         let signature = Signature::from_der(&hex::decode($htlc_sig_hex).unwrap()[..]).unwrap();
8408                                         assert_eq!(signature, htlc_holder_sig, "htlc sig");
8409                                         let trusted_tx = holder_commitment_tx.trust();
8410                                         htlc_tx.input[0].witness = trusted_tx.build_htlc_input_witness($htlc_idx, htlc_counterparty_sig, &htlc_holder_sig, &preimage);
8411                                         log_trace!(logger, "htlc_tx = {}", hex::encode(serialize(&htlc_tx)));
8412                                         assert_eq!(serialize(&htlc_tx)[..], hex::decode($htlc_tx_hex).unwrap()[..], "htlc tx");
8413                                 })*
8414                                 assert!(htlc_counterparty_sig_iter.next().is_none());
8415                         } }
8416                 }
8417
8418                 // anchors: simple commitment tx with no HTLCs and single anchor
8419                 test_commitment_with_anchors!("30440220655bf909fb6fa81d086f1336ac72c97906dce29d1b166e305c99152d810e26e1022051f577faa46412c46707aaac46b65d50053550a66334e00a44af2706f27a8658",
8420                                                  "3044022007cf6b405e9c9b4f527b0ecad9d8bb661fabb8b12abf7d1c0b3ad1855db3ed490220616d5c1eeadccc63bd775a131149455d62d95a42c2a1b01cc7821fc42dce7778",
8421                                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80024a010000000000002200202b1b5854183c12d3316565972c4668929d314d81c5dcdbb21cb45fe8a9a8114f10529800000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400473044022007cf6b405e9c9b4f527b0ecad9d8bb661fabb8b12abf7d1c0b3ad1855db3ed490220616d5c1eeadccc63bd775a131149455d62d95a42c2a1b01cc7821fc42dce7778014730440220655bf909fb6fa81d086f1336ac72c97906dce29d1b166e305c99152d810e26e1022051f577faa46412c46707aaac46b65d50053550a66334e00a44af2706f27a865801475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8422
8423                 // simple commitment tx with no HTLCs
8424                 chan.context.value_to_self_msat = 7000000000;
8425
8426                 test_commitment!("3045022100c3127b33dcc741dd6b05b1e63cbd1a9a7d816f37af9b6756fa2376b056f032370220408b96279808fe57eb7e463710804cdf4f108388bc5cf722d8c848d2c7f9f3b0",
8427                                                  "30440220616210b2cc4d3afb601013c373bbd8aac54febd9f15400379a8cb65ce7deca60022034236c010991beb7ff770510561ae8dc885b8d38d1947248c38f2ae055647142",
8428                                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8002c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e48454a56a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e04004730440220616210b2cc4d3afb601013c373bbd8aac54febd9f15400379a8cb65ce7deca60022034236c010991beb7ff770510561ae8dc885b8d38d1947248c38f2ae05564714201483045022100c3127b33dcc741dd6b05b1e63cbd1a9a7d816f37af9b6756fa2376b056f032370220408b96279808fe57eb7e463710804cdf4f108388bc5cf722d8c848d2c7f9f3b001475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8429
8430                 // anchors: simple commitment tx with no HTLCs
8431                 test_commitment_with_anchors!("3045022100f89034eba16b2be0e5581f750a0a6309192b75cce0f202f0ee2b4ec0cc394850022076c65dc507fe42276152b7a3d90e961e678adbe966e916ecfe85e64d430e75f3",
8432                                                  "30450221008266ac6db5ea71aac3c95d97b0e172ff596844851a3216eb88382a8dddfd33d2022050e240974cfd5d708708b4365574517c18e7ae535ef732a3484d43d0d82be9f7",
8433                                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80044a010000000000002200202b1b5854183c12d3316565972c4668929d314d81c5dcdbb21cb45fe8a9a8114f4a01000000000000220020e9e86e4823faa62e222ebc858a226636856158f07e69898da3b0d1af0ddb3994c0c62d0000000000220020f3394e1e619b0eca1f91be2fb5ab4dfc59ba5b84ebe014ad1d43a564d012994a508b6a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e04004830450221008266ac6db5ea71aac3c95d97b0e172ff596844851a3216eb88382a8dddfd33d2022050e240974cfd5d708708b4365574517c18e7ae535ef732a3484d43d0d82be9f701483045022100f89034eba16b2be0e5581f750a0a6309192b75cce0f202f0ee2b4ec0cc394850022076c65dc507fe42276152b7a3d90e961e678adbe966e916ecfe85e64d430e75f301475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8434
8435                 chan.context.pending_inbound_htlcs.push({
8436                         let mut out = InboundHTLCOutput{
8437                                 htlc_id: 0,
8438                                 amount_msat: 1000000,
8439                                 cltv_expiry: 500,
8440                                 payment_hash: PaymentHash([0; 32]),
8441                                 state: InboundHTLCState::Committed,
8442                         };
8443                         out.payment_hash.0 = Sha256::hash(&hex::decode("0000000000000000000000000000000000000000000000000000000000000000").unwrap()).into_inner();
8444                         out
8445                 });
8446                 chan.context.pending_inbound_htlcs.push({
8447                         let mut out = InboundHTLCOutput{
8448                                 htlc_id: 1,
8449                                 amount_msat: 2000000,
8450                                 cltv_expiry: 501,
8451                                 payment_hash: PaymentHash([0; 32]),
8452                                 state: InboundHTLCState::Committed,
8453                         };
8454                         out.payment_hash.0 = Sha256::hash(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap()).into_inner();
8455                         out
8456                 });
8457                 chan.context.pending_outbound_htlcs.push({
8458                         let mut out = OutboundHTLCOutput{
8459                                 htlc_id: 2,
8460                                 amount_msat: 2000000,
8461                                 cltv_expiry: 502,
8462                                 payment_hash: PaymentHash([0; 32]),
8463                                 state: OutboundHTLCState::Committed,
8464                                 source: HTLCSource::dummy(),
8465                                 skimmed_fee_msat: None,
8466                         };
8467                         out.payment_hash.0 = Sha256::hash(&hex::decode("0202020202020202020202020202020202020202020202020202020202020202").unwrap()).into_inner();
8468                         out
8469                 });
8470                 chan.context.pending_outbound_htlcs.push({
8471                         let mut out = OutboundHTLCOutput{
8472                                 htlc_id: 3,
8473                                 amount_msat: 3000000,
8474                                 cltv_expiry: 503,
8475                                 payment_hash: PaymentHash([0; 32]),
8476                                 state: OutboundHTLCState::Committed,
8477                                 source: HTLCSource::dummy(),
8478                                 skimmed_fee_msat: None,
8479                         };
8480                         out.payment_hash.0 = Sha256::hash(&hex::decode("0303030303030303030303030303030303030303030303030303030303030303").unwrap()).into_inner();
8481                         out
8482                 });
8483                 chan.context.pending_inbound_htlcs.push({
8484                         let mut out = InboundHTLCOutput{
8485                                 htlc_id: 4,
8486                                 amount_msat: 4000000,
8487                                 cltv_expiry: 504,
8488                                 payment_hash: PaymentHash([0; 32]),
8489                                 state: InboundHTLCState::Committed,
8490                         };
8491                         out.payment_hash.0 = Sha256::hash(&hex::decode("0404040404040404040404040404040404040404040404040404040404040404").unwrap()).into_inner();
8492                         out
8493                 });
8494
8495                 // commitment tx with all five HTLCs untrimmed (minimum feerate)
8496                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8497                 chan.context.feerate_per_kw = 0;
8498
8499                 test_commitment!("3044022009b048187705a8cbc9ad73adbe5af148c3d012e1f067961486c822c7af08158c022006d66f3704cfab3eb2dc49dae24e4aa22a6910fc9b424007583204e3621af2e5",
8500                                  "304402206fc2d1f10ea59951eefac0b4b7c396a3c3d87b71ff0b019796ef4535beaf36f902201765b0181e514d04f4c8ad75659d7037be26cdb3f8bb6f78fe61decef484c3ea",
8501                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8007e80300000000000022002052bfef0479d7b293c27e0f1eb294bea154c63a3294ef092c19af51409bce0e2ad007000000000000220020403d394747cae42e98ff01734ad5c08f82ba123d3d9a620abda88989651e2ab5d007000000000000220020748eba944fedc8827f6b06bc44678f93c0f9e6078b35c6331ed31e75f8ce0c2db80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484e0a06a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e040047304402206fc2d1f10ea59951eefac0b4b7c396a3c3d87b71ff0b019796ef4535beaf36f902201765b0181e514d04f4c8ad75659d7037be26cdb3f8bb6f78fe61decef484c3ea01473044022009b048187705a8cbc9ad73adbe5af148c3d012e1f067961486c822c7af08158c022006d66f3704cfab3eb2dc49dae24e4aa22a6910fc9b424007583204e3621af2e501475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8502
8503                                   { 0,
8504                                   "3045022100d9e29616b8f3959f1d3d7f7ce893ffedcdc407717d0de8e37d808c91d3a7c50d022078c3033f6d00095c8720a4bc943c1b45727818c082e4e3ddbc6d3116435b624b",
8505                                   "30440220636de5682ef0c5b61f124ec74e8aa2461a69777521d6998295dcea36bc3338110220165285594b23c50b28b82df200234566628a27bcd17f7f14404bd865354eb3ce",
8506                                   "02000000000101ab84ff284f162cfbfef241f853b47d4368d171f9e2a1445160cd591c4c7d882b00000000000000000001e8030000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100d9e29616b8f3959f1d3d7f7ce893ffedcdc407717d0de8e37d808c91d3a7c50d022078c3033f6d00095c8720a4bc943c1b45727818c082e4e3ddbc6d3116435b624b014730440220636de5682ef0c5b61f124ec74e8aa2461a69777521d6998295dcea36bc3338110220165285594b23c50b28b82df200234566628a27bcd17f7f14404bd865354eb3ce012000000000000000000000000000000000000000000000000000000000000000008a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a914b8bcb07f6344b42ab04250c86a6e8b75d3fdbbc688527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f401b175ac686800000000" },
8507
8508                                   { 1,
8509                                   "30440220649fe8b20e67e46cbb0d09b4acea87dbec001b39b08dee7bdd0b1f03922a8640022037c462dff79df501cecfdb12ea7f4de91f99230bb544726f6e04527b1f896004",
8510                                   "3045022100803159dee7935dba4a1d36a61055ce8fd62caa528573cc221ae288515405a252022029c59e7cffce374fe860100a4a63787e105c3cf5156d40b12dd53ff55ac8cf3f",
8511                                   "02000000000101ab84ff284f162cfbfef241f853b47d4368d171f9e2a1445160cd591c4c7d882b01000000000000000001d0070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e05004730440220649fe8b20e67e46cbb0d09b4acea87dbec001b39b08dee7bdd0b1f03922a8640022037c462dff79df501cecfdb12ea7f4de91f99230bb544726f6e04527b1f89600401483045022100803159dee7935dba4a1d36a61055ce8fd62caa528573cc221ae288515405a252022029c59e7cffce374fe860100a4a63787e105c3cf5156d40b12dd53ff55ac8cf3f01008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6868f6010000" },
8512
8513                                   { 2,
8514                                   "30440220770fc321e97a19f38985f2e7732dd9fe08d16a2efa4bcbc0429400a447faf49102204d40b417f3113e1b0944ae0986f517564ab4acd3d190503faf97a6e420d43352",
8515                                   "3045022100a437cc2ce77400ecde441b3398fea3c3ad8bdad8132be818227fe3c5b8345989022069d45e7fa0ae551ec37240845e2c561ceb2567eacf3076a6a43a502d05865faa",
8516                                   "02000000000101ab84ff284f162cfbfef241f853b47d4368d171f9e2a1445160cd591c4c7d882b02000000000000000001d0070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e05004730440220770fc321e97a19f38985f2e7732dd9fe08d16a2efa4bcbc0429400a447faf49102204d40b417f3113e1b0944ae0986f517564ab4acd3d190503faf97a6e420d4335201483045022100a437cc2ce77400ecde441b3398fea3c3ad8bdad8132be818227fe3c5b8345989022069d45e7fa0ae551ec37240845e2c561ceb2567eacf3076a6a43a502d05865faa012001010101010101010101010101010101010101010101010101010101010101018a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac686800000000" },
8517
8518                                   { 3,
8519                                   "304402207bcbf4f60a9829b05d2dbab84ed593e0291836be715dc7db6b72a64caf646af802201e489a5a84f7c5cc130398b841d138d031a5137ac8f4c49c770a4959dc3c1363",
8520                                   "304402203121d9b9c055f354304b016a36662ee99e1110d9501cb271b087ddb6f382c2c80220549882f3f3b78d9c492de47543cb9a697cecc493174726146536c5954dac7487",
8521                                   "02000000000101ab84ff284f162cfbfef241f853b47d4368d171f9e2a1445160cd591c4c7d882b03000000000000000001b80b0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402207bcbf4f60a9829b05d2dbab84ed593e0291836be715dc7db6b72a64caf646af802201e489a5a84f7c5cc130398b841d138d031a5137ac8f4c49c770a4959dc3c13630147304402203121d9b9c055f354304b016a36662ee99e1110d9501cb271b087ddb6f382c2c80220549882f3f3b78d9c492de47543cb9a697cecc493174726146536c5954dac748701008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8522
8523                                   { 4,
8524                                   "3044022076dca5cb81ba7e466e349b7128cdba216d4d01659e29b96025b9524aaf0d1899022060de85697b88b21c749702b7d2cfa7dfeaa1f472c8f1d7d9c23f2bf968464b87",
8525                                   "3045022100d9080f103cc92bac15ec42464a95f070c7fb6925014e673ee2ea1374d36a7f7502200c65294d22eb20d48564954d5afe04a385551919d8b2ddb4ae2459daaeee1d95",
8526                                   "02000000000101ab84ff284f162cfbfef241f853b47d4368d171f9e2a1445160cd591c4c7d882b04000000000000000001a00f0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500473044022076dca5cb81ba7e466e349b7128cdba216d4d01659e29b96025b9524aaf0d1899022060de85697b88b21c749702b7d2cfa7dfeaa1f472c8f1d7d9c23f2bf968464b8701483045022100d9080f103cc92bac15ec42464a95f070c7fb6925014e673ee2ea1374d36a7f7502200c65294d22eb20d48564954d5afe04a385551919d8b2ddb4ae2459daaeee1d95012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8527                 } );
8528
8529                 // commitment tx with seven outputs untrimmed (maximum feerate)
8530                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8531                 chan.context.feerate_per_kw = 647;
8532
8533                 test_commitment!("3045022100a135f9e8a5ed25f7277446c67956b00ce6f610ead2bdec2c2f686155b7814772022059f1f6e1a8b336a68efcc1af3fe4d422d4827332b5b067501b099c47b7b5b5ee",
8534                                  "30450221009ec15c687898bb4da8b3a833e5ab8bfc51ec6e9202aaa8e66611edfd4a85ed1102203d7183e45078b9735c93450bc3415d3e5a8c576141a711ec6ddcb4a893926bb7",
8535                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8007e80300000000000022002052bfef0479d7b293c27e0f1eb294bea154c63a3294ef092c19af51409bce0e2ad007000000000000220020403d394747cae42e98ff01734ad5c08f82ba123d3d9a620abda88989651e2ab5d007000000000000220020748eba944fedc8827f6b06bc44678f93c0f9e6078b35c6331ed31e75f8ce0c2db80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484e09c6a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e04004830450221009ec15c687898bb4da8b3a833e5ab8bfc51ec6e9202aaa8e66611edfd4a85ed1102203d7183e45078b9735c93450bc3415d3e5a8c576141a711ec6ddcb4a893926bb701483045022100a135f9e8a5ed25f7277446c67956b00ce6f610ead2bdec2c2f686155b7814772022059f1f6e1a8b336a68efcc1af3fe4d422d4827332b5b067501b099c47b7b5b5ee01475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8536
8537                                   { 0,
8538                                   "30450221008437627f9ad84ac67052e2a414a4367b8556fd1f94d8b02590f89f50525cd33502205b9c21ff6e7fc864f2352746ad8ba59182510819acb644e25b8a12fc37bbf24f",
8539                                   "30440220344b0deb055230d01703e6c7acd45853c4af2328b49b5d8af4f88a060733406602202ea64f2a43d5751edfe75503cbc35a62e3141b5ed032fa03360faf4ca66f670b",
8540                                   "020000000001012cfb3e4788c206881d38f2996b6cb2109b5935acb527d14bdaa7b908afa9b2fe0000000000000000000122020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e05004830450221008437627f9ad84ac67052e2a414a4367b8556fd1f94d8b02590f89f50525cd33502205b9c21ff6e7fc864f2352746ad8ba59182510819acb644e25b8a12fc37bbf24f014730440220344b0deb055230d01703e6c7acd45853c4af2328b49b5d8af4f88a060733406602202ea64f2a43d5751edfe75503cbc35a62e3141b5ed032fa03360faf4ca66f670b012000000000000000000000000000000000000000000000000000000000000000008a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a914b8bcb07f6344b42ab04250c86a6e8b75d3fdbbc688527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f401b175ac686800000000" },
8541
8542                                   { 1,
8543                                   "304402205a67f92bf6845cf2892b48d874ac1daf88a36495cf8a06f93d83180d930a6f75022031da1621d95c3f335cc06a3056cf960199dae600b7cf89088f65fc53cdbef28c",
8544                                   "30450221009e5e3822b0185c6799a95288c597b671d6cc69ab80f43740f00c6c3d0752bdda02206da947a74bd98f3175324dc56fdba86cc783703a120a6f0297537e60632f4c7f",
8545                                   "020000000001012cfb3e4788c206881d38f2996b6cb2109b5935acb527d14bdaa7b908afa9b2fe0100000000000000000124060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402205a67f92bf6845cf2892b48d874ac1daf88a36495cf8a06f93d83180d930a6f75022031da1621d95c3f335cc06a3056cf960199dae600b7cf89088f65fc53cdbef28c014830450221009e5e3822b0185c6799a95288c597b671d6cc69ab80f43740f00c6c3d0752bdda02206da947a74bd98f3175324dc56fdba86cc783703a120a6f0297537e60632f4c7f01008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6868f6010000" },
8546
8547                                   { 2,
8548                                   "30440220437e21766054a3eef7f65690c5bcfa9920babbc5af92b819f772f6ea96df6c7402207173622024bd97328cfb26c6665e25c2f5d67c319443ccdc60c903217005d8c8",
8549                                   "3045022100fcfc47e36b712624677626cef3dc1d67f6583bd46926a6398fe6b00b0c9a37760220525788257b187fc775c6370d04eadf34d06f3650a63f8df851cee0ecb47a1673",
8550                                   "020000000001012cfb3e4788c206881d38f2996b6cb2109b5935acb527d14bdaa7b908afa9b2fe020000000000000000010a060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e05004730440220437e21766054a3eef7f65690c5bcfa9920babbc5af92b819f772f6ea96df6c7402207173622024bd97328cfb26c6665e25c2f5d67c319443ccdc60c903217005d8c801483045022100fcfc47e36b712624677626cef3dc1d67f6583bd46926a6398fe6b00b0c9a37760220525788257b187fc775c6370d04eadf34d06f3650a63f8df851cee0ecb47a1673012001010101010101010101010101010101010101010101010101010101010101018a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac686800000000" },
8551
8552                                   { 3,
8553                                   "304402207436e10737e4df499fc051686d3e11a5bb2310e4d1f1e691d287cef66514791202207cb58e71a6b7a42dd001b7e3ae672ea4f71ea3e1cd412b742e9124abb0739c64",
8554                                   "3045022100e78211b8409afb7255ffe37337da87f38646f1faebbdd61bc1920d69e3ead67a02201a626305adfcd16bfb7e9340928d9b6305464eab4aa4c4a3af6646e9b9f69dee",
8555                                   "020000000001012cfb3e4788c206881d38f2996b6cb2109b5935acb527d14bdaa7b908afa9b2fe030000000000000000010c0a0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402207436e10737e4df499fc051686d3e11a5bb2310e4d1f1e691d287cef66514791202207cb58e71a6b7a42dd001b7e3ae672ea4f71ea3e1cd412b742e9124abb0739c6401483045022100e78211b8409afb7255ffe37337da87f38646f1faebbdd61bc1920d69e3ead67a02201a626305adfcd16bfb7e9340928d9b6305464eab4aa4c4a3af6646e9b9f69dee01008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8556
8557                                   { 4,
8558                                   "30450221009acd6a827a76bfee50806178dfe0495cd4e1d9c58279c194c7b01520fe68cb8d022024d439047c368883e570997a7d40f0b430cb5a742f507965e7d3063ae3feccca",
8559                                   "3044022048762cf546bbfe474f1536365ea7c416e3c0389d60558bc9412cb148fb6ab68202207215d7083b75c96ff9d2b08c59c34e287b66820f530b486a9aa4cdd9c347d5b9",
8560                                   "020000000001012cfb3e4788c206881d38f2996b6cb2109b5935acb527d14bdaa7b908afa9b2fe04000000000000000001da0d0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e05004830450221009acd6a827a76bfee50806178dfe0495cd4e1d9c58279c194c7b01520fe68cb8d022024d439047c368883e570997a7d40f0b430cb5a742f507965e7d3063ae3feccca01473044022048762cf546bbfe474f1536365ea7c416e3c0389d60558bc9412cb148fb6ab68202207215d7083b75c96ff9d2b08c59c34e287b66820f530b486a9aa4cdd9c347d5b9012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8561                 } );
8562
8563                 // commitment tx with six outputs untrimmed (minimum feerate)
8564                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8565                 chan.context.feerate_per_kw = 648;
8566
8567                 test_commitment!("304402203948f900a5506b8de36a4d8502f94f21dd84fd9c2314ab427d52feaa7a0a19f2022059b6a37a4adaa2c5419dc8aea63c6e2a2ec4c4bde46207f6dc1fcd22152fc6e5",
8568                                  "3045022100b15f72908ba3382a34ca5b32519240a22300cc6015b6f9418635fb41f3d01d8802207adb331b9ed1575383dca0f2355e86c173802feecf8298fbea53b9d4610583e9",
8569                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8006d007000000000000220020403d394747cae42e98ff01734ad5c08f82ba123d3d9a620abda88989651e2ab5d007000000000000220020748eba944fedc8827f6b06bc44678f93c0f9e6078b35c6331ed31e75f8ce0c2db80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e4844e9d6a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100b15f72908ba3382a34ca5b32519240a22300cc6015b6f9418635fb41f3d01d8802207adb331b9ed1575383dca0f2355e86c173802feecf8298fbea53b9d4610583e90147304402203948f900a5506b8de36a4d8502f94f21dd84fd9c2314ab427d52feaa7a0a19f2022059b6a37a4adaa2c5419dc8aea63c6e2a2ec4c4bde46207f6dc1fcd22152fc6e501475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8570
8571                                   { 0,
8572                                   "3045022100a031202f3be94678f0e998622ee95ebb6ada8da1e9a5110228b5e04a747351e4022010ca6a21e18314ed53cfaae3b1f51998552a61a468e596368829a50ce40110e0",
8573                                   "304502210097e1873b57267730154595187a34949d3744f52933070c74757005e61ce2112e02204ecfba2aa42d4f14bdf8bad4206bb97217b702e6c433e0e1b0ce6587e6d46ec6",
8574                                   "020000000001010f44041fdfba175987cf4e6135ba2a154e3b7fb96483dc0ed5efc0678e5b6bf10000000000000000000123060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100a031202f3be94678f0e998622ee95ebb6ada8da1e9a5110228b5e04a747351e4022010ca6a21e18314ed53cfaae3b1f51998552a61a468e596368829a50ce40110e00148304502210097e1873b57267730154595187a34949d3744f52933070c74757005e61ce2112e02204ecfba2aa42d4f14bdf8bad4206bb97217b702e6c433e0e1b0ce6587e6d46ec601008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6868f6010000" },
8575
8576                                   { 1,
8577                                   "304402202361012a634aee7835c5ecdd6413dcffa8f404b7e77364c792cff984e4ee71e90220715c5e90baa08daa45a7439b1ee4fa4843ed77b19c058240b69406606d384124",
8578                                   "3044022019de73b00f1d818fb388e83b2c8c31f6bce35ac624e215bc12f88f9dc33edf48022006ff814bb9f700ee6abc3294e146fac3efd4f13f0005236b41c0a946ee00c9ae",
8579                                   "020000000001010f44041fdfba175987cf4e6135ba2a154e3b7fb96483dc0ed5efc0678e5b6bf10100000000000000000109060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402202361012a634aee7835c5ecdd6413dcffa8f404b7e77364c792cff984e4ee71e90220715c5e90baa08daa45a7439b1ee4fa4843ed77b19c058240b69406606d38412401473044022019de73b00f1d818fb388e83b2c8c31f6bce35ac624e215bc12f88f9dc33edf48022006ff814bb9f700ee6abc3294e146fac3efd4f13f0005236b41c0a946ee00c9ae012001010101010101010101010101010101010101010101010101010101010101018a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac686800000000" },
8580
8581                                   { 2,
8582                                   "304402207e8e82cd71ed4febeb593732c260456836e97d81896153ecd2b3cf320ca6861702202dd4a30f68f98ced7cc56a36369ac1fdd978248c5ff4ed204fc00cc625532989",
8583                                   "3045022100bd0be6100c4fd8f102ec220e1b053e4c4e2ecca25615490150007b40d314dc3902201a1e0ea266965b43164d9e6576f58fa6726d42883dd1c3996d2925c2e2260796",
8584                                   "020000000001010f44041fdfba175987cf4e6135ba2a154e3b7fb96483dc0ed5efc0678e5b6bf1020000000000000000010b0a0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402207e8e82cd71ed4febeb593732c260456836e97d81896153ecd2b3cf320ca6861702202dd4a30f68f98ced7cc56a36369ac1fdd978248c5ff4ed204fc00cc62553298901483045022100bd0be6100c4fd8f102ec220e1b053e4c4e2ecca25615490150007b40d314dc3902201a1e0ea266965b43164d9e6576f58fa6726d42883dd1c3996d2925c2e226079601008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8585
8586                                   { 3,
8587                                   "3044022024cd52e4198c8ae0e414a86d86b5a65ea7450f2eb4e783096736d93395eca5ce022078f0094745b45be4d4b2b04dd5978c9e66ba49109e5704403e84aaf5f387d6be",
8588                                   "3045022100bbfb9d0a946d420807c86e985d636cceb16e71c3694ed186316251a00cbd807202207773223f9a337e145f64673825be9b30d07ef1542c82188b264bedcf7cda78c6",
8589                                   "020000000001010f44041fdfba175987cf4e6135ba2a154e3b7fb96483dc0ed5efc0678e5b6bf103000000000000000001d90d0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500473044022024cd52e4198c8ae0e414a86d86b5a65ea7450f2eb4e783096736d93395eca5ce022078f0094745b45be4d4b2b04dd5978c9e66ba49109e5704403e84aaf5f387d6be01483045022100bbfb9d0a946d420807c86e985d636cceb16e71c3694ed186316251a00cbd807202207773223f9a337e145f64673825be9b30d07ef1542c82188b264bedcf7cda78c6012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8590                 } );
8591
8592                 // anchors: commitment tx with six outputs untrimmed (minimum dust limit)
8593                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8594                 chan.context.feerate_per_kw = 645;
8595                 chan.context.holder_dust_limit_satoshis = 1001;
8596
8597                 test_commitment_with_anchors!("3044022025d97466c8049e955a5afce28e322f4b34d2561118e52332fb400f9b908cc0a402205dc6fba3a0d67ee142c428c535580cd1f2ff42e2f89b47e0c8a01847caffc312",
8598                                  "3045022100d57697c707b6f6d053febf24b98e8989f186eea42e37e9e91663ec2c70bb8f70022079b0715a472118f262f43016a674f59c015d9cafccec885968e76d9d9c5d0051",
8599                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80084a010000000000002200202b1b5854183c12d3316565972c4668929d314d81c5dcdbb21cb45fe8a9a8114f4a01000000000000220020e9e86e4823faa62e222ebc858a226636856158f07e69898da3b0d1af0ddb3994d0070000000000002200203e68115ae0b15b8de75b6c6bc9af5ac9f01391544e0870dae443a1e8fe7837ead007000000000000220020fe0598d74fee2205cc3672e6e6647706b4f3099713b4661b62482c3addd04a5eb80b000000000000220020f96d0334feb64a4f40eb272031d07afcb038db56aa57446d60308c9f8ccadef9a00f000000000000220020ce6e751274836ff59622a0d1e07f8831d80bd6730bd48581398bfadd2bb8da9ac0c62d0000000000220020f3394e1e619b0eca1f91be2fb5ab4dfc59ba5b84ebe014ad1d43a564d012994abc996a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100d57697c707b6f6d053febf24b98e8989f186eea42e37e9e91663ec2c70bb8f70022079b0715a472118f262f43016a674f59c015d9cafccec885968e76d9d9c5d005101473044022025d97466c8049e955a5afce28e322f4b34d2561118e52332fb400f9b908cc0a402205dc6fba3a0d67ee142c428c535580cd1f2ff42e2f89b47e0c8a01847caffc31201475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8600
8601                                   { 0,
8602                                   "3045022100e04d160a326432659fe9fb127304c1d348dfeaba840081bdc57d8efd902a48d8022008a824e7cf5492b97e4d9e03c06a09f822775a44f6b5b2533a2088904abfc282",
8603                                   "3045022100b7c49846466b13b190ff739bbe3005c105482fc55539e55b1c561f76b6982b6c02200e5c35808619cf543c8405cff9fedd25f333a4a2f6f6d5e8af8150090c40ef09",
8604                                   "02000000000101104f394af4c4fad78337f95e3e9f802f4c0d86ab231853af09b285348561320002000000000100000001d0070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100e04d160a326432659fe9fb127304c1d348dfeaba840081bdc57d8efd902a48d8022008a824e7cf5492b97e4d9e03c06a09f822775a44f6b5b2533a2088904abfc28283483045022100b7c49846466b13b190ff739bbe3005c105482fc55539e55b1c561f76b6982b6c02200e5c35808619cf543c8405cff9fedd25f333a4a2f6f6d5e8af8150090c40ef0901008876a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6851b27568f6010000" },
8605
8606                                   { 1,
8607                                   "3045022100fbdc3c367ce3bf30796025cc590ee1f2ce0e72ae1ac19f5986d6d0a4fc76211f02207e45ae9267e8e820d188569604f71d1abd11bd385d58853dd7dc034cdb3e9a6e",
8608                                   "3045022100d29330f24db213b262068706099b39c15fa7e070c3fcdf8836c09723fc4d365602203ce57d01e9f28601e461a0b5c4a50119b270bde8b70148d133a6849c70b115ac",
8609                                   "02000000000101104f394af4c4fad78337f95e3e9f802f4c0d86ab231853af09b285348561320003000000000100000001d0070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100fbdc3c367ce3bf30796025cc590ee1f2ce0e72ae1ac19f5986d6d0a4fc76211f02207e45ae9267e8e820d188569604f71d1abd11bd385d58853dd7dc034cdb3e9a6e83483045022100d29330f24db213b262068706099b39c15fa7e070c3fcdf8836c09723fc4d365602203ce57d01e9f28601e461a0b5c4a50119b270bde8b70148d133a6849c70b115ac012001010101010101010101010101010101010101010101010101010101010101018d76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac6851b2756800000000" },
8610
8611                                   { 2,
8612                                   "3044022066c5ef625cee3ddd2bc7b6bfb354b5834cf1cc6d52dd972fb41b7b225437ae4a022066cb85647df65c6b87a54e416dcdcca778a776c36a9643d2b5dc793c9b29f4c1",
8613                                   "304402202d4ce515cd9000ec37575972d70b8d24f73909fb7012e8ebd8c2066ef6fe187902202830b53e64ea565fecd0f398100691da6bb2a5cf9bb0d1926f1d71d05828a11e",
8614                                   "02000000000101104f394af4c4fad78337f95e3e9f802f4c0d86ab231853af09b285348561320004000000000100000001b80b0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500473044022066c5ef625cee3ddd2bc7b6bfb354b5834cf1cc6d52dd972fb41b7b225437ae4a022066cb85647df65c6b87a54e416dcdcca778a776c36a9643d2b5dc793c9b29f4c18347304402202d4ce515cd9000ec37575972d70b8d24f73909fb7012e8ebd8c2066ef6fe187902202830b53e64ea565fecd0f398100691da6bb2a5cf9bb0d1926f1d71d05828a11e01008876a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6851b27568f7010000" },
8615
8616                                   { 3,
8617                                   "3044022022c7e11595c53ee89a57ca76baf0aed730da035952d6ab3fe6459f5eff3b337a022075e10cc5f5fd724a35ce4087a5d03cd616698626c69814032132b50bb97dc615",
8618                                   "3045022100b20cd63e0587d1711beaebda4730775c4ac8b8b2ec78fe18a0c44c3f168c25230220079abb7fc4924e2fca5950842e5b9e416735585026914570078c4ef62f286226",
8619                                   "02000000000101104f394af4c4fad78337f95e3e9f802f4c0d86ab231853af09b285348561320005000000000100000001a00f0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500473044022022c7e11595c53ee89a57ca76baf0aed730da035952d6ab3fe6459f5eff3b337a022075e10cc5f5fd724a35ce4087a5d03cd616698626c69814032132b50bb97dc61583483045022100b20cd63e0587d1711beaebda4730775c4ac8b8b2ec78fe18a0c44c3f168c25230220079abb7fc4924e2fca5950842e5b9e416735585026914570078c4ef62f286226012004040404040404040404040404040404040404040404040404040404040404048d76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac6851b2756800000000" }
8620                 } );
8621
8622                 // commitment tx with six outputs untrimmed (maximum feerate)
8623                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8624                 chan.context.feerate_per_kw = 2069;
8625                 chan.context.holder_dust_limit_satoshis = 546;
8626
8627                 test_commitment!("304502210090b96a2498ce0c0f2fadbec2aab278fed54c1a7838df793ec4d2c78d96ec096202204fdd439c50f90d483baa7b68feeef4bd33bc277695405447bcd0bfb2ca34d7bc",
8628                                  "3045022100ad9a9bbbb75d506ca3b716b336ee3cf975dd7834fcf129d7dd188146eb58a8b4022061a759ee417339f7fe2ea1e8deb83abb6a74db31a09b7648a932a639cda23e33",
8629                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8006d007000000000000220020403d394747cae42e98ff01734ad5c08f82ba123d3d9a620abda88989651e2ab5d007000000000000220020748eba944fedc8827f6b06bc44678f93c0f9e6078b35c6331ed31e75f8ce0c2db80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e48477956a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100ad9a9bbbb75d506ca3b716b336ee3cf975dd7834fcf129d7dd188146eb58a8b4022061a759ee417339f7fe2ea1e8deb83abb6a74db31a09b7648a932a639cda23e330148304502210090b96a2498ce0c0f2fadbec2aab278fed54c1a7838df793ec4d2c78d96ec096202204fdd439c50f90d483baa7b68feeef4bd33bc277695405447bcd0bfb2ca34d7bc01475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8630
8631                                   { 0,
8632                                   "3045022100f33513ee38abf1c582876f921f8fddc06acff48e04515532a32d3938de938ffd02203aa308a2c1863b7d6fdf53159a1465bf2e115c13152546cc5d74483ceaa7f699",
8633                                   "3045022100a637902a5d4c9ba9e7c472a225337d5aac9e2e3f6744f76e237132e7619ba0400220035c60d784a031c0d9f6df66b7eab8726a5c25397399ee4aa960842059eb3f9d",
8634                                   "02000000000101adbe717a63fb658add30ada1e6e12ed257637581898abe475c11d7bbcd65bd4d0000000000000000000175020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100f33513ee38abf1c582876f921f8fddc06acff48e04515532a32d3938de938ffd02203aa308a2c1863b7d6fdf53159a1465bf2e115c13152546cc5d74483ceaa7f69901483045022100a637902a5d4c9ba9e7c472a225337d5aac9e2e3f6744f76e237132e7619ba0400220035c60d784a031c0d9f6df66b7eab8726a5c25397399ee4aa960842059eb3f9d01008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6868f6010000" },
8635
8636                                   { 1,
8637                                   "3045022100ce07682cf4b90093c22dc2d9ab2a77ad6803526b655ef857221cc96af5c9e0bf02200f501cee22e7a268af40b555d15a8237c9f36ad67ef1841daf9f6a0267b1e6df",
8638                                   "3045022100e57e46234f8782d3ff7aa593b4f7446fb5316c842e693dc63ee324fd49f6a1c302204a2f7b44c48bd26e1554422afae13153eb94b29d3687b733d18930615fb2db61",
8639                                   "02000000000101adbe717a63fb658add30ada1e6e12ed257637581898abe475c11d7bbcd65bd4d0100000000000000000122020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100ce07682cf4b90093c22dc2d9ab2a77ad6803526b655ef857221cc96af5c9e0bf02200f501cee22e7a268af40b555d15a8237c9f36ad67ef1841daf9f6a0267b1e6df01483045022100e57e46234f8782d3ff7aa593b4f7446fb5316c842e693dc63ee324fd49f6a1c302204a2f7b44c48bd26e1554422afae13153eb94b29d3687b733d18930615fb2db61012001010101010101010101010101010101010101010101010101010101010101018a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac686800000000" },
8640
8641                                   { 2,
8642                                   "3045022100e3e35492e55f82ec0bc2f317ffd7a486d1f7024330fe9743c3559fc39f32ef0c02203d1d4db651fc388a91d5ad8ecdd8e83673063bc8eefe27cfd8c189090e3a23e0",
8643                                   "3044022068613fb1b98eb3aec7f44c5b115b12343c2f066c4277c82b5f873dfe68f37f50022028109b4650f3f528ca4bfe9a467aff2e3e43893b61b5159157119d5d95cf1c18",
8644                                   "02000000000101adbe717a63fb658add30ada1e6e12ed257637581898abe475c11d7bbcd65bd4d020000000000000000015d060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100e3e35492e55f82ec0bc2f317ffd7a486d1f7024330fe9743c3559fc39f32ef0c02203d1d4db651fc388a91d5ad8ecdd8e83673063bc8eefe27cfd8c189090e3a23e001473044022068613fb1b98eb3aec7f44c5b115b12343c2f066c4277c82b5f873dfe68f37f50022028109b4650f3f528ca4bfe9a467aff2e3e43893b61b5159157119d5d95cf1c1801008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8645
8646                                   { 3,
8647                                   "304402207475aeb0212ef9bf5130b60937817ad88c9a87976988ef1f323f026148cc4a850220739fea17ad3257dcad72e509c73eebe86bee30b178467b9fdab213d631b109df",
8648                                   "3045022100d315522e09e7d53d2a659a79cb67fef56d6c4bddf3f46df6772d0d20a7beb7c8022070bcc17e288607b6a72be0bd83368bb6d53488db266c1cdb4d72214e4f02ac33",
8649                                   "02000000000101adbe717a63fb658add30ada1e6e12ed257637581898abe475c11d7bbcd65bd4d03000000000000000001f2090000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402207475aeb0212ef9bf5130b60937817ad88c9a87976988ef1f323f026148cc4a850220739fea17ad3257dcad72e509c73eebe86bee30b178467b9fdab213d631b109df01483045022100d315522e09e7d53d2a659a79cb67fef56d6c4bddf3f46df6772d0d20a7beb7c8022070bcc17e288607b6a72be0bd83368bb6d53488db266c1cdb4d72214e4f02ac33012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8650                 } );
8651
8652                 // commitment tx with five outputs untrimmed (minimum feerate)
8653                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8654                 chan.context.feerate_per_kw = 2070;
8655
8656                 test_commitment!("304402204ca1ba260dee913d318271d86e10ca0f5883026fb5653155cff600fb40895223022037b145204b7054a40e08bb1fefbd826f827b40838d3e501423bcc57924bcb50c",
8657                                  "3044022001014419b5ba00e083ac4e0a85f19afc848aacac2d483b4b525d15e2ae5adbfe022015ebddad6ee1e72b47cb09f3e78459da5be01ccccd95dceca0e056a00cc773c1",
8658                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8005d007000000000000220020403d394747cae42e98ff01734ad5c08f82ba123d3d9a620abda88989651e2ab5b80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484da966a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400473044022001014419b5ba00e083ac4e0a85f19afc848aacac2d483b4b525d15e2ae5adbfe022015ebddad6ee1e72b47cb09f3e78459da5be01ccccd95dceca0e056a00cc773c10147304402204ca1ba260dee913d318271d86e10ca0f5883026fb5653155cff600fb40895223022037b145204b7054a40e08bb1fefbd826f827b40838d3e501423bcc57924bcb50c01475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8659
8660                                   { 0,
8661                                   "304402205f6b6d12d8d2529fb24f4445630566cf4abbd0f9330ab6c2bdb94222d6a2a0c502202f556258ae6f05b193749e4c541dfcc13b525a5422f6291f073f15617ba8579b",
8662                                   "30440220150b11069454da70caf2492ded9e0065c9a57f25ac2a4c52657b1d15b6c6ed85022068a38833b603c8892717206383611bad210f1cbb4b1f87ea29c6c65b9e1cb3e5",
8663                                   "02000000000101403ad7602b43293497a3a2235a12ecefda4f3a1f1d06e49b1786d945685de1ff0000000000000000000174020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402205f6b6d12d8d2529fb24f4445630566cf4abbd0f9330ab6c2bdb94222d6a2a0c502202f556258ae6f05b193749e4c541dfcc13b525a5422f6291f073f15617ba8579b014730440220150b11069454da70caf2492ded9e0065c9a57f25ac2a4c52657b1d15b6c6ed85022068a38833b603c8892717206383611bad210f1cbb4b1f87ea29c6c65b9e1cb3e501008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6868f6010000" },
8664
8665                                   { 1,
8666                                   "3045022100f960dfb1c9aee7ce1437efa65b523e399383e8149790e05d8fed27ff6e42fe0002202fe8613e062ffe0b0c518cc4101fba1c6de70f64a5bcc7ae663f2efae43b8546",
8667                                   "30450221009a6ed18e6873bc3644332a6ee21c152a5b102821865350df7a8c74451a51f9f2022050d801fb4895d7d7fbf452824c0168347f5c0cbe821cf6a97a63af5b8b2563c6",
8668                                   "02000000000101403ad7602b43293497a3a2235a12ecefda4f3a1f1d06e49b1786d945685de1ff010000000000000000015c060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100f960dfb1c9aee7ce1437efa65b523e399383e8149790e05d8fed27ff6e42fe0002202fe8613e062ffe0b0c518cc4101fba1c6de70f64a5bcc7ae663f2efae43b8546014830450221009a6ed18e6873bc3644332a6ee21c152a5b102821865350df7a8c74451a51f9f2022050d801fb4895d7d7fbf452824c0168347f5c0cbe821cf6a97a63af5b8b2563c601008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8669
8670                                   { 2,
8671                                   "3045022100ae5fc7717ae684bc1fcf9020854e5dbe9842c9e7472879ac06ff95ac2bb10e4e022057728ada4c00083a3e65493fb5d50a232165948a1a0f530ef63185c2c8c56504",
8672                                   "30440220408ad3009827a8fccf774cb285587686bfb2ed041f89a89453c311ce9c8ee0f902203c7392d9f8306d3a46522a66bd2723a7eb2628cb2d9b34d4c104f1766bf37502",
8673                                   "02000000000101403ad7602b43293497a3a2235a12ecefda4f3a1f1d06e49b1786d945685de1ff02000000000000000001f1090000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100ae5fc7717ae684bc1fcf9020854e5dbe9842c9e7472879ac06ff95ac2bb10e4e022057728ada4c00083a3e65493fb5d50a232165948a1a0f530ef63185c2c8c56504014730440220408ad3009827a8fccf774cb285587686bfb2ed041f89a89453c311ce9c8ee0f902203c7392d9f8306d3a46522a66bd2723a7eb2628cb2d9b34d4c104f1766bf37502012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8674                 } );
8675
8676                 // commitment tx with five outputs untrimmed (maximum feerate)
8677                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8678                 chan.context.feerate_per_kw = 2194;
8679
8680                 test_commitment!("304402204bb3d6e279d71d9da414c82de42f1f954267c762b2e2eb8b76bc3be4ea07d4b0022014febc009c5edc8c3fc5d94015de163200f780046f1c293bfed8568f08b70fb3",
8681                                  "3044022072c2e2b1c899b2242656a537dde2892fa3801be0d6df0a87836c550137acde8302201654aa1974d37a829083c3ba15088689f30b56d6a4f6cb14c7bad0ee3116d398",
8682                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8005d007000000000000220020403d394747cae42e98ff01734ad5c08f82ba123d3d9a620abda88989651e2ab5b80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e48440966a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400473044022072c2e2b1c899b2242656a537dde2892fa3801be0d6df0a87836c550137acde8302201654aa1974d37a829083c3ba15088689f30b56d6a4f6cb14c7bad0ee3116d3980147304402204bb3d6e279d71d9da414c82de42f1f954267c762b2e2eb8b76bc3be4ea07d4b0022014febc009c5edc8c3fc5d94015de163200f780046f1c293bfed8568f08b70fb301475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8683
8684                                   { 0,
8685                                   "3045022100939726680351a7856c1bc386d4a1f422c7d29bd7b56afc139570f508474e6c40022023175a799ccf44c017fbaadb924c40b2a12115a5b7d0dfd3228df803a2de8450",
8686                                   "304502210099c98c2edeeee6ec0fb5f3bea8b79bb016a2717afa9b5072370f34382de281d302206f5e2980a995e045cf90a547f0752a7ee99d48547bc135258fe7bc07e0154301",
8687                                   "02000000000101153cd825fdb3aa624bfe513e8031d5d08c5e582fb3d1d1fe8faf27d3eed410cd0000000000000000000122020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100939726680351a7856c1bc386d4a1f422c7d29bd7b56afc139570f508474e6c40022023175a799ccf44c017fbaadb924c40b2a12115a5b7d0dfd3228df803a2de84500148304502210099c98c2edeeee6ec0fb5f3bea8b79bb016a2717afa9b5072370f34382de281d302206f5e2980a995e045cf90a547f0752a7ee99d48547bc135258fe7bc07e015430101008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6868f6010000" },
8688
8689                                   { 1,
8690                                   "3044022021bb883bf324553d085ba2e821cad80c28ef8b303dbead8f98e548783c02d1600220638f9ef2a9bba25869afc923f4b5dc38be3bb459f9efa5d869392d5f7779a4a0",
8691                                   "3045022100fd85bd7697b89c08ec12acc8ba89b23090637d83abd26ca37e01ae93e67c367302202b551fe69386116c47f984aab9c8dfd25d864dcde5d3389cfbef2447a85c4b77",
8692                                   "02000000000101153cd825fdb3aa624bfe513e8031d5d08c5e582fb3d1d1fe8faf27d3eed410cd010000000000000000010a060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500473044022021bb883bf324553d085ba2e821cad80c28ef8b303dbead8f98e548783c02d1600220638f9ef2a9bba25869afc923f4b5dc38be3bb459f9efa5d869392d5f7779a4a001483045022100fd85bd7697b89c08ec12acc8ba89b23090637d83abd26ca37e01ae93e67c367302202b551fe69386116c47f984aab9c8dfd25d864dcde5d3389cfbef2447a85c4b7701008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8693
8694                                   { 2,
8695                                   "3045022100c9e6f0454aa598b905a35e641a70cc9f67b5f38cc4b00843a041238c4a9f1c4a0220260a2822a62da97e44583e837245995ca2e36781769c52f19e498efbdcca262b",
8696                                   "30450221008a9f2ea24cd455c2b64c1472a5fa83865b0a5f49a62b661801e884cf2849af8302204d44180e50bf6adfcf1c1e581d75af91aba4e28681ce4a5ee5f3cbf65eca10f3",
8697                                   "02000000000101153cd825fdb3aa624bfe513e8031d5d08c5e582fb3d1d1fe8faf27d3eed410cd020000000000000000019a090000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100c9e6f0454aa598b905a35e641a70cc9f67b5f38cc4b00843a041238c4a9f1c4a0220260a2822a62da97e44583e837245995ca2e36781769c52f19e498efbdcca262b014830450221008a9f2ea24cd455c2b64c1472a5fa83865b0a5f49a62b661801e884cf2849af8302204d44180e50bf6adfcf1c1e581d75af91aba4e28681ce4a5ee5f3cbf65eca10f3012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8698                 } );
8699
8700                 // commitment tx with four outputs untrimmed (minimum feerate)
8701                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8702                 chan.context.feerate_per_kw = 2195;
8703
8704                 test_commitment!("304402201a8c1b1f9671cd9e46c7323a104d7047cc48d3ee80d40d4512e0c72b8dc65666022066d7f9a2ce18c9eb22d2739ffcce05721c767f9b607622a31b6ea5793ddce403",
8705                                  "3044022044d592025b610c0d678f65032e87035cdfe89d1598c522cc32524ae8172417c30220749fef9d5b2ae8cdd91ece442ba8809bc891efedae2291e578475f97715d1767",
8706                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8004b80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484b8976a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400473044022044d592025b610c0d678f65032e87035cdfe89d1598c522cc32524ae8172417c30220749fef9d5b2ae8cdd91ece442ba8809bc891efedae2291e578475f97715d17670147304402201a8c1b1f9671cd9e46c7323a104d7047cc48d3ee80d40d4512e0c72b8dc65666022066d7f9a2ce18c9eb22d2739ffcce05721c767f9b607622a31b6ea5793ddce40301475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8707
8708                                   { 0,
8709                                   "3045022100e57b845066a06ee7c2cbfc29eabffe52daa9bf6f6de760066d04df9f9b250e0002202ffb197f0e6e0a77a75a9aff27014bd3de83b7f748d7efef986abe655e1dd50e",
8710                                   "3045022100ecc8c6529d0b2316d046f0f0757c1e1c25a636db168ec4f3aa1b9278df685dc0022067ae6b65e936f1337091f7b18a15935b608c5f2cdddb2f892ed0babfdd376d76",
8711                                   "020000000001018130a10f09b13677ba2885a8bca32860f3a952e5912b829a473639b5a2c07b900000000000000000000109060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100e57b845066a06ee7c2cbfc29eabffe52daa9bf6f6de760066d04df9f9b250e0002202ffb197f0e6e0a77a75a9aff27014bd3de83b7f748d7efef986abe655e1dd50e01483045022100ecc8c6529d0b2316d046f0f0757c1e1c25a636db168ec4f3aa1b9278df685dc0022067ae6b65e936f1337091f7b18a15935b608c5f2cdddb2f892ed0babfdd376d7601008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8712
8713                                   { 1,
8714                                   "3045022100d193b7ecccad8057571620a0b1ffa6c48e9483311723b59cf536043b20bc51550220546d4bd37b3b101ecda14f6c907af46ec391abce1cd9c7ce22b1a62b534f2f2a",
8715                                   "3044022014d66f11f9cacf923807eba49542076c5fe5cccf252fb08fe98c78ef3ca6ab5402201b290dbe043cc512d9d78de074a5a129b8759bc6a6c546b190d120b690bd6e82",
8716                                   "020000000001018130a10f09b13677ba2885a8bca32860f3a952e5912b829a473639b5a2c07b900100000000000000000199090000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100d193b7ecccad8057571620a0b1ffa6c48e9483311723b59cf536043b20bc51550220546d4bd37b3b101ecda14f6c907af46ec391abce1cd9c7ce22b1a62b534f2f2a01473044022014d66f11f9cacf923807eba49542076c5fe5cccf252fb08fe98c78ef3ca6ab5402201b290dbe043cc512d9d78de074a5a129b8759bc6a6c546b190d120b690bd6e82012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8717                 } );
8718
8719                 // anchors: commitment tx with four outputs untrimmed (minimum dust limit)
8720                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8721                 chan.context.feerate_per_kw = 2185;
8722                 chan.context.holder_dust_limit_satoshis = 2001;
8723                 let cached_channel_type = chan.context.channel_type;
8724                 chan.context.channel_type = ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies();
8725
8726                 test_commitment_with_anchors!("3044022040f63a16148cf35c8d3d41827f5ae7f7c3746885bb64d4d1b895892a83812b3e02202fcf95c2bf02c466163b3fa3ced6a24926fbb4035095a96842ef516e86ba54c0",
8727                                  "3045022100cd8479cfe1edb1e5a1d487391e0451a469c7171e51e680183f19eb4321f20e9b02204eab7d5a6384b1b08e03baa6e4d9748dfd2b5ab2bae7e39604a0d0055bbffdd5",
8728                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80064a010000000000002200202b1b5854183c12d3316565972c4668929d314d81c5dcdbb21cb45fe8a9a8114f4a01000000000000220020e9e86e4823faa62e222ebc858a226636856158f07e69898da3b0d1af0ddb3994b80b000000000000220020f96d0334feb64a4f40eb272031d07afcb038db56aa57446d60308c9f8ccadef9a00f000000000000220020ce6e751274836ff59622a0d1e07f8831d80bd6730bd48581398bfadd2bb8da9ac0c62d0000000000220020f3394e1e619b0eca1f91be2fb5ab4dfc59ba5b84ebe014ad1d43a564d012994ac5916a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100cd8479cfe1edb1e5a1d487391e0451a469c7171e51e680183f19eb4321f20e9b02204eab7d5a6384b1b08e03baa6e4d9748dfd2b5ab2bae7e39604a0d0055bbffdd501473044022040f63a16148cf35c8d3d41827f5ae7f7c3746885bb64d4d1b895892a83812b3e02202fcf95c2bf02c466163b3fa3ced6a24926fbb4035095a96842ef516e86ba54c001475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8729
8730                                   { 0,
8731                                   "304402206870514a72ad6e723ff7f1e0370d7a33c1cd2a0b9272674143ebaf6a1d02dee102205bd953c34faf5e7322e9a1c0103581cb090280fda4f1039ee8552668afa90ebb",
8732                                   "30440220669de9ca7910eff65a7773ebd14a9fc371fe88cde5b8e2a81609d85c87ac939b02201ac29472fa4067322e92d75b624942d60be5050139b20bb363db75be79eb946f",
8733                                   "02000000000101ac13a7715f80b8e52dda43c6929cade5521bdced3a405da02b443f1ffb1e33cc02000000000100000001b80b0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402206870514a72ad6e723ff7f1e0370d7a33c1cd2a0b9272674143ebaf6a1d02dee102205bd953c34faf5e7322e9a1c0103581cb090280fda4f1039ee8552668afa90ebb834730440220669de9ca7910eff65a7773ebd14a9fc371fe88cde5b8e2a81609d85c87ac939b02201ac29472fa4067322e92d75b624942d60be5050139b20bb363db75be79eb946f01008876a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6851b27568f7010000" },
8734
8735                                   { 1,
8736                                   "3045022100949e8dd938da56445b1cdfdebe1b7efea086edd05d89910d205a1e2e033ce47102202cbd68b5262ab144d9ec12653f87dfb0bb6bd05d1f58ae1e523f028eaefd7271",
8737                                   "3045022100e3104ed8b239f8019e5f0a1a73d7782a94a8c36e7984f476c3a0b3cb0e62e27902207e3d52884600985f8a2098e53a5c30dd6a5e857733acfaa07ab2162421ed2688",
8738                                   "02000000000101ac13a7715f80b8e52dda43c6929cade5521bdced3a405da02b443f1ffb1e33cc03000000000100000001a00f0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100949e8dd938da56445b1cdfdebe1b7efea086edd05d89910d205a1e2e033ce47102202cbd68b5262ab144d9ec12653f87dfb0bb6bd05d1f58ae1e523f028eaefd727183483045022100e3104ed8b239f8019e5f0a1a73d7782a94a8c36e7984f476c3a0b3cb0e62e27902207e3d52884600985f8a2098e53a5c30dd6a5e857733acfaa07ab2162421ed2688012004040404040404040404040404040404040404040404040404040404040404048d76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac6851b2756800000000" }
8739                 } );
8740
8741                 // commitment tx with four outputs untrimmed (maximum feerate)
8742                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8743                 chan.context.feerate_per_kw = 3702;
8744                 chan.context.holder_dust_limit_satoshis = 546;
8745                 chan.context.channel_type = cached_channel_type.clone();
8746
8747                 test_commitment!("304502210092a587aeb777f869e7ff0d7898ea619ee26a3dacd1f3672b945eea600be431100220077ee9eae3528d15251f2a52b607b189820e57a6ccfac8d1af502b132ee40169",
8748                                  "3045022100e5efb73c32d32da2d79702299b6317de6fb24a60476e3855926d78484dd1b3c802203557cb66a42c944ef06e00bcc4da35a5bcb2f185aab0f8e403e519e1d66aaf75",
8749                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8004b80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e4846f916a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100e5efb73c32d32da2d79702299b6317de6fb24a60476e3855926d78484dd1b3c802203557cb66a42c944ef06e00bcc4da35a5bcb2f185aab0f8e403e519e1d66aaf750148304502210092a587aeb777f869e7ff0d7898ea619ee26a3dacd1f3672b945eea600be431100220077ee9eae3528d15251f2a52b607b189820e57a6ccfac8d1af502b132ee4016901475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8750
8751                                   { 0,
8752                                   "304402206fa54c11f98c3bae1e93df43fc7affeb05b476bf8060c03e29c377c69bc08e8b0220672701cce50d5c379ff45a5d2cfe48ac44973adb066ac32608e21221d869bb89",
8753                                   "304402206e36c683ebf2cb16bcef3d5439cf8b53cd97280a365ed8acd7abb85a8ba5f21c02206e8621edfc2a5766cbc96eb67fd501127ff163eb6b85518a39f7d4974aef126f",
8754                                   "020000000001018db483bff65c70ee71d8282aeec5a880e2e2b39e45772bda5460403095c62e3f0000000000000000000122020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402206fa54c11f98c3bae1e93df43fc7affeb05b476bf8060c03e29c377c69bc08e8b0220672701cce50d5c379ff45a5d2cfe48ac44973adb066ac32608e21221d869bb890147304402206e36c683ebf2cb16bcef3d5439cf8b53cd97280a365ed8acd7abb85a8ba5f21c02206e8621edfc2a5766cbc96eb67fd501127ff163eb6b85518a39f7d4974aef126f01008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8755
8756                                   { 1,
8757                                   "3044022057649739b0eb74d541ead0dfdb3d4b2c15aa192720031044c3434c67812e5ca902201e5ede42d960ae551707f4a6b34b09393cf4dee2418507daa022e3550dbb5817",
8758                                   "304402207faad26678c8850e01b4a0696d60841f7305e1832b786110ee9075cb92ed14a30220516ef8ee5dfa80824ea28cbcec0dd95f8b847146257c16960db98507db15ffdc",
8759                                   "020000000001018db483bff65c70ee71d8282aeec5a880e2e2b39e45772bda5460403095c62e3f0100000000000000000176050000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500473044022057649739b0eb74d541ead0dfdb3d4b2c15aa192720031044c3434c67812e5ca902201e5ede42d960ae551707f4a6b34b09393cf4dee2418507daa022e3550dbb58170147304402207faad26678c8850e01b4a0696d60841f7305e1832b786110ee9075cb92ed14a30220516ef8ee5dfa80824ea28cbcec0dd95f8b847146257c16960db98507db15ffdc012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8760                 } );
8761
8762                 // commitment tx with three outputs untrimmed (minimum feerate)
8763                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8764                 chan.context.feerate_per_kw = 3703;
8765
8766                 test_commitment!("3045022100b495d239772a237ff2cf354b1b11be152fd852704cb184e7356d13f2fb1e5e430220723db5cdb9cbd6ead7bfd3deb419cf41053a932418cbb22a67b581f40bc1f13e",
8767                                  "304402201b736d1773a124c745586217a75bed5f66c05716fbe8c7db4fdb3c3069741cdd02205083f39c321c1bcadfc8d97e3c791a66273d936abac0c6a2fde2ed46019508e1",
8768                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8003a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484eb936a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e040047304402201b736d1773a124c745586217a75bed5f66c05716fbe8c7db4fdb3c3069741cdd02205083f39c321c1bcadfc8d97e3c791a66273d936abac0c6a2fde2ed46019508e101483045022100b495d239772a237ff2cf354b1b11be152fd852704cb184e7356d13f2fb1e5e430220723db5cdb9cbd6ead7bfd3deb419cf41053a932418cbb22a67b581f40bc1f13e01475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8769
8770                                   { 0,
8771                                   "3045022100c34c61735f93f2e324cc873c3b248111ccf8f6db15d5969583757010d4ad2b4602207867bb919b2ddd6387873e425345c9b7fd18d1d66aba41f3607bc2896ef3c30a",
8772                                   "3045022100988c143e2110067117d2321bdd4bd16ca1734c98b29290d129384af0962b634e02206c1b02478878c5f547018b833986578f90c3e9be669fe5788ad0072a55acbb05",
8773                                   "0200000000010120060e4a29579d429f0f27c17ee5f1ee282f20d706d6f90b63d35946d8f3029a0000000000000000000175050000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100c34c61735f93f2e324cc873c3b248111ccf8f6db15d5969583757010d4ad2b4602207867bb919b2ddd6387873e425345c9b7fd18d1d66aba41f3607bc2896ef3c30a01483045022100988c143e2110067117d2321bdd4bd16ca1734c98b29290d129384af0962b634e02206c1b02478878c5f547018b833986578f90c3e9be669fe5788ad0072a55acbb05012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8774                 } );
8775
8776                 // anchors: commitment tx with three outputs untrimmed (minimum dust limit)
8777                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8778                 chan.context.feerate_per_kw = 3687;
8779                 chan.context.holder_dust_limit_satoshis = 3001;
8780                 chan.context.channel_type = ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies();
8781
8782                 test_commitment_with_anchors!("3045022100ad6c71569856b2d7ff42e838b4abe74a713426b37f22fa667a195a4c88908c6902202b37272b02a42dc6d9f4f82cab3eaf84ac882d9ed762859e1e75455c2c228377",
8783                                  "3045022100c970799bcb33f43179eb43b3378a0a61991cf2923f69b36ef12548c3df0e6d500220413dc27d2e39ee583093adfcb7799be680141738babb31cc7b0669a777a31f5d",
8784                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80054a010000000000002200202b1b5854183c12d3316565972c4668929d314d81c5dcdbb21cb45fe8a9a8114f4a01000000000000220020e9e86e4823faa62e222ebc858a226636856158f07e69898da3b0d1af0ddb3994a00f000000000000220020ce6e751274836ff59622a0d1e07f8831d80bd6730bd48581398bfadd2bb8da9ac0c62d0000000000220020f3394e1e619b0eca1f91be2fb5ab4dfc59ba5b84ebe014ad1d43a564d012994aa28b6a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100c970799bcb33f43179eb43b3378a0a61991cf2923f69b36ef12548c3df0e6d500220413dc27d2e39ee583093adfcb7799be680141738babb31cc7b0669a777a31f5d01483045022100ad6c71569856b2d7ff42e838b4abe74a713426b37f22fa667a195a4c88908c6902202b37272b02a42dc6d9f4f82cab3eaf84ac882d9ed762859e1e75455c2c22837701475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8785
8786                                   { 0,
8787                                   "3044022017b558a3cf5f0cb94269e2e927b29ed22bd2416abb8a7ce6de4d1256f359b93602202e9ca2b1a23ea3e69f433c704e327739e219804b8c188b1d52f74fd5a9de954c",
8788                                   "3045022100af7a8b7c7ff2080c68995254cb66d64d9954edcc5baac3bb4f27ed2d29aaa6120220421c27da7a60574a9263f271e0f3bd34594ec6011095190022b3b54596ea03de",
8789                                   "02000000000101542562b326c08e3a076d9cfca2be175041366591da334d8d513ff1686fd95a6002000000000100000001a00f0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500473044022017b558a3cf5f0cb94269e2e927b29ed22bd2416abb8a7ce6de4d1256f359b93602202e9ca2b1a23ea3e69f433c704e327739e219804b8c188b1d52f74fd5a9de954c83483045022100af7a8b7c7ff2080c68995254cb66d64d9954edcc5baac3bb4f27ed2d29aaa6120220421c27da7a60574a9263f271e0f3bd34594ec6011095190022b3b54596ea03de012004040404040404040404040404040404040404040404040404040404040404048d76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac6851b2756800000000" }
8790                 } );
8791
8792                 // commitment tx with three outputs untrimmed (maximum feerate)
8793                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8794                 chan.context.feerate_per_kw = 4914;
8795                 chan.context.holder_dust_limit_satoshis = 546;
8796                 chan.context.channel_type = cached_channel_type.clone();
8797
8798                 test_commitment!("3045022100b4b16d5f8cc9fc4c1aff48831e832a0d8990e133978a66e302c133550954a44d022073573ce127e2200d316f6b612803a5c0c97b8d20e1e44dbe2ac0dd2fb8c95244",
8799                                  "3045022100d72638bc6308b88bb6d45861aae83e5b9ff6e10986546e13bce769c70036e2620220320be7c6d66d22f30b9fcd52af66531505b1310ca3b848c19285b38d8a1a8c19",
8800                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8003a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484ae8f6a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100d72638bc6308b88bb6d45861aae83e5b9ff6e10986546e13bce769c70036e2620220320be7c6d66d22f30b9fcd52af66531505b1310ca3b848c19285b38d8a1a8c1901483045022100b4b16d5f8cc9fc4c1aff48831e832a0d8990e133978a66e302c133550954a44d022073573ce127e2200d316f6b612803a5c0c97b8d20e1e44dbe2ac0dd2fb8c9524401475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8801
8802                                   { 0,
8803                                   "3045022100f43591c156038ba217756006bb3c55f7d113a325cdd7d9303c82115372858d68022016355b5aadf222bc8d12e426c75f4a03423917b2443a103eb2a498a3a2234374",
8804                                   "30440220585dee80fafa264beac535c3c0bb5838ac348b156fdc982f86adc08dfc9bfd250220130abb82f9f295cc9ef423dcfef772fde2acd85d9df48cc538981d26a10a9c10",
8805                                   "02000000000101a9172908eace869cc35128c31fc2ab502f72e4dff31aab23e0244c4b04b11ab00000000000000000000122020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100f43591c156038ba217756006bb3c55f7d113a325cdd7d9303c82115372858d68022016355b5aadf222bc8d12e426c75f4a03423917b2443a103eb2a498a3a2234374014730440220585dee80fafa264beac535c3c0bb5838ac348b156fdc982f86adc08dfc9bfd250220130abb82f9f295cc9ef423dcfef772fde2acd85d9df48cc538981d26a10a9c10012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8806                 } );
8807
8808                 // commitment tx with two outputs untrimmed (minimum feerate)
8809                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8810                 chan.context.feerate_per_kw = 4915;
8811                 chan.context.holder_dust_limit_satoshis = 546;
8812
8813                 test_commitment!("304402203a286936e74870ca1459c700c71202af0381910a6bfab687ef494ef1bc3e02c902202506c362d0e3bee15e802aa729bf378e051644648253513f1c085b264cc2a720",
8814                                  "30450221008a953551f4d67cb4df3037207fc082ddaf6be84d417b0bd14c80aab66f1b01a402207508796dc75034b2dee876fe01dc05a08b019f3e5d689ac8842ade2f1befccf5",
8815                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8002c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484fa926a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e04004830450221008a953551f4d67cb4df3037207fc082ddaf6be84d417b0bd14c80aab66f1b01a402207508796dc75034b2dee876fe01dc05a08b019f3e5d689ac8842ade2f1befccf50147304402203a286936e74870ca1459c700c71202af0381910a6bfab687ef494ef1bc3e02c902202506c362d0e3bee15e802aa729bf378e051644648253513f1c085b264cc2a72001475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8816
8817                 // anchors: commitment tx with two outputs untrimmed (minimum dust limit)
8818                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8819                 chan.context.feerate_per_kw = 4894;
8820                 chan.context.holder_dust_limit_satoshis = 4001;
8821                 chan.context.channel_type = ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies();
8822
8823                 test_commitment_with_anchors!("3045022100e784a66b1588575801e237d35e510fd92a81ae3a4a2a1b90c031ad803d07b3f3022021bc5f16501f167607d63b681442da193eb0a76b4b7fd25c2ed4f8b28fd35b95",
8824                                  "30450221009f16ac85d232e4eddb3fcd750a68ebf0b58e3356eaada45d3513ede7e817bf4c02207c2b043b4e5f971261975406cb955219fa56bffe5d834a833694b5abc1ce4cfd",
8825                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80044a010000000000002200202b1b5854183c12d3316565972c4668929d314d81c5dcdbb21cb45fe8a9a8114f4a01000000000000220020e9e86e4823faa62e222ebc858a226636856158f07e69898da3b0d1af0ddb3994c0c62d0000000000220020f3394e1e619b0eca1f91be2fb5ab4dfc59ba5b84ebe014ad1d43a564d012994ad0886a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e04004830450221009f16ac85d232e4eddb3fcd750a68ebf0b58e3356eaada45d3513ede7e817bf4c02207c2b043b4e5f971261975406cb955219fa56bffe5d834a833694b5abc1ce4cfd01483045022100e784a66b1588575801e237d35e510fd92a81ae3a4a2a1b90c031ad803d07b3f3022021bc5f16501f167607d63b681442da193eb0a76b4b7fd25c2ed4f8b28fd35b9501475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8826
8827                 // commitment tx with two outputs untrimmed (maximum feerate)
8828                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8829                 chan.context.feerate_per_kw = 9651180;
8830                 chan.context.holder_dust_limit_satoshis = 546;
8831                 chan.context.channel_type = cached_channel_type.clone();
8832
8833                 test_commitment!("304402200a8544eba1d216f5c5e530597665fa9bec56943c0f66d98fc3d028df52d84f7002201e45fa5c6bc3a506cc2553e7d1c0043a9811313fc39c954692c0d47cfce2bbd3",
8834                                  "3045022100e11b638c05c650c2f63a421d36ef8756c5ce82f2184278643520311cdf50aa200220259565fb9c8e4a87ccaf17f27a3b9ca4f20625754a0920d9c6c239d8156a11de",
8835                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b800222020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80ec0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e4840400483045022100e11b638c05c650c2f63a421d36ef8756c5ce82f2184278643520311cdf50aa200220259565fb9c8e4a87ccaf17f27a3b9ca4f20625754a0920d9c6c239d8156a11de0147304402200a8544eba1d216f5c5e530597665fa9bec56943c0f66d98fc3d028df52d84f7002201e45fa5c6bc3a506cc2553e7d1c0043a9811313fc39c954692c0d47cfce2bbd301475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8836
8837                 // commitment tx with one output untrimmed (minimum feerate)
8838                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8839                 chan.context.feerate_per_kw = 9651181;
8840
8841                 test_commitment!("304402202ade0142008309eb376736575ad58d03e5b115499709c6db0b46e36ff394b492022037b63d78d66404d6504d4c4ac13be346f3d1802928a6d3ad95a6a944227161a2",
8842                                  "304402207e8d51e0c570a5868a78414f4e0cbfaed1106b171b9581542c30718ee4eb95ba02203af84194c97adf98898c9afe2f2ed4a7f8dba05a2dfab28ac9d9c604aa49a379",
8843                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8001c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484040047304402207e8d51e0c570a5868a78414f4e0cbfaed1106b171b9581542c30718ee4eb95ba02203af84194c97adf98898c9afe2f2ed4a7f8dba05a2dfab28ac9d9c604aa49a3790147304402202ade0142008309eb376736575ad58d03e5b115499709c6db0b46e36ff394b492022037b63d78d66404d6504d4c4ac13be346f3d1802928a6d3ad95a6a944227161a201475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8844
8845                 // anchors: commitment tx with one output untrimmed (minimum dust limit)
8846                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8847                 chan.context.feerate_per_kw = 6216010;
8848                 chan.context.holder_dust_limit_satoshis = 4001;
8849                 chan.context.channel_type = ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies();
8850
8851                 test_commitment_with_anchors!("30450221008fd5dbff02e4b59020d4cd23a3c30d3e287065fda75a0a09b402980adf68ccda022001e0b8b620cd915ddff11f1de32addf23d81d51b90e6841b2cb8dcaf3faa5ecf",
8852                                  "30450221009ad80792e3038fe6968d12ff23e6888a565c3ddd065037f357445f01675d63f3022018384915e5f1f4ae157e15debf4f49b61c8d9d2b073c7d6f97c4a68caa3ed4c1",
8853                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80024a01000000000000220020e9e86e4823faa62e222ebc858a226636856158f07e69898da3b0d1af0ddb3994c0c62d0000000000220020f3394e1e619b0eca1f91be2fb5ab4dfc59ba5b84ebe014ad1d43a564d012994a04004830450221009ad80792e3038fe6968d12ff23e6888a565c3ddd065037f357445f01675d63f3022018384915e5f1f4ae157e15debf4f49b61c8d9d2b073c7d6f97c4a68caa3ed4c1014830450221008fd5dbff02e4b59020d4cd23a3c30d3e287065fda75a0a09b402980adf68ccda022001e0b8b620cd915ddff11f1de32addf23d81d51b90e6841b2cb8dcaf3faa5ecf01475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8854
8855                 // commitment tx with fee greater than funder amount
8856                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8857                 chan.context.feerate_per_kw = 9651936;
8858                 chan.context.holder_dust_limit_satoshis = 546;
8859                 chan.context.channel_type = cached_channel_type;
8860
8861                 test_commitment!("304402202ade0142008309eb376736575ad58d03e5b115499709c6db0b46e36ff394b492022037b63d78d66404d6504d4c4ac13be346f3d1802928a6d3ad95a6a944227161a2",
8862                                  "304402207e8d51e0c570a5868a78414f4e0cbfaed1106b171b9581542c30718ee4eb95ba02203af84194c97adf98898c9afe2f2ed4a7f8dba05a2dfab28ac9d9c604aa49a379",
8863                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8001c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484040047304402207e8d51e0c570a5868a78414f4e0cbfaed1106b171b9581542c30718ee4eb95ba02203af84194c97adf98898c9afe2f2ed4a7f8dba05a2dfab28ac9d9c604aa49a3790147304402202ade0142008309eb376736575ad58d03e5b115499709c6db0b46e36ff394b492022037b63d78d66404d6504d4c4ac13be346f3d1802928a6d3ad95a6a944227161a201475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8864
8865                 // commitment tx with 3 htlc outputs, 2 offered having the same amount and preimage
8866                 chan.context.value_to_self_msat = 7_000_000_000 - 2_000_000;
8867                 chan.context.feerate_per_kw = 253;
8868                 chan.context.pending_inbound_htlcs.clear();
8869                 chan.context.pending_inbound_htlcs.push({
8870                         let mut out = InboundHTLCOutput{
8871                                 htlc_id: 1,
8872                                 amount_msat: 2000000,
8873                                 cltv_expiry: 501,
8874                                 payment_hash: PaymentHash([0; 32]),
8875                                 state: InboundHTLCState::Committed,
8876                         };
8877                         out.payment_hash.0 = Sha256::hash(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap()).into_inner();
8878                         out
8879                 });
8880                 chan.context.pending_outbound_htlcs.clear();
8881                 chan.context.pending_outbound_htlcs.push({
8882                         let mut out = OutboundHTLCOutput{
8883                                 htlc_id: 6,
8884                                 amount_msat: 5000001,
8885                                 cltv_expiry: 506,
8886                                 payment_hash: PaymentHash([0; 32]),
8887                                 state: OutboundHTLCState::Committed,
8888                                 source: HTLCSource::dummy(),
8889                                 skimmed_fee_msat: None,
8890                         };
8891                         out.payment_hash.0 = Sha256::hash(&hex::decode("0505050505050505050505050505050505050505050505050505050505050505").unwrap()).into_inner();
8892                         out
8893                 });
8894                 chan.context.pending_outbound_htlcs.push({
8895                         let mut out = OutboundHTLCOutput{
8896                                 htlc_id: 5,
8897                                 amount_msat: 5000000,
8898                                 cltv_expiry: 505,
8899                                 payment_hash: PaymentHash([0; 32]),
8900                                 state: OutboundHTLCState::Committed,
8901                                 source: HTLCSource::dummy(),
8902                                 skimmed_fee_msat: None,
8903                         };
8904                         out.payment_hash.0 = Sha256::hash(&hex::decode("0505050505050505050505050505050505050505050505050505050505050505").unwrap()).into_inner();
8905                         out
8906                 });
8907
8908                 test_commitment!("304402207d0870964530f97b62497b11153c551dca0a1e226815ef0a336651158da0f82402200f5378beee0e77759147b8a0a284decd11bfd2bc55c8fafa41c134fe996d43c8",
8909                                  "304402200d10bf5bc5397fc59d7188ae438d80c77575595a2d488e41bd6363a810cc8d72022012b57e714fbbfdf7a28c47d5b370cb8ac37c8545f596216e5b21e9b236ef457c",
8910                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8005d007000000000000220020748eba944fedc8827f6b06bc44678f93c0f9e6078b35c6331ed31e75f8ce0c2d8813000000000000220020305c12e1a0bc21e283c131cea1c66d68857d28b7b2fce0a6fbc40c164852121b8813000000000000220020305c12e1a0bc21e283c131cea1c66d68857d28b7b2fce0a6fbc40c164852121bc0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484a69f6a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e040047304402200d10bf5bc5397fc59d7188ae438d80c77575595a2d488e41bd6363a810cc8d72022012b57e714fbbfdf7a28c47d5b370cb8ac37c8545f596216e5b21e9b236ef457c0147304402207d0870964530f97b62497b11153c551dca0a1e226815ef0a336651158da0f82402200f5378beee0e77759147b8a0a284decd11bfd2bc55c8fafa41c134fe996d43c801475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8911
8912                                   { 0,
8913                                   "3045022100b470fe12e5b7fea9eccb8cbff1972cea4f96758041898982a02bcc7f9d56d50b0220338a75b2afaab4ec00cdd2d9273c68c7581ff5a28bcbb40c4d138b81f1d45ce5",
8914                                   "3044022017b90c65207522a907fb6a137f9dd528b3389465a8ae72308d9e1d564f512cf402204fc917b4f0e88604a3e994f85bfae7c7c1f9d9e9f78e8cd112e0889720d9405b",
8915                                   "020000000001014bdccf28653066a2c554cafeffdfe1e678e64a69b056684deb0c4fba909423ec000000000000000000011f070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100b470fe12e5b7fea9eccb8cbff1972cea4f96758041898982a02bcc7f9d56d50b0220338a75b2afaab4ec00cdd2d9273c68c7581ff5a28bcbb40c4d138b81f1d45ce501473044022017b90c65207522a907fb6a137f9dd528b3389465a8ae72308d9e1d564f512cf402204fc917b4f0e88604a3e994f85bfae7c7c1f9d9e9f78e8cd112e0889720d9405b012001010101010101010101010101010101010101010101010101010101010101018a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac686800000000" },
8916                                   { 1,
8917                                   "3045022100b575379f6d8743cb0087648f81cfd82d17a97fbf8f67e058c65ce8b9d25df9500220554a210d65b02d9f36c6adf0f639430ca8293196ba5089bf67cc3a9813b7b00a",
8918                                   "3045022100ee2e16b90930a479b13f8823a7f14b600198c838161160b9436ed086d3fc57e002202a66fa2324f342a17129949c640bfe934cbc73a869ba7c06aa25c5a3d0bfb53d",
8919                                   "020000000001014bdccf28653066a2c554cafeffdfe1e678e64a69b056684deb0c4fba909423ec01000000000000000001e1120000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100b575379f6d8743cb0087648f81cfd82d17a97fbf8f67e058c65ce8b9d25df9500220554a210d65b02d9f36c6adf0f639430ca8293196ba5089bf67cc3a9813b7b00a01483045022100ee2e16b90930a479b13f8823a7f14b600198c838161160b9436ed086d3fc57e002202a66fa2324f342a17129949c640bfe934cbc73a869ba7c06aa25c5a3d0bfb53d01008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9142002cc93ebefbb1b73f0af055dcc27a0b504ad7688ac6868f9010000" },
8920                                   { 2,
8921                                   "30440220471c9f3ad92e49b13b7b8059f43ecf8f7887b0dccbb9fdb54bfe23d62a8ae332022024bd22fae0740e86a44228c35330da9526fd7306dffb2b9dc362d5e78abef7cc",
8922                                   "304402207157f452f2506d73c315192311893800cfb3cc235cc1185b1cfcc136b55230db022014be242dbc6c5da141fec4034e7f387f74d6ff1899453d72ba957467540e1ecb",
8923                                   "020000000001014bdccf28653066a2c554cafeffdfe1e678e64a69b056684deb0c4fba909423ec02000000000000000001e1120000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e05004730440220471c9f3ad92e49b13b7b8059f43ecf8f7887b0dccbb9fdb54bfe23d62a8ae332022024bd22fae0740e86a44228c35330da9526fd7306dffb2b9dc362d5e78abef7cc0147304402207157f452f2506d73c315192311893800cfb3cc235cc1185b1cfcc136b55230db022014be242dbc6c5da141fec4034e7f387f74d6ff1899453d72ba957467540e1ecb01008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9142002cc93ebefbb1b73f0af055dcc27a0b504ad7688ac6868fa010000" }
8924                 } );
8925
8926                 chan.context.channel_type = ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies();
8927                 test_commitment_with_anchors!("3044022027b38dfb654c34032ffb70bb43022981652fce923cbbe3cbe7394e2ade8b34230220584195b78da6e25c2e8da6b4308d9db25b65b64975db9266163ef592abb7c725",
8928                                  "3045022100b4014970d9d7962853f3f85196144671d7d5d87426250f0a5fdaf9a55292e92502205360910c9abb397467e19dbd63d081deb4a3240903114c98cec0a23591b79b76",
8929                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80074a010000000000002200202b1b5854183c12d3316565972c4668929d314d81c5dcdbb21cb45fe8a9a8114f4a01000000000000220020e9e86e4823faa62e222ebc858a226636856158f07e69898da3b0d1af0ddb3994d007000000000000220020fe0598d74fee2205cc3672e6e6647706b4f3099713b4661b62482c3addd04a5e881300000000000022002018e40f9072c44350f134bdc887bab4d9bdfc8aa468a25616c80e21757ba5dac7881300000000000022002018e40f9072c44350f134bdc887bab4d9bdfc8aa468a25616c80e21757ba5dac7c0c62d0000000000220020f3394e1e619b0eca1f91be2fb5ab4dfc59ba5b84ebe014ad1d43a564d012994aad9c6a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100b4014970d9d7962853f3f85196144671d7d5d87426250f0a5fdaf9a55292e92502205360910c9abb397467e19dbd63d081deb4a3240903114c98cec0a23591b79b7601473044022027b38dfb654c34032ffb70bb43022981652fce923cbbe3cbe7394e2ade8b34230220584195b78da6e25c2e8da6b4308d9db25b65b64975db9266163ef592abb7c72501475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8930
8931                                   { 0,
8932                                   "30440220078fe5343dab88c348a3a8a9c1a9293259dbf35507ae971702cc39dd623ea9af022011ed0c0f35243cd0bb4d9ca3c772379b2b5f4af93140e9fdc5600dfec1cdb0c2",
8933                                   "304402205df665e2908c7690d2d33eb70e6e119958c28febe141a94ed0dd9a55ce7c8cfc0220364d02663a5d019af35c5cd5fda9465d985d85bbd12db207738d61163449a424",
8934                                   "020000000001013d060d0305c9616eaabc21d41fae85bcb5477b5d7f1c92aa429cf15339bbe1c402000000000100000001d0070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e05004730440220078fe5343dab88c348a3a8a9c1a9293259dbf35507ae971702cc39dd623ea9af022011ed0c0f35243cd0bb4d9ca3c772379b2b5f4af93140e9fdc5600dfec1cdb0c28347304402205df665e2908c7690d2d33eb70e6e119958c28febe141a94ed0dd9a55ce7c8cfc0220364d02663a5d019af35c5cd5fda9465d985d85bbd12db207738d61163449a424012001010101010101010101010101010101010101010101010101010101010101018d76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac6851b2756800000000" },
8935                                   { 1,
8936                                   "304402202df6bf0f98a42cfd0172a16bded7d1b16c14f5f42ba23f5c54648c14b647531302200fe1508626817f23925bb56951d5e4b2654c751743ab6db48a6cce7dda17c01c",
8937                                   "304402203f99ec05cdd89558a23683b471c1dcce8f6a92295f1fff3b0b5d21be4d4f97ea022019d29070690fc2c126fe27cc4ab2f503f289d362721b2efa7418e7fddb939a5b",
8938                                   "020000000001013d060d0305c9616eaabc21d41fae85bcb5477b5d7f1c92aa429cf15339bbe1c40300000000010000000188130000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402202df6bf0f98a42cfd0172a16bded7d1b16c14f5f42ba23f5c54648c14b647531302200fe1508626817f23925bb56951d5e4b2654c751743ab6db48a6cce7dda17c01c8347304402203f99ec05cdd89558a23683b471c1dcce8f6a92295f1fff3b0b5d21be4d4f97ea022019d29070690fc2c126fe27cc4ab2f503f289d362721b2efa7418e7fddb939a5b01008876a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9142002cc93ebefbb1b73f0af055dcc27a0b504ad7688ac6851b27568f9010000" },
8939                                   { 2,
8940                                   "3045022100bd206b420c495f3aa714d3ea4766cbe95441deacb5d2f737f1913349aee7c2ae02200249d2c950dd3b15326bf378ae5d2b871d33d6737f5d70735f3de8383140f2a1",
8941                                   "3045022100f2cd35e385b9b7e15b92a5d78d120b6b2c5af4e974bc01e884c5facb3bb5966c0220706e0506477ce809a40022d6de8e041e9ef13136c45abee9c36f58a01fdb188b",
8942                                   "020000000001013d060d0305c9616eaabc21d41fae85bcb5477b5d7f1c92aa429cf15339bbe1c40400000000010000000188130000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100bd206b420c495f3aa714d3ea4766cbe95441deacb5d2f737f1913349aee7c2ae02200249d2c950dd3b15326bf378ae5d2b871d33d6737f5d70735f3de8383140f2a183483045022100f2cd35e385b9b7e15b92a5d78d120b6b2c5af4e974bc01e884c5facb3bb5966c0220706e0506477ce809a40022d6de8e041e9ef13136c45abee9c36f58a01fdb188b01008876a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9142002cc93ebefbb1b73f0af055dcc27a0b504ad7688ac6851b27568fa010000" }
8943                 } );
8944         }
8945
8946         #[test]
8947         fn test_per_commitment_secret_gen() {
8948                 // Test vectors from BOLT 3 Appendix D:
8949
8950                 let mut seed = [0; 32];
8951                 seed[0..32].clone_from_slice(&hex::decode("0000000000000000000000000000000000000000000000000000000000000000").unwrap());
8952                 assert_eq!(chan_utils::build_commitment_secret(&seed, 281474976710655),
8953                            hex::decode("02a40c85b6f28da08dfdbe0926c53fab2de6d28c10301f8f7c4073d5e42e3148").unwrap()[..]);
8954
8955                 seed[0..32].clone_from_slice(&hex::decode("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF").unwrap());
8956                 assert_eq!(chan_utils::build_commitment_secret(&seed, 281474976710655),
8957                            hex::decode("7cc854b54e3e0dcdb010d7a3fee464a9687be6e8db3be6854c475621e007a5dc").unwrap()[..]);
8958
8959                 assert_eq!(chan_utils::build_commitment_secret(&seed, 0xaaaaaaaaaaa),
8960                            hex::decode("56f4008fb007ca9acf0e15b054d5c9fd12ee06cea347914ddbaed70d1c13a528").unwrap()[..]);
8961
8962                 assert_eq!(chan_utils::build_commitment_secret(&seed, 0x555555555555),
8963                            hex::decode("9015daaeb06dba4ccc05b91b2f73bd54405f2be9f217fbacd3c5ac2e62327d31").unwrap()[..]);
8964
8965                 seed[0..32].clone_from_slice(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap());
8966                 assert_eq!(chan_utils::build_commitment_secret(&seed, 1),
8967                            hex::decode("915c75942a26bb3a433a8ce2cb0427c29ec6c1775cfc78328b57f6ba7bfeaa9c").unwrap()[..]);
8968         }
8969
8970         #[test]
8971         fn test_key_derivation() {
8972                 // Test vectors from BOLT 3 Appendix E:
8973                 let secp_ctx = Secp256k1::new();
8974
8975                 let base_secret = SecretKey::from_slice(&hex::decode("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f").unwrap()[..]).unwrap();
8976                 let per_commitment_secret = SecretKey::from_slice(&hex::decode("1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100").unwrap()[..]).unwrap();
8977
8978                 let base_point = PublicKey::from_secret_key(&secp_ctx, &base_secret);
8979                 assert_eq!(base_point.serialize()[..], hex::decode("036d6caac248af96f6afa7f904f550253a0f3ef3f5aa2fe6838a95b216691468e2").unwrap()[..]);
8980
8981                 let per_commitment_point = PublicKey::from_secret_key(&secp_ctx, &per_commitment_secret);
8982                 assert_eq!(per_commitment_point.serialize()[..], hex::decode("025f7117a78150fe2ef97db7cfc83bd57b2e2c0d0dd25eaf467a4a1c2a45ce1486").unwrap()[..]);
8983
8984                 assert_eq!(chan_utils::derive_public_key(&secp_ctx, &per_commitment_point, &base_point).serialize()[..],
8985                                 hex::decode("0235f2dbfaa89b57ec7b055afe29849ef7ddfeb1cefdb9ebdc43f5494984db29e5").unwrap()[..]);
8986
8987                 assert_eq!(chan_utils::derive_private_key(&secp_ctx, &per_commitment_point, &base_secret),
8988                                 SecretKey::from_slice(&hex::decode("cbced912d3b21bf196a766651e436aff192362621ce317704ea2f75d87e7be0f").unwrap()[..]).unwrap());
8989
8990                 assert_eq!(chan_utils::derive_public_revocation_key(&secp_ctx, &per_commitment_point, &base_point).serialize()[..],
8991                                 hex::decode("02916e326636d19c33f13e8c0c3a03dd157f332f3e99c317c141dd865eb01f8ff0").unwrap()[..]);
8992
8993                 assert_eq!(chan_utils::derive_private_revocation_key(&secp_ctx, &per_commitment_secret, &base_secret),
8994                                 SecretKey::from_slice(&hex::decode("d09ffff62ddb2297ab000cc85bcb4283fdeb6aa052affbc9dddcf33b61078110").unwrap()[..]).unwrap());
8995         }
8996
8997         #[test]
8998         fn test_zero_conf_channel_type_support() {
8999                 let feeest = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
9000                 let secp_ctx = Secp256k1::new();
9001                 let seed = [42; 32];
9002                 let network = Network::Testnet;
9003                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
9004                 let logger = test_utils::TestLogger::new();
9005
9006                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9007                 let config = UserConfig::default();
9008                 let node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider,
9009                         node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42).unwrap();
9010
9011                 let mut channel_type_features = ChannelTypeFeatures::only_static_remote_key();
9012                 channel_type_features.set_zero_conf_required();
9013
9014                 let mut open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network));
9015                 open_channel_msg.channel_type = Some(channel_type_features);
9016                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
9017                 let res = InboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider,
9018                         node_b_node_id, &channelmanager::provided_channel_type_features(&config),
9019                         &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false);
9020                 assert!(res.is_ok());
9021         }
9022
9023         #[test]
9024         fn test_supports_anchors_zero_htlc_tx_fee() {
9025                 // Tests that if both sides support and negotiate `anchors_zero_fee_htlc_tx`, it is the
9026                 // resulting `channel_type`.
9027                 let secp_ctx = Secp256k1::new();
9028                 let fee_estimator = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
9029                 let network = Network::Testnet;
9030                 let keys_provider = test_utils::TestKeysInterface::new(&[42; 32], network);
9031                 let logger = test_utils::TestLogger::new();
9032
9033                 let node_id_a = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[1; 32]).unwrap());
9034                 let node_id_b = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[2; 32]).unwrap());
9035
9036                 let mut config = UserConfig::default();
9037                 config.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx = true;
9038
9039                 // It is not enough for just the initiator to signal `option_anchors_zero_fee_htlc_tx`, both
9040                 // need to signal it.
9041                 let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
9042                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
9043                         &channelmanager::provided_init_features(&UserConfig::default()), 10000000, 100000, 42,
9044                         &config, 0, 42
9045                 ).unwrap();
9046                 assert!(!channel_a.context.channel_type.supports_anchors_zero_fee_htlc_tx());
9047
9048                 let mut expected_channel_type = ChannelTypeFeatures::empty();
9049                 expected_channel_type.set_static_remote_key_required();
9050                 expected_channel_type.set_anchors_zero_fee_htlc_tx_required();
9051
9052                 let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
9053                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
9054                         &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42
9055                 ).unwrap();
9056
9057                 let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
9058                 let channel_b = InboundV1Channel::<&TestKeysInterface>::new(
9059                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
9060                         &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config),
9061                         &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false
9062                 ).unwrap();
9063
9064                 assert_eq!(channel_a.context.channel_type, expected_channel_type);
9065                 assert_eq!(channel_b.context.channel_type, expected_channel_type);
9066         }
9067
9068         #[test]
9069         fn test_rejects_implicit_simple_anchors() {
9070                 // Tests that if `option_anchors` is being negotiated implicitly through the intersection of
9071                 // each side's `InitFeatures`, it is rejected.
9072                 let secp_ctx = Secp256k1::new();
9073                 let fee_estimator = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
9074                 let network = Network::Testnet;
9075                 let keys_provider = test_utils::TestKeysInterface::new(&[42; 32], network);
9076                 let logger = test_utils::TestLogger::new();
9077
9078                 let node_id_a = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[1; 32]).unwrap());
9079                 let node_id_b = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[2; 32]).unwrap());
9080
9081                 let config = UserConfig::default();
9082
9083                 // See feature bit assignments: https://github.com/lightning/bolts/blob/master/09-features.md
9084                 let static_remote_key_required: u64 = 1 << 12;
9085                 let simple_anchors_required: u64 = 1 << 20;
9086                 let raw_init_features = static_remote_key_required | simple_anchors_required;
9087                 let init_features_with_simple_anchors = InitFeatures::from_le_bytes(raw_init_features.to_le_bytes().to_vec());
9088
9089                 let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
9090                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
9091                         &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42
9092                 ).unwrap();
9093
9094                 // Set `channel_type` to `None` to force the implicit feature negotiation.
9095                 let mut open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
9096                 open_channel_msg.channel_type = None;
9097
9098                 // Since A supports both `static_remote_key` and `option_anchors`, but B only accepts
9099                 // `static_remote_key`, it will fail the channel.
9100                 let channel_b = InboundV1Channel::<&TestKeysInterface>::new(
9101                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
9102                         &channelmanager::provided_channel_type_features(&config), &init_features_with_simple_anchors,
9103                         &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false
9104                 );
9105                 assert!(channel_b.is_err());
9106         }
9107
9108         #[test]
9109         fn test_rejects_simple_anchors_channel_type() {
9110                 // Tests that if `option_anchors` is being negotiated through the `channel_type` feature,
9111                 // it is rejected.
9112                 let secp_ctx = Secp256k1::new();
9113                 let fee_estimator = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
9114                 let network = Network::Testnet;
9115                 let keys_provider = test_utils::TestKeysInterface::new(&[42; 32], network);
9116                 let logger = test_utils::TestLogger::new();
9117
9118                 let node_id_a = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[1; 32]).unwrap());
9119                 let node_id_b = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[2; 32]).unwrap());
9120
9121                 let config = UserConfig::default();
9122
9123                 // See feature bit assignments: https://github.com/lightning/bolts/blob/master/09-features.md
9124                 let static_remote_key_required: u64 = 1 << 12;
9125                 let simple_anchors_required: u64 = 1 << 20;
9126                 let simple_anchors_raw_features = static_remote_key_required | simple_anchors_required;
9127                 let simple_anchors_init = InitFeatures::from_le_bytes(simple_anchors_raw_features.to_le_bytes().to_vec());
9128                 let simple_anchors_channel_type = ChannelTypeFeatures::from_le_bytes(simple_anchors_raw_features.to_le_bytes().to_vec());
9129                 assert!(!simple_anchors_init.requires_unknown_bits());
9130                 assert!(!simple_anchors_channel_type.requires_unknown_bits());
9131
9132                 // First, we'll try to open a channel between A and B where A requests a channel type for
9133                 // the original `option_anchors` feature (non zero fee htlc tx). This should be rejected by
9134                 // B as it's not supported by LDK.
9135                 let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
9136                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
9137                         &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42
9138                 ).unwrap();
9139
9140                 let mut open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
9141                 open_channel_msg.channel_type = Some(simple_anchors_channel_type.clone());
9142
9143                 let res = InboundV1Channel::<&TestKeysInterface>::new(
9144                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
9145                         &channelmanager::provided_channel_type_features(&config), &simple_anchors_init,
9146                         &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false
9147                 );
9148                 assert!(res.is_err());
9149
9150                 // Then, we'll try to open another channel where A requests a channel type for
9151                 // `anchors_zero_fee_htlc_tx`. B is malicious and tries to downgrade the channel type to the
9152                 // original `option_anchors` feature, which should be rejected by A as it's not supported by
9153                 // LDK.
9154                 let mut channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
9155                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_b, &simple_anchors_init,
9156                         10000000, 100000, 42, &config, 0, 42
9157                 ).unwrap();
9158
9159                 let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
9160
9161                 let channel_b = InboundV1Channel::<&TestKeysInterface>::new(
9162                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
9163                         &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config),
9164                         &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false
9165                 ).unwrap();
9166
9167                 let mut accept_channel_msg = channel_b.get_accept_channel_message();
9168                 accept_channel_msg.channel_type = Some(simple_anchors_channel_type.clone());
9169
9170                 let res = channel_a.accept_channel(
9171                         &accept_channel_msg, &config.channel_handshake_limits, &simple_anchors_init
9172                 );
9173                 assert!(res.is_err());
9174         }
9175
9176         #[test]
9177         fn test_waiting_for_batch() {
9178                 let feeest = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
9179                 let logger = test_utils::TestLogger::new();
9180                 let secp_ctx = Secp256k1::new();
9181                 let seed = [42; 32];
9182                 let network = Network::Testnet;
9183                 let best_block = BestBlock::from_network(network);
9184                 let chain_hash = ChainHash::using_genesis_block(network);
9185                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
9186
9187                 let mut config = UserConfig::default();
9188                 // Set trust_own_funding_0conf while ensuring we don't send channel_ready for a
9189                 // channel in a batch before all channels are ready.
9190                 config.channel_handshake_limits.trust_own_funding_0conf = true;
9191
9192                 // Create a channel from node a to node b that will be part of batch funding.
9193                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9194                 let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(
9195                         &feeest,
9196                         &&keys_provider,
9197                         &&keys_provider,
9198                         node_b_node_id,
9199                         &channelmanager::provided_init_features(&config),
9200                         10000000,
9201                         100000,
9202                         42,
9203                         &config,
9204                         0,
9205                         42,
9206                 ).unwrap();
9207
9208                 let open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network));
9209                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
9210                 let mut node_b_chan = InboundV1Channel::<&TestKeysInterface>::new(
9211                         &feeest,
9212                         &&keys_provider,
9213                         &&keys_provider,
9214                         node_b_node_id,
9215                         &channelmanager::provided_channel_type_features(&config),
9216                         &channelmanager::provided_init_features(&config),
9217                         &open_channel_msg,
9218                         7,
9219                         &config,
9220                         0,
9221                         &&logger,
9222                         true,  // Allow node b to send a 0conf channel_ready.
9223                 ).unwrap();
9224
9225                 let accept_channel_msg = node_b_chan.accept_inbound_channel();
9226                 node_a_chan.accept_channel(
9227                         &accept_channel_msg,
9228                         &config.channel_handshake_limits,
9229                         &channelmanager::provided_init_features(&config),
9230                 ).unwrap();
9231
9232                 // Fund the channel with a batch funding transaction.
9233                 let output_script = node_a_chan.context.get_funding_redeemscript();
9234                 let tx = Transaction {
9235                         version: 1,
9236                         lock_time: PackedLockTime::ZERO,
9237                         input: Vec::new(),
9238                         output: vec![
9239                                 TxOut {
9240                                         value: 10000000, script_pubkey: output_script.clone(),
9241                                 },
9242                                 TxOut {
9243                                         value: 10000000, script_pubkey: Builder::new().into_script(),
9244                                 },
9245                         ]};
9246                 let funding_outpoint = OutPoint{ txid: tx.txid(), index: 0 };
9247                 let (mut node_a_chan, funding_created_msg) = node_a_chan.get_funding_created(
9248                         tx.clone(),
9249                         funding_outpoint,
9250                         true,
9251                         &&logger,
9252                 ).map_err(|_| ()).unwrap();
9253                 let (mut node_b_chan, funding_signed_msg, _) = node_b_chan.funding_created(
9254                         &funding_created_msg,
9255                         best_block,
9256                         &&keys_provider,
9257                         &&logger,
9258                 ).map_err(|_| ()).unwrap();
9259                 let node_b_updates = node_b_chan.monitor_updating_restored(
9260                         &&logger,
9261                         &&keys_provider,
9262                         chain_hash,
9263                         &config,
9264                         0,
9265                 );
9266
9267                 // Receive funding_signed, but the channel will be configured to hold sending channel_ready and
9268                 // broadcasting the funding transaction until the batch is ready.
9269                 let _ = node_a_chan.funding_signed(
9270                         &funding_signed_msg,
9271                         best_block,
9272                         &&keys_provider,
9273                         &&logger,
9274                 ).unwrap();
9275                 let node_a_updates = node_a_chan.monitor_updating_restored(
9276                         &&logger,
9277                         &&keys_provider,
9278                         chain_hash,
9279                         &config,
9280                         0,
9281                 );
9282                 // Our channel_ready shouldn't be sent yet, even with trust_own_funding_0conf set,
9283                 // as the funding transaction depends on all channels in the batch becoming ready.
9284                 assert!(node_a_updates.channel_ready.is_none());
9285                 assert!(node_a_updates.funding_broadcastable.is_none());
9286                 assert_eq!(
9287                         node_a_chan.context.channel_state,
9288                         ChannelState::FundingSent as u32 |
9289                         ChannelState::WaitingForBatch as u32,
9290                 );
9291
9292                 // It is possible to receive a 0conf channel_ready from the remote node.
9293                 node_a_chan.channel_ready(
9294                         &node_b_updates.channel_ready.unwrap(),
9295                         &&keys_provider,
9296                         chain_hash,
9297                         &config,
9298                         &best_block,
9299                         &&logger,
9300                 ).unwrap();
9301                 assert_eq!(
9302                         node_a_chan.context.channel_state,
9303                         ChannelState::FundingSent as u32 |
9304                         ChannelState::WaitingForBatch as u32 |
9305                         ChannelState::TheirChannelReady as u32,
9306                 );
9307
9308                 // Clear the ChannelState::WaitingForBatch only when called by ChannelManager.
9309                 node_a_chan.set_batch_ready();
9310                 assert_eq!(
9311                         node_a_chan.context.channel_state,
9312                         ChannelState::FundingSent as u32 |
9313                         ChannelState::TheirChannelReady as u32,
9314                 );
9315                 assert!(node_a_chan.check_get_channel_ready(0).is_some());
9316         }
9317 }