Handle retrying sign_counterparty_commitment outb funding failures
[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 `signer_maybe_unblocked`
537 #[allow(unused)]
538 pub(super) struct SignerResumeUpdates {
539         pub commitment_update: Option<msgs::CommitmentUpdate>,
540         pub funding_signed: Option<msgs::FundingSigned>,
541         pub funding_created: Option<msgs::FundingCreated>,
542         pub channel_ready: Option<msgs::ChannelReady>,
543 }
544
545 /// The return value of `channel_reestablish`
546 pub(super) struct ReestablishResponses {
547         pub channel_ready: Option<msgs::ChannelReady>,
548         pub raa: Option<msgs::RevokeAndACK>,
549         pub commitment_update: Option<msgs::CommitmentUpdate>,
550         pub order: RAACommitmentOrder,
551         pub announcement_sigs: Option<msgs::AnnouncementSignatures>,
552         pub shutdown_msg: Option<msgs::Shutdown>,
553 }
554
555 /// The result of a shutdown that should be handled.
556 #[must_use]
557 pub(crate) struct ShutdownResult {
558         /// A channel monitor update to apply.
559         pub(crate) monitor_update: Option<(PublicKey, OutPoint, ChannelMonitorUpdate)>,
560         /// A list of dropped outbound HTLCs that can safely be failed backwards immediately.
561         pub(crate) dropped_outbound_htlcs: Vec<(HTLCSource, PaymentHash, PublicKey, ChannelId)>,
562         /// An unbroadcasted batch funding transaction id. The closure of this channel should be
563         /// propagated to the remainder of the batch.
564         pub(crate) unbroadcasted_batch_funding_txid: Option<Txid>,
565 }
566
567 /// If the majority of the channels funds are to the fundee and the initiator holds only just
568 /// enough funds to cover their reserve value, channels are at risk of getting "stuck". Because the
569 /// initiator controls the feerate, if they then go to increase the channel fee, they may have no
570 /// balance but the fundee is unable to send a payment as the increase in fee more than drains
571 /// their reserve value. Thus, neither side can send a new HTLC and the channel becomes useless.
572 /// Thus, before sending an HTLC when we are the initiator, we check that the feerate can increase
573 /// by this multiple without hitting this case, before sending.
574 /// This multiple is effectively the maximum feerate "jump" we expect until more HTLCs flow over
575 /// the channel. Sadly, there isn't really a good number for this - if we expect to have no new
576 /// HTLCs for days we may need this to suffice for feerate increases across days, but that may
577 /// leave the channel less usable as we hold a bigger reserve.
578 #[cfg(any(fuzzing, test))]
579 pub const FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE: u64 = 2;
580 #[cfg(not(any(fuzzing, test)))]
581 const FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE: u64 = 2;
582
583 /// If we fail to see a funding transaction confirmed on-chain within this many blocks after the
584 /// channel creation on an inbound channel, we simply force-close and move on.
585 /// This constant is the one suggested in BOLT 2.
586 pub(crate) const FUNDING_CONF_DEADLINE_BLOCKS: u32 = 2016;
587
588 /// In case of a concurrent update_add_htlc proposed by our counterparty, we might
589 /// not have enough balance value remaining to cover the onchain cost of this new
590 /// HTLC weight. If this happens, our counterparty fails the reception of our
591 /// commitment_signed including this new HTLC due to infringement on the channel
592 /// reserve.
593 /// To prevent this case, we compute our outbound update_fee with an HTLC buffer of
594 /// size 2. However, if the number of concurrent update_add_htlc is higher, this still
595 /// leads to a channel force-close. Ultimately, this is an issue coming from the
596 /// design of LN state machines, allowing asynchronous updates.
597 pub(crate) const CONCURRENT_INBOUND_HTLC_FEE_BUFFER: u32 = 2;
598
599 /// When a channel is opened, we check that the funding amount is enough to pay for relevant
600 /// commitment transaction fees, with at least this many HTLCs present on the commitment
601 /// transaction (not counting the value of the HTLCs themselves).
602 pub(crate) const MIN_AFFORDABLE_HTLC_COUNT: usize = 4;
603
604 /// When a [`Channel`] has its [`ChannelConfig`] updated, its existing one is stashed for up to this
605 /// number of ticks to allow forwarding HTLCs by nodes that have yet to receive the new
606 /// ChannelUpdate prompted by the config update. This value was determined as follows:
607 ///
608 ///   * The expected interval between ticks (1 minute).
609 ///   * The average convergence delay of updates across the network, i.e., ~300 seconds on average
610 ///      for a node to see an update as seen on `<https://arxiv.org/pdf/2205.12737.pdf>`.
611 ///   * `EXPIRE_PREV_CONFIG_TICKS` = convergence_delay / tick_interval
612 pub(crate) const EXPIRE_PREV_CONFIG_TICKS: usize = 5;
613
614 /// The number of ticks that may elapse while we're waiting for a response to a
615 /// [`msgs::RevokeAndACK`] or [`msgs::ChannelReestablish`] message before we attempt to disconnect
616 /// them.
617 ///
618 /// See [`ChannelContext::sent_message_awaiting_response`] for more information.
619 pub(crate) const DISCONNECT_PEER_AWAITING_RESPONSE_TICKS: usize = 2;
620
621 /// The number of ticks that may elapse while we're waiting for an unfunded outbound/inbound channel
622 /// to be promoted to a [`Channel`] since the unfunded channel was created. An unfunded channel
623 /// exceeding this age limit will be force-closed and purged from memory.
624 pub(crate) const UNFUNDED_CHANNEL_AGE_LIMIT_TICKS: usize = 60;
625
626 /// Number of blocks needed for an output from a coinbase transaction to be spendable.
627 pub(crate) const COINBASE_MATURITY: u32 = 100;
628
629 struct PendingChannelMonitorUpdate {
630         update: ChannelMonitorUpdate,
631 }
632
633 impl_writeable_tlv_based!(PendingChannelMonitorUpdate, {
634         (0, update, required),
635 });
636
637 /// The `ChannelPhase` enum describes the current phase in life of a lightning channel with each of
638 /// its variants containing an appropriate channel struct.
639 pub(super) enum ChannelPhase<SP: Deref> where SP::Target: SignerProvider {
640         UnfundedOutboundV1(OutboundV1Channel<SP>),
641         UnfundedInboundV1(InboundV1Channel<SP>),
642         Funded(Channel<SP>),
643 }
644
645 impl<'a, SP: Deref> ChannelPhase<SP> where
646         SP::Target: SignerProvider,
647         <SP::Target as SignerProvider>::Signer: ChannelSigner,
648 {
649         pub fn context(&'a self) -> &'a ChannelContext<SP> {
650                 match self {
651                         ChannelPhase::Funded(chan) => &chan.context,
652                         ChannelPhase::UnfundedOutboundV1(chan) => &chan.context,
653                         ChannelPhase::UnfundedInboundV1(chan) => &chan.context,
654                 }
655         }
656
657         pub fn context_mut(&'a mut self) -> &'a mut ChannelContext<SP> {
658                 match self {
659                         ChannelPhase::Funded(ref mut chan) => &mut chan.context,
660                         ChannelPhase::UnfundedOutboundV1(ref mut chan) => &mut chan.context,
661                         ChannelPhase::UnfundedInboundV1(ref mut chan) => &mut chan.context,
662                 }
663         }
664 }
665
666 /// Contains all state common to unfunded inbound/outbound channels.
667 pub(super) struct UnfundedChannelContext {
668         /// A counter tracking how many ticks have elapsed since this unfunded channel was
669         /// created. If this unfunded channel reaches peer has yet to respond after reaching
670         /// `UNFUNDED_CHANNEL_AGE_LIMIT_TICKS`, it will be force-closed and purged from memory.
671         ///
672         /// This is so that we don't keep channels around that haven't progressed to a funded state
673         /// in a timely manner.
674         unfunded_channel_age_ticks: usize,
675 }
676
677 impl UnfundedChannelContext {
678         /// Determines whether we should force-close and purge this unfunded channel from memory due to it
679         /// having reached the unfunded channel age limit.
680         ///
681         /// This should be called on every [`super::channelmanager::ChannelManager::timer_tick_occurred`].
682         pub fn should_expire_unfunded_channel(&mut self) -> bool {
683                 self.unfunded_channel_age_ticks += 1;
684                 self.unfunded_channel_age_ticks >= UNFUNDED_CHANNEL_AGE_LIMIT_TICKS
685         }
686 }
687
688 /// Contains everything about the channel including state, and various flags.
689 pub(super) struct ChannelContext<SP: Deref> where SP::Target: SignerProvider {
690         config: LegacyChannelConfig,
691
692         // Track the previous `ChannelConfig` so that we can continue forwarding HTLCs that were
693         // constructed using it. The second element in the tuple corresponds to the number of ticks that
694         // have elapsed since the update occurred.
695         prev_config: Option<(ChannelConfig, usize)>,
696
697         inbound_handshake_limits_override: Option<ChannelHandshakeLimits>,
698
699         user_id: u128,
700
701         /// The current channel ID.
702         channel_id: ChannelId,
703         /// The temporary channel ID used during channel setup. Value kept even after transitioning to a final channel ID.
704         /// Will be `None` for channels created prior to 0.0.115.
705         temporary_channel_id: Option<ChannelId>,
706         channel_state: u32,
707
708         // When we reach max(6 blocks, minimum_depth), we need to send an AnnouncementSigs message to
709         // our peer. However, we want to make sure they received it, or else rebroadcast it when we
710         // next connect.
711         // We do so here, see `AnnouncementSigsSent` for more details on the state(s).
712         // Note that a number of our tests were written prior to the behavior here which retransmits
713         // AnnouncementSignatures until after an RAA completes, so the behavior is short-circuited in
714         // many tests.
715         #[cfg(any(test, feature = "_test_utils"))]
716         pub(crate) announcement_sigs_state: AnnouncementSigsState,
717         #[cfg(not(any(test, feature = "_test_utils")))]
718         announcement_sigs_state: AnnouncementSigsState,
719
720         secp_ctx: Secp256k1<secp256k1::All>,
721         channel_value_satoshis: u64,
722
723         latest_monitor_update_id: u64,
724
725         holder_signer: ChannelSignerType<<SP::Target as SignerProvider>::Signer>,
726         shutdown_scriptpubkey: Option<ShutdownScript>,
727         destination_script: Script,
728
729         // Our commitment numbers start at 2^48-1 and count down, whereas the ones used in transaction
730         // generation start at 0 and count up...this simplifies some parts of implementation at the
731         // cost of others, but should really just be changed.
732
733         cur_holder_commitment_transaction_number: u64,
734         cur_counterparty_commitment_transaction_number: u64,
735         value_to_self_msat: u64, // Excluding all pending_htlcs, fees, and anchor outputs
736         pending_inbound_htlcs: Vec<InboundHTLCOutput>,
737         pending_outbound_htlcs: Vec<OutboundHTLCOutput>,
738         holding_cell_htlc_updates: Vec<HTLCUpdateAwaitingACK>,
739
740         /// When resending CS/RAA messages on channel monitor restoration or on reconnect, we always
741         /// need to ensure we resend them in the order we originally generated them. Note that because
742         /// there can only ever be one in-flight CS and/or one in-flight RAA at any time, it is
743         /// sufficient to simply set this to the opposite of any message we are generating as we
744         /// generate it. ie when we generate a CS, we set this to RAAFirst as, if there is a pending
745         /// in-flight RAA to resend, it will have been the first thing we generated, and thus we should
746         /// send it first.
747         resend_order: RAACommitmentOrder,
748
749         monitor_pending_channel_ready: bool,
750         monitor_pending_revoke_and_ack: bool,
751         monitor_pending_commitment_signed: bool,
752
753         // TODO: If a channel is drop'd, we don't know whether the `ChannelMonitor` is ultimately
754         // responsible for some of the HTLCs here or not - we don't know whether the update in question
755         // completed or not. We currently ignore these fields entirely when force-closing a channel,
756         // but need to handle this somehow or we run the risk of losing HTLCs!
757         monitor_pending_forwards: Vec<(PendingHTLCInfo, u64)>,
758         monitor_pending_failures: Vec<(HTLCSource, PaymentHash, HTLCFailReason)>,
759         monitor_pending_finalized_fulfills: Vec<HTLCSource>,
760
761         /// If we went to send a commitment update (ie some messages then [`msgs::CommitmentSigned`])
762         /// but our signer (initially) refused to give us a signature, we should retry at some point in
763         /// the future when the signer indicates it may have a signature for us.
764         ///
765         /// This flag is set in such a case. Note that we don't need to persist this as we'll end up
766         /// setting it again as a side-effect of [`Channel::channel_reestablish`].
767         signer_pending_commitment_update: bool,
768         /// Similar to [`Self::signer_pending_commitment_update`] but we're waiting to send either a
769         /// [`msgs::FundingCreated`] or [`msgs::FundingSigned`] depending on if this channel is
770         /// outbound or inbound.
771         signer_pending_funding: bool,
772
773         // pending_update_fee is filled when sending and receiving update_fee.
774         //
775         // Because it follows the same commitment flow as HTLCs, `FeeUpdateState` is either `Outbound`
776         // or matches a subset of the `InboundHTLCOutput` variants. It is then updated/used when
777         // generating new commitment transactions with exactly the same criteria as inbound/outbound
778         // HTLCs with similar state.
779         pending_update_fee: Option<(u32, FeeUpdateState)>,
780         // If a `send_update_fee()` call is made with ChannelState::AwaitingRemoteRevoke set, we place
781         // it here instead of `pending_update_fee` in the same way as we place outbound HTLC updates in
782         // `holding_cell_htlc_updates` instead of `pending_outbound_htlcs`. It is released into
783         // `pending_update_fee` with the same criteria as outbound HTLC updates but can be updated by
784         // further `send_update_fee` calls, dropping the previous holding cell update entirely.
785         holding_cell_update_fee: Option<u32>,
786         next_holder_htlc_id: u64,
787         next_counterparty_htlc_id: u64,
788         feerate_per_kw: u32,
789
790         /// The timestamp set on our latest `channel_update` message for this channel. It is updated
791         /// when the channel is updated in ways which may impact the `channel_update` message or when a
792         /// new block is received, ensuring it's always at least moderately close to the current real
793         /// time.
794         update_time_counter: u32,
795
796         #[cfg(debug_assertions)]
797         /// Max to_local and to_remote outputs in a locally-generated commitment transaction
798         holder_max_commitment_tx_output: Mutex<(u64, u64)>,
799         #[cfg(debug_assertions)]
800         /// Max to_local and to_remote outputs in a remote-generated commitment transaction
801         counterparty_max_commitment_tx_output: Mutex<(u64, u64)>,
802
803         last_sent_closing_fee: Option<(u64, Signature)>, // (fee, holder_sig)
804         target_closing_feerate_sats_per_kw: Option<u32>,
805
806         /// If our counterparty sent us a closing_signed while we were waiting for a `ChannelMonitor`
807         /// update, we need to delay processing it until later. We do that here by simply storing the
808         /// closing_signed message and handling it in `maybe_propose_closing_signed`.
809         pending_counterparty_closing_signed: Option<msgs::ClosingSigned>,
810
811         /// The minimum and maximum absolute fee, in satoshis, we are willing to place on the closing
812         /// transaction. These are set once we reach `closing_negotiation_ready`.
813         #[cfg(test)]
814         pub(crate) closing_fee_limits: Option<(u64, u64)>,
815         #[cfg(not(test))]
816         closing_fee_limits: Option<(u64, u64)>,
817
818         /// The hash of the block in which the funding transaction was included.
819         funding_tx_confirmed_in: Option<BlockHash>,
820         funding_tx_confirmation_height: u32,
821         short_channel_id: Option<u64>,
822         /// Either the height at which this channel was created or the height at which it was last
823         /// serialized if it was serialized by versions prior to 0.0.103.
824         /// We use this to close if funding is never broadcasted.
825         channel_creation_height: u32,
826
827         counterparty_dust_limit_satoshis: u64,
828
829         #[cfg(test)]
830         pub(super) holder_dust_limit_satoshis: u64,
831         #[cfg(not(test))]
832         holder_dust_limit_satoshis: u64,
833
834         #[cfg(test)]
835         pub(super) counterparty_max_htlc_value_in_flight_msat: u64,
836         #[cfg(not(test))]
837         counterparty_max_htlc_value_in_flight_msat: u64,
838
839         #[cfg(test)]
840         pub(super) holder_max_htlc_value_in_flight_msat: u64,
841         #[cfg(not(test))]
842         holder_max_htlc_value_in_flight_msat: u64,
843
844         /// minimum channel reserve for self to maintain - set by them.
845         counterparty_selected_channel_reserve_satoshis: Option<u64>,
846
847         #[cfg(test)]
848         pub(super) holder_selected_channel_reserve_satoshis: u64,
849         #[cfg(not(test))]
850         holder_selected_channel_reserve_satoshis: u64,
851
852         counterparty_htlc_minimum_msat: u64,
853         holder_htlc_minimum_msat: u64,
854         #[cfg(test)]
855         pub counterparty_max_accepted_htlcs: u16,
856         #[cfg(not(test))]
857         counterparty_max_accepted_htlcs: u16,
858         holder_max_accepted_htlcs: u16,
859         minimum_depth: Option<u32>,
860
861         counterparty_forwarding_info: Option<CounterpartyForwardingInfo>,
862
863         pub(crate) channel_transaction_parameters: ChannelTransactionParameters,
864         funding_transaction: Option<Transaction>,
865         is_batch_funding: Option<()>,
866
867         counterparty_cur_commitment_point: Option<PublicKey>,
868         counterparty_prev_commitment_point: Option<PublicKey>,
869         counterparty_node_id: PublicKey,
870
871         counterparty_shutdown_scriptpubkey: Option<Script>,
872
873         commitment_secrets: CounterpartyCommitmentSecrets,
874
875         channel_update_status: ChannelUpdateStatus,
876         /// Once we reach `closing_negotiation_ready`, we set this, indicating if closing_signed does
877         /// not complete within a single timer tick (one minute), we should force-close the channel.
878         /// This prevents us from keeping unusable channels around forever if our counterparty wishes
879         /// to DoS us.
880         /// Note that this field is reset to false on deserialization to give us a chance to connect to
881         /// our peer and start the closing_signed negotiation fresh.
882         closing_signed_in_flight: bool,
883
884         /// Our counterparty's channel_announcement signatures provided in announcement_signatures.
885         /// This can be used to rebroadcast the channel_announcement message later.
886         announcement_sigs: Option<(Signature, Signature)>,
887
888         // We save these values so we can make sure `next_local_commit_tx_fee_msat` and
889         // `next_remote_commit_tx_fee_msat` properly predict what the next commitment transaction fee will
890         // be, by comparing the cached values to the fee of the tranaction generated by
891         // `build_commitment_transaction`.
892         #[cfg(any(test, fuzzing))]
893         next_local_commitment_tx_fee_info_cached: Mutex<Option<CommitmentTxInfoCached>>,
894         #[cfg(any(test, fuzzing))]
895         next_remote_commitment_tx_fee_info_cached: Mutex<Option<CommitmentTxInfoCached>>,
896
897         /// lnd has a long-standing bug where, upon reconnection, if the channel is not yet confirmed
898         /// they will not send a channel_reestablish until the channel locks in. Then, they will send a
899         /// channel_ready *before* sending the channel_reestablish (which is clearly a violation of
900         /// the BOLT specs). We copy c-lightning's workaround here and simply store the channel_ready
901         /// message until we receive a channel_reestablish.
902         ///
903         /// See-also <https://github.com/lightningnetwork/lnd/issues/4006>
904         pub workaround_lnd_bug_4006: Option<msgs::ChannelReady>,
905
906         /// An option set when we wish to track how many ticks have elapsed while waiting for a response
907         /// from our counterparty after sending a message. If the peer has yet to respond after reaching
908         /// `DISCONNECT_PEER_AWAITING_RESPONSE_TICKS`, a reconnection should be attempted to try to
909         /// unblock the state machine.
910         ///
911         /// This behavior is mostly motivated by a lnd bug in which we don't receive a message we expect
912         /// to in a timely manner, which may lead to channels becoming unusable and/or force-closed. An
913         /// example of such can be found at <https://github.com/lightningnetwork/lnd/issues/7682>.
914         ///
915         /// This is currently only used when waiting for a [`msgs::ChannelReestablish`] or
916         /// [`msgs::RevokeAndACK`] message from the counterparty.
917         sent_message_awaiting_response: Option<usize>,
918
919         #[cfg(any(test, fuzzing))]
920         // When we receive an HTLC fulfill on an outbound path, we may immediately fulfill the
921         // corresponding HTLC on the inbound path. If, then, the outbound path channel is
922         // disconnected and reconnected (before we've exchange commitment_signed and revoke_and_ack
923         // messages), they may re-broadcast their update_fulfill_htlc, causing a duplicate claim. This
924         // is fine, but as a sanity check in our failure to generate the second claim, we check here
925         // that the original was a claim, and that we aren't now trying to fulfill a failed HTLC.
926         historical_inbound_htlc_fulfills: HashSet<u64>,
927
928         /// This channel's type, as negotiated during channel open
929         channel_type: ChannelTypeFeatures,
930
931         // Our counterparty can offer us SCID aliases which they will map to this channel when routing
932         // outbound payments. These can be used in invoice route hints to avoid explicitly revealing
933         // the channel's funding UTXO.
934         //
935         // We also use this when sending our peer a channel_update that isn't to be broadcasted
936         // publicly - allowing them to re-use their map of SCID -> channel for channel_update ->
937         // associated channel mapping.
938         //
939         // We only bother storing the most recent SCID alias at any time, though our counterparty has
940         // to store all of them.
941         latest_inbound_scid_alias: Option<u64>,
942
943         // We always offer our counterparty a static SCID alias, which we recognize as for this channel
944         // if we see it in HTLC forwarding instructions. We don't bother rotating the alias given we
945         // don't currently support node id aliases and eventually privacy should be provided with
946         // blinded paths instead of simple scid+node_id aliases.
947         outbound_scid_alias: u64,
948
949         // We track whether we already emitted a `ChannelPending` event.
950         channel_pending_event_emitted: bool,
951
952         // We track whether we already emitted a `ChannelReady` event.
953         channel_ready_event_emitted: bool,
954
955         /// The unique identifier used to re-derive the private key material for the channel through
956         /// [`SignerProvider::derive_channel_signer`].
957         channel_keys_id: [u8; 32],
958
959         /// If we can't release a [`ChannelMonitorUpdate`] until some external action completes, we
960         /// store it here and only release it to the `ChannelManager` once it asks for it.
961         blocked_monitor_updates: Vec<PendingChannelMonitorUpdate>,
962 }
963
964 impl<SP: Deref> ChannelContext<SP> where SP::Target: SignerProvider  {
965         /// Allowed in any state (including after shutdown)
966         pub fn get_update_time_counter(&self) -> u32 {
967                 self.update_time_counter
968         }
969
970         pub fn get_latest_monitor_update_id(&self) -> u64 {
971                 self.latest_monitor_update_id
972         }
973
974         pub fn should_announce(&self) -> bool {
975                 self.config.announced_channel
976         }
977
978         pub fn is_outbound(&self) -> bool {
979                 self.channel_transaction_parameters.is_outbound_from_holder
980         }
981
982         /// Gets the fee we'd want to charge for adding an HTLC output to this Channel
983         /// Allowed in any state (including after shutdown)
984         pub fn get_outbound_forwarding_fee_base_msat(&self) -> u32 {
985                 self.config.options.forwarding_fee_base_msat
986         }
987
988         /// Returns true if we've ever received a message from the remote end for this Channel
989         pub fn have_received_message(&self) -> bool {
990                 self.channel_state & !STATE_FLAGS > (ChannelState::OurInitSent as u32)
991         }
992
993         /// Returns true if this channel is fully established and not known to be closing.
994         /// Allowed in any state (including after shutdown)
995         pub fn is_usable(&self) -> bool {
996                 let mask = ChannelState::ChannelReady as u32 | BOTH_SIDES_SHUTDOWN_MASK;
997                 (self.channel_state & mask) == (ChannelState::ChannelReady as u32) && !self.monitor_pending_channel_ready
998         }
999
1000         /// shutdown state returns the state of the channel in its various stages of shutdown
1001         pub fn shutdown_state(&self) -> ChannelShutdownState {
1002                 if self.channel_state & (ChannelState::ShutdownComplete as u32) != 0 {
1003                         return ChannelShutdownState::ShutdownComplete;
1004                 }
1005                 if self.channel_state & (ChannelState::LocalShutdownSent as u32) != 0 &&  self.channel_state & (ChannelState::RemoteShutdownSent as u32) == 0 {
1006                         return ChannelShutdownState::ShutdownInitiated;
1007                 }
1008                 if (self.channel_state & BOTH_SIDES_SHUTDOWN_MASK != 0) && !self.closing_negotiation_ready() {
1009                         return ChannelShutdownState::ResolvingHTLCs;
1010                 }
1011                 if (self.channel_state & BOTH_SIDES_SHUTDOWN_MASK != 0) && self.closing_negotiation_ready() {
1012                         return ChannelShutdownState::NegotiatingClosingFee;
1013                 }
1014                 return ChannelShutdownState::NotShuttingDown;
1015         }
1016
1017         fn closing_negotiation_ready(&self) -> bool {
1018                 self.pending_inbound_htlcs.is_empty() &&
1019                 self.pending_outbound_htlcs.is_empty() &&
1020                 self.pending_update_fee.is_none() &&
1021                 self.channel_state &
1022                 (BOTH_SIDES_SHUTDOWN_MASK |
1023                         ChannelState::AwaitingRemoteRevoke as u32 |
1024                         ChannelState::PeerDisconnected as u32 |
1025                         ChannelState::MonitorUpdateInProgress as u32) == BOTH_SIDES_SHUTDOWN_MASK
1026         }
1027
1028         /// Returns true if this channel is currently available for use. This is a superset of
1029         /// is_usable() and considers things like the channel being temporarily disabled.
1030         /// Allowed in any state (including after shutdown)
1031         pub fn is_live(&self) -> bool {
1032                 self.is_usable() && (self.channel_state & (ChannelState::PeerDisconnected as u32) == 0)
1033         }
1034
1035         // Public utilities:
1036
1037         pub fn channel_id(&self) -> ChannelId {
1038                 self.channel_id
1039         }
1040
1041         // Return the `temporary_channel_id` used during channel establishment.
1042         //
1043         // Will return `None` for channels created prior to LDK version 0.0.115.
1044         pub fn temporary_channel_id(&self) -> Option<ChannelId> {
1045                 self.temporary_channel_id
1046         }
1047
1048         pub fn minimum_depth(&self) -> Option<u32> {
1049                 self.minimum_depth
1050         }
1051
1052         /// Gets the "user_id" value passed into the construction of this channel. It has no special
1053         /// meaning and exists only to allow users to have a persistent identifier of a channel.
1054         pub fn get_user_id(&self) -> u128 {
1055                 self.user_id
1056         }
1057
1058         /// Gets the channel's type
1059         pub fn get_channel_type(&self) -> &ChannelTypeFeatures {
1060                 &self.channel_type
1061         }
1062
1063         /// Gets the channel's `short_channel_id`.
1064         ///
1065         /// Will return `None` if the channel hasn't been confirmed yet.
1066         pub fn get_short_channel_id(&self) -> Option<u64> {
1067                 self.short_channel_id
1068         }
1069
1070         /// Allowed in any state (including after shutdown)
1071         pub fn latest_inbound_scid_alias(&self) -> Option<u64> {
1072                 self.latest_inbound_scid_alias
1073         }
1074
1075         /// Allowed in any state (including after shutdown)
1076         pub fn outbound_scid_alias(&self) -> u64 {
1077                 self.outbound_scid_alias
1078         }
1079
1080         /// Only allowed immediately after deserialization if get_outbound_scid_alias returns 0,
1081         /// indicating we were written by LDK prior to 0.0.106 which did not set outbound SCID aliases
1082         /// or prior to any channel actions during `Channel` initialization.
1083         pub fn set_outbound_scid_alias(&mut self, outbound_scid_alias: u64) {
1084                 debug_assert_eq!(self.outbound_scid_alias, 0);
1085                 self.outbound_scid_alias = outbound_scid_alias;
1086         }
1087
1088         /// Returns the funding_txo we either got from our peer, or were given by
1089         /// get_funding_created.
1090         pub fn get_funding_txo(&self) -> Option<OutPoint> {
1091                 self.channel_transaction_parameters.funding_outpoint
1092         }
1093
1094         /// Returns the block hash in which our funding transaction was confirmed.
1095         pub fn get_funding_tx_confirmed_in(&self) -> Option<BlockHash> {
1096                 self.funding_tx_confirmed_in
1097         }
1098
1099         /// Returns the current number of confirmations on the funding transaction.
1100         pub fn get_funding_tx_confirmations(&self, height: u32) -> u32 {
1101                 if self.funding_tx_confirmation_height == 0 {
1102                         // We either haven't seen any confirmation yet, or observed a reorg.
1103                         return 0;
1104                 }
1105
1106                 height.checked_sub(self.funding_tx_confirmation_height).map_or(0, |c| c + 1)
1107         }
1108
1109         fn get_holder_selected_contest_delay(&self) -> u16 {
1110                 self.channel_transaction_parameters.holder_selected_contest_delay
1111         }
1112
1113         fn get_holder_pubkeys(&self) -> &ChannelPublicKeys {
1114                 &self.channel_transaction_parameters.holder_pubkeys
1115         }
1116
1117         pub fn get_counterparty_selected_contest_delay(&self) -> Option<u16> {
1118                 self.channel_transaction_parameters.counterparty_parameters
1119                         .as_ref().map(|params| params.selected_contest_delay)
1120         }
1121
1122         fn get_counterparty_pubkeys(&self) -> &ChannelPublicKeys {
1123                 &self.channel_transaction_parameters.counterparty_parameters.as_ref().unwrap().pubkeys
1124         }
1125
1126         /// Allowed in any state (including after shutdown)
1127         pub fn get_counterparty_node_id(&self) -> PublicKey {
1128                 self.counterparty_node_id
1129         }
1130
1131         /// Allowed in any state (including after shutdown)
1132         pub fn get_holder_htlc_minimum_msat(&self) -> u64 {
1133                 self.holder_htlc_minimum_msat
1134         }
1135
1136         /// Allowed in any state (including after shutdown), but will return none before TheirInitSent
1137         pub fn get_holder_htlc_maximum_msat(&self) -> Option<u64> {
1138                 self.get_htlc_maximum_msat(self.holder_max_htlc_value_in_flight_msat)
1139         }
1140
1141         /// Allowed in any state (including after shutdown)
1142         pub fn get_announced_htlc_max_msat(&self) -> u64 {
1143                 return cmp::min(
1144                         // Upper bound by capacity. We make it a bit less than full capacity to prevent attempts
1145                         // to use full capacity. This is an effort to reduce routing failures, because in many cases
1146                         // channel might have been used to route very small values (either by honest users or as DoS).
1147                         self.channel_value_satoshis * 1000 * 9 / 10,
1148
1149                         self.counterparty_max_htlc_value_in_flight_msat
1150                 );
1151         }
1152
1153         /// Allowed in any state (including after shutdown)
1154         pub fn get_counterparty_htlc_minimum_msat(&self) -> u64 {
1155                 self.counterparty_htlc_minimum_msat
1156         }
1157
1158         /// Allowed in any state (including after shutdown), but will return none before TheirInitSent
1159         pub fn get_counterparty_htlc_maximum_msat(&self) -> Option<u64> {
1160                 self.get_htlc_maximum_msat(self.counterparty_max_htlc_value_in_flight_msat)
1161         }
1162
1163         fn get_htlc_maximum_msat(&self, party_max_htlc_value_in_flight_msat: u64) -> Option<u64> {
1164                 self.counterparty_selected_channel_reserve_satoshis.map(|counterparty_reserve| {
1165                         let holder_reserve = self.holder_selected_channel_reserve_satoshis;
1166                         cmp::min(
1167                                 (self.channel_value_satoshis - counterparty_reserve - holder_reserve) * 1000,
1168                                 party_max_htlc_value_in_flight_msat
1169                         )
1170                 })
1171         }
1172
1173         pub fn get_value_satoshis(&self) -> u64 {
1174                 self.channel_value_satoshis
1175         }
1176
1177         pub fn get_fee_proportional_millionths(&self) -> u32 {
1178                 self.config.options.forwarding_fee_proportional_millionths
1179         }
1180
1181         pub fn get_cltv_expiry_delta(&self) -> u16 {
1182                 cmp::max(self.config.options.cltv_expiry_delta, MIN_CLTV_EXPIRY_DELTA)
1183         }
1184
1185         pub fn get_max_dust_htlc_exposure_msat<F: Deref>(&self,
1186                 fee_estimator: &LowerBoundedFeeEstimator<F>) -> u64
1187         where F::Target: FeeEstimator
1188         {
1189                 match self.config.options.max_dust_htlc_exposure {
1190                         MaxDustHTLCExposure::FeeRateMultiplier(multiplier) => {
1191                                 let feerate_per_kw = fee_estimator.bounded_sat_per_1000_weight(
1192                                         ConfirmationTarget::OnChainSweep);
1193                                 feerate_per_kw as u64 * multiplier
1194                         },
1195                         MaxDustHTLCExposure::FixedLimitMsat(limit) => limit,
1196                 }
1197         }
1198
1199         /// Returns the previous [`ChannelConfig`] applied to this channel, if any.
1200         pub fn prev_config(&self) -> Option<ChannelConfig> {
1201                 self.prev_config.map(|prev_config| prev_config.0)
1202         }
1203
1204         // Checks whether we should emit a `ChannelPending` event.
1205         pub(crate) fn should_emit_channel_pending_event(&mut self) -> bool {
1206                 self.is_funding_broadcast() && !self.channel_pending_event_emitted
1207         }
1208
1209         // Returns whether we already emitted a `ChannelPending` event.
1210         pub(crate) fn channel_pending_event_emitted(&self) -> bool {
1211                 self.channel_pending_event_emitted
1212         }
1213
1214         // Remembers that we already emitted a `ChannelPending` event.
1215         pub(crate) fn set_channel_pending_event_emitted(&mut self) {
1216                 self.channel_pending_event_emitted = true;
1217         }
1218
1219         // Checks whether we should emit a `ChannelReady` event.
1220         pub(crate) fn should_emit_channel_ready_event(&mut self) -> bool {
1221                 self.is_usable() && !self.channel_ready_event_emitted
1222         }
1223
1224         // Remembers that we already emitted a `ChannelReady` event.
1225         pub(crate) fn set_channel_ready_event_emitted(&mut self) {
1226                 self.channel_ready_event_emitted = true;
1227         }
1228
1229         /// Tracks the number of ticks elapsed since the previous [`ChannelConfig`] was updated. Once
1230         /// [`EXPIRE_PREV_CONFIG_TICKS`] is reached, the previous config is considered expired and will
1231         /// no longer be considered when forwarding HTLCs.
1232         pub fn maybe_expire_prev_config(&mut self) {
1233                 if self.prev_config.is_none() {
1234                         return;
1235                 }
1236                 let prev_config = self.prev_config.as_mut().unwrap();
1237                 prev_config.1 += 1;
1238                 if prev_config.1 == EXPIRE_PREV_CONFIG_TICKS {
1239                         self.prev_config = None;
1240                 }
1241         }
1242
1243         /// Returns the current [`ChannelConfig`] applied to the channel.
1244         pub fn config(&self) -> ChannelConfig {
1245                 self.config.options
1246         }
1247
1248         /// Updates the channel's config. A bool is returned indicating whether the config update
1249         /// applied resulted in a new ChannelUpdate message.
1250         pub fn update_config(&mut self, config: &ChannelConfig) -> bool {
1251                 let did_channel_update =
1252                         self.config.options.forwarding_fee_proportional_millionths != config.forwarding_fee_proportional_millionths ||
1253                         self.config.options.forwarding_fee_base_msat != config.forwarding_fee_base_msat ||
1254                         self.config.options.cltv_expiry_delta != config.cltv_expiry_delta;
1255                 if did_channel_update {
1256                         self.prev_config = Some((self.config.options, 0));
1257                         // Update the counter, which backs the ChannelUpdate timestamp, to allow the relay
1258                         // policy change to propagate throughout the network.
1259                         self.update_time_counter += 1;
1260                 }
1261                 self.config.options = *config;
1262                 did_channel_update
1263         }
1264
1265         /// Returns true if funding_signed was sent/received and the
1266         /// funding transaction has been broadcast if necessary.
1267         pub fn is_funding_broadcast(&self) -> bool {
1268                 self.channel_state & !STATE_FLAGS >= ChannelState::FundingSent as u32 &&
1269                         self.channel_state & ChannelState::WaitingForBatch as u32 == 0
1270         }
1271
1272         /// Transaction nomenclature is somewhat confusing here as there are many different cases - a
1273         /// transaction is referred to as "a's transaction" implying that a will be able to broadcast
1274         /// the transaction. Thus, b will generally be sending a signature over such a transaction to
1275         /// a, and a can revoke the transaction by providing b the relevant per_commitment_secret. As
1276         /// such, a transaction is generally the result of b increasing the amount paid to a (or adding
1277         /// an HTLC to a).
1278         /// @local is used only to convert relevant internal structures which refer to remote vs local
1279         /// to decide value of outputs and direction of HTLCs.
1280         /// @generated_by_local is used to determine *which* HTLCs to include - noting that the HTLC
1281         /// state may indicate that one peer has informed the other that they'd like to add an HTLC but
1282         /// have not yet committed it. Such HTLCs will only be included in transactions which are being
1283         /// generated by the peer which proposed adding the HTLCs, and thus we need to understand both
1284         /// which peer generated this transaction and "to whom" this transaction flows.
1285         #[inline]
1286         fn build_commitment_transaction<L: Deref>(&self, commitment_number: u64, keys: &TxCreationKeys, local: bool, generated_by_local: bool, logger: &L) -> CommitmentStats
1287                 where L::Target: Logger
1288         {
1289                 let mut included_dust_htlcs: Vec<(HTLCOutputInCommitment, Option<&HTLCSource>)> = Vec::new();
1290                 let num_htlcs = self.pending_inbound_htlcs.len() + self.pending_outbound_htlcs.len();
1291                 let mut included_non_dust_htlcs: Vec<(HTLCOutputInCommitment, Option<&HTLCSource>)> = Vec::with_capacity(num_htlcs);
1292
1293                 let broadcaster_dust_limit_satoshis = if local { self.holder_dust_limit_satoshis } else { self.counterparty_dust_limit_satoshis };
1294                 let mut remote_htlc_total_msat = 0;
1295                 let mut local_htlc_total_msat = 0;
1296                 let mut value_to_self_msat_offset = 0;
1297
1298                 let mut feerate_per_kw = self.feerate_per_kw;
1299                 if let Some((feerate, update_state)) = self.pending_update_fee {
1300                         if match update_state {
1301                                 // Note that these match the inclusion criteria when scanning
1302                                 // pending_inbound_htlcs below.
1303                                 FeeUpdateState::RemoteAnnounced => { debug_assert!(!self.is_outbound()); !generated_by_local },
1304                                 FeeUpdateState::AwaitingRemoteRevokeToAnnounce => { debug_assert!(!self.is_outbound()); !generated_by_local },
1305                                 FeeUpdateState::Outbound => { assert!(self.is_outbound());  generated_by_local },
1306                         } {
1307                                 feerate_per_kw = feerate;
1308                         }
1309                 }
1310
1311                 log_trace!(logger, "Building commitment transaction number {} (really {} xor {}) for channel {} for {}, generated by {} with fee {}...",
1312                         commitment_number, (INITIAL_COMMITMENT_NUMBER - commitment_number),
1313                         get_commitment_transaction_number_obscure_factor(&self.get_holder_pubkeys().payment_point, &self.get_counterparty_pubkeys().payment_point, self.is_outbound()),
1314                         &self.channel_id,
1315                         if local { "us" } else { "remote" }, if generated_by_local { "us" } else { "remote" }, feerate_per_kw);
1316
1317                 macro_rules! get_htlc_in_commitment {
1318                         ($htlc: expr, $offered: expr) => {
1319                                 HTLCOutputInCommitment {
1320                                         offered: $offered,
1321                                         amount_msat: $htlc.amount_msat,
1322                                         cltv_expiry: $htlc.cltv_expiry,
1323                                         payment_hash: $htlc.payment_hash,
1324                                         transaction_output_index: None
1325                                 }
1326                         }
1327                 }
1328
1329                 macro_rules! add_htlc_output {
1330                         ($htlc: expr, $outbound: expr, $source: expr, $state_name: expr) => {
1331                                 if $outbound == local { // "offered HTLC output"
1332                                         let htlc_in_tx = get_htlc_in_commitment!($htlc, true);
1333                                         let htlc_tx_fee = if self.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1334                                                 0
1335                                         } else {
1336                                                 feerate_per_kw as u64 * htlc_timeout_tx_weight(self.get_channel_type()) / 1000
1337                                         };
1338                                         if $htlc.amount_msat / 1000 >= broadcaster_dust_limit_satoshis + htlc_tx_fee {
1339                                                 log_trace!(logger, "   ...including {} {} HTLC {} (hash {}) with value {}", if $outbound { "outbound" } else { "inbound" }, $state_name, $htlc.htlc_id, &$htlc.payment_hash, $htlc.amount_msat);
1340                                                 included_non_dust_htlcs.push((htlc_in_tx, $source));
1341                                         } else {
1342                                                 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);
1343                                                 included_dust_htlcs.push((htlc_in_tx, $source));
1344                                         }
1345                                 } else {
1346                                         let htlc_in_tx = get_htlc_in_commitment!($htlc, false);
1347                                         let htlc_tx_fee = if self.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1348                                                 0
1349                                         } else {
1350                                                 feerate_per_kw as u64 * htlc_success_tx_weight(self.get_channel_type()) / 1000
1351                                         };
1352                                         if $htlc.amount_msat / 1000 >= broadcaster_dust_limit_satoshis + htlc_tx_fee {
1353                                                 log_trace!(logger, "   ...including {} {} HTLC {} (hash {}) with value {}", if $outbound { "outbound" } else { "inbound" }, $state_name, $htlc.htlc_id, &$htlc.payment_hash, $htlc.amount_msat);
1354                                                 included_non_dust_htlcs.push((htlc_in_tx, $source));
1355                                         } else {
1356                                                 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);
1357                                                 included_dust_htlcs.push((htlc_in_tx, $source));
1358                                         }
1359                                 }
1360                         }
1361                 }
1362
1363                 for ref htlc in self.pending_inbound_htlcs.iter() {
1364                         let (include, state_name) = match htlc.state {
1365                                 InboundHTLCState::RemoteAnnounced(_) => (!generated_by_local, "RemoteAnnounced"),
1366                                 InboundHTLCState::AwaitingRemoteRevokeToAnnounce(_) => (!generated_by_local, "AwaitingRemoteRevokeToAnnounce"),
1367                                 InboundHTLCState::AwaitingAnnouncedRemoteRevoke(_) => (true, "AwaitingAnnouncedRemoteRevoke"),
1368                                 InboundHTLCState::Committed => (true, "Committed"),
1369                                 InboundHTLCState::LocalRemoved(_) => (!generated_by_local, "LocalRemoved"),
1370                         };
1371
1372                         if include {
1373                                 add_htlc_output!(htlc, false, None, state_name);
1374                                 remote_htlc_total_msat += htlc.amount_msat;
1375                         } else {
1376                                 log_trace!(logger, "   ...not including inbound HTLC {} (hash {}) with value {} due to state ({})", htlc.htlc_id, &htlc.payment_hash, htlc.amount_msat, state_name);
1377                                 match &htlc.state {
1378                                         &InboundHTLCState::LocalRemoved(ref reason) => {
1379                                                 if generated_by_local {
1380                                                         if let &InboundHTLCRemovalReason::Fulfill(_) = reason {
1381                                                                 value_to_self_msat_offset += htlc.amount_msat as i64;
1382                                                         }
1383                                                 }
1384                                         },
1385                                         _ => {},
1386                                 }
1387                         }
1388                 }
1389
1390                 let mut preimages: Vec<PaymentPreimage> = Vec::new();
1391
1392                 for ref htlc in self.pending_outbound_htlcs.iter() {
1393                         let (include, state_name) = match htlc.state {
1394                                 OutboundHTLCState::LocalAnnounced(_) => (generated_by_local, "LocalAnnounced"),
1395                                 OutboundHTLCState::Committed => (true, "Committed"),
1396                                 OutboundHTLCState::RemoteRemoved(_) => (generated_by_local, "RemoteRemoved"),
1397                                 OutboundHTLCState::AwaitingRemoteRevokeToRemove(_) => (generated_by_local, "AwaitingRemoteRevokeToRemove"),
1398                                 OutboundHTLCState::AwaitingRemovedRemoteRevoke(_) => (false, "AwaitingRemovedRemoteRevoke"),
1399                         };
1400
1401                         let preimage_opt = match htlc.state {
1402                                 OutboundHTLCState::RemoteRemoved(OutboundHTLCOutcome::Success(p)) => p,
1403                                 OutboundHTLCState::AwaitingRemoteRevokeToRemove(OutboundHTLCOutcome::Success(p)) => p,
1404                                 OutboundHTLCState::AwaitingRemovedRemoteRevoke(OutboundHTLCOutcome::Success(p)) => p,
1405                                 _ => None,
1406                         };
1407
1408                         if let Some(preimage) = preimage_opt {
1409                                 preimages.push(preimage);
1410                         }
1411
1412                         if include {
1413                                 add_htlc_output!(htlc, true, Some(&htlc.source), state_name);
1414                                 local_htlc_total_msat += htlc.amount_msat;
1415                         } else {
1416                                 log_trace!(logger, "   ...not including outbound HTLC {} (hash {}) with value {} due to state ({})", htlc.htlc_id, &htlc.payment_hash, htlc.amount_msat, state_name);
1417                                 match htlc.state {
1418                                         OutboundHTLCState::AwaitingRemoteRevokeToRemove(OutboundHTLCOutcome::Success(_))|OutboundHTLCState::AwaitingRemovedRemoteRevoke(OutboundHTLCOutcome::Success(_)) => {
1419                                                 value_to_self_msat_offset -= htlc.amount_msat as i64;
1420                                         },
1421                                         OutboundHTLCState::RemoteRemoved(OutboundHTLCOutcome::Success(_)) => {
1422                                                 if !generated_by_local {
1423                                                         value_to_self_msat_offset -= htlc.amount_msat as i64;
1424                                                 }
1425                                         },
1426                                         _ => {},
1427                                 }
1428                         }
1429                 }
1430
1431                 let mut value_to_self_msat: i64 = (self.value_to_self_msat - local_htlc_total_msat) as i64 + value_to_self_msat_offset;
1432                 assert!(value_to_self_msat >= 0);
1433                 // Note that in case they have several just-awaiting-last-RAA fulfills in-progress (ie
1434                 // AwaitingRemoteRevokeToRemove or AwaitingRemovedRemoteRevoke) we may have allowed them to
1435                 // "violate" their reserve value by couting those against it. Thus, we have to convert
1436                 // everything to i64 before subtracting as otherwise we can overflow.
1437                 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;
1438                 assert!(value_to_remote_msat >= 0);
1439
1440                 #[cfg(debug_assertions)]
1441                 {
1442                         // Make sure that the to_self/to_remote is always either past the appropriate
1443                         // channel_reserve *or* it is making progress towards it.
1444                         let mut broadcaster_max_commitment_tx_output = if generated_by_local {
1445                                 self.holder_max_commitment_tx_output.lock().unwrap()
1446                         } else {
1447                                 self.counterparty_max_commitment_tx_output.lock().unwrap()
1448                         };
1449                         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);
1450                         broadcaster_max_commitment_tx_output.0 = cmp::max(broadcaster_max_commitment_tx_output.0, value_to_self_msat as u64);
1451                         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);
1452                         broadcaster_max_commitment_tx_output.1 = cmp::max(broadcaster_max_commitment_tx_output.1, value_to_remote_msat as u64);
1453                 }
1454
1455                 let total_fee_sat = commit_tx_fee_sat(feerate_per_kw, included_non_dust_htlcs.len(), &self.channel_transaction_parameters.channel_type_features);
1456                 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;
1457                 let (value_to_self, value_to_remote) = if self.is_outbound() {
1458                         (value_to_self_msat / 1000 - anchors_val - total_fee_sat as i64, value_to_remote_msat / 1000)
1459                 } else {
1460                         (value_to_self_msat / 1000, value_to_remote_msat / 1000 - anchors_val - total_fee_sat as i64)
1461                 };
1462
1463                 let mut value_to_a = if local { value_to_self } else { value_to_remote };
1464                 let mut value_to_b = if local { value_to_remote } else { value_to_self };
1465                 let (funding_pubkey_a, funding_pubkey_b) = if local {
1466                         (self.get_holder_pubkeys().funding_pubkey, self.get_counterparty_pubkeys().funding_pubkey)
1467                 } else {
1468                         (self.get_counterparty_pubkeys().funding_pubkey, self.get_holder_pubkeys().funding_pubkey)
1469                 };
1470
1471                 if value_to_a >= (broadcaster_dust_limit_satoshis as i64) {
1472                         log_trace!(logger, "   ...including {} output with value {}", if local { "to_local" } else { "to_remote" }, value_to_a);
1473                 } else {
1474                         value_to_a = 0;
1475                 }
1476
1477                 if value_to_b >= (broadcaster_dust_limit_satoshis as i64) {
1478                         log_trace!(logger, "   ...including {} output with value {}", if local { "to_remote" } else { "to_local" }, value_to_b);
1479                 } else {
1480                         value_to_b = 0;
1481                 }
1482
1483                 let num_nondust_htlcs = included_non_dust_htlcs.len();
1484
1485                 let channel_parameters =
1486                         if local { self.channel_transaction_parameters.as_holder_broadcastable() }
1487                         else { self.channel_transaction_parameters.as_counterparty_broadcastable() };
1488                 let tx = CommitmentTransaction::new_with_auxiliary_htlc_data(commitment_number,
1489                                                                              value_to_a as u64,
1490                                                                              value_to_b as u64,
1491                                                                              funding_pubkey_a,
1492                                                                              funding_pubkey_b,
1493                                                                              keys.clone(),
1494                                                                              feerate_per_kw,
1495                                                                              &mut included_non_dust_htlcs,
1496                                                                              &channel_parameters
1497                 );
1498                 let mut htlcs_included = included_non_dust_htlcs;
1499                 // The unwrap is safe, because all non-dust HTLCs have been assigned an output index
1500                 htlcs_included.sort_unstable_by_key(|h| h.0.transaction_output_index.unwrap());
1501                 htlcs_included.append(&mut included_dust_htlcs);
1502
1503                 // For the stats, trimmed-to-0 the value in msats accordingly
1504                 value_to_self_msat = if (value_to_self_msat * 1000) < broadcaster_dust_limit_satoshis as i64 { 0 } else { value_to_self_msat };
1505                 value_to_remote_msat = if (value_to_remote_msat * 1000) < broadcaster_dust_limit_satoshis as i64 { 0 } else { value_to_remote_msat };
1506
1507                 CommitmentStats {
1508                         tx,
1509                         feerate_per_kw,
1510                         total_fee_sat,
1511                         num_nondust_htlcs,
1512                         htlcs_included,
1513                         local_balance_msat: value_to_self_msat as u64,
1514                         remote_balance_msat: value_to_remote_msat as u64,
1515                         preimages
1516                 }
1517         }
1518
1519         #[inline]
1520         /// Creates a set of keys for build_commitment_transaction to generate a transaction which our
1521         /// counterparty will sign (ie DO NOT send signatures over a transaction created by this to
1522         /// our counterparty!)
1523         /// The result is a transaction which we can revoke broadcastership of (ie a "local" transaction)
1524         /// TODO Some magic rust shit to compile-time check this?
1525         fn build_holder_transaction_keys(&self, commitment_number: u64) -> TxCreationKeys {
1526                 let per_commitment_point = self.holder_signer.as_ref().get_per_commitment_point(commitment_number, &self.secp_ctx);
1527                 let delayed_payment_base = &self.get_holder_pubkeys().delayed_payment_basepoint;
1528                 let htlc_basepoint = &self.get_holder_pubkeys().htlc_basepoint;
1529                 let counterparty_pubkeys = self.get_counterparty_pubkeys();
1530
1531                 TxCreationKeys::derive_new(&self.secp_ctx, &per_commitment_point, delayed_payment_base, htlc_basepoint, &counterparty_pubkeys.revocation_basepoint, &counterparty_pubkeys.htlc_basepoint)
1532         }
1533
1534         #[inline]
1535         /// Creates a set of keys for build_commitment_transaction to generate a transaction which we
1536         /// will sign and send to our counterparty.
1537         /// If an Err is returned, it is a ChannelError::Close (for get_funding_created)
1538         fn build_remote_transaction_keys(&self) -> TxCreationKeys {
1539                 //TODO: Ensure that the payment_key derived here ends up in the library users' wallet as we
1540                 //may see payments to it!
1541                 let revocation_basepoint = &self.get_holder_pubkeys().revocation_basepoint;
1542                 let htlc_basepoint = &self.get_holder_pubkeys().htlc_basepoint;
1543                 let counterparty_pubkeys = self.get_counterparty_pubkeys();
1544
1545                 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)
1546         }
1547
1548         /// Gets the redeemscript for the funding transaction output (ie the funding transaction output
1549         /// pays to get_funding_redeemscript().to_v0_p2wsh()).
1550         /// Panics if called before accept_channel/InboundV1Channel::new
1551         pub fn get_funding_redeemscript(&self) -> Script {
1552                 make_funding_redeemscript(&self.get_holder_pubkeys().funding_pubkey, self.counterparty_funding_pubkey())
1553         }
1554
1555         fn counterparty_funding_pubkey(&self) -> &PublicKey {
1556                 &self.get_counterparty_pubkeys().funding_pubkey
1557         }
1558
1559         pub fn get_feerate_sat_per_1000_weight(&self) -> u32 {
1560                 self.feerate_per_kw
1561         }
1562
1563         pub fn get_dust_buffer_feerate(&self, outbound_feerate_update: Option<u32>) -> u32 {
1564                 // When calculating our exposure to dust HTLCs, we assume that the channel feerate
1565                 // may, at any point, increase by at least 10 sat/vB (i.e 2530 sat/kWU) or 25%,
1566                 // whichever is higher. This ensures that we aren't suddenly exposed to significantly
1567                 // more dust balance if the feerate increases when we have several HTLCs pending
1568                 // which are near the dust limit.
1569                 let mut feerate_per_kw = self.feerate_per_kw;
1570                 // If there's a pending update fee, use it to ensure we aren't under-estimating
1571                 // potential feerate updates coming soon.
1572                 if let Some((feerate, _)) = self.pending_update_fee {
1573                         feerate_per_kw = cmp::max(feerate_per_kw, feerate);
1574                 }
1575                 if let Some(feerate) = outbound_feerate_update {
1576                         feerate_per_kw = cmp::max(feerate_per_kw, feerate);
1577                 }
1578                 cmp::max(2530, feerate_per_kw * 1250 / 1000)
1579         }
1580
1581         /// Get forwarding information for the counterparty.
1582         pub fn counterparty_forwarding_info(&self) -> Option<CounterpartyForwardingInfo> {
1583                 self.counterparty_forwarding_info.clone()
1584         }
1585
1586         /// Returns a HTLCStats about inbound pending htlcs
1587         fn get_inbound_pending_htlc_stats(&self, outbound_feerate_update: Option<u32>) -> HTLCStats {
1588                 let context = self;
1589                 let mut stats = HTLCStats {
1590                         pending_htlcs: context.pending_inbound_htlcs.len() as u32,
1591                         pending_htlcs_value_msat: 0,
1592                         on_counterparty_tx_dust_exposure_msat: 0,
1593                         on_holder_tx_dust_exposure_msat: 0,
1594                         holding_cell_msat: 0,
1595                         on_holder_tx_holding_cell_htlcs_count: 0,
1596                 };
1597
1598                 let (htlc_timeout_dust_limit, htlc_success_dust_limit) = if context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1599                         (0, 0)
1600                 } else {
1601                         let dust_buffer_feerate = context.get_dust_buffer_feerate(outbound_feerate_update) as u64;
1602                         (dust_buffer_feerate * htlc_timeout_tx_weight(context.get_channel_type()) / 1000,
1603                                 dust_buffer_feerate * htlc_success_tx_weight(context.get_channel_type()) / 1000)
1604                 };
1605                 let counterparty_dust_limit_timeout_sat = htlc_timeout_dust_limit + context.counterparty_dust_limit_satoshis;
1606                 let holder_dust_limit_success_sat = htlc_success_dust_limit + context.holder_dust_limit_satoshis;
1607                 for ref htlc in context.pending_inbound_htlcs.iter() {
1608                         stats.pending_htlcs_value_msat += htlc.amount_msat;
1609                         if htlc.amount_msat / 1000 < counterparty_dust_limit_timeout_sat {
1610                                 stats.on_counterparty_tx_dust_exposure_msat += htlc.amount_msat;
1611                         }
1612                         if htlc.amount_msat / 1000 < holder_dust_limit_success_sat {
1613                                 stats.on_holder_tx_dust_exposure_msat += htlc.amount_msat;
1614                         }
1615                 }
1616                 stats
1617         }
1618
1619         /// Returns a HTLCStats about pending outbound htlcs, *including* pending adds in our holding cell.
1620         fn get_outbound_pending_htlc_stats(&self, outbound_feerate_update: Option<u32>) -> HTLCStats {
1621                 let context = self;
1622                 let mut stats = HTLCStats {
1623                         pending_htlcs: context.pending_outbound_htlcs.len() as u32,
1624                         pending_htlcs_value_msat: 0,
1625                         on_counterparty_tx_dust_exposure_msat: 0,
1626                         on_holder_tx_dust_exposure_msat: 0,
1627                         holding_cell_msat: 0,
1628                         on_holder_tx_holding_cell_htlcs_count: 0,
1629                 };
1630
1631                 let (htlc_timeout_dust_limit, htlc_success_dust_limit) = if context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1632                         (0, 0)
1633                 } else {
1634                         let dust_buffer_feerate = context.get_dust_buffer_feerate(outbound_feerate_update) as u64;
1635                         (dust_buffer_feerate * htlc_timeout_tx_weight(context.get_channel_type()) / 1000,
1636                                 dust_buffer_feerate * htlc_success_tx_weight(context.get_channel_type()) / 1000)
1637                 };
1638                 let counterparty_dust_limit_success_sat = htlc_success_dust_limit + context.counterparty_dust_limit_satoshis;
1639                 let holder_dust_limit_timeout_sat = htlc_timeout_dust_limit + context.holder_dust_limit_satoshis;
1640                 for ref htlc in context.pending_outbound_htlcs.iter() {
1641                         stats.pending_htlcs_value_msat += htlc.amount_msat;
1642                         if htlc.amount_msat / 1000 < counterparty_dust_limit_success_sat {
1643                                 stats.on_counterparty_tx_dust_exposure_msat += htlc.amount_msat;
1644                         }
1645                         if htlc.amount_msat / 1000 < holder_dust_limit_timeout_sat {
1646                                 stats.on_holder_tx_dust_exposure_msat += htlc.amount_msat;
1647                         }
1648                 }
1649
1650                 for update in context.holding_cell_htlc_updates.iter() {
1651                         if let &HTLCUpdateAwaitingACK::AddHTLC { ref amount_msat, .. } = update {
1652                                 stats.pending_htlcs += 1;
1653                                 stats.pending_htlcs_value_msat += amount_msat;
1654                                 stats.holding_cell_msat += amount_msat;
1655                                 if *amount_msat / 1000 < counterparty_dust_limit_success_sat {
1656                                         stats.on_counterparty_tx_dust_exposure_msat += amount_msat;
1657                                 }
1658                                 if *amount_msat / 1000 < holder_dust_limit_timeout_sat {
1659                                         stats.on_holder_tx_dust_exposure_msat += amount_msat;
1660                                 } else {
1661                                         stats.on_holder_tx_holding_cell_htlcs_count += 1;
1662                                 }
1663                         }
1664                 }
1665                 stats
1666         }
1667
1668         /// Get the available balances, see [`AvailableBalances`]'s fields for more info.
1669         /// Doesn't bother handling the
1670         /// if-we-removed-it-already-but-haven't-fully-resolved-they-can-still-send-an-inbound-HTLC
1671         /// corner case properly.
1672         pub fn get_available_balances<F: Deref>(&self, fee_estimator: &LowerBoundedFeeEstimator<F>)
1673         -> AvailableBalances
1674         where F::Target: FeeEstimator
1675         {
1676                 let context = &self;
1677                 // Note that we have to handle overflow due to the above case.
1678                 let inbound_stats = context.get_inbound_pending_htlc_stats(None);
1679                 let outbound_stats = context.get_outbound_pending_htlc_stats(None);
1680
1681                 let mut balance_msat = context.value_to_self_msat;
1682                 for ref htlc in context.pending_inbound_htlcs.iter() {
1683                         if let InboundHTLCState::LocalRemoved(InboundHTLCRemovalReason::Fulfill(_)) = htlc.state {
1684                                 balance_msat += htlc.amount_msat;
1685                         }
1686                 }
1687                 balance_msat -= outbound_stats.pending_htlcs_value_msat;
1688
1689                 let outbound_capacity_msat = context.value_to_self_msat
1690                                 .saturating_sub(outbound_stats.pending_htlcs_value_msat)
1691                                 .saturating_sub(
1692                                         context.counterparty_selected_channel_reserve_satoshis.unwrap_or(0) * 1000);
1693
1694                 let mut available_capacity_msat = outbound_capacity_msat;
1695
1696                 let anchor_outputs_value_msat = if context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1697                         ANCHOR_OUTPUT_VALUE_SATOSHI * 2 * 1000
1698                 } else {
1699                         0
1700                 };
1701                 if context.is_outbound() {
1702                         // We should mind channel commit tx fee when computing how much of the available capacity
1703                         // can be used in the next htlc. Mirrors the logic in send_htlc.
1704                         //
1705                         // The fee depends on whether the amount we will be sending is above dust or not,
1706                         // and the answer will in turn change the amount itself â€” making it a circular
1707                         // dependency.
1708                         // This complicates the computation around dust-values, up to the one-htlc-value.
1709                         let mut real_dust_limit_timeout_sat = context.holder_dust_limit_satoshis;
1710                         if !context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1711                                 real_dust_limit_timeout_sat += context.feerate_per_kw as u64 * htlc_timeout_tx_weight(context.get_channel_type()) / 1000;
1712                         }
1713
1714                         let htlc_above_dust = HTLCCandidate::new(real_dust_limit_timeout_sat * 1000, HTLCInitiator::LocalOffered);
1715                         let mut max_reserved_commit_tx_fee_msat = context.next_local_commit_tx_fee_msat(htlc_above_dust, Some(()));
1716                         let htlc_dust = HTLCCandidate::new(real_dust_limit_timeout_sat * 1000 - 1, HTLCInitiator::LocalOffered);
1717                         let mut min_reserved_commit_tx_fee_msat = context.next_local_commit_tx_fee_msat(htlc_dust, Some(()));
1718                         if !context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1719                                 max_reserved_commit_tx_fee_msat *= FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE;
1720                                 min_reserved_commit_tx_fee_msat *= FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE;
1721                         }
1722
1723                         // We will first subtract the fee as if we were above-dust. Then, if the resulting
1724                         // value ends up being below dust, we have this fee available again. In that case,
1725                         // match the value to right-below-dust.
1726                         let mut capacity_minus_commitment_fee_msat: i64 = available_capacity_msat as i64 -
1727                                 max_reserved_commit_tx_fee_msat as i64 - anchor_outputs_value_msat as i64;
1728                         if capacity_minus_commitment_fee_msat < (real_dust_limit_timeout_sat as i64) * 1000 {
1729                                 let one_htlc_difference_msat = max_reserved_commit_tx_fee_msat - min_reserved_commit_tx_fee_msat;
1730                                 debug_assert!(one_htlc_difference_msat != 0);
1731                                 capacity_minus_commitment_fee_msat += one_htlc_difference_msat as i64;
1732                                 capacity_minus_commitment_fee_msat = cmp::min(real_dust_limit_timeout_sat as i64 * 1000 - 1, capacity_minus_commitment_fee_msat);
1733                                 available_capacity_msat = cmp::max(0, cmp::min(capacity_minus_commitment_fee_msat, available_capacity_msat as i64)) as u64;
1734                         } else {
1735                                 available_capacity_msat = capacity_minus_commitment_fee_msat as u64;
1736                         }
1737                 } else {
1738                         // If the channel is inbound (i.e. counterparty pays the fee), we need to make sure
1739                         // sending a new HTLC won't reduce their balance below our reserve threshold.
1740                         let mut real_dust_limit_success_sat = context.counterparty_dust_limit_satoshis;
1741                         if !context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1742                                 real_dust_limit_success_sat += context.feerate_per_kw as u64 * htlc_success_tx_weight(context.get_channel_type()) / 1000;
1743                         }
1744
1745                         let htlc_above_dust = HTLCCandidate::new(real_dust_limit_success_sat * 1000, HTLCInitiator::LocalOffered);
1746                         let max_reserved_commit_tx_fee_msat = context.next_remote_commit_tx_fee_msat(htlc_above_dust, None);
1747
1748                         let holder_selected_chan_reserve_msat = context.holder_selected_channel_reserve_satoshis * 1000;
1749                         let remote_balance_msat = (context.channel_value_satoshis * 1000 - context.value_to_self_msat)
1750                                 .saturating_sub(inbound_stats.pending_htlcs_value_msat);
1751
1752                         if remote_balance_msat < max_reserved_commit_tx_fee_msat + holder_selected_chan_reserve_msat + anchor_outputs_value_msat {
1753                                 // If another HTLC's fee would reduce the remote's balance below the reserve limit
1754                                 // we've selected for them, we can only send dust HTLCs.
1755                                 available_capacity_msat = cmp::min(available_capacity_msat, real_dust_limit_success_sat * 1000 - 1);
1756                         }
1757                 }
1758
1759                 let mut next_outbound_htlc_minimum_msat = context.counterparty_htlc_minimum_msat;
1760
1761                 // If we get close to our maximum dust exposure, we end up in a situation where we can send
1762                 // between zero and the remaining dust exposure limit remaining OR above the dust limit.
1763                 // Because we cannot express this as a simple min/max, we prefer to tell the user they can
1764                 // send above the dust limit (as the router can always overpay to meet the dust limit).
1765                 let mut remaining_msat_below_dust_exposure_limit = None;
1766                 let mut dust_exposure_dust_limit_msat = 0;
1767                 let max_dust_htlc_exposure_msat = context.get_max_dust_htlc_exposure_msat(fee_estimator);
1768
1769                 let (htlc_success_dust_limit, htlc_timeout_dust_limit) = if context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1770                         (context.counterparty_dust_limit_satoshis, context.holder_dust_limit_satoshis)
1771                 } else {
1772                         let dust_buffer_feerate = context.get_dust_buffer_feerate(None) as u64;
1773                         (context.counterparty_dust_limit_satoshis + dust_buffer_feerate * htlc_success_tx_weight(context.get_channel_type()) / 1000,
1774                          context.holder_dust_limit_satoshis       + dust_buffer_feerate * htlc_timeout_tx_weight(context.get_channel_type()) / 1000)
1775                 };
1776                 let on_counterparty_dust_htlc_exposure_msat = inbound_stats.on_counterparty_tx_dust_exposure_msat + outbound_stats.on_counterparty_tx_dust_exposure_msat;
1777                 if on_counterparty_dust_htlc_exposure_msat as i64 + htlc_success_dust_limit as i64 * 1000 - 1 > max_dust_htlc_exposure_msat as i64 {
1778                         remaining_msat_below_dust_exposure_limit =
1779                                 Some(max_dust_htlc_exposure_msat.saturating_sub(on_counterparty_dust_htlc_exposure_msat));
1780                         dust_exposure_dust_limit_msat = cmp::max(dust_exposure_dust_limit_msat, htlc_success_dust_limit * 1000);
1781                 }
1782
1783                 let on_holder_dust_htlc_exposure_msat = inbound_stats.on_holder_tx_dust_exposure_msat + outbound_stats.on_holder_tx_dust_exposure_msat;
1784                 if on_holder_dust_htlc_exposure_msat as i64 + htlc_timeout_dust_limit as i64 * 1000 - 1 > max_dust_htlc_exposure_msat as i64 {
1785                         remaining_msat_below_dust_exposure_limit = Some(cmp::min(
1786                                 remaining_msat_below_dust_exposure_limit.unwrap_or(u64::max_value()),
1787                                 max_dust_htlc_exposure_msat.saturating_sub(on_holder_dust_htlc_exposure_msat)));
1788                         dust_exposure_dust_limit_msat = cmp::max(dust_exposure_dust_limit_msat, htlc_timeout_dust_limit * 1000);
1789                 }
1790
1791                 if let Some(remaining_limit_msat) = remaining_msat_below_dust_exposure_limit {
1792                         if available_capacity_msat < dust_exposure_dust_limit_msat {
1793                                 available_capacity_msat = cmp::min(available_capacity_msat, remaining_limit_msat);
1794                         } else {
1795                                 next_outbound_htlc_minimum_msat = cmp::max(next_outbound_htlc_minimum_msat, dust_exposure_dust_limit_msat);
1796                         }
1797                 }
1798
1799                 available_capacity_msat = cmp::min(available_capacity_msat,
1800                         context.counterparty_max_htlc_value_in_flight_msat - outbound_stats.pending_htlcs_value_msat);
1801
1802                 if outbound_stats.pending_htlcs + 1 > context.counterparty_max_accepted_htlcs as u32 {
1803                         available_capacity_msat = 0;
1804                 }
1805
1806                 AvailableBalances {
1807                         inbound_capacity_msat: cmp::max(context.channel_value_satoshis as i64 * 1000
1808                                         - context.value_to_self_msat as i64
1809                                         - context.get_inbound_pending_htlc_stats(None).pending_htlcs_value_msat as i64
1810                                         - context.holder_selected_channel_reserve_satoshis as i64 * 1000,
1811                                 0) as u64,
1812                         outbound_capacity_msat,
1813                         next_outbound_htlc_limit_msat: available_capacity_msat,
1814                         next_outbound_htlc_minimum_msat,
1815                         balance_msat,
1816                 }
1817         }
1818
1819         pub fn get_holder_counterparty_selected_channel_reserve_satoshis(&self) -> (u64, Option<u64>) {
1820                 let context = &self;
1821                 (context.holder_selected_channel_reserve_satoshis, context.counterparty_selected_channel_reserve_satoshis)
1822         }
1823
1824         /// Get the commitment tx fee for the local's (i.e. our) next commitment transaction based on the
1825         /// number of pending HTLCs that are on track to be in our next commitment tx.
1826         ///
1827         /// Optionally includes the `HTLCCandidate` given by `htlc` and an additional non-dust HTLC if
1828         /// `fee_spike_buffer_htlc` is `Some`.
1829         ///
1830         /// The first extra HTLC is useful for determining whether we can accept a further HTLC, the
1831         /// second allows for creating a buffer to ensure a further HTLC can always be accepted/added.
1832         ///
1833         /// Dust HTLCs are excluded.
1834         fn next_local_commit_tx_fee_msat(&self, htlc: HTLCCandidate, fee_spike_buffer_htlc: Option<()>) -> u64 {
1835                 let context = &self;
1836                 assert!(context.is_outbound());
1837
1838                 let (htlc_success_dust_limit, htlc_timeout_dust_limit) = if context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1839                         (0, 0)
1840                 } else {
1841                         (context.feerate_per_kw as u64 * htlc_success_tx_weight(context.get_channel_type()) / 1000,
1842                                 context.feerate_per_kw as u64 * htlc_timeout_tx_weight(context.get_channel_type()) / 1000)
1843                 };
1844                 let real_dust_limit_success_sat = htlc_success_dust_limit + context.holder_dust_limit_satoshis;
1845                 let real_dust_limit_timeout_sat = htlc_timeout_dust_limit + context.holder_dust_limit_satoshis;
1846
1847                 let mut addl_htlcs = 0;
1848                 if fee_spike_buffer_htlc.is_some() { addl_htlcs += 1; }
1849                 match htlc.origin {
1850                         HTLCInitiator::LocalOffered => {
1851                                 if htlc.amount_msat / 1000 >= real_dust_limit_timeout_sat {
1852                                         addl_htlcs += 1;
1853                                 }
1854                         },
1855                         HTLCInitiator::RemoteOffered => {
1856                                 if htlc.amount_msat / 1000 >= real_dust_limit_success_sat {
1857                                         addl_htlcs += 1;
1858                                 }
1859                         }
1860                 }
1861
1862                 let mut included_htlcs = 0;
1863                 for ref htlc in context.pending_inbound_htlcs.iter() {
1864                         if htlc.amount_msat / 1000 < real_dust_limit_success_sat {
1865                                 continue
1866                         }
1867                         // We include LocalRemoved HTLCs here because we may still need to broadcast a commitment
1868                         // transaction including this HTLC if it times out before they RAA.
1869                         included_htlcs += 1;
1870                 }
1871
1872                 for ref htlc in context.pending_outbound_htlcs.iter() {
1873                         if htlc.amount_msat / 1000 < real_dust_limit_timeout_sat {
1874                                 continue
1875                         }
1876                         match htlc.state {
1877                                 OutboundHTLCState::LocalAnnounced {..} => included_htlcs += 1,
1878                                 OutboundHTLCState::Committed => included_htlcs += 1,
1879                                 OutboundHTLCState::RemoteRemoved {..} => included_htlcs += 1,
1880                                 // We don't include AwaitingRemoteRevokeToRemove HTLCs because our next commitment
1881                                 // transaction won't be generated until they send us their next RAA, which will mean
1882                                 // dropping any HTLCs in this state.
1883                                 _ => {},
1884                         }
1885                 }
1886
1887                 for htlc in context.holding_cell_htlc_updates.iter() {
1888                         match htlc {
1889                                 &HTLCUpdateAwaitingACK::AddHTLC { amount_msat, .. } => {
1890                                         if amount_msat / 1000 < real_dust_limit_timeout_sat {
1891                                                 continue
1892                                         }
1893                                         included_htlcs += 1
1894                                 },
1895                                 _ => {}, // Don't include claims/fails that are awaiting ack, because once we get the
1896                                          // ack we're guaranteed to never include them in commitment txs anymore.
1897                         }
1898                 }
1899
1900                 let num_htlcs = included_htlcs + addl_htlcs;
1901                 let res = commit_tx_fee_msat(context.feerate_per_kw, num_htlcs, &context.channel_type);
1902                 #[cfg(any(test, fuzzing))]
1903                 {
1904                         let mut fee = res;
1905                         if fee_spike_buffer_htlc.is_some() {
1906                                 fee = commit_tx_fee_msat(context.feerate_per_kw, num_htlcs - 1, &context.channel_type);
1907                         }
1908                         let total_pending_htlcs = context.pending_inbound_htlcs.len() + context.pending_outbound_htlcs.len()
1909                                 + context.holding_cell_htlc_updates.len();
1910                         let commitment_tx_info = CommitmentTxInfoCached {
1911                                 fee,
1912                                 total_pending_htlcs,
1913                                 next_holder_htlc_id: match htlc.origin {
1914                                         HTLCInitiator::LocalOffered => context.next_holder_htlc_id + 1,
1915                                         HTLCInitiator::RemoteOffered => context.next_holder_htlc_id,
1916                                 },
1917                                 next_counterparty_htlc_id: match htlc.origin {
1918                                         HTLCInitiator::LocalOffered => context.next_counterparty_htlc_id,
1919                                         HTLCInitiator::RemoteOffered => context.next_counterparty_htlc_id + 1,
1920                                 },
1921                                 feerate: context.feerate_per_kw,
1922                         };
1923                         *context.next_local_commitment_tx_fee_info_cached.lock().unwrap() = Some(commitment_tx_info);
1924                 }
1925                 res
1926         }
1927
1928         /// Get the commitment tx fee for the remote's next commitment transaction based on the number of
1929         /// pending HTLCs that are on track to be in their next commitment tx
1930         ///
1931         /// Optionally includes the `HTLCCandidate` given by `htlc` and an additional non-dust HTLC if
1932         /// `fee_spike_buffer_htlc` is `Some`.
1933         ///
1934         /// The first extra HTLC is useful for determining whether we can accept a further HTLC, the
1935         /// second allows for creating a buffer to ensure a further HTLC can always be accepted/added.
1936         ///
1937         /// Dust HTLCs are excluded.
1938         fn next_remote_commit_tx_fee_msat(&self, htlc: HTLCCandidate, fee_spike_buffer_htlc: Option<()>) -> u64 {
1939                 let context = &self;
1940                 assert!(!context.is_outbound());
1941
1942                 let (htlc_success_dust_limit, htlc_timeout_dust_limit) = if context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
1943                         (0, 0)
1944                 } else {
1945                         (context.feerate_per_kw as u64 * htlc_success_tx_weight(context.get_channel_type()) / 1000,
1946                                 context.feerate_per_kw as u64 * htlc_timeout_tx_weight(context.get_channel_type()) / 1000)
1947                 };
1948                 let real_dust_limit_success_sat = htlc_success_dust_limit + context.counterparty_dust_limit_satoshis;
1949                 let real_dust_limit_timeout_sat = htlc_timeout_dust_limit + context.counterparty_dust_limit_satoshis;
1950
1951                 let mut addl_htlcs = 0;
1952                 if fee_spike_buffer_htlc.is_some() { addl_htlcs += 1; }
1953                 match htlc.origin {
1954                         HTLCInitiator::LocalOffered => {
1955                                 if htlc.amount_msat / 1000 >= real_dust_limit_success_sat {
1956                                         addl_htlcs += 1;
1957                                 }
1958                         },
1959                         HTLCInitiator::RemoteOffered => {
1960                                 if htlc.amount_msat / 1000 >= real_dust_limit_timeout_sat {
1961                                         addl_htlcs += 1;
1962                                 }
1963                         }
1964                 }
1965
1966                 // When calculating the set of HTLCs which will be included in their next commitment_signed, all
1967                 // non-dust inbound HTLCs are included (as all states imply it will be included) and only
1968                 // committed outbound HTLCs, see below.
1969                 let mut included_htlcs = 0;
1970                 for ref htlc in context.pending_inbound_htlcs.iter() {
1971                         if htlc.amount_msat / 1000 <= real_dust_limit_timeout_sat {
1972                                 continue
1973                         }
1974                         included_htlcs += 1;
1975                 }
1976
1977                 for ref htlc in context.pending_outbound_htlcs.iter() {
1978                         if htlc.amount_msat / 1000 <= real_dust_limit_success_sat {
1979                                 continue
1980                         }
1981                         // We only include outbound HTLCs if it will not be included in their next commitment_signed,
1982                         // i.e. if they've responded to us with an RAA after announcement.
1983                         match htlc.state {
1984                                 OutboundHTLCState::Committed => included_htlcs += 1,
1985                                 OutboundHTLCState::RemoteRemoved {..} => included_htlcs += 1,
1986                                 OutboundHTLCState::LocalAnnounced { .. } => included_htlcs += 1,
1987                                 _ => {},
1988                         }
1989                 }
1990
1991                 let num_htlcs = included_htlcs + addl_htlcs;
1992                 let res = commit_tx_fee_msat(context.feerate_per_kw, num_htlcs, &context.channel_type);
1993                 #[cfg(any(test, fuzzing))]
1994                 {
1995                         let mut fee = res;
1996                         if fee_spike_buffer_htlc.is_some() {
1997                                 fee = commit_tx_fee_msat(context.feerate_per_kw, num_htlcs - 1, &context.channel_type);
1998                         }
1999                         let total_pending_htlcs = context.pending_inbound_htlcs.len() + context.pending_outbound_htlcs.len();
2000                         let commitment_tx_info = CommitmentTxInfoCached {
2001                                 fee,
2002                                 total_pending_htlcs,
2003                                 next_holder_htlc_id: match htlc.origin {
2004                                         HTLCInitiator::LocalOffered => context.next_holder_htlc_id + 1,
2005                                         HTLCInitiator::RemoteOffered => context.next_holder_htlc_id,
2006                                 },
2007                                 next_counterparty_htlc_id: match htlc.origin {
2008                                         HTLCInitiator::LocalOffered => context.next_counterparty_htlc_id,
2009                                         HTLCInitiator::RemoteOffered => context.next_counterparty_htlc_id + 1,
2010                                 },
2011                                 feerate: context.feerate_per_kw,
2012                         };
2013                         *context.next_remote_commitment_tx_fee_info_cached.lock().unwrap() = Some(commitment_tx_info);
2014                 }
2015                 res
2016         }
2017
2018         fn if_unbroadcasted_funding<F, O>(&self, f: F) -> Option<O>
2019                 where F: Fn() -> Option<O> {
2020                 if self.channel_state & ChannelState::FundingCreated as u32 != 0 ||
2021                    self.channel_state & ChannelState::WaitingForBatch as u32 != 0 {
2022                         f()
2023                 } else {
2024                         None
2025                 }
2026         }
2027
2028         /// Returns the transaction if there is a pending funding transaction that is yet to be
2029         /// broadcast.
2030         pub fn unbroadcasted_funding(&self) -> Option<Transaction> {
2031                 self.if_unbroadcasted_funding(|| self.funding_transaction.clone())
2032         }
2033
2034         /// Returns the transaction ID if there is a pending funding transaction that is yet to be
2035         /// broadcast.
2036         pub fn unbroadcasted_funding_txid(&self) -> Option<Txid> {
2037                 self.if_unbroadcasted_funding(||
2038                         self.channel_transaction_parameters.funding_outpoint.map(|txo| txo.txid)
2039                 )
2040         }
2041
2042         /// Returns whether the channel is funded in a batch.
2043         pub fn is_batch_funding(&self) -> bool {
2044                 self.is_batch_funding.is_some()
2045         }
2046
2047         /// Returns the transaction ID if there is a pending batch funding transaction that is yet to be
2048         /// broadcast.
2049         pub fn unbroadcasted_batch_funding_txid(&self) -> Option<Txid> {
2050                 self.unbroadcasted_funding_txid().filter(|_| self.is_batch_funding())
2051         }
2052
2053         /// Gets the latest commitment transaction and any dependent transactions for relay (forcing
2054         /// shutdown of this channel - no more calls into this Channel may be made afterwards except
2055         /// those explicitly stated to be allowed after shutdown completes, eg some simple getters).
2056         /// Also returns the list of payment_hashes for channels which we can safely fail backwards
2057         /// immediately (others we will have to allow to time out).
2058         pub fn force_shutdown(&mut self, should_broadcast: bool) -> ShutdownResult {
2059                 // Note that we MUST only generate a monitor update that indicates force-closure - we're
2060                 // called during initialization prior to the chain_monitor in the encompassing ChannelManager
2061                 // being fully configured in some cases. Thus, its likely any monitor events we generate will
2062                 // be delayed in being processed! See the docs for `ChannelManagerReadArgs` for more.
2063                 assert!(self.channel_state != ChannelState::ShutdownComplete as u32);
2064
2065                 // We go ahead and "free" any holding cell HTLCs or HTLCs we haven't yet committed to and
2066                 // return them to fail the payment.
2067                 let mut dropped_outbound_htlcs = Vec::with_capacity(self.holding_cell_htlc_updates.len());
2068                 let counterparty_node_id = self.get_counterparty_node_id();
2069                 for htlc_update in self.holding_cell_htlc_updates.drain(..) {
2070                         match htlc_update {
2071                                 HTLCUpdateAwaitingACK::AddHTLC { source, payment_hash, .. } => {
2072                                         dropped_outbound_htlcs.push((source, payment_hash, counterparty_node_id, self.channel_id));
2073                                 },
2074                                 _ => {}
2075                         }
2076                 }
2077                 let monitor_update = if let Some(funding_txo) = self.get_funding_txo() {
2078                         // If we haven't yet exchanged funding signatures (ie channel_state < FundingSent),
2079                         // returning a channel monitor update here would imply a channel monitor update before
2080                         // we even registered the channel monitor to begin with, which is invalid.
2081                         // Thus, if we aren't actually at a point where we could conceivably broadcast the
2082                         // funding transaction, don't return a funding txo (which prevents providing the
2083                         // monitor update to the user, even if we return one).
2084                         // See test_duplicate_chan_id and test_pre_lockin_no_chan_closed_update for more.
2085                         if self.channel_state & (ChannelState::FundingSent as u32 | ChannelState::ChannelReady as u32 | ChannelState::ShutdownComplete as u32) != 0 {
2086                                 self.latest_monitor_update_id = CLOSED_CHANNEL_UPDATE_ID;
2087                                 Some((self.get_counterparty_node_id(), funding_txo, ChannelMonitorUpdate {
2088                                         update_id: self.latest_monitor_update_id,
2089                                         updates: vec![ChannelMonitorUpdateStep::ChannelForceClosed { should_broadcast }],
2090                                 }))
2091                         } else { None }
2092                 } else { None };
2093                 let unbroadcasted_batch_funding_txid = self.unbroadcasted_batch_funding_txid();
2094
2095                 self.channel_state = ChannelState::ShutdownComplete as u32;
2096                 self.update_time_counter += 1;
2097                 ShutdownResult {
2098                         monitor_update,
2099                         dropped_outbound_htlcs,
2100                         unbroadcasted_batch_funding_txid,
2101                 }
2102         }
2103
2104         /// Only allowed after [`Self::channel_transaction_parameters`] is set.
2105         fn get_funding_created_msg<L: Deref>(&mut self, logger: &L) -> Option<msgs::FundingCreated> where L::Target: Logger {
2106                 let counterparty_keys = self.build_remote_transaction_keys();
2107                 let counterparty_initial_commitment_tx = self.build_commitment_transaction(self.cur_counterparty_commitment_transaction_number, &counterparty_keys, false, false, logger).tx;
2108                 let signature = match &self.holder_signer {
2109                         // TODO (taproot|arik): move match into calling method for Taproot
2110                         ChannelSignerType::Ecdsa(ecdsa) => {
2111                                 ecdsa.sign_counterparty_commitment(&counterparty_initial_commitment_tx, Vec::new(), &self.secp_ctx)
2112                                         .map(|(sig, _)| sig).ok()?
2113                         }
2114                 };
2115
2116                 if self.signer_pending_funding {
2117                         log_trace!(logger, "Counterparty commitment signature ready for funding_created message: clearing signer_pending_funding");
2118                         self.signer_pending_funding = false;
2119                 }
2120
2121                 Some(msgs::FundingCreated {
2122                         temporary_channel_id: self.temporary_channel_id.unwrap(),
2123                         funding_txid: self.channel_transaction_parameters.funding_outpoint.as_ref().unwrap().txid,
2124                         funding_output_index: self.channel_transaction_parameters.funding_outpoint.as_ref().unwrap().index,
2125                         signature,
2126                         #[cfg(taproot)]
2127                         partial_signature_with_nonce: None,
2128                         #[cfg(taproot)]
2129                         next_local_nonce: None,
2130                 })
2131         }
2132 }
2133
2134 // Internal utility functions for channels
2135
2136 /// Returns the value to use for `holder_max_htlc_value_in_flight_msat` as a percentage of the
2137 /// `channel_value_satoshis` in msat, set through
2138 /// [`ChannelHandshakeConfig::max_inbound_htlc_value_in_flight_percent_of_channel`]
2139 ///
2140 /// The effective percentage is lower bounded by 1% and upper bounded by 100%.
2141 ///
2142 /// [`ChannelHandshakeConfig::max_inbound_htlc_value_in_flight_percent_of_channel`]: crate::util::config::ChannelHandshakeConfig::max_inbound_htlc_value_in_flight_percent_of_channel
2143 fn get_holder_max_htlc_value_in_flight_msat(channel_value_satoshis: u64, config: &ChannelHandshakeConfig) -> u64 {
2144         let configured_percent = if config.max_inbound_htlc_value_in_flight_percent_of_channel < 1 {
2145                 1
2146         } else if config.max_inbound_htlc_value_in_flight_percent_of_channel > 100 {
2147                 100
2148         } else {
2149                 config.max_inbound_htlc_value_in_flight_percent_of_channel as u64
2150         };
2151         channel_value_satoshis * 10 * configured_percent
2152 }
2153
2154 /// Returns a minimum channel reserve value the remote needs to maintain,
2155 /// required by us according to the configured or default
2156 /// [`ChannelHandshakeConfig::their_channel_reserve_proportional_millionths`]
2157 ///
2158 /// Guaranteed to return a value no larger than channel_value_satoshis
2159 ///
2160 /// This is used both for outbound and inbound channels and has lower bound
2161 /// of `MIN_THEIR_CHAN_RESERVE_SATOSHIS`.
2162 pub(crate) fn get_holder_selected_channel_reserve_satoshis(channel_value_satoshis: u64, config: &UserConfig) -> u64 {
2163         let calculated_reserve = channel_value_satoshis.saturating_mul(config.channel_handshake_config.their_channel_reserve_proportional_millionths as u64) / 1_000_000;
2164         cmp::min(channel_value_satoshis, cmp::max(calculated_reserve, MIN_THEIR_CHAN_RESERVE_SATOSHIS))
2165 }
2166
2167 /// This is for legacy reasons, present for forward-compatibility.
2168 /// LDK versions older than 0.0.104 don't know how read/handle values other than default
2169 /// from storage. Hence, we use this function to not persist default values of
2170 /// `holder_selected_channel_reserve_satoshis` for channels into storage.
2171 pub(crate) fn get_legacy_default_holder_selected_channel_reserve_satoshis(channel_value_satoshis: u64) -> u64 {
2172         let (q, _) = channel_value_satoshis.overflowing_div(100);
2173         cmp::min(channel_value_satoshis, cmp::max(q, 1000))
2174 }
2175
2176 // Get the fee cost in SATS of a commitment tx with a given number of HTLC outputs.
2177 // Note that num_htlcs should not include dust HTLCs.
2178 #[inline]
2179 fn commit_tx_fee_sat(feerate_per_kw: u32, num_htlcs: usize, channel_type_features: &ChannelTypeFeatures) -> u64 {
2180         feerate_per_kw as u64 * (commitment_tx_base_weight(channel_type_features) + num_htlcs as u64 * COMMITMENT_TX_WEIGHT_PER_HTLC) / 1000
2181 }
2182
2183 // Get the fee cost in MSATS of a commitment tx with a given number of HTLC outputs.
2184 // Note that num_htlcs should not include dust HTLCs.
2185 pub(crate) fn commit_tx_fee_msat(feerate_per_kw: u32, num_htlcs: usize, channel_type_features: &ChannelTypeFeatures) -> u64 {
2186         // Note that we need to divide before multiplying to round properly,
2187         // since the lowest denomination of bitcoin on-chain is the satoshi.
2188         (commitment_tx_base_weight(channel_type_features) + num_htlcs as u64 * COMMITMENT_TX_WEIGHT_PER_HTLC) * feerate_per_kw as u64 / 1000 * 1000
2189 }
2190
2191 // Holder designates channel data owned for the benefit of the user client.
2192 // Counterparty designates channel data owned by the another channel participant entity.
2193 pub(super) struct Channel<SP: Deref> where SP::Target: SignerProvider {
2194         pub context: ChannelContext<SP>,
2195 }
2196
2197 #[cfg(any(test, fuzzing))]
2198 struct CommitmentTxInfoCached {
2199         fee: u64,
2200         total_pending_htlcs: usize,
2201         next_holder_htlc_id: u64,
2202         next_counterparty_htlc_id: u64,
2203         feerate: u32,
2204 }
2205
2206 impl<SP: Deref> Channel<SP> where
2207         SP::Target: SignerProvider,
2208         <SP::Target as SignerProvider>::Signer: WriteableEcdsaChannelSigner
2209 {
2210         fn check_remote_fee<F: Deref, L: Deref>(
2211                 channel_type: &ChannelTypeFeatures, fee_estimator: &LowerBoundedFeeEstimator<F>,
2212                 feerate_per_kw: u32, cur_feerate_per_kw: Option<u32>, logger: &L
2213         ) -> Result<(), ChannelError> where F::Target: FeeEstimator, L::Target: Logger,
2214         {
2215                 // We only bound the fee updates on the upper side to prevent completely absurd feerates,
2216                 // always accepting up to 25 sat/vByte or 10x our fee estimator's "High Priority" fee.
2217                 // We generally don't care too much if they set the feerate to something very high, but it
2218                 // could result in the channel being useless due to everything being dust. This doesn't
2219                 // apply to channels supporting anchor outputs since HTLC transactions are pre-signed with a
2220                 // zero fee, so their fee is no longer considered to determine dust limits.
2221                 if !channel_type.supports_anchors_zero_fee_htlc_tx() {
2222                         let upper_limit =
2223                                 fee_estimator.bounded_sat_per_1000_weight(ConfirmationTarget::MaxAllowedNonAnchorChannelRemoteFee) as u64;
2224                         if feerate_per_kw as u64 > upper_limit {
2225                                 return Err(ChannelError::Close(format!("Peer's feerate much too high. Actual: {}. Our expected upper limit: {}", feerate_per_kw, upper_limit)));
2226                         }
2227                 }
2228
2229                 let lower_limit_conf_target = if channel_type.supports_anchors_zero_fee_htlc_tx() {
2230                         ConfirmationTarget::MinAllowedAnchorChannelRemoteFee
2231                 } else {
2232                         ConfirmationTarget::MinAllowedNonAnchorChannelRemoteFee
2233                 };
2234                 let lower_limit = fee_estimator.bounded_sat_per_1000_weight(lower_limit_conf_target);
2235                 if feerate_per_kw < lower_limit {
2236                         if let Some(cur_feerate) = cur_feerate_per_kw {
2237                                 if feerate_per_kw > cur_feerate {
2238                                         log_warn!(logger,
2239                                                 "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.",
2240                                                 cur_feerate, feerate_per_kw);
2241                                         return Ok(());
2242                                 }
2243                         }
2244                         return Err(ChannelError::Close(format!("Peer's feerate much too low. Actual: {}. Our expected lower limit: {}", feerate_per_kw, lower_limit)));
2245                 }
2246                 Ok(())
2247         }
2248
2249         #[inline]
2250         fn get_closing_scriptpubkey(&self) -> Script {
2251                 // The shutdown scriptpubkey is set on channel opening when option_upfront_shutdown_script
2252                 // is signaled. Otherwise, it is set when sending a shutdown message. Calling this method
2253                 // outside of those situations will fail.
2254                 self.context.shutdown_scriptpubkey.clone().unwrap().into_inner()
2255         }
2256
2257         #[inline]
2258         fn get_closing_transaction_weight(&self, a_scriptpubkey: Option<&Script>, b_scriptpubkey: Option<&Script>) -> u64 {
2259                 let mut ret =
2260                 (4 +                                                   // version
2261                  1 +                                                   // input count
2262                  36 +                                                  // prevout
2263                  1 +                                                   // script length (0)
2264                  4 +                                                   // sequence
2265                  1 +                                                   // output count
2266                  4                                                     // lock time
2267                  )*4 +                                                 // * 4 for non-witness parts
2268                 2 +                                                    // witness marker and flag
2269                 1 +                                                    // witness element count
2270                 4 +                                                    // 4 element lengths (2 sigs, multisig dummy, and witness script)
2271                 self.context.get_funding_redeemscript().len() as u64 + // funding witness script
2272                 2*(1 + 71);                                            // two signatures + sighash type flags
2273                 if let Some(spk) = a_scriptpubkey {
2274                         ret += ((8+1) +                                    // output values and script length
2275                                 spk.len() as u64) * 4;                         // scriptpubkey and witness multiplier
2276                 }
2277                 if let Some(spk) = b_scriptpubkey {
2278                         ret += ((8+1) +                                    // output values and script length
2279                                 spk.len() as u64) * 4;                         // scriptpubkey and witness multiplier
2280                 }
2281                 ret
2282         }
2283
2284         #[inline]
2285         fn build_closing_transaction(&self, proposed_total_fee_satoshis: u64, skip_remote_output: bool) -> (ClosingTransaction, u64) {
2286                 assert!(self.context.pending_inbound_htlcs.is_empty());
2287                 assert!(self.context.pending_outbound_htlcs.is_empty());
2288                 assert!(self.context.pending_update_fee.is_none());
2289
2290                 let mut total_fee_satoshis = proposed_total_fee_satoshis;
2291                 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 };
2292                 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 };
2293
2294                 if value_to_holder < 0 {
2295                         assert!(self.context.is_outbound());
2296                         total_fee_satoshis += (-value_to_holder) as u64;
2297                 } else if value_to_counterparty < 0 {
2298                         assert!(!self.context.is_outbound());
2299                         total_fee_satoshis += (-value_to_counterparty) as u64;
2300                 }
2301
2302                 if skip_remote_output || value_to_counterparty as u64 <= self.context.holder_dust_limit_satoshis {
2303                         value_to_counterparty = 0;
2304                 }
2305
2306                 if value_to_holder as u64 <= self.context.holder_dust_limit_satoshis {
2307                         value_to_holder = 0;
2308                 }
2309
2310                 assert!(self.context.shutdown_scriptpubkey.is_some());
2311                 let holder_shutdown_script = self.get_closing_scriptpubkey();
2312                 let counterparty_shutdown_script = self.context.counterparty_shutdown_scriptpubkey.clone().unwrap();
2313                 let funding_outpoint = self.funding_outpoint().into_bitcoin_outpoint();
2314
2315                 let closing_transaction = ClosingTransaction::new(value_to_holder as u64, value_to_counterparty as u64, holder_shutdown_script, counterparty_shutdown_script, funding_outpoint);
2316                 (closing_transaction, total_fee_satoshis)
2317         }
2318
2319         fn funding_outpoint(&self) -> OutPoint {
2320                 self.context.channel_transaction_parameters.funding_outpoint.unwrap()
2321         }
2322
2323         /// Claims an HTLC while we're disconnected from a peer, dropping the [`ChannelMonitorUpdate`]
2324         /// entirely.
2325         ///
2326         /// The [`ChannelMonitor`] for this channel MUST be updated out-of-band with the preimage
2327         /// provided (i.e. without calling [`crate::chain::Watch::update_channel`]).
2328         ///
2329         /// The HTLC claim will end up in the holding cell (because the caller must ensure the peer is
2330         /// disconnected).
2331         pub fn claim_htlc_while_disconnected_dropping_mon_update<L: Deref>
2332                 (&mut self, htlc_id_arg: u64, payment_preimage_arg: PaymentPreimage, logger: &L)
2333         where L::Target: Logger {
2334                 // Assert that we'll add the HTLC claim to the holding cell in `get_update_fulfill_htlc`
2335                 // (see equivalent if condition there).
2336                 assert!(self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32 | ChannelState::PeerDisconnected as u32 | ChannelState::MonitorUpdateInProgress as u32) != 0);
2337                 let mon_update_id = self.context.latest_monitor_update_id; // Forget the ChannelMonitor update
2338                 let fulfill_resp = self.get_update_fulfill_htlc(htlc_id_arg, payment_preimage_arg, logger);
2339                 self.context.latest_monitor_update_id = mon_update_id;
2340                 if let UpdateFulfillFetch::NewClaim { msg, .. } = fulfill_resp {
2341                         assert!(msg.is_none()); // The HTLC must have ended up in the holding cell.
2342                 }
2343         }
2344
2345         fn get_update_fulfill_htlc<L: Deref>(&mut self, htlc_id_arg: u64, payment_preimage_arg: PaymentPreimage, logger: &L) -> UpdateFulfillFetch where L::Target: Logger {
2346                 // Either ChannelReady got set (which means it won't be unset) or there is no way any
2347                 // caller thought we could have something claimed (cause we wouldn't have accepted in an
2348                 // incoming HTLC anyway). If we got to ShutdownComplete, callers aren't allowed to call us,
2349                 // either.
2350                 if (self.context.channel_state & (ChannelState::ChannelReady as u32)) != (ChannelState::ChannelReady as u32) {
2351                         panic!("Was asked to fulfill an HTLC when channel was not in an operational state");
2352                 }
2353                 assert_eq!(self.context.channel_state & ChannelState::ShutdownComplete as u32, 0);
2354
2355                 // ChannelManager may generate duplicate claims/fails due to HTLC update events from
2356                 // on-chain ChannelsMonitors during block rescan. Ideally we'd figure out a way to drop
2357                 // these, but for now we just have to treat them as normal.
2358
2359                 let mut pending_idx = core::usize::MAX;
2360                 let mut htlc_value_msat = 0;
2361                 for (idx, htlc) in self.context.pending_inbound_htlcs.iter().enumerate() {
2362                         if htlc.htlc_id == htlc_id_arg {
2363                                 debug_assert_eq!(htlc.payment_hash, PaymentHash(Sha256::hash(&payment_preimage_arg.0[..]).into_inner()));
2364                                 log_debug!(logger, "Claiming inbound HTLC id {} with payment hash {} with preimage {}",
2365                                         htlc.htlc_id, htlc.payment_hash, payment_preimage_arg);
2366                                 match htlc.state {
2367                                         InboundHTLCState::Committed => {},
2368                                         InboundHTLCState::LocalRemoved(ref reason) => {
2369                                                 if let &InboundHTLCRemovalReason::Fulfill(_) = reason {
2370                                                 } else {
2371                                                         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());
2372                                                         debug_assert!(false, "Tried to fulfill an HTLC that was already failed");
2373                                                 }
2374                                                 return UpdateFulfillFetch::DuplicateClaim {};
2375                                         },
2376                                         _ => {
2377                                                 debug_assert!(false, "Have an inbound HTLC we tried to claim before it was fully committed to");
2378                                                 // Don't return in release mode here so that we can update channel_monitor
2379                                         }
2380                                 }
2381                                 pending_idx = idx;
2382                                 htlc_value_msat = htlc.amount_msat;
2383                                 break;
2384                         }
2385                 }
2386                 if pending_idx == core::usize::MAX {
2387                         #[cfg(any(test, fuzzing))]
2388                         // If we failed to find an HTLC to fulfill, make sure it was previously fulfilled and
2389                         // this is simply a duplicate claim, not previously failed and we lost funds.
2390                         debug_assert!(self.context.historical_inbound_htlc_fulfills.contains(&htlc_id_arg));
2391                         return UpdateFulfillFetch::DuplicateClaim {};
2392                 }
2393
2394                 // Now update local state:
2395                 //
2396                 // We have to put the payment_preimage in the channel_monitor right away here to ensure we
2397                 // can claim it even if the channel hits the chain before we see their next commitment.
2398                 self.context.latest_monitor_update_id += 1;
2399                 let monitor_update = ChannelMonitorUpdate {
2400                         update_id: self.context.latest_monitor_update_id,
2401                         updates: vec![ChannelMonitorUpdateStep::PaymentPreimage {
2402                                 payment_preimage: payment_preimage_arg.clone(),
2403                         }],
2404                 };
2405
2406                 if (self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32 | ChannelState::PeerDisconnected as u32 | ChannelState::MonitorUpdateInProgress as u32)) != 0 {
2407                         // Note that this condition is the same as the assertion in
2408                         // `claim_htlc_while_disconnected_dropping_mon_update` and must match exactly -
2409                         // `claim_htlc_while_disconnected_dropping_mon_update` would not work correctly if we
2410                         // do not not get into this branch.
2411                         for pending_update in self.context.holding_cell_htlc_updates.iter() {
2412                                 match pending_update {
2413                                         &HTLCUpdateAwaitingACK::ClaimHTLC { htlc_id, .. } => {
2414                                                 if htlc_id_arg == htlc_id {
2415                                                         // Make sure we don't leave latest_monitor_update_id incremented here:
2416                                                         self.context.latest_monitor_update_id -= 1;
2417                                                         #[cfg(any(test, fuzzing))]
2418                                                         debug_assert!(self.context.historical_inbound_htlc_fulfills.contains(&htlc_id_arg));
2419                                                         return UpdateFulfillFetch::DuplicateClaim {};
2420                                                 }
2421                                         },
2422                                         &HTLCUpdateAwaitingACK::FailHTLC { htlc_id, .. } => {
2423                                                 if htlc_id_arg == htlc_id {
2424                                                         log_warn!(logger, "Have preimage and want to fulfill HTLC with pending failure against channel {}", &self.context.channel_id());
2425                                                         // TODO: We may actually be able to switch to a fulfill here, though its
2426                                                         // rare enough it may not be worth the complexity burden.
2427                                                         debug_assert!(false, "Tried to fulfill an HTLC that was already failed");
2428                                                         return UpdateFulfillFetch::NewClaim { monitor_update, htlc_value_msat, msg: None };
2429                                                 }
2430                                         },
2431                                         _ => {}
2432                                 }
2433                         }
2434                         log_trace!(logger, "Adding HTLC claim to holding_cell in channel {}! Current state: {}", &self.context.channel_id(), self.context.channel_state);
2435                         self.context.holding_cell_htlc_updates.push(HTLCUpdateAwaitingACK::ClaimHTLC {
2436                                 payment_preimage: payment_preimage_arg, htlc_id: htlc_id_arg,
2437                         });
2438                         #[cfg(any(test, fuzzing))]
2439                         self.context.historical_inbound_htlc_fulfills.insert(htlc_id_arg);
2440                         return UpdateFulfillFetch::NewClaim { monitor_update, htlc_value_msat, msg: None };
2441                 }
2442                 #[cfg(any(test, fuzzing))]
2443                 self.context.historical_inbound_htlc_fulfills.insert(htlc_id_arg);
2444
2445                 {
2446                         let htlc = &mut self.context.pending_inbound_htlcs[pending_idx];
2447                         if let InboundHTLCState::Committed = htlc.state {
2448                         } else {
2449                                 debug_assert!(false, "Have an inbound HTLC we tried to claim before it was fully committed to");
2450                                 return UpdateFulfillFetch::NewClaim { monitor_update, htlc_value_msat, msg: None };
2451                         }
2452                         log_trace!(logger, "Upgrading HTLC {} to LocalRemoved with a Fulfill in channel {}!", &htlc.payment_hash, &self.context.channel_id);
2453                         htlc.state = InboundHTLCState::LocalRemoved(InboundHTLCRemovalReason::Fulfill(payment_preimage_arg.clone()));
2454                 }
2455
2456                 UpdateFulfillFetch::NewClaim {
2457                         monitor_update,
2458                         htlc_value_msat,
2459                         msg: Some(msgs::UpdateFulfillHTLC {
2460                                 channel_id: self.context.channel_id(),
2461                                 htlc_id: htlc_id_arg,
2462                                 payment_preimage: payment_preimage_arg,
2463                         }),
2464                 }
2465         }
2466
2467         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 {
2468                 let release_cs_monitor = self.context.blocked_monitor_updates.is_empty();
2469                 match self.get_update_fulfill_htlc(htlc_id, payment_preimage, logger) {
2470                         UpdateFulfillFetch::NewClaim { mut monitor_update, htlc_value_msat, msg } => {
2471                                 // Even if we aren't supposed to let new monitor updates with commitment state
2472                                 // updates run, we still need to push the preimage ChannelMonitorUpdateStep no
2473                                 // matter what. Sadly, to push a new monitor update which flies before others
2474                                 // already queued, we have to insert it into the pending queue and update the
2475                                 // update_ids of all the following monitors.
2476                                 if release_cs_monitor && msg.is_some() {
2477                                         let mut additional_update = self.build_commitment_no_status_check(logger);
2478                                         // build_commitment_no_status_check may bump latest_monitor_id but we want them
2479                                         // to be strictly increasing by one, so decrement it here.
2480                                         self.context.latest_monitor_update_id = monitor_update.update_id;
2481                                         monitor_update.updates.append(&mut additional_update.updates);
2482                                 } else {
2483                                         let new_mon_id = self.context.blocked_monitor_updates.get(0)
2484                                                 .map(|upd| upd.update.update_id).unwrap_or(monitor_update.update_id);
2485                                         monitor_update.update_id = new_mon_id;
2486                                         for held_update in self.context.blocked_monitor_updates.iter_mut() {
2487                                                 held_update.update.update_id += 1;
2488                                         }
2489                                         if msg.is_some() {
2490                                                 debug_assert!(false, "If there is a pending blocked monitor we should have MonitorUpdateInProgress set");
2491                                                 let update = self.build_commitment_no_status_check(logger);
2492                                                 self.context.blocked_monitor_updates.push(PendingChannelMonitorUpdate {
2493                                                         update,
2494                                                 });
2495                                         }
2496                                 }
2497
2498                                 self.monitor_updating_paused(false, msg.is_some(), false, Vec::new(), Vec::new(), Vec::new());
2499                                 UpdateFulfillCommitFetch::NewClaim { monitor_update, htlc_value_msat, }
2500                         },
2501                         UpdateFulfillFetch::DuplicateClaim {} => UpdateFulfillCommitFetch::DuplicateClaim {},
2502                 }
2503         }
2504
2505         /// We can only have one resolution per HTLC. In some cases around reconnect, we may fulfill
2506         /// an HTLC more than once or fulfill once and then attempt to fail after reconnect. We cannot,
2507         /// however, fail more than once as we wait for an upstream failure to be irrevocably committed
2508         /// before we fail backwards.
2509         ///
2510         /// If we do fail twice, we `debug_assert!(false)` and return `Ok(None)`. Thus, this will always
2511         /// return `Ok(_)` if preconditions are met. In any case, `Err`s will only be
2512         /// [`ChannelError::Ignore`].
2513         pub fn queue_fail_htlc<L: Deref>(&mut self, htlc_id_arg: u64, err_packet: msgs::OnionErrorPacket, logger: &L)
2514         -> Result<(), ChannelError> where L::Target: Logger {
2515                 self.fail_htlc(htlc_id_arg, err_packet, true, logger)
2516                         .map(|msg_opt| assert!(msg_opt.is_none(), "We forced holding cell?"))
2517         }
2518
2519         /// We can only have one resolution per HTLC. In some cases around reconnect, we may fulfill
2520         /// an HTLC more than once or fulfill once and then attempt to fail after reconnect. We cannot,
2521         /// however, fail more than once as we wait for an upstream failure to be irrevocably committed
2522         /// before we fail backwards.
2523         ///
2524         /// If we do fail twice, we `debug_assert!(false)` and return `Ok(None)`. Thus, this will always
2525         /// return `Ok(_)` if preconditions are met. In any case, `Err`s will only be
2526         /// [`ChannelError::Ignore`].
2527         fn fail_htlc<L: Deref>(&mut self, htlc_id_arg: u64, err_packet: msgs::OnionErrorPacket, mut force_holding_cell: bool, logger: &L)
2528         -> Result<Option<msgs::UpdateFailHTLC>, ChannelError> where L::Target: Logger {
2529                 if (self.context.channel_state & (ChannelState::ChannelReady as u32)) != (ChannelState::ChannelReady as u32) {
2530                         panic!("Was asked to fail an HTLC when channel was not in an operational state");
2531                 }
2532                 assert_eq!(self.context.channel_state & ChannelState::ShutdownComplete as u32, 0);
2533
2534                 // ChannelManager may generate duplicate claims/fails due to HTLC update events from
2535                 // on-chain ChannelsMonitors during block rescan. Ideally we'd figure out a way to drop
2536                 // these, but for now we just have to treat them as normal.
2537
2538                 let mut pending_idx = core::usize::MAX;
2539                 for (idx, htlc) in self.context.pending_inbound_htlcs.iter().enumerate() {
2540                         if htlc.htlc_id == htlc_id_arg {
2541                                 match htlc.state {
2542                                         InboundHTLCState::Committed => {},
2543                                         InboundHTLCState::LocalRemoved(ref reason) => {
2544                                                 if let &InboundHTLCRemovalReason::Fulfill(_) = reason {
2545                                                 } else {
2546                                                         debug_assert!(false, "Tried to fail an HTLC that was already failed");
2547                                                 }
2548                                                 return Ok(None);
2549                                         },
2550                                         _ => {
2551                                                 debug_assert!(false, "Have an inbound HTLC we tried to claim before it was fully committed to");
2552                                                 return Err(ChannelError::Ignore(format!("Unable to find a pending HTLC which matched the given HTLC ID ({})", htlc.htlc_id)));
2553                                         }
2554                                 }
2555                                 pending_idx = idx;
2556                         }
2557                 }
2558                 if pending_idx == core::usize::MAX {
2559                         #[cfg(any(test, fuzzing))]
2560                         // If we failed to find an HTLC to fail, make sure it was previously fulfilled and this
2561                         // is simply a duplicate fail, not previously failed and we failed-back too early.
2562                         debug_assert!(self.context.historical_inbound_htlc_fulfills.contains(&htlc_id_arg));
2563                         return Ok(None);
2564                 }
2565
2566                 if (self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32 | ChannelState::PeerDisconnected as u32 | ChannelState::MonitorUpdateInProgress as u32)) != 0 {
2567                         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!");
2568                         force_holding_cell = true;
2569                 }
2570
2571                 // Now update local state:
2572                 if force_holding_cell {
2573                         for pending_update in self.context.holding_cell_htlc_updates.iter() {
2574                                 match pending_update {
2575                                         &HTLCUpdateAwaitingACK::ClaimHTLC { htlc_id, .. } => {
2576                                                 if htlc_id_arg == htlc_id {
2577                                                         #[cfg(any(test, fuzzing))]
2578                                                         debug_assert!(self.context.historical_inbound_htlc_fulfills.contains(&htlc_id_arg));
2579                                                         return Ok(None);
2580                                                 }
2581                                         },
2582                                         &HTLCUpdateAwaitingACK::FailHTLC { htlc_id, .. } => {
2583                                                 if htlc_id_arg == htlc_id {
2584                                                         debug_assert!(false, "Tried to fail an HTLC that was already failed");
2585                                                         return Err(ChannelError::Ignore("Unable to find a pending HTLC which matched the given HTLC ID".to_owned()));
2586                                                 }
2587                                         },
2588                                         _ => {}
2589                                 }
2590                         }
2591                         log_trace!(logger, "Placing failure for HTLC ID {} in holding cell in channel {}.", htlc_id_arg, &self.context.channel_id());
2592                         self.context.holding_cell_htlc_updates.push(HTLCUpdateAwaitingACK::FailHTLC {
2593                                 htlc_id: htlc_id_arg,
2594                                 err_packet,
2595                         });
2596                         return Ok(None);
2597                 }
2598
2599                 log_trace!(logger, "Failing HTLC ID {} back with a update_fail_htlc message in channel {}.", htlc_id_arg, &self.context.channel_id());
2600                 {
2601                         let htlc = &mut self.context.pending_inbound_htlcs[pending_idx];
2602                         htlc.state = InboundHTLCState::LocalRemoved(InboundHTLCRemovalReason::FailRelay(err_packet.clone()));
2603                 }
2604
2605                 Ok(Some(msgs::UpdateFailHTLC {
2606                         channel_id: self.context.channel_id(),
2607                         htlc_id: htlc_id_arg,
2608                         reason: err_packet
2609                 }))
2610         }
2611
2612         // Message handlers:
2613
2614         /// Handles a funding_signed message from the remote end.
2615         /// If this call is successful, broadcast the funding transaction (and not before!)
2616         pub fn funding_signed<L: Deref>(
2617                 &mut self, msg: &msgs::FundingSigned, best_block: BestBlock, signer_provider: &SP, logger: &L
2618         ) -> Result<ChannelMonitor<<SP::Target as SignerProvider>::Signer>, ChannelError>
2619         where
2620                 L::Target: Logger
2621         {
2622                 if !self.context.is_outbound() {
2623                         return Err(ChannelError::Close("Received funding_signed for an inbound channel?".to_owned()));
2624                 }
2625                 if self.context.channel_state & !(ChannelState::MonitorUpdateInProgress as u32) != ChannelState::FundingCreated as u32 {
2626                         return Err(ChannelError::Close("Received funding_signed in strange state!".to_owned()));
2627                 }
2628                 if self.context.commitment_secrets.get_min_seen_secret() != (1 << 48) ||
2629                                 self.context.cur_counterparty_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER ||
2630                                 self.context.cur_holder_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER {
2631                         panic!("Should not have advanced channel commitment tx numbers prior to funding_created");
2632                 }
2633
2634                 let funding_script = self.context.get_funding_redeemscript();
2635
2636                 let counterparty_keys = self.context.build_remote_transaction_keys();
2637                 let counterparty_initial_commitment_tx = self.context.build_commitment_transaction(self.context.cur_counterparty_commitment_transaction_number, &counterparty_keys, false, false, logger).tx;
2638                 let counterparty_trusted_tx = counterparty_initial_commitment_tx.trust();
2639                 let counterparty_initial_bitcoin_tx = counterparty_trusted_tx.built_transaction();
2640
2641                 log_trace!(logger, "Initial counterparty tx for channel {} is: txid {} tx {}",
2642                         &self.context.channel_id(), counterparty_initial_bitcoin_tx.txid, encode::serialize_hex(&counterparty_initial_bitcoin_tx.transaction));
2643
2644                 let holder_signer = self.context.build_holder_transaction_keys(self.context.cur_holder_commitment_transaction_number);
2645                 let initial_commitment_tx = self.context.build_commitment_transaction(self.context.cur_holder_commitment_transaction_number, &holder_signer, true, false, logger).tx;
2646                 {
2647                         let trusted_tx = initial_commitment_tx.trust();
2648                         let initial_commitment_bitcoin_tx = trusted_tx.built_transaction();
2649                         let sighash = initial_commitment_bitcoin_tx.get_sighash_all(&funding_script, self.context.channel_value_satoshis);
2650                         // They sign our commitment transaction, allowing us to broadcast the tx if we wish.
2651                         if let Err(_) = self.context.secp_ctx.verify_ecdsa(&sighash, &msg.signature, &self.context.get_counterparty_pubkeys().funding_pubkey) {
2652                                 return Err(ChannelError::Close("Invalid funding_signed signature from peer".to_owned()));
2653                         }
2654                 }
2655
2656                 let holder_commitment_tx = HolderCommitmentTransaction::new(
2657                         initial_commitment_tx,
2658                         msg.signature,
2659                         Vec::new(),
2660                         &self.context.get_holder_pubkeys().funding_pubkey,
2661                         self.context.counterparty_funding_pubkey()
2662                 );
2663
2664                 self.context.holder_signer.as_ref().validate_holder_commitment(&holder_commitment_tx, Vec::new())
2665                         .map_err(|_| ChannelError::Close("Failed to validate our commitment".to_owned()))?;
2666
2667
2668                 let funding_redeemscript = self.context.get_funding_redeemscript();
2669                 let funding_txo = self.context.get_funding_txo().unwrap();
2670                 let funding_txo_script = funding_redeemscript.to_v0_p2wsh();
2671                 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());
2672                 let shutdown_script = self.context.shutdown_scriptpubkey.clone().map(|script| script.into_inner());
2673                 let mut monitor_signer = signer_provider.derive_channel_signer(self.context.channel_value_satoshis, self.context.channel_keys_id);
2674                 monitor_signer.provide_channel_parameters(&self.context.channel_transaction_parameters);
2675                 let channel_monitor = ChannelMonitor::new(self.context.secp_ctx.clone(), monitor_signer,
2676                                                           shutdown_script, self.context.get_holder_selected_contest_delay(),
2677                                                           &self.context.destination_script, (funding_txo, funding_txo_script),
2678                                                           &self.context.channel_transaction_parameters,
2679                                                           funding_redeemscript.clone(), self.context.channel_value_satoshis,
2680                                                           obscure_factor,
2681                                                           holder_commitment_tx, best_block, self.context.counterparty_node_id);
2682
2683                 channel_monitor.provide_initial_counterparty_commitment_tx(
2684                         counterparty_initial_bitcoin_tx.txid, Vec::new(),
2685                         self.context.cur_counterparty_commitment_transaction_number,
2686                         self.context.counterparty_cur_commitment_point.unwrap(),
2687                         counterparty_initial_commitment_tx.feerate_per_kw(),
2688                         counterparty_initial_commitment_tx.to_broadcaster_value_sat(),
2689                         counterparty_initial_commitment_tx.to_countersignatory_value_sat(), logger);
2690
2691                 assert_eq!(self.context.channel_state & (ChannelState::MonitorUpdateInProgress as u32), 0); // We have no had any monitor(s) yet to fail update!
2692                 if self.context.is_batch_funding() {
2693                         self.context.channel_state = ChannelState::FundingSent as u32 | ChannelState::WaitingForBatch as u32;
2694                 } else {
2695                         self.context.channel_state = ChannelState::FundingSent as u32;
2696                 }
2697                 self.context.cur_holder_commitment_transaction_number -= 1;
2698                 self.context.cur_counterparty_commitment_transaction_number -= 1;
2699
2700                 log_info!(logger, "Received funding_signed from peer for channel {}", &self.context.channel_id());
2701
2702                 let need_channel_ready = self.check_get_channel_ready(0).is_some();
2703                 self.monitor_updating_paused(false, false, need_channel_ready, Vec::new(), Vec::new(), Vec::new());
2704                 Ok(channel_monitor)
2705         }
2706
2707         /// Updates the state of the channel to indicate that all channels in the batch have received
2708         /// funding_signed and persisted their monitors.
2709         /// The funding transaction is consequently allowed to be broadcast, and the channel can be
2710         /// treated as a non-batch channel going forward.
2711         pub fn set_batch_ready(&mut self) {
2712                 self.context.is_batch_funding = None;
2713                 self.context.channel_state &= !(ChannelState::WaitingForBatch as u32);
2714         }
2715
2716         /// Handles a channel_ready message from our peer. If we've already sent our channel_ready
2717         /// and the channel is now usable (and public), this may generate an announcement_signatures to
2718         /// reply with.
2719         pub fn channel_ready<NS: Deref, L: Deref>(
2720                 &mut self, msg: &msgs::ChannelReady, node_signer: &NS, chain_hash: ChainHash,
2721                 user_config: &UserConfig, best_block: &BestBlock, logger: &L
2722         ) -> Result<Option<msgs::AnnouncementSignatures>, ChannelError>
2723         where
2724                 NS::Target: NodeSigner,
2725                 L::Target: Logger
2726         {
2727                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
2728                         self.context.workaround_lnd_bug_4006 = Some(msg.clone());
2729                         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()));
2730                 }
2731
2732                 if let Some(scid_alias) = msg.short_channel_id_alias {
2733                         if Some(scid_alias) != self.context.short_channel_id {
2734                                 // The scid alias provided can be used to route payments *from* our counterparty,
2735                                 // i.e. can be used for inbound payments and provided in invoices, but is not used
2736                                 // when routing outbound payments.
2737                                 self.context.latest_inbound_scid_alias = Some(scid_alias);
2738                         }
2739                 }
2740
2741                 let non_shutdown_state = self.context.channel_state & (!MULTI_STATE_FLAGS);
2742
2743                 // Our channel_ready shouldn't have been sent if we are waiting for other channels in the
2744                 // batch, but we can receive channel_ready messages.
2745                 debug_assert!(
2746                         non_shutdown_state & ChannelState::OurChannelReady as u32 == 0 ||
2747                         non_shutdown_state & ChannelState::WaitingForBatch as u32 == 0
2748                 );
2749                 if non_shutdown_state & !(ChannelState::WaitingForBatch as u32) == ChannelState::FundingSent as u32 {
2750                         self.context.channel_state |= ChannelState::TheirChannelReady as u32;
2751                 } else if non_shutdown_state == (ChannelState::FundingSent as u32 | ChannelState::OurChannelReady as u32) {
2752                         self.context.channel_state = ChannelState::ChannelReady as u32 | (self.context.channel_state & MULTI_STATE_FLAGS);
2753                         self.context.update_time_counter += 1;
2754                 } else if self.context.channel_state & (ChannelState::ChannelReady as u32) != 0 ||
2755                         // If we reconnected before sending our `channel_ready` they may still resend theirs:
2756                         (self.context.channel_state & (ChannelState::FundingSent as u32 | ChannelState::TheirChannelReady as u32) ==
2757                                               (ChannelState::FundingSent as u32 | ChannelState::TheirChannelReady as u32))
2758                 {
2759                         // They probably disconnected/reconnected and re-sent the channel_ready, which is
2760                         // required, or they're sending a fresh SCID alias.
2761                         let expected_point =
2762                                 if self.context.cur_counterparty_commitment_transaction_number == INITIAL_COMMITMENT_NUMBER - 1 {
2763                                         // If they haven't ever sent an updated point, the point they send should match
2764                                         // the current one.
2765                                         self.context.counterparty_cur_commitment_point
2766                                 } else if self.context.cur_counterparty_commitment_transaction_number == INITIAL_COMMITMENT_NUMBER - 2 {
2767                                         // If we've advanced the commitment number once, the second commitment point is
2768                                         // at `counterparty_prev_commitment_point`, which is not yet revoked.
2769                                         debug_assert!(self.context.counterparty_prev_commitment_point.is_some());
2770                                         self.context.counterparty_prev_commitment_point
2771                                 } else {
2772                                         // If they have sent updated points, channel_ready is always supposed to match
2773                                         // their "first" point, which we re-derive here.
2774                                         Some(PublicKey::from_secret_key(&self.context.secp_ctx, &SecretKey::from_slice(
2775                                                         &self.context.commitment_secrets.get_secret(INITIAL_COMMITMENT_NUMBER - 1).expect("We should have all prev secrets available")
2776                                                 ).expect("We already advanced, so previous secret keys should have been validated already")))
2777                                 };
2778                         if expected_point != Some(msg.next_per_commitment_point) {
2779                                 return Err(ChannelError::Close("Peer sent a reconnect channel_ready with a different point".to_owned()));
2780                         }
2781                         return Ok(None);
2782                 } else {
2783                         return Err(ChannelError::Close("Peer sent a channel_ready at a strange time".to_owned()));
2784                 }
2785
2786                 self.context.counterparty_prev_commitment_point = self.context.counterparty_cur_commitment_point;
2787                 self.context.counterparty_cur_commitment_point = Some(msg.next_per_commitment_point);
2788
2789                 log_info!(logger, "Received channel_ready from peer for channel {}", &self.context.channel_id());
2790
2791                 Ok(self.get_announcement_sigs(node_signer, chain_hash, user_config, best_block.height(), logger))
2792         }
2793
2794         pub fn update_add_htlc<F, FE: Deref, L: Deref>(
2795                 &mut self, msg: &msgs::UpdateAddHTLC, mut pending_forward_status: PendingHTLCStatus,
2796                 create_pending_htlc_status: F, fee_estimator: &LowerBoundedFeeEstimator<FE>, logger: &L
2797         ) -> Result<(), ChannelError>
2798         where F: for<'a> Fn(&'a Self, PendingHTLCStatus, u16) -> PendingHTLCStatus,
2799                 FE::Target: FeeEstimator, L::Target: Logger,
2800         {
2801                 // We can't accept HTLCs sent after we've sent a shutdown.
2802                 let local_sent_shutdown = (self.context.channel_state & (ChannelState::ChannelReady as u32 | ChannelState::LocalShutdownSent as u32)) != (ChannelState::ChannelReady as u32);
2803                 if local_sent_shutdown {
2804                         pending_forward_status = create_pending_htlc_status(self, pending_forward_status, 0x4000|8);
2805                 }
2806                 // If the remote has sent a shutdown prior to adding this HTLC, then they are in violation of the spec.
2807                 let remote_sent_shutdown = (self.context.channel_state & (ChannelState::ChannelReady as u32 | ChannelState::RemoteShutdownSent as u32)) != (ChannelState::ChannelReady as u32);
2808                 if remote_sent_shutdown {
2809                         return Err(ChannelError::Close("Got add HTLC message when channel was not in an operational state".to_owned()));
2810                 }
2811                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
2812                         return Err(ChannelError::Close("Peer sent update_add_htlc when we needed a channel_reestablish".to_owned()));
2813                 }
2814                 if msg.amount_msat > self.context.channel_value_satoshis * 1000 {
2815                         return Err(ChannelError::Close("Remote side tried to send more than the total value of the channel".to_owned()));
2816                 }
2817                 if msg.amount_msat == 0 {
2818                         return Err(ChannelError::Close("Remote side tried to send a 0-msat HTLC".to_owned()));
2819                 }
2820                 if msg.amount_msat < self.context.holder_htlc_minimum_msat {
2821                         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)));
2822                 }
2823
2824                 let inbound_stats = self.context.get_inbound_pending_htlc_stats(None);
2825                 let outbound_stats = self.context.get_outbound_pending_htlc_stats(None);
2826                 if inbound_stats.pending_htlcs + 1 > self.context.holder_max_accepted_htlcs as u32 {
2827                         return Err(ChannelError::Close(format!("Remote tried to push more than our max accepted HTLCs ({})", self.context.holder_max_accepted_htlcs)));
2828                 }
2829                 if inbound_stats.pending_htlcs_value_msat + msg.amount_msat > self.context.holder_max_htlc_value_in_flight_msat {
2830                         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)));
2831                 }
2832
2833                 // Check holder_selected_channel_reserve_satoshis (we're getting paid, so they have to at least meet
2834                 // the reserve_satoshis we told them to always have as direct payment so that they lose
2835                 // something if we punish them for broadcasting an old state).
2836                 // Note that we don't really care about having a small/no to_remote output in our local
2837                 // commitment transactions, as the purpose of the channel reserve is to ensure we can
2838                 // punish *them* if they misbehave, so we discount any outbound HTLCs which will not be
2839                 // present in the next commitment transaction we send them (at least for fulfilled ones,
2840                 // failed ones won't modify value_to_self).
2841                 // Note that we will send HTLCs which another instance of rust-lightning would think
2842                 // violate the reserve value if we do not do this (as we forget inbound HTLCs from the
2843                 // Channel state once they will not be present in the next received commitment
2844                 // transaction).
2845                 let mut removed_outbound_total_msat = 0;
2846                 for ref htlc in self.context.pending_outbound_htlcs.iter() {
2847                         if let OutboundHTLCState::AwaitingRemoteRevokeToRemove(OutboundHTLCOutcome::Success(_)) = htlc.state {
2848                                 removed_outbound_total_msat += htlc.amount_msat;
2849                         } else if let OutboundHTLCState::AwaitingRemovedRemoteRevoke(OutboundHTLCOutcome::Success(_)) = htlc.state {
2850                                 removed_outbound_total_msat += htlc.amount_msat;
2851                         }
2852                 }
2853
2854                 let max_dust_htlc_exposure_msat = self.context.get_max_dust_htlc_exposure_msat(fee_estimator);
2855                 let (htlc_timeout_dust_limit, htlc_success_dust_limit) = if self.context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
2856                         (0, 0)
2857                 } else {
2858                         let dust_buffer_feerate = self.context.get_dust_buffer_feerate(None) as u64;
2859                         (dust_buffer_feerate * htlc_timeout_tx_weight(self.context.get_channel_type()) / 1000,
2860                                 dust_buffer_feerate * htlc_success_tx_weight(self.context.get_channel_type()) / 1000)
2861                 };
2862                 let exposure_dust_limit_timeout_sats = htlc_timeout_dust_limit + self.context.counterparty_dust_limit_satoshis;
2863                 if msg.amount_msat / 1000 < exposure_dust_limit_timeout_sats {
2864                         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;
2865                         if on_counterparty_tx_dust_htlc_exposure_msat > max_dust_htlc_exposure_msat {
2866                                 log_info!(logger, "Cannot accept value that would put our exposure to dust HTLCs at {} over the limit {} on counterparty commitment tx",
2867                                         on_counterparty_tx_dust_htlc_exposure_msat, max_dust_htlc_exposure_msat);
2868                                 pending_forward_status = create_pending_htlc_status(self, pending_forward_status, 0x1000|7);
2869                         }
2870                 }
2871
2872                 let exposure_dust_limit_success_sats = htlc_success_dust_limit + self.context.holder_dust_limit_satoshis;
2873                 if msg.amount_msat / 1000 < exposure_dust_limit_success_sats {
2874                         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;
2875                         if on_holder_tx_dust_htlc_exposure_msat > max_dust_htlc_exposure_msat {
2876                                 log_info!(logger, "Cannot accept value that would put our exposure to dust HTLCs at {} over the limit {} on holder commitment tx",
2877                                         on_holder_tx_dust_htlc_exposure_msat, max_dust_htlc_exposure_msat);
2878                                 pending_forward_status = create_pending_htlc_status(self, pending_forward_status, 0x1000|7);
2879                         }
2880                 }
2881
2882                 let pending_value_to_self_msat =
2883                         self.context.value_to_self_msat + inbound_stats.pending_htlcs_value_msat - removed_outbound_total_msat;
2884                 let pending_remote_value_msat =
2885                         self.context.channel_value_satoshis * 1000 - pending_value_to_self_msat;
2886                 if pending_remote_value_msat < msg.amount_msat {
2887                         return Err(ChannelError::Close("Remote HTLC add would overdraw remaining funds".to_owned()));
2888                 }
2889
2890                 // Check that the remote can afford to pay for this HTLC on-chain at the current
2891                 // feerate_per_kw, while maintaining their channel reserve (as required by the spec).
2892                 {
2893                         let remote_commit_tx_fee_msat = if self.context.is_outbound() { 0 } else {
2894                                 let htlc_candidate = HTLCCandidate::new(msg.amount_msat, HTLCInitiator::RemoteOffered);
2895                                 self.context.next_remote_commit_tx_fee_msat(htlc_candidate, None) // Don't include the extra fee spike buffer HTLC in calculations
2896                         };
2897                         let anchor_outputs_value_msat = if !self.context.is_outbound() && self.context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
2898                                 ANCHOR_OUTPUT_VALUE_SATOSHI * 2 * 1000
2899                         } else {
2900                                 0
2901                         };
2902                         if pending_remote_value_msat.saturating_sub(msg.amount_msat).saturating_sub(anchor_outputs_value_msat) < remote_commit_tx_fee_msat {
2903                                 return Err(ChannelError::Close("Remote HTLC add would not leave enough to pay for fees".to_owned()));
2904                         };
2905                         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 {
2906                                 return Err(ChannelError::Close("Remote HTLC add would put them under remote reserve value".to_owned()));
2907                         }
2908                 }
2909
2910                 let anchor_outputs_value_msat = if self.context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
2911                         ANCHOR_OUTPUT_VALUE_SATOSHI * 2 * 1000
2912                 } else {
2913                         0
2914                 };
2915                 if !self.context.is_outbound() {
2916                         // `Some(())` is for the fee spike buffer we keep for the remote. This deviates from
2917                         // the spec because the fee spike buffer requirement doesn't exist on the receiver's
2918                         // side, only on the sender's. Note that with anchor outputs we are no longer as
2919                         // sensitive to fee spikes, so we need to account for them.
2920                         let htlc_candidate = HTLCCandidate::new(msg.amount_msat, HTLCInitiator::RemoteOffered);
2921                         let mut remote_fee_cost_incl_stuck_buffer_msat = self.context.next_remote_commit_tx_fee_msat(htlc_candidate, Some(()));
2922                         if !self.context.get_channel_type().supports_anchors_zero_fee_htlc_tx() {
2923                                 remote_fee_cost_incl_stuck_buffer_msat *= FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE;
2924                         }
2925                         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 {
2926                                 // Note that if the pending_forward_status is not updated here, then it's because we're already failing
2927                                 // the HTLC, i.e. its status is already set to failing.
2928                                 log_info!(logger, "Attempting to fail HTLC due to fee spike buffer violation in channel {}. Rebalancing is required.", &self.context.channel_id());
2929                                 pending_forward_status = create_pending_htlc_status(self, pending_forward_status, 0x1000|7);
2930                         }
2931                 } else {
2932                         // Check that they won't violate our local required channel reserve by adding this HTLC.
2933                         let htlc_candidate = HTLCCandidate::new(msg.amount_msat, HTLCInitiator::RemoteOffered);
2934                         let local_commit_tx_fee_msat = self.context.next_local_commit_tx_fee_msat(htlc_candidate, None);
2935                         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 {
2936                                 return Err(ChannelError::Close("Cannot accept HTLC that would put our balance under counterparty-announced channel reserve value".to_owned()));
2937                         }
2938                 }
2939                 if self.context.next_counterparty_htlc_id != msg.htlc_id {
2940                         return Err(ChannelError::Close(format!("Remote skipped HTLC ID (skipped ID: {})", self.context.next_counterparty_htlc_id)));
2941                 }
2942                 if msg.cltv_expiry >= 500000000 {
2943                         return Err(ChannelError::Close("Remote provided CLTV expiry in seconds instead of block height".to_owned()));
2944                 }
2945
2946                 if self.context.channel_state & ChannelState::LocalShutdownSent as u32 != 0 {
2947                         if let PendingHTLCStatus::Forward(_) = pending_forward_status {
2948                                 panic!("ChannelManager shouldn't be trying to add a forwardable HTLC after we've started closing");
2949                         }
2950                 }
2951
2952                 // Now update local state:
2953                 self.context.next_counterparty_htlc_id += 1;
2954                 self.context.pending_inbound_htlcs.push(InboundHTLCOutput {
2955                         htlc_id: msg.htlc_id,
2956                         amount_msat: msg.amount_msat,
2957                         payment_hash: msg.payment_hash,
2958                         cltv_expiry: msg.cltv_expiry,
2959                         state: InboundHTLCState::RemoteAnnounced(pending_forward_status),
2960                 });
2961                 Ok(())
2962         }
2963
2964         /// Marks an outbound HTLC which we have received update_fail/fulfill/malformed
2965         #[inline]
2966         fn mark_outbound_htlc_removed(&mut self, htlc_id: u64, check_preimage: Option<PaymentPreimage>, fail_reason: Option<HTLCFailReason>) -> Result<&OutboundHTLCOutput, ChannelError> {
2967                 assert!(!(check_preimage.is_some() && fail_reason.is_some()), "cannot fail while we have a preimage");
2968                 for htlc in self.context.pending_outbound_htlcs.iter_mut() {
2969                         if htlc.htlc_id == htlc_id {
2970                                 let outcome = match check_preimage {
2971                                         None => fail_reason.into(),
2972                                         Some(payment_preimage) => {
2973                                                 let payment_hash = PaymentHash(Sha256::hash(&payment_preimage.0[..]).into_inner());
2974                                                 if payment_hash != htlc.payment_hash {
2975                                                         return Err(ChannelError::Close(format!("Remote tried to fulfill HTLC ({}) with an incorrect preimage", htlc_id)));
2976                                                 }
2977                                                 OutboundHTLCOutcome::Success(Some(payment_preimage))
2978                                         }
2979                                 };
2980                                 match htlc.state {
2981                                         OutboundHTLCState::LocalAnnounced(_) =>
2982                                                 return Err(ChannelError::Close(format!("Remote tried to fulfill/fail HTLC ({}) before it had been committed", htlc_id))),
2983                                         OutboundHTLCState::Committed => {
2984                                                 htlc.state = OutboundHTLCState::RemoteRemoved(outcome);
2985                                         },
2986                                         OutboundHTLCState::AwaitingRemoteRevokeToRemove(_) | OutboundHTLCState::AwaitingRemovedRemoteRevoke(_) | OutboundHTLCState::RemoteRemoved(_) =>
2987                                                 return Err(ChannelError::Close(format!("Remote tried to fulfill/fail HTLC ({}) that they'd already fulfilled/failed", htlc_id))),
2988                                 }
2989                                 return Ok(htlc);
2990                         }
2991                 }
2992                 Err(ChannelError::Close("Remote tried to fulfill/fail an HTLC we couldn't find".to_owned()))
2993         }
2994
2995         pub fn update_fulfill_htlc(&mut self, msg: &msgs::UpdateFulfillHTLC) -> Result<(HTLCSource, u64), ChannelError> {
2996                 if (self.context.channel_state & (ChannelState::ChannelReady as u32)) != (ChannelState::ChannelReady as u32) {
2997                         return Err(ChannelError::Close("Got fulfill HTLC message when channel was not in an operational state".to_owned()));
2998                 }
2999                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
3000                         return Err(ChannelError::Close("Peer sent update_fulfill_htlc when we needed a channel_reestablish".to_owned()));
3001                 }
3002
3003                 self.mark_outbound_htlc_removed(msg.htlc_id, Some(msg.payment_preimage), None).map(|htlc| (htlc.source.clone(), htlc.amount_msat))
3004         }
3005
3006         pub fn update_fail_htlc(&mut self, msg: &msgs::UpdateFailHTLC, fail_reason: HTLCFailReason) -> Result<(), ChannelError> {
3007                 if (self.context.channel_state & (ChannelState::ChannelReady as u32)) != (ChannelState::ChannelReady as u32) {
3008                         return Err(ChannelError::Close("Got fail HTLC message when channel was not in an operational state".to_owned()));
3009                 }
3010                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
3011                         return Err(ChannelError::Close("Peer sent update_fail_htlc when we needed a channel_reestablish".to_owned()));
3012                 }
3013
3014                 self.mark_outbound_htlc_removed(msg.htlc_id, None, Some(fail_reason))?;
3015                 Ok(())
3016         }
3017
3018         pub fn update_fail_malformed_htlc(&mut self, msg: &msgs::UpdateFailMalformedHTLC, fail_reason: HTLCFailReason) -> Result<(), ChannelError> {
3019                 if (self.context.channel_state & (ChannelState::ChannelReady as u32)) != (ChannelState::ChannelReady as u32) {
3020                         return Err(ChannelError::Close("Got fail malformed HTLC message when channel was not in an operational state".to_owned()));
3021                 }
3022                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
3023                         return Err(ChannelError::Close("Peer sent update_fail_malformed_htlc when we needed a channel_reestablish".to_owned()));
3024                 }
3025
3026                 self.mark_outbound_htlc_removed(msg.htlc_id, None, Some(fail_reason))?;
3027                 Ok(())
3028         }
3029
3030         pub fn commitment_signed<L: Deref>(&mut self, msg: &msgs::CommitmentSigned, logger: &L) -> Result<Option<ChannelMonitorUpdate>, ChannelError>
3031                 where L::Target: Logger
3032         {
3033                 if (self.context.channel_state & (ChannelState::ChannelReady as u32)) != (ChannelState::ChannelReady as u32) {
3034                         return Err(ChannelError::Close("Got commitment signed message when channel was not in an operational state".to_owned()));
3035                 }
3036                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
3037                         return Err(ChannelError::Close("Peer sent commitment_signed when we needed a channel_reestablish".to_owned()));
3038                 }
3039                 if self.context.channel_state & BOTH_SIDES_SHUTDOWN_MASK == BOTH_SIDES_SHUTDOWN_MASK && self.context.last_sent_closing_fee.is_some() {
3040                         return Err(ChannelError::Close("Peer sent commitment_signed after we'd started exchanging closing_signeds".to_owned()));
3041                 }
3042
3043                 let funding_script = self.context.get_funding_redeemscript();
3044
3045                 let keys = self.context.build_holder_transaction_keys(self.context.cur_holder_commitment_transaction_number);
3046
3047                 let commitment_stats = self.context.build_commitment_transaction(self.context.cur_holder_commitment_transaction_number, &keys, true, false, logger);
3048                 let commitment_txid = {
3049                         let trusted_tx = commitment_stats.tx.trust();
3050                         let bitcoin_tx = trusted_tx.built_transaction();
3051                         let sighash = bitcoin_tx.get_sighash_all(&funding_script, self.context.channel_value_satoshis);
3052
3053                         log_trace!(logger, "Checking commitment tx signature {} by key {} against tx {} (sighash {}) with redeemscript {} in channel {}",
3054                                 log_bytes!(msg.signature.serialize_compact()[..]),
3055                                 log_bytes!(self.context.counterparty_funding_pubkey().serialize()), encode::serialize_hex(&bitcoin_tx.transaction),
3056                                 log_bytes!(sighash[..]), encode::serialize_hex(&funding_script), &self.context.channel_id());
3057                         if let Err(_) = self.context.secp_ctx.verify_ecdsa(&sighash, &msg.signature, &self.context.counterparty_funding_pubkey()) {
3058                                 return Err(ChannelError::Close("Invalid commitment tx signature from peer".to_owned()));
3059                         }
3060                         bitcoin_tx.txid
3061                 };
3062                 let mut htlcs_cloned: Vec<_> = commitment_stats.htlcs_included.iter().map(|htlc| (htlc.0.clone(), htlc.1.map(|h| h.clone()))).collect();
3063
3064                 // If our counterparty updated the channel fee in this commitment transaction, check that
3065                 // they can actually afford the new fee now.
3066                 let update_fee = if let Some((_, update_state)) = self.context.pending_update_fee {
3067                         update_state == FeeUpdateState::RemoteAnnounced
3068                 } else { false };
3069                 if update_fee {
3070                         debug_assert!(!self.context.is_outbound());
3071                         let counterparty_reserve_we_require_msat = self.context.holder_selected_channel_reserve_satoshis * 1000;
3072                         if commitment_stats.remote_balance_msat < commitment_stats.total_fee_sat * 1000 + counterparty_reserve_we_require_msat {
3073                                 return Err(ChannelError::Close("Funding remote cannot afford proposed new fee".to_owned()));
3074                         }
3075                 }
3076                 #[cfg(any(test, fuzzing))]
3077                 {
3078                         if self.context.is_outbound() {
3079                                 let projected_commit_tx_info = self.context.next_local_commitment_tx_fee_info_cached.lock().unwrap().take();
3080                                 *self.context.next_remote_commitment_tx_fee_info_cached.lock().unwrap() = None;
3081                                 if let Some(info) = projected_commit_tx_info {
3082                                         let total_pending_htlcs = self.context.pending_inbound_htlcs.len() + self.context.pending_outbound_htlcs.len()
3083                                                 + self.context.holding_cell_htlc_updates.len();
3084                                         if info.total_pending_htlcs == total_pending_htlcs
3085                                                 && info.next_holder_htlc_id == self.context.next_holder_htlc_id
3086                                                 && info.next_counterparty_htlc_id == self.context.next_counterparty_htlc_id
3087                                                 && info.feerate == self.context.feerate_per_kw {
3088                                                         assert_eq!(commitment_stats.total_fee_sat, info.fee / 1000);
3089                                                 }
3090                                 }
3091                         }
3092                 }
3093
3094                 if msg.htlc_signatures.len() != commitment_stats.num_nondust_htlcs {
3095                         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)));
3096                 }
3097
3098                 // Up to LDK 0.0.115, HTLC information was required to be duplicated in the
3099                 // `htlcs_and_sigs` vec and in the `holder_commitment_tx` itself, both of which were passed
3100                 // in the `ChannelMonitorUpdate`. In 0.0.115, support for having a separate set of
3101                 // outbound-non-dust-HTLCSources in the `ChannelMonitorUpdate` was added, however for
3102                 // backwards compatibility, we never use it in production. To provide test coverage, here,
3103                 // we randomly decide (in test/fuzzing builds) to use the new vec sometimes.
3104                 #[allow(unused_assignments, unused_mut)]
3105                 let mut separate_nondust_htlc_sources = false;
3106                 #[cfg(all(feature = "std", any(test, fuzzing)))] {
3107                         use core::hash::{BuildHasher, Hasher};
3108                         // Get a random value using the only std API to do so - the DefaultHasher
3109                         let rand_val = std::collections::hash_map::RandomState::new().build_hasher().finish();
3110                         separate_nondust_htlc_sources = rand_val % 2 == 0;
3111                 }
3112
3113                 let mut nondust_htlc_sources = Vec::with_capacity(htlcs_cloned.len());
3114                 let mut htlcs_and_sigs = Vec::with_capacity(htlcs_cloned.len());
3115                 for (idx, (htlc, mut source_opt)) in htlcs_cloned.drain(..).enumerate() {
3116                         if let Some(_) = htlc.transaction_output_index {
3117                                 let htlc_tx = chan_utils::build_htlc_transaction(&commitment_txid, commitment_stats.feerate_per_kw,
3118                                         self.context.get_counterparty_selected_contest_delay().unwrap(), &htlc, &self.context.channel_type,
3119                                         &keys.broadcaster_delayed_payment_key, &keys.revocation_key);
3120
3121                                 let htlc_redeemscript = chan_utils::get_htlc_redeemscript(&htlc, &self.context.channel_type, &keys);
3122                                 let htlc_sighashtype = if self.context.channel_type.supports_anchors_zero_fee_htlc_tx() { EcdsaSighashType::SinglePlusAnyoneCanPay } else { EcdsaSighashType::All };
3123                                 let htlc_sighash = hash_to_message!(&sighash::SighashCache::new(&htlc_tx).segwit_signature_hash(0, &htlc_redeemscript, htlc.amount_msat / 1000, htlc_sighashtype).unwrap()[..]);
3124                                 log_trace!(logger, "Checking HTLC tx signature {} by key {} against tx {} (sighash {}) with redeemscript {} in channel {}.",
3125                                         log_bytes!(msg.htlc_signatures[idx].serialize_compact()[..]), log_bytes!(keys.countersignatory_htlc_key.serialize()),
3126                                         encode::serialize_hex(&htlc_tx), log_bytes!(htlc_sighash[..]), encode::serialize_hex(&htlc_redeemscript), &self.context.channel_id());
3127                                 if let Err(_) = self.context.secp_ctx.verify_ecdsa(&htlc_sighash, &msg.htlc_signatures[idx], &keys.countersignatory_htlc_key) {
3128                                         return Err(ChannelError::Close("Invalid HTLC tx signature from peer".to_owned()));
3129                                 }
3130                                 if !separate_nondust_htlc_sources {
3131                                         htlcs_and_sigs.push((htlc, Some(msg.htlc_signatures[idx]), source_opt.take()));
3132                                 }
3133                         } else {
3134                                 htlcs_and_sigs.push((htlc, None, source_opt.take()));
3135                         }
3136                         if separate_nondust_htlc_sources {
3137                                 if let Some(source) = source_opt.take() {
3138                                         nondust_htlc_sources.push(source);
3139                                 }
3140                         }
3141                         debug_assert!(source_opt.is_none(), "HTLCSource should have been put somewhere");
3142                 }
3143
3144                 let holder_commitment_tx = HolderCommitmentTransaction::new(
3145                         commitment_stats.tx,
3146                         msg.signature,
3147                         msg.htlc_signatures.clone(),
3148                         &self.context.get_holder_pubkeys().funding_pubkey,
3149                         self.context.counterparty_funding_pubkey()
3150                 );
3151
3152                 self.context.holder_signer.as_ref().validate_holder_commitment(&holder_commitment_tx, commitment_stats.preimages)
3153                         .map_err(|_| ChannelError::Close("Failed to validate our commitment".to_owned()))?;
3154
3155                 // Update state now that we've passed all the can-fail calls...
3156                 let mut need_commitment = false;
3157                 if let &mut Some((_, ref mut update_state)) = &mut self.context.pending_update_fee {
3158                         if *update_state == FeeUpdateState::RemoteAnnounced {
3159                                 *update_state = FeeUpdateState::AwaitingRemoteRevokeToAnnounce;
3160                                 need_commitment = true;
3161                         }
3162                 }
3163
3164                 for htlc in self.context.pending_inbound_htlcs.iter_mut() {
3165                         let new_forward = if let &InboundHTLCState::RemoteAnnounced(ref forward_info) = &htlc.state {
3166                                 Some(forward_info.clone())
3167                         } else { None };
3168                         if let Some(forward_info) = new_forward {
3169                                 log_trace!(logger, "Updating HTLC {} to AwaitingRemoteRevokeToAnnounce due to commitment_signed in channel {}.",
3170                                         &htlc.payment_hash, &self.context.channel_id);
3171                                 htlc.state = InboundHTLCState::AwaitingRemoteRevokeToAnnounce(forward_info);
3172                                 need_commitment = true;
3173                         }
3174                 }
3175                 let mut claimed_htlcs = Vec::new();
3176                 for htlc in self.context.pending_outbound_htlcs.iter_mut() {
3177                         if let &mut OutboundHTLCState::RemoteRemoved(ref mut outcome) = &mut htlc.state {
3178                                 log_trace!(logger, "Updating HTLC {} to AwaitingRemoteRevokeToRemove due to commitment_signed in channel {}.",
3179                                         &htlc.payment_hash, &self.context.channel_id);
3180                                 // Grab the preimage, if it exists, instead of cloning
3181                                 let mut reason = OutboundHTLCOutcome::Success(None);
3182                                 mem::swap(outcome, &mut reason);
3183                                 if let OutboundHTLCOutcome::Success(Some(preimage)) = reason {
3184                                         // If a user (a) receives an HTLC claim using LDK 0.0.104 or before, then (b)
3185                                         // upgrades to LDK 0.0.114 or later before the HTLC is fully resolved, we could
3186                                         // have a `Success(None)` reason. In this case we could forget some HTLC
3187                                         // claims, but such an upgrade is unlikely and including claimed HTLCs here
3188                                         // fixes a bug which the user was exposed to on 0.0.104 when they started the
3189                                         // claim anyway.
3190                                         claimed_htlcs.push((SentHTLCId::from_source(&htlc.source), preimage));
3191                                 }
3192                                 htlc.state = OutboundHTLCState::AwaitingRemoteRevokeToRemove(reason);
3193                                 need_commitment = true;
3194                         }
3195                 }
3196
3197                 self.context.latest_monitor_update_id += 1;
3198                 let mut monitor_update = ChannelMonitorUpdate {
3199                         update_id: self.context.latest_monitor_update_id,
3200                         updates: vec![ChannelMonitorUpdateStep::LatestHolderCommitmentTXInfo {
3201                                 commitment_tx: holder_commitment_tx,
3202                                 htlc_outputs: htlcs_and_sigs,
3203                                 claimed_htlcs,
3204                                 nondust_htlc_sources,
3205                         }]
3206                 };
3207
3208                 self.context.cur_holder_commitment_transaction_number -= 1;
3209                 // Note that if we need_commitment & !AwaitingRemoteRevoke we'll call
3210                 // build_commitment_no_status_check() next which will reset this to RAAFirst.
3211                 self.context.resend_order = RAACommitmentOrder::CommitmentFirst;
3212
3213                 if (self.context.channel_state & ChannelState::MonitorUpdateInProgress as u32) != 0 {
3214                         // In case we initially failed monitor updating without requiring a response, we need
3215                         // to make sure the RAA gets sent first.
3216                         self.context.monitor_pending_revoke_and_ack = true;
3217                         if need_commitment && (self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32)) == 0 {
3218                                 // If we were going to send a commitment_signed after the RAA, go ahead and do all
3219                                 // the corresponding HTLC status updates so that
3220                                 // get_last_commitment_update_for_send includes the right HTLCs.
3221                                 self.context.monitor_pending_commitment_signed = true;
3222                                 let mut additional_update = self.build_commitment_no_status_check(logger);
3223                                 // build_commitment_no_status_check may bump latest_monitor_id but we want them to be
3224                                 // strictly increasing by one, so decrement it here.
3225                                 self.context.latest_monitor_update_id = monitor_update.update_id;
3226                                 monitor_update.updates.append(&mut additional_update.updates);
3227                         }
3228                         log_debug!(logger, "Received valid commitment_signed from peer in channel {}, updated HTLC state but awaiting a monitor update resolution to reply.",
3229                                 &self.context.channel_id);
3230                         return Ok(self.push_ret_blockable_mon_update(monitor_update));
3231                 }
3232
3233                 let need_commitment_signed = if need_commitment && (self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32)) == 0 {
3234                         // If we're AwaitingRemoteRevoke we can't send a new commitment here, but that's ok -
3235                         // we'll send one right away when we get the revoke_and_ack when we
3236                         // free_holding_cell_htlcs().
3237                         let mut additional_update = self.build_commitment_no_status_check(logger);
3238                         // build_commitment_no_status_check may bump latest_monitor_id but we want them to be
3239                         // strictly increasing by one, so decrement it here.
3240                         self.context.latest_monitor_update_id = monitor_update.update_id;
3241                         monitor_update.updates.append(&mut additional_update.updates);
3242                         true
3243                 } else { false };
3244
3245                 log_debug!(logger, "Received valid commitment_signed from peer in channel {}, updating HTLC state and responding with{} a revoke_and_ack.",
3246                         &self.context.channel_id(), if need_commitment_signed { " our own commitment_signed and" } else { "" });
3247                 self.monitor_updating_paused(true, need_commitment_signed, false, Vec::new(), Vec::new(), Vec::new());
3248                 return Ok(self.push_ret_blockable_mon_update(monitor_update));
3249         }
3250
3251         /// Public version of the below, checking relevant preconditions first.
3252         /// If we're not in a state where freeing the holding cell makes sense, this is a no-op and
3253         /// returns `(None, Vec::new())`.
3254         pub fn maybe_free_holding_cell_htlcs<F: Deref, L: Deref>(
3255                 &mut self, fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L
3256         ) -> (Option<ChannelMonitorUpdate>, Vec<(HTLCSource, PaymentHash)>)
3257         where F::Target: FeeEstimator, L::Target: Logger
3258         {
3259                 if self.context.channel_state & !STATE_FLAGS >= ChannelState::ChannelReady as u32 &&
3260                    (self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32 | ChannelState::PeerDisconnected as u32 | ChannelState::MonitorUpdateInProgress as u32)) == 0 {
3261                         self.free_holding_cell_htlcs(fee_estimator, logger)
3262                 } else { (None, Vec::new()) }
3263         }
3264
3265         /// Frees any pending commitment updates in the holding cell, generating the relevant messages
3266         /// for our counterparty.
3267         fn free_holding_cell_htlcs<F: Deref, L: Deref>(
3268                 &mut self, fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L
3269         ) -> (Option<ChannelMonitorUpdate>, Vec<(HTLCSource, PaymentHash)>)
3270         where F::Target: FeeEstimator, L::Target: Logger
3271         {
3272                 assert_eq!(self.context.channel_state & ChannelState::MonitorUpdateInProgress as u32, 0);
3273                 if self.context.holding_cell_htlc_updates.len() != 0 || self.context.holding_cell_update_fee.is_some() {
3274                         log_trace!(logger, "Freeing holding cell with {} HTLC updates{} in channel {}", self.context.holding_cell_htlc_updates.len(),
3275                                 if self.context.holding_cell_update_fee.is_some() { " and a fee update" } else { "" }, &self.context.channel_id());
3276
3277                         let mut monitor_update = ChannelMonitorUpdate {
3278                                 update_id: self.context.latest_monitor_update_id + 1, // We don't increment this yet!
3279                                 updates: Vec::new(),
3280                         };
3281
3282                         let mut htlc_updates = Vec::new();
3283                         mem::swap(&mut htlc_updates, &mut self.context.holding_cell_htlc_updates);
3284                         let mut update_add_count = 0;
3285                         let mut update_fulfill_count = 0;
3286                         let mut update_fail_count = 0;
3287                         let mut htlcs_to_fail = Vec::new();
3288                         for htlc_update in htlc_updates.drain(..) {
3289                                 // Note that this *can* fail, though it should be due to rather-rare conditions on
3290                                 // fee races with adding too many outputs which push our total payments just over
3291                                 // the limit. In case it's less rare than I anticipate, we may want to revisit
3292                                 // handling this case better and maybe fulfilling some of the HTLCs while attempting
3293                                 // to rebalance channels.
3294                                 match &htlc_update {
3295                                         &HTLCUpdateAwaitingACK::AddHTLC {
3296                                                 amount_msat, cltv_expiry, ref payment_hash, ref source, ref onion_routing_packet,
3297                                                 skimmed_fee_msat, ..
3298                                         } => {
3299                                                 match self.send_htlc(amount_msat, *payment_hash, cltv_expiry, source.clone(),
3300                                                         onion_routing_packet.clone(), false, skimmed_fee_msat, fee_estimator, logger)
3301                                                 {
3302                                                         Ok(_) => update_add_count += 1,
3303                                                         Err(e) => {
3304                                                                 match e {
3305                                                                         ChannelError::Ignore(ref msg) => {
3306                                                                                 log_info!(logger, "Failed to send HTLC with payment_hash {} due to {} in channel {}", &payment_hash, msg, &self.context.channel_id());
3307                                                                                 // If we fail to send here, then this HTLC should
3308                                                                                 // be failed backwards. Failing to send here
3309                                                                                 // indicates that this HTLC may keep being put back
3310                                                                                 // into the holding cell without ever being
3311                                                                                 // successfully forwarded/failed/fulfilled, causing
3312                                                                                 // our counterparty to eventually close on us.
3313                                                                                 htlcs_to_fail.push((source.clone(), *payment_hash));
3314                                                                         },
3315                                                                         _ => {
3316                                                                                 panic!("Got a non-IgnoreError action trying to send holding cell HTLC");
3317                                                                         },
3318                                                                 }
3319                                                         }
3320                                                 }
3321                                         },
3322                                         &HTLCUpdateAwaitingACK::ClaimHTLC { ref payment_preimage, htlc_id, .. } => {
3323                                                 // If an HTLC claim was previously added to the holding cell (via
3324                                                 // `get_update_fulfill_htlc`, then generating the claim message itself must
3325                                                 // not fail - any in between attempts to claim the HTLC will have resulted
3326                                                 // in it hitting the holding cell again and we cannot change the state of a
3327                                                 // holding cell HTLC from fulfill to anything else.
3328                                                 let mut additional_monitor_update =
3329                                                         if let UpdateFulfillFetch::NewClaim { monitor_update, .. } =
3330                                                                 self.get_update_fulfill_htlc(htlc_id, *payment_preimage, logger)
3331                                                         { monitor_update } else { unreachable!() };
3332                                                 update_fulfill_count += 1;
3333                                                 monitor_update.updates.append(&mut additional_monitor_update.updates);
3334                                         },
3335                                         &HTLCUpdateAwaitingACK::FailHTLC { htlc_id, ref err_packet } => {
3336                                                 match self.fail_htlc(htlc_id, err_packet.clone(), false, logger) {
3337                                                         Ok(update_fail_msg_option) => {
3338                                                                 // If an HTLC failure was previously added to the holding cell (via
3339                                                                 // `queue_fail_htlc`) then generating the fail message itself must
3340                                                                 // not fail - we should never end up in a state where we double-fail
3341                                                                 // an HTLC or fail-then-claim an HTLC as it indicates we didn't wait
3342                                                                 // for a full revocation before failing.
3343                                                                 debug_assert!(update_fail_msg_option.is_some());
3344                                                                 update_fail_count += 1;
3345                                                         },
3346                                                         Err(e) => {
3347                                                                 if let ChannelError::Ignore(_) = e {}
3348                                                                 else {
3349                                                                         panic!("Got a non-IgnoreError action trying to fail holding cell HTLC");
3350                                                                 }
3351                                                         }
3352                                                 }
3353                                         },
3354                                 }
3355                         }
3356                         if update_add_count == 0 && update_fulfill_count == 0 && update_fail_count == 0 && self.context.holding_cell_update_fee.is_none() {
3357                                 return (None, htlcs_to_fail);
3358                         }
3359                         let update_fee = if let Some(feerate) = self.context.holding_cell_update_fee.take() {
3360                                 self.send_update_fee(feerate, false, fee_estimator, logger)
3361                         } else {
3362                                 None
3363                         };
3364
3365                         let mut additional_update = self.build_commitment_no_status_check(logger);
3366                         // build_commitment_no_status_check and get_update_fulfill_htlc may bump latest_monitor_id
3367                         // but we want them to be strictly increasing by one, so reset it here.
3368                         self.context.latest_monitor_update_id = monitor_update.update_id;
3369                         monitor_update.updates.append(&mut additional_update.updates);
3370
3371                         log_debug!(logger, "Freeing holding cell in channel {} resulted in {}{} HTLCs added, {} HTLCs fulfilled, and {} HTLCs failed.",
3372                                 &self.context.channel_id(), if update_fee.is_some() { "a fee update, " } else { "" },
3373                                 update_add_count, update_fulfill_count, update_fail_count);
3374
3375                         self.monitor_updating_paused(false, true, false, Vec::new(), Vec::new(), Vec::new());
3376                         (self.push_ret_blockable_mon_update(monitor_update), htlcs_to_fail)
3377                 } else {
3378                         (None, Vec::new())
3379                 }
3380         }
3381
3382         /// Handles receiving a remote's revoke_and_ack. Note that we may return a new
3383         /// commitment_signed message here in case we had pending outbound HTLCs to add which were
3384         /// waiting on this revoke_and_ack. The generation of this new commitment_signed may also fail,
3385         /// generating an appropriate error *after* the channel state has been updated based on the
3386         /// revoke_and_ack message.
3387         pub fn revoke_and_ack<F: Deref, L: Deref>(&mut self, msg: &msgs::RevokeAndACK,
3388                 fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L, hold_mon_update: bool,
3389         ) -> Result<(Vec<(HTLCSource, PaymentHash)>, Option<ChannelMonitorUpdate>), ChannelError>
3390         where F::Target: FeeEstimator, L::Target: Logger,
3391         {
3392                 if (self.context.channel_state & (ChannelState::ChannelReady as u32)) != (ChannelState::ChannelReady as u32) {
3393                         return Err(ChannelError::Close("Got revoke/ACK message when channel was not in an operational state".to_owned()));
3394                 }
3395                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
3396                         return Err(ChannelError::Close("Peer sent revoke_and_ack when we needed a channel_reestablish".to_owned()));
3397                 }
3398                 if self.context.channel_state & BOTH_SIDES_SHUTDOWN_MASK == BOTH_SIDES_SHUTDOWN_MASK && self.context.last_sent_closing_fee.is_some() {
3399                         return Err(ChannelError::Close("Peer sent revoke_and_ack after we'd started exchanging closing_signeds".to_owned()));
3400                 }
3401
3402                 let secret = secp_check!(SecretKey::from_slice(&msg.per_commitment_secret), "Peer provided an invalid per_commitment_secret".to_owned());
3403
3404                 if let Some(counterparty_prev_commitment_point) = self.context.counterparty_prev_commitment_point {
3405                         if PublicKey::from_secret_key(&self.context.secp_ctx, &secret) != counterparty_prev_commitment_point {
3406                                 return Err(ChannelError::Close("Got a revoke commitment secret which didn't correspond to their current pubkey".to_owned()));
3407                         }
3408                 }
3409
3410                 if self.context.channel_state & ChannelState::AwaitingRemoteRevoke as u32 == 0 {
3411                         // Our counterparty seems to have burned their coins to us (by revoking a state when we
3412                         // haven't given them a new commitment transaction to broadcast). We should probably
3413                         // take advantage of this by updating our channel monitor, sending them an error, and
3414                         // waiting for them to broadcast their latest (now-revoked claim). But, that would be a
3415                         // lot of work, and there's some chance this is all a misunderstanding anyway.
3416                         // We have to do *something*, though, since our signer may get mad at us for otherwise
3417                         // jumping a remote commitment number, so best to just force-close and move on.
3418                         return Err(ChannelError::Close("Received an unexpected revoke_and_ack".to_owned()));
3419                 }
3420
3421                 #[cfg(any(test, fuzzing))]
3422                 {
3423                         *self.context.next_local_commitment_tx_fee_info_cached.lock().unwrap() = None;
3424                         *self.context.next_remote_commitment_tx_fee_info_cached.lock().unwrap() = None;
3425                 }
3426
3427                 match &self.context.holder_signer {
3428                         ChannelSignerType::Ecdsa(ecdsa) => {
3429                                 ecdsa.validate_counterparty_revocation(
3430                                         self.context.cur_counterparty_commitment_transaction_number + 1,
3431                                         &secret
3432                                 ).map_err(|_| ChannelError::Close("Failed to validate revocation from peer".to_owned()))?;
3433                         }
3434                 };
3435
3436                 self.context.commitment_secrets.provide_secret(self.context.cur_counterparty_commitment_transaction_number + 1, msg.per_commitment_secret)
3437                         .map_err(|_| ChannelError::Close("Previous secrets did not match new one".to_owned()))?;
3438                 self.context.latest_monitor_update_id += 1;
3439                 let mut monitor_update = ChannelMonitorUpdate {
3440                         update_id: self.context.latest_monitor_update_id,
3441                         updates: vec![ChannelMonitorUpdateStep::CommitmentSecret {
3442                                 idx: self.context.cur_counterparty_commitment_transaction_number + 1,
3443                                 secret: msg.per_commitment_secret,
3444                         }],
3445                 };
3446
3447                 // Update state now that we've passed all the can-fail calls...
3448                 // (note that we may still fail to generate the new commitment_signed message, but that's
3449                 // OK, we step the channel here and *then* if the new generation fails we can fail the
3450                 // channel based on that, but stepping stuff here should be safe either way.
3451                 self.context.channel_state &= !(ChannelState::AwaitingRemoteRevoke as u32);
3452                 self.context.sent_message_awaiting_response = None;
3453                 self.context.counterparty_prev_commitment_point = self.context.counterparty_cur_commitment_point;
3454                 self.context.counterparty_cur_commitment_point = Some(msg.next_per_commitment_point);
3455                 self.context.cur_counterparty_commitment_transaction_number -= 1;
3456
3457                 if self.context.announcement_sigs_state == AnnouncementSigsState::Committed {
3458                         self.context.announcement_sigs_state = AnnouncementSigsState::PeerReceived;
3459                 }
3460
3461                 log_trace!(logger, "Updating HTLCs on receipt of RAA in channel {}...", &self.context.channel_id());
3462                 let mut to_forward_infos = Vec::new();
3463                 let mut revoked_htlcs = Vec::new();
3464                 let mut finalized_claimed_htlcs = Vec::new();
3465                 let mut update_fail_htlcs = Vec::new();
3466                 let mut update_fail_malformed_htlcs = Vec::new();
3467                 let mut require_commitment = false;
3468                 let mut value_to_self_msat_diff: i64 = 0;
3469
3470                 {
3471                         // Take references explicitly so that we can hold multiple references to self.context.
3472                         let pending_inbound_htlcs: &mut Vec<_> = &mut self.context.pending_inbound_htlcs;
3473                         let pending_outbound_htlcs: &mut Vec<_> = &mut self.context.pending_outbound_htlcs;
3474
3475                         // We really shouldnt have two passes here, but retain gives a non-mutable ref (Rust bug)
3476                         pending_inbound_htlcs.retain(|htlc| {
3477                                 if let &InboundHTLCState::LocalRemoved(ref reason) = &htlc.state {
3478                                         log_trace!(logger, " ...removing inbound LocalRemoved {}", &htlc.payment_hash);
3479                                         if let &InboundHTLCRemovalReason::Fulfill(_) = reason {
3480                                                 value_to_self_msat_diff += htlc.amount_msat as i64;
3481                                         }
3482                                         false
3483                                 } else { true }
3484                         });
3485                         pending_outbound_htlcs.retain(|htlc| {
3486                                 if let &OutboundHTLCState::AwaitingRemovedRemoteRevoke(ref outcome) = &htlc.state {
3487                                         log_trace!(logger, " ...removing outbound AwaitingRemovedRemoteRevoke {}", &htlc.payment_hash);
3488                                         if let OutboundHTLCOutcome::Failure(reason) = outcome.clone() { // We really want take() here, but, again, non-mut ref :(
3489                                                 revoked_htlcs.push((htlc.source.clone(), htlc.payment_hash, reason));
3490                                         } else {
3491                                                 finalized_claimed_htlcs.push(htlc.source.clone());
3492                                                 // They fulfilled, so we sent them money
3493                                                 value_to_self_msat_diff -= htlc.amount_msat as i64;
3494                                         }
3495                                         false
3496                                 } else { true }
3497                         });
3498                         for htlc in pending_inbound_htlcs.iter_mut() {
3499                                 let swap = if let &InboundHTLCState::AwaitingRemoteRevokeToAnnounce(_) = &htlc.state {
3500                                         true
3501                                 } else if let &InboundHTLCState::AwaitingAnnouncedRemoteRevoke(_) = &htlc.state {
3502                                         true
3503                                 } else { false };
3504                                 if swap {
3505                                         let mut state = InboundHTLCState::Committed;
3506                                         mem::swap(&mut state, &mut htlc.state);
3507
3508                                         if let InboundHTLCState::AwaitingRemoteRevokeToAnnounce(forward_info) = state {
3509                                                 log_trace!(logger, " ...promoting inbound AwaitingRemoteRevokeToAnnounce {} to AwaitingAnnouncedRemoteRevoke", &htlc.payment_hash);
3510                                                 htlc.state = InboundHTLCState::AwaitingAnnouncedRemoteRevoke(forward_info);
3511                                                 require_commitment = true;
3512                                         } else if let InboundHTLCState::AwaitingAnnouncedRemoteRevoke(forward_info) = state {
3513                                                 match forward_info {
3514                                                         PendingHTLCStatus::Fail(fail_msg) => {
3515                                                                 log_trace!(logger, " ...promoting inbound AwaitingAnnouncedRemoteRevoke {} to LocalRemoved due to PendingHTLCStatus indicating failure", &htlc.payment_hash);
3516                                                                 require_commitment = true;
3517                                                                 match fail_msg {
3518                                                                         HTLCFailureMsg::Relay(msg) => {
3519                                                                                 htlc.state = InboundHTLCState::LocalRemoved(InboundHTLCRemovalReason::FailRelay(msg.reason.clone()));
3520                                                                                 update_fail_htlcs.push(msg)
3521                                                                         },
3522                                                                         HTLCFailureMsg::Malformed(msg) => {
3523                                                                                 htlc.state = InboundHTLCState::LocalRemoved(InboundHTLCRemovalReason::FailMalformed((msg.sha256_of_onion, msg.failure_code)));
3524                                                                                 update_fail_malformed_htlcs.push(msg)
3525                                                                         },
3526                                                                 }
3527                                                         },
3528                                                         PendingHTLCStatus::Forward(forward_info) => {
3529                                                                 log_trace!(logger, " ...promoting inbound AwaitingAnnouncedRemoteRevoke {} to Committed", &htlc.payment_hash);
3530                                                                 to_forward_infos.push((forward_info, htlc.htlc_id));
3531                                                                 htlc.state = InboundHTLCState::Committed;
3532                                                         }
3533                                                 }
3534                                         }
3535                                 }
3536                         }
3537                         for htlc in pending_outbound_htlcs.iter_mut() {
3538                                 if let OutboundHTLCState::LocalAnnounced(_) = htlc.state {
3539                                         log_trace!(logger, " ...promoting outbound LocalAnnounced {} to Committed", &htlc.payment_hash);
3540                                         htlc.state = OutboundHTLCState::Committed;
3541                                 }
3542                                 if let &mut OutboundHTLCState::AwaitingRemoteRevokeToRemove(ref mut outcome) = &mut htlc.state {
3543                                         log_trace!(logger, " ...promoting outbound AwaitingRemoteRevokeToRemove {} to AwaitingRemovedRemoteRevoke", &htlc.payment_hash);
3544                                         // Grab the preimage, if it exists, instead of cloning
3545                                         let mut reason = OutboundHTLCOutcome::Success(None);
3546                                         mem::swap(outcome, &mut reason);
3547                                         htlc.state = OutboundHTLCState::AwaitingRemovedRemoteRevoke(reason);
3548                                         require_commitment = true;
3549                                 }
3550                         }
3551                 }
3552                 self.context.value_to_self_msat = (self.context.value_to_self_msat as i64 + value_to_self_msat_diff) as u64;
3553
3554                 if let Some((feerate, update_state)) = self.context.pending_update_fee {
3555                         match update_state {
3556                                 FeeUpdateState::Outbound => {
3557                                         debug_assert!(self.context.is_outbound());
3558                                         log_trace!(logger, " ...promoting outbound fee update {} to Committed", feerate);
3559                                         self.context.feerate_per_kw = feerate;
3560                                         self.context.pending_update_fee = None;
3561                                 },
3562                                 FeeUpdateState::RemoteAnnounced => { debug_assert!(!self.context.is_outbound()); },
3563                                 FeeUpdateState::AwaitingRemoteRevokeToAnnounce => {
3564                                         debug_assert!(!self.context.is_outbound());
3565                                         log_trace!(logger, " ...promoting inbound AwaitingRemoteRevokeToAnnounce fee update {} to Committed", feerate);
3566                                         require_commitment = true;
3567                                         self.context.feerate_per_kw = feerate;
3568                                         self.context.pending_update_fee = None;
3569                                 },
3570                         }
3571                 }
3572
3573                 let release_monitor = self.context.blocked_monitor_updates.is_empty() && !hold_mon_update;
3574                 let release_state_str =
3575                         if hold_mon_update { "Holding" } else if release_monitor { "Releasing" } else { "Blocked" };
3576                 macro_rules! return_with_htlcs_to_fail {
3577                         ($htlcs_to_fail: expr) => {
3578                                 if !release_monitor {
3579                                         self.context.blocked_monitor_updates.push(PendingChannelMonitorUpdate {
3580                                                 update: monitor_update,
3581                                         });
3582                                         return Ok(($htlcs_to_fail, None));
3583                                 } else {
3584                                         return Ok(($htlcs_to_fail, Some(monitor_update)));
3585                                 }
3586                         }
3587                 }
3588
3589                 if (self.context.channel_state & ChannelState::MonitorUpdateInProgress as u32) == ChannelState::MonitorUpdateInProgress as u32 {
3590                         // We can't actually generate a new commitment transaction (incl by freeing holding
3591                         // cells) while we can't update the monitor, so we just return what we have.
3592                         if require_commitment {
3593                                 self.context.monitor_pending_commitment_signed = true;
3594                                 // When the monitor updating is restored we'll call
3595                                 // get_last_commitment_update_for_send(), which does not update state, but we're
3596                                 // definitely now awaiting a remote revoke before we can step forward any more, so
3597                                 // set it here.
3598                                 let mut additional_update = self.build_commitment_no_status_check(logger);
3599                                 // build_commitment_no_status_check may bump latest_monitor_id but we want them to be
3600                                 // strictly increasing by one, so decrement it here.
3601                                 self.context.latest_monitor_update_id = monitor_update.update_id;
3602                                 monitor_update.updates.append(&mut additional_update.updates);
3603                         }
3604                         self.context.monitor_pending_forwards.append(&mut to_forward_infos);
3605                         self.context.monitor_pending_failures.append(&mut revoked_htlcs);
3606                         self.context.monitor_pending_finalized_fulfills.append(&mut finalized_claimed_htlcs);
3607                         log_debug!(logger, "Received a valid revoke_and_ack for channel {} but awaiting a monitor update resolution to reply.", &self.context.channel_id());
3608                         return_with_htlcs_to_fail!(Vec::new());
3609                 }
3610
3611                 match self.free_holding_cell_htlcs(fee_estimator, logger) {
3612                         (Some(mut additional_update), htlcs_to_fail) => {
3613                                 // free_holding_cell_htlcs may bump latest_monitor_id multiple times but we want them to be
3614                                 // strictly increasing by one, so decrement it here.
3615                                 self.context.latest_monitor_update_id = monitor_update.update_id;
3616                                 monitor_update.updates.append(&mut additional_update.updates);
3617
3618                                 log_debug!(logger, "Received a valid revoke_and_ack for channel {} with holding cell HTLCs freed. {} monitor update.",
3619                                         &self.context.channel_id(), release_state_str);
3620
3621                                 self.monitor_updating_paused(false, true, false, to_forward_infos, revoked_htlcs, finalized_claimed_htlcs);
3622                                 return_with_htlcs_to_fail!(htlcs_to_fail);
3623                         },
3624                         (None, htlcs_to_fail) => {
3625                                 if require_commitment {
3626                                         let mut additional_update = self.build_commitment_no_status_check(logger);
3627
3628                                         // build_commitment_no_status_check may bump latest_monitor_id but we want them to be
3629                                         // strictly increasing by one, so decrement it here.
3630                                         self.context.latest_monitor_update_id = monitor_update.update_id;
3631                                         monitor_update.updates.append(&mut additional_update.updates);
3632
3633                                         log_debug!(logger, "Received a valid revoke_and_ack for channel {}. Responding with a commitment update with {} HTLCs failed. {} monitor update.",
3634                                                 &self.context.channel_id(),
3635                                                 update_fail_htlcs.len() + update_fail_malformed_htlcs.len(),
3636                                                 release_state_str);
3637
3638                                         self.monitor_updating_paused(false, true, false, to_forward_infos, revoked_htlcs, finalized_claimed_htlcs);
3639                                         return_with_htlcs_to_fail!(htlcs_to_fail);
3640                                 } else {
3641                                         log_debug!(logger, "Received a valid revoke_and_ack for channel {} with no reply necessary. {} monitor update.",
3642                                                 &self.context.channel_id(), release_state_str);
3643
3644                                         self.monitor_updating_paused(false, false, false, to_forward_infos, revoked_htlcs, finalized_claimed_htlcs);
3645                                         return_with_htlcs_to_fail!(htlcs_to_fail);
3646                                 }
3647                         }
3648                 }
3649         }
3650
3651         /// Queues up an outbound update fee by placing it in the holding cell. You should call
3652         /// [`Self::maybe_free_holding_cell_htlcs`] in order to actually generate and send the
3653         /// commitment update.
3654         pub fn queue_update_fee<F: Deref, L: Deref>(&mut self, feerate_per_kw: u32,
3655                 fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L)
3656         where F::Target: FeeEstimator, L::Target: Logger
3657         {
3658                 let msg_opt = self.send_update_fee(feerate_per_kw, true, fee_estimator, logger);
3659                 assert!(msg_opt.is_none(), "We forced holding cell?");
3660         }
3661
3662         /// Adds a pending update to this channel. See the doc for send_htlc for
3663         /// further details on the optionness of the return value.
3664         /// If our balance is too low to cover the cost of the next commitment transaction at the
3665         /// new feerate, the update is cancelled.
3666         ///
3667         /// You MUST call [`Self::send_commitment_no_state_update`] prior to any other calls on this
3668         /// [`Channel`] if `force_holding_cell` is false.
3669         fn send_update_fee<F: Deref, L: Deref>(
3670                 &mut self, feerate_per_kw: u32, mut force_holding_cell: bool,
3671                 fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L
3672         ) -> Option<msgs::UpdateFee>
3673         where F::Target: FeeEstimator, L::Target: Logger
3674         {
3675                 if !self.context.is_outbound() {
3676                         panic!("Cannot send fee from inbound channel");
3677                 }
3678                 if !self.context.is_usable() {
3679                         panic!("Cannot update fee until channel is fully established and we haven't started shutting down");
3680                 }
3681                 if !self.context.is_live() {
3682                         panic!("Cannot update fee while peer is disconnected/we're awaiting a monitor update (ChannelManager should have caught this)");
3683                 }
3684
3685                 // Before proposing a feerate update, check that we can actually afford the new fee.
3686                 let inbound_stats = self.context.get_inbound_pending_htlc_stats(Some(feerate_per_kw));
3687                 let outbound_stats = self.context.get_outbound_pending_htlc_stats(Some(feerate_per_kw));
3688                 let keys = self.context.build_holder_transaction_keys(self.context.cur_holder_commitment_transaction_number);
3689                 let commitment_stats = self.context.build_commitment_transaction(self.context.cur_holder_commitment_transaction_number, &keys, true, true, logger);
3690                 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;
3691                 let holder_balance_msat = commitment_stats.local_balance_msat - outbound_stats.holding_cell_msat;
3692                 if holder_balance_msat < buffer_fee_msat  + self.context.counterparty_selected_channel_reserve_satoshis.unwrap() * 1000 {
3693                         //TODO: auto-close after a number of failures?
3694                         log_debug!(logger, "Cannot afford to send new feerate at {}", feerate_per_kw);
3695                         return None;
3696                 }
3697
3698                 // Note, we evaluate pending htlc "preemptive" trimmed-to-dust threshold at the proposed `feerate_per_kw`.
3699                 let holder_tx_dust_exposure = inbound_stats.on_holder_tx_dust_exposure_msat + outbound_stats.on_holder_tx_dust_exposure_msat;
3700                 let counterparty_tx_dust_exposure = inbound_stats.on_counterparty_tx_dust_exposure_msat + outbound_stats.on_counterparty_tx_dust_exposure_msat;
3701                 let max_dust_htlc_exposure_msat = self.context.get_max_dust_htlc_exposure_msat(fee_estimator);
3702                 if holder_tx_dust_exposure > max_dust_htlc_exposure_msat {
3703                         log_debug!(logger, "Cannot afford to send new feerate at {} without infringing max dust htlc exposure", feerate_per_kw);
3704                         return None;
3705                 }
3706                 if counterparty_tx_dust_exposure > max_dust_htlc_exposure_msat {
3707                         log_debug!(logger, "Cannot afford to send new feerate at {} without infringing max dust htlc exposure", feerate_per_kw);
3708                         return None;
3709                 }
3710
3711                 if (self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32 | ChannelState::MonitorUpdateInProgress as u32)) != 0 {
3712                         force_holding_cell = true;
3713                 }
3714
3715                 if force_holding_cell {
3716                         self.context.holding_cell_update_fee = Some(feerate_per_kw);
3717                         return None;
3718                 }
3719
3720                 debug_assert!(self.context.pending_update_fee.is_none());
3721                 self.context.pending_update_fee = Some((feerate_per_kw, FeeUpdateState::Outbound));
3722
3723                 Some(msgs::UpdateFee {
3724                         channel_id: self.context.channel_id,
3725                         feerate_per_kw,
3726                 })
3727         }
3728
3729         /// Removes any uncommitted inbound HTLCs and resets the state of uncommitted outbound HTLC
3730         /// updates, to be used on peer disconnection. After this, update_*_htlc messages need to be
3731         /// resent.
3732         /// No further message handling calls may be made until a channel_reestablish dance has
3733         /// completed.
3734         /// May return `Err(())`, which implies [`ChannelContext::force_shutdown`] should be called immediately.
3735         pub fn remove_uncommitted_htlcs_and_mark_paused<L: Deref>(&mut self, logger: &L) -> Result<(), ()> where L::Target: Logger {
3736                 assert_eq!(self.context.channel_state & ChannelState::ShutdownComplete as u32, 0);
3737                 if self.context.channel_state & !STATE_FLAGS < ChannelState::FundingSent as u32 {
3738                         return Err(());
3739                 }
3740
3741                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == (ChannelState::PeerDisconnected as u32) {
3742                         // While the below code should be idempotent, it's simpler to just return early, as
3743                         // redundant disconnect events can fire, though they should be rare.
3744                         return Ok(());
3745                 }
3746
3747                 if self.context.announcement_sigs_state == AnnouncementSigsState::MessageSent || self.context.announcement_sigs_state == AnnouncementSigsState::Committed {
3748                         self.context.announcement_sigs_state = AnnouncementSigsState::NotSent;
3749                 }
3750
3751                 // Upon reconnect we have to start the closing_signed dance over, but shutdown messages
3752                 // will be retransmitted.
3753                 self.context.last_sent_closing_fee = None;
3754                 self.context.pending_counterparty_closing_signed = None;
3755                 self.context.closing_fee_limits = None;
3756
3757                 let mut inbound_drop_count = 0;
3758                 self.context.pending_inbound_htlcs.retain(|htlc| {
3759                         match htlc.state {
3760                                 InboundHTLCState::RemoteAnnounced(_) => {
3761                                         // They sent us an update_add_htlc but we never got the commitment_signed.
3762                                         // We'll tell them what commitment_signed we're expecting next and they'll drop
3763                                         // this HTLC accordingly
3764                                         inbound_drop_count += 1;
3765                                         false
3766                                 },
3767                                 InboundHTLCState::AwaitingRemoteRevokeToAnnounce(_)|InboundHTLCState::AwaitingAnnouncedRemoteRevoke(_) => {
3768                                         // We received a commitment_signed updating this HTLC and (at least hopefully)
3769                                         // sent a revoke_and_ack (which we can re-transmit) and have heard nothing
3770                                         // in response to it yet, so don't touch it.
3771                                         true
3772                                 },
3773                                 InboundHTLCState::Committed => true,
3774                                 InboundHTLCState::LocalRemoved(_) => {
3775                                         // We (hopefully) sent a commitment_signed updating this HTLC (which we can
3776                                         // re-transmit if needed) and they may have even sent a revoke_and_ack back
3777                                         // (that we missed). Keep this around for now and if they tell us they missed
3778                                         // the commitment_signed we can re-transmit the update then.
3779                                         true
3780                                 },
3781                         }
3782                 });
3783                 self.context.next_counterparty_htlc_id -= inbound_drop_count;
3784
3785                 if let Some((_, update_state)) = self.context.pending_update_fee {
3786                         if update_state == FeeUpdateState::RemoteAnnounced {
3787                                 debug_assert!(!self.context.is_outbound());
3788                                 self.context.pending_update_fee = None;
3789                         }
3790                 }
3791
3792                 for htlc in self.context.pending_outbound_htlcs.iter_mut() {
3793                         if let OutboundHTLCState::RemoteRemoved(_) = htlc.state {
3794                                 // They sent us an update to remove this but haven't yet sent the corresponding
3795                                 // commitment_signed, we need to move it back to Committed and they can re-send
3796                                 // the update upon reconnection.
3797                                 htlc.state = OutboundHTLCState::Committed;
3798                         }
3799                 }
3800
3801                 self.context.sent_message_awaiting_response = None;
3802
3803                 self.context.channel_state |= ChannelState::PeerDisconnected as u32;
3804                 log_trace!(logger, "Peer disconnection resulted in {} remote-announced HTLC drops on channel {}", inbound_drop_count, &self.context.channel_id());
3805                 Ok(())
3806         }
3807
3808         /// Indicates that a ChannelMonitor update is in progress and has not yet been fully persisted.
3809         /// This must be called before we return the [`ChannelMonitorUpdate`] back to the
3810         /// [`ChannelManager`], which will call [`Self::monitor_updating_restored`] once the monitor
3811         /// update completes (potentially immediately).
3812         /// The messages which were generated with the monitor update must *not* have been sent to the
3813         /// remote end, and must instead have been dropped. They will be regenerated when
3814         /// [`Self::monitor_updating_restored`] is called.
3815         ///
3816         /// [`ChannelManager`]: super::channelmanager::ChannelManager
3817         /// [`chain::Watch`]: crate::chain::Watch
3818         /// [`ChannelMonitorUpdateStatus::InProgress`]: crate::chain::ChannelMonitorUpdateStatus::InProgress
3819         fn monitor_updating_paused(&mut self, resend_raa: bool, resend_commitment: bool,
3820                 resend_channel_ready: bool, mut pending_forwards: Vec<(PendingHTLCInfo, u64)>,
3821                 mut pending_fails: Vec<(HTLCSource, PaymentHash, HTLCFailReason)>,
3822                 mut pending_finalized_claimed_htlcs: Vec<HTLCSource>
3823         ) {
3824                 self.context.monitor_pending_revoke_and_ack |= resend_raa;
3825                 self.context.monitor_pending_commitment_signed |= resend_commitment;
3826                 self.context.monitor_pending_channel_ready |= resend_channel_ready;
3827                 self.context.monitor_pending_forwards.append(&mut pending_forwards);
3828                 self.context.monitor_pending_failures.append(&mut pending_fails);
3829                 self.context.monitor_pending_finalized_fulfills.append(&mut pending_finalized_claimed_htlcs);
3830                 self.context.channel_state |= ChannelState::MonitorUpdateInProgress as u32;
3831         }
3832
3833         /// Indicates that the latest ChannelMonitor update has been committed by the client
3834         /// successfully and we should restore normal operation. Returns messages which should be sent
3835         /// to the remote side.
3836         pub fn monitor_updating_restored<L: Deref, NS: Deref>(
3837                 &mut self, logger: &L, node_signer: &NS, chain_hash: ChainHash,
3838                 user_config: &UserConfig, best_block_height: u32
3839         ) -> MonitorRestoreUpdates
3840         where
3841                 L::Target: Logger,
3842                 NS::Target: NodeSigner
3843         {
3844                 assert_eq!(self.context.channel_state & ChannelState::MonitorUpdateInProgress as u32, ChannelState::MonitorUpdateInProgress as u32);
3845                 self.context.channel_state &= !(ChannelState::MonitorUpdateInProgress as u32);
3846
3847                 // If we're past (or at) the FundingSent stage on an outbound channel, try to
3848                 // (re-)broadcast the funding transaction as we may have declined to broadcast it when we
3849                 // first received the funding_signed.
3850                 let mut funding_broadcastable =
3851                         if self.context.is_outbound() && self.context.channel_state & !STATE_FLAGS >= ChannelState::FundingSent as u32 && self.context.channel_state & ChannelState::WaitingForBatch as u32 == 0 {
3852                                 self.context.funding_transaction.take()
3853                         } else { None };
3854                 // That said, if the funding transaction is already confirmed (ie we're active with a
3855                 // minimum_depth over 0) don't bother re-broadcasting the confirmed funding tx.
3856                 if self.context.channel_state & !STATE_FLAGS >= ChannelState::ChannelReady as u32 && self.context.minimum_depth != Some(0) {
3857                         funding_broadcastable = None;
3858                 }
3859
3860                 // We will never broadcast the funding transaction when we're in MonitorUpdateInProgress
3861                 // (and we assume the user never directly broadcasts the funding transaction and waits for
3862                 // us to do it). Thus, we can only ever hit monitor_pending_channel_ready when we're
3863                 // * an inbound channel that failed to persist the monitor on funding_created and we got
3864                 //   the funding transaction confirmed before the monitor was persisted, or
3865                 // * a 0-conf channel and intended to send the channel_ready before any broadcast at all.
3866                 let channel_ready = if self.context.monitor_pending_channel_ready {
3867                         assert!(!self.context.is_outbound() || self.context.minimum_depth == Some(0),
3868                                 "Funding transaction broadcast by the local client before it should have - LDK didn't do it!");
3869                         self.context.monitor_pending_channel_ready = false;
3870                         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);
3871                         Some(msgs::ChannelReady {
3872                                 channel_id: self.context.channel_id(),
3873                                 next_per_commitment_point,
3874                                 short_channel_id_alias: Some(self.context.outbound_scid_alias),
3875                         })
3876                 } else { None };
3877
3878                 let announcement_sigs = self.get_announcement_sigs(node_signer, chain_hash, user_config, best_block_height, logger);
3879
3880                 let mut accepted_htlcs = Vec::new();
3881                 mem::swap(&mut accepted_htlcs, &mut self.context.monitor_pending_forwards);
3882                 let mut failed_htlcs = Vec::new();
3883                 mem::swap(&mut failed_htlcs, &mut self.context.monitor_pending_failures);
3884                 let mut finalized_claimed_htlcs = Vec::new();
3885                 mem::swap(&mut finalized_claimed_htlcs, &mut self.context.monitor_pending_finalized_fulfills);
3886
3887                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) != 0 {
3888                         self.context.monitor_pending_revoke_and_ack = false;
3889                         self.context.monitor_pending_commitment_signed = false;
3890                         return MonitorRestoreUpdates {
3891                                 raa: None, commitment_update: None, order: RAACommitmentOrder::RevokeAndACKFirst,
3892                                 accepted_htlcs, failed_htlcs, finalized_claimed_htlcs, funding_broadcastable, channel_ready, announcement_sigs
3893                         };
3894                 }
3895
3896                 let raa = if self.context.monitor_pending_revoke_and_ack {
3897                         Some(self.get_last_revoke_and_ack())
3898                 } else { None };
3899                 let commitment_update = if self.context.monitor_pending_commitment_signed {
3900                         self.get_last_commitment_update_for_send(logger).ok()
3901                 } else { None };
3902                 if commitment_update.is_some() {
3903                         self.mark_awaiting_response();
3904                 }
3905
3906                 self.context.monitor_pending_revoke_and_ack = false;
3907                 self.context.monitor_pending_commitment_signed = false;
3908                 let order = self.context.resend_order.clone();
3909                 log_debug!(logger, "Restored monitor updating in channel {} resulting in {}{} commitment update and {} RAA, with {} first",
3910                         &self.context.channel_id(), if funding_broadcastable.is_some() { "a funding broadcastable, " } else { "" },
3911                         if commitment_update.is_some() { "a" } else { "no" }, if raa.is_some() { "an" } else { "no" },
3912                         match order { RAACommitmentOrder::CommitmentFirst => "commitment", RAACommitmentOrder::RevokeAndACKFirst => "RAA"});
3913                 MonitorRestoreUpdates {
3914                         raa, commitment_update, order, accepted_htlcs, failed_htlcs, finalized_claimed_htlcs, funding_broadcastable, channel_ready, announcement_sigs
3915                 }
3916         }
3917
3918         pub fn update_fee<F: Deref, L: Deref>(&mut self, fee_estimator: &LowerBoundedFeeEstimator<F>, msg: &msgs::UpdateFee, logger: &L) -> Result<(), ChannelError>
3919                 where F::Target: FeeEstimator, L::Target: Logger
3920         {
3921                 if self.context.is_outbound() {
3922                         return Err(ChannelError::Close("Non-funding remote tried to update channel fee".to_owned()));
3923                 }
3924                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
3925                         return Err(ChannelError::Close("Peer sent update_fee when we needed a channel_reestablish".to_owned()));
3926                 }
3927                 Channel::<SP>::check_remote_fee(&self.context.channel_type, fee_estimator, msg.feerate_per_kw, Some(self.context.feerate_per_kw), logger)?;
3928                 let feerate_over_dust_buffer = msg.feerate_per_kw > self.context.get_dust_buffer_feerate(None);
3929
3930                 self.context.pending_update_fee = Some((msg.feerate_per_kw, FeeUpdateState::RemoteAnnounced));
3931                 self.context.update_time_counter += 1;
3932                 // If the feerate has increased over the previous dust buffer (note that
3933                 // `get_dust_buffer_feerate` considers the `pending_update_fee` status), check that we
3934                 // won't be pushed over our dust exposure limit by the feerate increase.
3935                 if feerate_over_dust_buffer {
3936                         let inbound_stats = self.context.get_inbound_pending_htlc_stats(None);
3937                         let outbound_stats = self.context.get_outbound_pending_htlc_stats(None);
3938                         let holder_tx_dust_exposure = inbound_stats.on_holder_tx_dust_exposure_msat + outbound_stats.on_holder_tx_dust_exposure_msat;
3939                         let counterparty_tx_dust_exposure = inbound_stats.on_counterparty_tx_dust_exposure_msat + outbound_stats.on_counterparty_tx_dust_exposure_msat;
3940                         let max_dust_htlc_exposure_msat = self.context.get_max_dust_htlc_exposure_msat(fee_estimator);
3941                         if holder_tx_dust_exposure > max_dust_htlc_exposure_msat {
3942                                 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)",
3943                                         msg.feerate_per_kw, holder_tx_dust_exposure)));
3944                         }
3945                         if counterparty_tx_dust_exposure > max_dust_htlc_exposure_msat {
3946                                 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)",
3947                                         msg.feerate_per_kw, counterparty_tx_dust_exposure)));
3948                         }
3949                 }
3950                 Ok(())
3951         }
3952
3953         /// Indicates that the signer may have some signatures for us, so we should retry if we're
3954         /// blocked.
3955         #[allow(unused)]
3956         pub fn signer_maybe_unblocked<L: Deref>(&mut self, logger: &L) -> SignerResumeUpdates where L::Target: Logger {
3957                 let commitment_update = if self.context.signer_pending_commitment_update {
3958                         self.get_last_commitment_update_for_send(logger).ok()
3959                 } else { None };
3960                 let funding_signed = None;
3961                 let channel_ready = None;
3962                 let funding_created = if self.context.signer_pending_funding && self.context.is_outbound() {
3963                         self.context.get_funding_created_msg(logger)
3964                 } else { None };
3965
3966                 log_trace!(logger, "Signer unblocked with {} commitment_update, {} funding_signed, {} funding_created, and {} channel_ready",
3967                         if commitment_update.is_some() { "a" } else { "no" },
3968                         if funding_signed.is_some() { "a" } else { "no" },
3969                         if funding_created.is_some() { "a" } else { "no" },
3970                         if channel_ready.is_some() { "a" } else { "no" });
3971
3972                 SignerResumeUpdates {
3973                         commitment_update,
3974                         funding_signed,
3975                         funding_created,
3976                         channel_ready,
3977                 }
3978         }
3979
3980         fn get_last_revoke_and_ack(&self) -> msgs::RevokeAndACK {
3981                 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);
3982                 let per_commitment_secret = self.context.holder_signer.as_ref().release_commitment_secret(self.context.cur_holder_commitment_transaction_number + 2);
3983                 msgs::RevokeAndACK {
3984                         channel_id: self.context.channel_id,
3985                         per_commitment_secret,
3986                         next_per_commitment_point,
3987                         #[cfg(taproot)]
3988                         next_local_nonce: None,
3989                 }
3990         }
3991
3992         /// Gets the last commitment update for immediate sending to our peer.
3993         fn get_last_commitment_update_for_send<L: Deref>(&mut self, logger: &L) -> Result<msgs::CommitmentUpdate, ()> where L::Target: Logger {
3994                 let mut update_add_htlcs = Vec::new();
3995                 let mut update_fulfill_htlcs = Vec::new();
3996                 let mut update_fail_htlcs = Vec::new();
3997                 let mut update_fail_malformed_htlcs = Vec::new();
3998
3999                 for htlc in self.context.pending_outbound_htlcs.iter() {
4000                         if let &OutboundHTLCState::LocalAnnounced(ref onion_packet) = &htlc.state {
4001                                 update_add_htlcs.push(msgs::UpdateAddHTLC {
4002                                         channel_id: self.context.channel_id(),
4003                                         htlc_id: htlc.htlc_id,
4004                                         amount_msat: htlc.amount_msat,
4005                                         payment_hash: htlc.payment_hash,
4006                                         cltv_expiry: htlc.cltv_expiry,
4007                                         onion_routing_packet: (**onion_packet).clone(),
4008                                         skimmed_fee_msat: htlc.skimmed_fee_msat,
4009                                 });
4010                         }
4011                 }
4012
4013                 for htlc in self.context.pending_inbound_htlcs.iter() {
4014                         if let &InboundHTLCState::LocalRemoved(ref reason) = &htlc.state {
4015                                 match reason {
4016                                         &InboundHTLCRemovalReason::FailRelay(ref err_packet) => {
4017                                                 update_fail_htlcs.push(msgs::UpdateFailHTLC {
4018                                                         channel_id: self.context.channel_id(),
4019                                                         htlc_id: htlc.htlc_id,
4020                                                         reason: err_packet.clone()
4021                                                 });
4022                                         },
4023                                         &InboundHTLCRemovalReason::FailMalformed((ref sha256_of_onion, ref failure_code)) => {
4024                                                 update_fail_malformed_htlcs.push(msgs::UpdateFailMalformedHTLC {
4025                                                         channel_id: self.context.channel_id(),
4026                                                         htlc_id: htlc.htlc_id,
4027                                                         sha256_of_onion: sha256_of_onion.clone(),
4028                                                         failure_code: failure_code.clone(),
4029                                                 });
4030                                         },
4031                                         &InboundHTLCRemovalReason::Fulfill(ref payment_preimage) => {
4032                                                 update_fulfill_htlcs.push(msgs::UpdateFulfillHTLC {
4033                                                         channel_id: self.context.channel_id(),
4034                                                         htlc_id: htlc.htlc_id,
4035                                                         payment_preimage: payment_preimage.clone(),
4036                                                 });
4037                                         },
4038                                 }
4039                         }
4040                 }
4041
4042                 let update_fee = if self.context.is_outbound() && self.context.pending_update_fee.is_some() {
4043                         Some(msgs::UpdateFee {
4044                                 channel_id: self.context.channel_id(),
4045                                 feerate_per_kw: self.context.pending_update_fee.unwrap().0,
4046                         })
4047                 } else { None };
4048
4049                 log_trace!(logger, "Regenerating latest commitment update in channel {} with{} {} update_adds, {} update_fulfills, {} update_fails, and {} update_fail_malformeds",
4050                                 &self.context.channel_id(), if update_fee.is_some() { " update_fee," } else { "" },
4051                                 update_add_htlcs.len(), update_fulfill_htlcs.len(), update_fail_htlcs.len(), update_fail_malformed_htlcs.len());
4052                 let commitment_signed = if let Ok(update) = self.send_commitment_no_state_update(logger).map(|(cu, _)| cu) {
4053                         if self.context.signer_pending_commitment_update {
4054                                 log_trace!(logger, "Commitment update generated: clearing signer_pending_commitment_update");
4055                                 self.context.signer_pending_commitment_update = false;
4056                         }
4057                         update
4058                 } else {
4059                         if !self.context.signer_pending_commitment_update {
4060                                 log_trace!(logger, "Commitment update awaiting signer: setting signer_pending_commitment_update");
4061                                 self.context.signer_pending_commitment_update = true;
4062                         }
4063                         return Err(());
4064                 };
4065                 Ok(msgs::CommitmentUpdate {
4066                         update_add_htlcs, update_fulfill_htlcs, update_fail_htlcs, update_fail_malformed_htlcs, update_fee,
4067                         commitment_signed,
4068                 })
4069         }
4070
4071         /// Gets the `Shutdown` message we should send our peer on reconnect, if any.
4072         pub fn get_outbound_shutdown(&self) -> Option<msgs::Shutdown> {
4073                 if self.context.channel_state & (ChannelState::LocalShutdownSent as u32) != 0 {
4074                         assert!(self.context.shutdown_scriptpubkey.is_some());
4075                         Some(msgs::Shutdown {
4076                                 channel_id: self.context.channel_id,
4077                                 scriptpubkey: self.get_closing_scriptpubkey(),
4078                         })
4079                 } else { None }
4080         }
4081
4082         /// May panic if some calls other than message-handling calls (which will all Err immediately)
4083         /// have been called between remove_uncommitted_htlcs_and_mark_paused and this call.
4084         ///
4085         /// Some links printed in log lines are included here to check them during build (when run with
4086         /// `cargo doc --document-private-items`):
4087         /// [`super::channelmanager::ChannelManager::force_close_without_broadcasting_txn`] and
4088         /// [`super::channelmanager::ChannelManager::force_close_all_channels_without_broadcasting_txn`].
4089         pub fn channel_reestablish<L: Deref, NS: Deref>(
4090                 &mut self, msg: &msgs::ChannelReestablish, logger: &L, node_signer: &NS,
4091                 chain_hash: ChainHash, user_config: &UserConfig, best_block: &BestBlock
4092         ) -> Result<ReestablishResponses, ChannelError>
4093         where
4094                 L::Target: Logger,
4095                 NS::Target: NodeSigner
4096         {
4097                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == 0 {
4098                         // While BOLT 2 doesn't indicate explicitly we should error this channel here, it
4099                         // almost certainly indicates we are going to end up out-of-sync in some way, so we
4100                         // just close here instead of trying to recover.
4101                         return Err(ChannelError::Close("Peer sent a loose channel_reestablish not after reconnect".to_owned()));
4102                 }
4103
4104                 if msg.next_local_commitment_number >= INITIAL_COMMITMENT_NUMBER || msg.next_remote_commitment_number >= INITIAL_COMMITMENT_NUMBER ||
4105                         msg.next_local_commitment_number == 0 {
4106                         return Err(ChannelError::Close("Peer sent an invalid channel_reestablish to force close in a non-standard way".to_owned()));
4107                 }
4108
4109                 if msg.next_remote_commitment_number > 0 {
4110                         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);
4111                         let given_secret = SecretKey::from_slice(&msg.your_last_per_commitment_secret)
4112                                 .map_err(|_| ChannelError::Close("Peer sent a garbage channel_reestablish with unparseable secret key".to_owned()))?;
4113                         if expected_point != PublicKey::from_secret_key(&self.context.secp_ctx, &given_secret) {
4114                                 return Err(ChannelError::Close("Peer sent a garbage channel_reestablish with secret key not matching the commitment height provided".to_owned()));
4115                         }
4116                         if msg.next_remote_commitment_number > INITIAL_COMMITMENT_NUMBER - self.context.cur_holder_commitment_transaction_number {
4117                                 macro_rules! log_and_panic {
4118                                         ($err_msg: expr) => {
4119                                                 log_error!(logger, $err_msg, &self.context.channel_id, log_pubkey!(self.context.counterparty_node_id));
4120                                                 panic!($err_msg, &self.context.channel_id, log_pubkey!(self.context.counterparty_node_id));
4121                                         }
4122                                 }
4123                                 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\
4124                                         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\
4125                                         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\
4126                                         If you have restored from an old backup and wish to force-close channels and return to operation, you should start up, call\n\
4127                                         ChannelManager::force_close_without_broadcasting_txn on channel {} with counterparty {} or\n\
4128                                         ChannelManager::force_close_all_channels_without_broadcasting_txn, then reconnect to peer(s).\n\
4129                                         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\
4130                                         See https://github.com/lightningdevkit/rust-lightning/issues/1565 for more info.");
4131                         }
4132                 }
4133
4134                 // Before we change the state of the channel, we check if the peer is sending a very old
4135                 // commitment transaction number, if yes we send a warning message.
4136                 let our_commitment_transaction = INITIAL_COMMITMENT_NUMBER - self.context.cur_holder_commitment_transaction_number - 1;
4137                 if  msg.next_remote_commitment_number + 1 < our_commitment_transaction {
4138                         return Err(
4139                                 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))
4140                         );
4141                 }
4142
4143                 // Go ahead and unmark PeerDisconnected as various calls we may make check for it (and all
4144                 // remaining cases either succeed or ErrorMessage-fail).
4145                 self.context.channel_state &= !(ChannelState::PeerDisconnected as u32);
4146                 self.context.sent_message_awaiting_response = None;
4147
4148                 let shutdown_msg = self.get_outbound_shutdown();
4149
4150                 let announcement_sigs = self.get_announcement_sigs(node_signer, chain_hash, user_config, best_block.height(), logger);
4151
4152                 if self.context.channel_state & (ChannelState::FundingSent as u32) == ChannelState::FundingSent as u32 {
4153                         // If we're waiting on a monitor update, we shouldn't re-send any channel_ready's.
4154                         if self.context.channel_state & (ChannelState::OurChannelReady as u32) == 0 ||
4155                                         self.context.channel_state & (ChannelState::MonitorUpdateInProgress as u32) != 0 {
4156                                 if msg.next_remote_commitment_number != 0 {
4157                                         return Err(ChannelError::Close("Peer claimed they saw a revoke_and_ack but we haven't sent channel_ready yet".to_owned()));
4158                                 }
4159                                 // Short circuit the whole handler as there is nothing we can resend them
4160                                 return Ok(ReestablishResponses {
4161                                         channel_ready: None,
4162                                         raa: None, commitment_update: None,
4163                                         order: RAACommitmentOrder::CommitmentFirst,
4164                                         shutdown_msg, announcement_sigs,
4165                                 });
4166                         }
4167
4168                         // We have OurChannelReady set!
4169                         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);
4170                         return Ok(ReestablishResponses {
4171                                 channel_ready: Some(msgs::ChannelReady {
4172                                         channel_id: self.context.channel_id(),
4173                                         next_per_commitment_point,
4174                                         short_channel_id_alias: Some(self.context.outbound_scid_alias),
4175                                 }),
4176                                 raa: None, commitment_update: None,
4177                                 order: RAACommitmentOrder::CommitmentFirst,
4178                                 shutdown_msg, announcement_sigs,
4179                         });
4180                 }
4181
4182                 let required_revoke = if msg.next_remote_commitment_number + 1 == INITIAL_COMMITMENT_NUMBER - self.context.cur_holder_commitment_transaction_number {
4183                         // Remote isn't waiting on any RevokeAndACK from us!
4184                         // Note that if we need to repeat our ChannelReady we'll do that in the next if block.
4185                         None
4186                 } else if msg.next_remote_commitment_number + 1 == (INITIAL_COMMITMENT_NUMBER - 1) - self.context.cur_holder_commitment_transaction_number {
4187                         if self.context.channel_state & (ChannelState::MonitorUpdateInProgress as u32) != 0 {
4188                                 self.context.monitor_pending_revoke_and_ack = true;
4189                                 None
4190                         } else {
4191                                 Some(self.get_last_revoke_and_ack())
4192                         }
4193                 } else {
4194                         return Err(ChannelError::Close("Peer attempted to reestablish channel with a very old local commitment transaction".to_owned()));
4195                 };
4196
4197                 // We increment cur_counterparty_commitment_transaction_number only upon receipt of
4198                 // revoke_and_ack, not on sending commitment_signed, so we add one if have
4199                 // AwaitingRemoteRevoke set, which indicates we sent a commitment_signed but haven't gotten
4200                 // the corresponding revoke_and_ack back yet.
4201                 let is_awaiting_remote_revoke = self.context.channel_state & ChannelState::AwaitingRemoteRevoke as u32 != 0;
4202                 if is_awaiting_remote_revoke && !self.is_awaiting_monitor_update() {
4203                         self.mark_awaiting_response();
4204                 }
4205                 let next_counterparty_commitment_number = INITIAL_COMMITMENT_NUMBER - self.context.cur_counterparty_commitment_transaction_number + if is_awaiting_remote_revoke { 1 } else { 0 };
4206
4207                 let channel_ready = if msg.next_local_commitment_number == 1 && INITIAL_COMMITMENT_NUMBER - self.context.cur_holder_commitment_transaction_number == 1 {
4208                         // We should never have to worry about MonitorUpdateInProgress resending ChannelReady
4209                         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);
4210                         Some(msgs::ChannelReady {
4211                                 channel_id: self.context.channel_id(),
4212                                 next_per_commitment_point,
4213                                 short_channel_id_alias: Some(self.context.outbound_scid_alias),
4214                         })
4215                 } else { None };
4216
4217                 if msg.next_local_commitment_number == next_counterparty_commitment_number {
4218                         if required_revoke.is_some() {
4219                                 log_debug!(logger, "Reconnected channel {} with only lost outbound RAA", &self.context.channel_id());
4220                         } else {
4221                                 log_debug!(logger, "Reconnected channel {} with no loss", &self.context.channel_id());
4222                         }
4223
4224                         Ok(ReestablishResponses {
4225                                 channel_ready, shutdown_msg, announcement_sigs,
4226                                 raa: required_revoke,
4227                                 commitment_update: None,
4228                                 order: self.context.resend_order.clone(),
4229                         })
4230                 } else if msg.next_local_commitment_number == next_counterparty_commitment_number - 1 {
4231                         if required_revoke.is_some() {
4232                                 log_debug!(logger, "Reconnected channel {} with lost outbound RAA and lost remote commitment tx", &self.context.channel_id());
4233                         } else {
4234                                 log_debug!(logger, "Reconnected channel {} with only lost remote commitment tx", &self.context.channel_id());
4235                         }
4236
4237                         if self.context.channel_state & (ChannelState::MonitorUpdateInProgress as u32) != 0 {
4238                                 self.context.monitor_pending_commitment_signed = true;
4239                                 Ok(ReestablishResponses {
4240                                         channel_ready, shutdown_msg, announcement_sigs,
4241                                         commitment_update: None, raa: None,
4242                                         order: self.context.resend_order.clone(),
4243                                 })
4244                         } else {
4245                                 Ok(ReestablishResponses {
4246                                         channel_ready, shutdown_msg, announcement_sigs,
4247                                         raa: required_revoke,
4248                                         commitment_update: self.get_last_commitment_update_for_send(logger).ok(),
4249                                         order: self.context.resend_order.clone(),
4250                                 })
4251                         }
4252                 } else {
4253                         Err(ChannelError::Close("Peer attempted to reestablish channel with a very old remote commitment transaction".to_owned()))
4254                 }
4255         }
4256
4257         /// Calculates and returns our minimum and maximum closing transaction fee amounts, in whole
4258         /// satoshis. The amounts remain consistent unless a peer disconnects/reconnects or we restart,
4259         /// at which point they will be recalculated.
4260         fn calculate_closing_fee_limits<F: Deref>(&mut self, fee_estimator: &LowerBoundedFeeEstimator<F>)
4261                 -> (u64, u64)
4262                 where F::Target: FeeEstimator
4263         {
4264                 if let Some((min, max)) = self.context.closing_fee_limits { return (min, max); }
4265
4266                 // Propose a range from our current Background feerate to our Normal feerate plus our
4267                 // force_close_avoidance_max_fee_satoshis.
4268                 // If we fail to come to consensus, we'll have to force-close.
4269                 let mut proposed_feerate = fee_estimator.bounded_sat_per_1000_weight(ConfirmationTarget::ChannelCloseMinimum);
4270                 // Use NonAnchorChannelFee because this should be an estimate for a channel close
4271                 // that we don't expect to need fee bumping
4272                 let normal_feerate = fee_estimator.bounded_sat_per_1000_weight(ConfirmationTarget::NonAnchorChannelFee);
4273                 let mut proposed_max_feerate = if self.context.is_outbound() { normal_feerate } else { u32::max_value() };
4274
4275                 // The spec requires that (when the channel does not have anchors) we only send absolute
4276                 // channel fees no greater than the absolute channel fee on the current commitment
4277                 // transaction. It's unclear *which* commitment transaction this refers to, and there isn't
4278                 // very good reason to apply such a limit in any case. We don't bother doing so, risking
4279                 // some force-closure by old nodes, but we wanted to close the channel anyway.
4280
4281                 if let Some(target_feerate) = self.context.target_closing_feerate_sats_per_kw {
4282                         let min_feerate = if self.context.is_outbound() { target_feerate } else { cmp::min(self.context.feerate_per_kw, target_feerate) };
4283                         proposed_feerate = cmp::max(proposed_feerate, min_feerate);
4284                         proposed_max_feerate = cmp::max(proposed_max_feerate, min_feerate);
4285                 }
4286
4287                 // Note that technically we could end up with a lower minimum fee if one sides' balance is
4288                 // below our dust limit, causing the output to disappear. We don't bother handling this
4289                 // case, however, as this should only happen if a channel is closed before any (material)
4290                 // payments have been made on it. This may cause slight fee overpayment and/or failure to
4291                 // come to consensus with our counterparty on appropriate fees, however it should be a
4292                 // relatively rare case. We can revisit this later, though note that in order to determine
4293                 // if the funders' output is dust we have to know the absolute fee we're going to use.
4294                 let tx_weight = self.get_closing_transaction_weight(Some(&self.get_closing_scriptpubkey()), Some(self.context.counterparty_shutdown_scriptpubkey.as_ref().unwrap()));
4295                 let proposed_total_fee_satoshis = proposed_feerate as u64 * tx_weight / 1000;
4296                 let proposed_max_total_fee_satoshis = if self.context.is_outbound() {
4297                                 // We always add force_close_avoidance_max_fee_satoshis to our normal
4298                                 // feerate-calculated fee, but allow the max to be overridden if we're using a
4299                                 // target feerate-calculated fee.
4300                                 cmp::max(normal_feerate as u64 * tx_weight / 1000 + self.context.config.options.force_close_avoidance_max_fee_satoshis,
4301                                         proposed_max_feerate as u64 * tx_weight / 1000)
4302                         } else {
4303                                 self.context.channel_value_satoshis - (self.context.value_to_self_msat + 999) / 1000
4304                         };
4305
4306                 self.context.closing_fee_limits = Some((proposed_total_fee_satoshis, proposed_max_total_fee_satoshis));
4307                 self.context.closing_fee_limits.clone().unwrap()
4308         }
4309
4310         /// Returns true if we're ready to commence the closing_signed negotiation phase. This is true
4311         /// after both sides have exchanged a `shutdown` message and all HTLCs have been drained. At
4312         /// this point if we're the funder we should send the initial closing_signed, and in any case
4313         /// shutdown should complete within a reasonable timeframe.
4314         fn closing_negotiation_ready(&self) -> bool {
4315                 self.context.closing_negotiation_ready()
4316         }
4317
4318         /// Checks if the closing_signed negotiation is making appropriate progress, possibly returning
4319         /// an Err if no progress is being made and the channel should be force-closed instead.
4320         /// Should be called on a one-minute timer.
4321         pub fn timer_check_closing_negotiation_progress(&mut self) -> Result<(), ChannelError> {
4322                 if self.closing_negotiation_ready() {
4323                         if self.context.closing_signed_in_flight {
4324                                 return Err(ChannelError::Close("closing_signed negotiation failed to finish within two timer ticks".to_owned()));
4325                         } else {
4326                                 self.context.closing_signed_in_flight = true;
4327                         }
4328                 }
4329                 Ok(())
4330         }
4331
4332         pub fn maybe_propose_closing_signed<F: Deref, L: Deref>(
4333                 &mut self, fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L)
4334                 -> Result<(Option<msgs::ClosingSigned>, Option<Transaction>, Option<ShutdownResult>), ChannelError>
4335                 where F::Target: FeeEstimator, L::Target: Logger
4336         {
4337                 if self.context.last_sent_closing_fee.is_some() || !self.closing_negotiation_ready() {
4338                         return Ok((None, None, None));
4339                 }
4340
4341                 if !self.context.is_outbound() {
4342                         if let Some(msg) = &self.context.pending_counterparty_closing_signed.take() {
4343                                 return self.closing_signed(fee_estimator, &msg);
4344                         }
4345                         return Ok((None, None, None));
4346                 }
4347
4348                 let (our_min_fee, our_max_fee) = self.calculate_closing_fee_limits(fee_estimator);
4349
4350                 assert!(self.context.shutdown_scriptpubkey.is_some());
4351                 let (closing_tx, total_fee_satoshis) = self.build_closing_transaction(our_min_fee, false);
4352                 log_trace!(logger, "Proposing initial closing_signed for our counterparty with a fee range of {}-{} sat (with initial proposal {} sats)",
4353                         our_min_fee, our_max_fee, total_fee_satoshis);
4354
4355                 match &self.context.holder_signer {
4356                         ChannelSignerType::Ecdsa(ecdsa) => {
4357                                 let sig = ecdsa
4358                                         .sign_closing_transaction(&closing_tx, &self.context.secp_ctx)
4359                                         .map_err(|()| ChannelError::Close("Failed to get signature for closing transaction.".to_owned()))?;
4360
4361                                 self.context.last_sent_closing_fee = Some((total_fee_satoshis, sig.clone()));
4362                                 Ok((Some(msgs::ClosingSigned {
4363                                         channel_id: self.context.channel_id,
4364                                         fee_satoshis: total_fee_satoshis,
4365                                         signature: sig,
4366                                         fee_range: Some(msgs::ClosingSignedFeeRange {
4367                                                 min_fee_satoshis: our_min_fee,
4368                                                 max_fee_satoshis: our_max_fee,
4369                                         }),
4370                                 }), None, None))
4371                         }
4372                 }
4373         }
4374
4375         // Marks a channel as waiting for a response from the counterparty. If it's not received
4376         // [`DISCONNECT_PEER_AWAITING_RESPONSE_TICKS`] after sending our own to them, then we'll attempt
4377         // a reconnection.
4378         fn mark_awaiting_response(&mut self) {
4379                 self.context.sent_message_awaiting_response = Some(0);
4380         }
4381
4382         /// Determines whether we should disconnect the counterparty due to not receiving a response
4383         /// within our expected timeframe.
4384         ///
4385         /// This should be called on every [`super::channelmanager::ChannelManager::timer_tick_occurred`].
4386         pub fn should_disconnect_peer_awaiting_response(&mut self) -> bool {
4387                 let ticks_elapsed = if let Some(ticks_elapsed) = self.context.sent_message_awaiting_response.as_mut() {
4388                         ticks_elapsed
4389                 } else {
4390                         // Don't disconnect when we're not waiting on a response.
4391                         return false;
4392                 };
4393                 *ticks_elapsed += 1;
4394                 *ticks_elapsed >= DISCONNECT_PEER_AWAITING_RESPONSE_TICKS
4395         }
4396
4397         pub fn shutdown(
4398                 &mut self, signer_provider: &SP, their_features: &InitFeatures, msg: &msgs::Shutdown
4399         ) -> Result<(Option<msgs::Shutdown>, Option<ChannelMonitorUpdate>, Vec<(HTLCSource, PaymentHash)>), ChannelError>
4400         {
4401                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
4402                         return Err(ChannelError::Close("Peer sent shutdown when we needed a channel_reestablish".to_owned()));
4403                 }
4404                 if self.context.channel_state & !STATE_FLAGS < ChannelState::FundingSent as u32 {
4405                         // Spec says we should fail the connection, not the channel, but that's nonsense, there
4406                         // are plenty of reasons you may want to fail a channel pre-funding, and spec says you
4407                         // can do that via error message without getting a connection fail anyway...
4408                         return Err(ChannelError::Close("Peer sent shutdown pre-funding generation".to_owned()));
4409                 }
4410                 for htlc in self.context.pending_inbound_htlcs.iter() {
4411                         if let InboundHTLCState::RemoteAnnounced(_) = htlc.state {
4412                                 return Err(ChannelError::Close("Got shutdown with remote pending HTLCs".to_owned()));
4413                         }
4414                 }
4415                 assert_eq!(self.context.channel_state & ChannelState::ShutdownComplete as u32, 0);
4416
4417                 if !script::is_bolt2_compliant(&msg.scriptpubkey, their_features) {
4418                         return Err(ChannelError::Warn(format!("Got a nonstandard scriptpubkey ({}) from remote peer", msg.scriptpubkey.to_bytes().to_hex())));
4419                 }
4420
4421                 if self.context.counterparty_shutdown_scriptpubkey.is_some() {
4422                         if Some(&msg.scriptpubkey) != self.context.counterparty_shutdown_scriptpubkey.as_ref() {
4423                                 return Err(ChannelError::Warn(format!("Got shutdown request with a scriptpubkey ({}) which did not match their previous scriptpubkey.", msg.scriptpubkey.to_bytes().to_hex())));
4424                         }
4425                 } else {
4426                         self.context.counterparty_shutdown_scriptpubkey = Some(msg.scriptpubkey.clone());
4427                 }
4428
4429                 // If we have any LocalAnnounced updates we'll probably just get back an update_fail_htlc
4430                 // immediately after the commitment dance, but we can send a Shutdown because we won't send
4431                 // any further commitment updates after we set LocalShutdownSent.
4432                 let send_shutdown = (self.context.channel_state & ChannelState::LocalShutdownSent as u32) != ChannelState::LocalShutdownSent as u32;
4433
4434                 let update_shutdown_script = match self.context.shutdown_scriptpubkey {
4435                         Some(_) => false,
4436                         None => {
4437                                 assert!(send_shutdown);
4438                                 let shutdown_scriptpubkey = match signer_provider.get_shutdown_scriptpubkey() {
4439                                         Ok(scriptpubkey) => scriptpubkey,
4440                                         Err(_) => return Err(ChannelError::Close("Failed to get shutdown scriptpubkey".to_owned())),
4441                                 };
4442                                 if !shutdown_scriptpubkey.is_compatible(their_features) {
4443                                         return Err(ChannelError::Close(format!("Provided a scriptpubkey format not accepted by peer: {}", shutdown_scriptpubkey)));
4444                                 }
4445                                 self.context.shutdown_scriptpubkey = Some(shutdown_scriptpubkey);
4446                                 true
4447                         },
4448                 };
4449
4450                 // From here on out, we may not fail!
4451
4452                 self.context.channel_state |= ChannelState::RemoteShutdownSent as u32;
4453                 self.context.update_time_counter += 1;
4454
4455                 let monitor_update = if update_shutdown_script {
4456                         self.context.latest_monitor_update_id += 1;
4457                         let monitor_update = ChannelMonitorUpdate {
4458                                 update_id: self.context.latest_monitor_update_id,
4459                                 updates: vec![ChannelMonitorUpdateStep::ShutdownScript {
4460                                         scriptpubkey: self.get_closing_scriptpubkey(),
4461                                 }],
4462                         };
4463                         self.monitor_updating_paused(false, false, false, Vec::new(), Vec::new(), Vec::new());
4464                         self.push_ret_blockable_mon_update(monitor_update)
4465                 } else { None };
4466                 let shutdown = if send_shutdown {
4467                         Some(msgs::Shutdown {
4468                                 channel_id: self.context.channel_id,
4469                                 scriptpubkey: self.get_closing_scriptpubkey(),
4470                         })
4471                 } else { None };
4472
4473                 // We can't send our shutdown until we've committed all of our pending HTLCs, but the
4474                 // remote side is unlikely to accept any new HTLCs, so we go ahead and "free" any holding
4475                 // cell HTLCs and return them to fail the payment.
4476                 self.context.holding_cell_update_fee = None;
4477                 let mut dropped_outbound_htlcs = Vec::with_capacity(self.context.holding_cell_htlc_updates.len());
4478                 self.context.holding_cell_htlc_updates.retain(|htlc_update| {
4479                         match htlc_update {
4480                                 &HTLCUpdateAwaitingACK::AddHTLC { ref payment_hash, ref source, .. } => {
4481                                         dropped_outbound_htlcs.push((source.clone(), payment_hash.clone()));
4482                                         false
4483                                 },
4484                                 _ => true
4485                         }
4486                 });
4487
4488                 self.context.channel_state |= ChannelState::LocalShutdownSent as u32;
4489                 self.context.update_time_counter += 1;
4490
4491                 Ok((shutdown, monitor_update, dropped_outbound_htlcs))
4492         }
4493
4494         fn build_signed_closing_transaction(&self, closing_tx: &ClosingTransaction, counterparty_sig: &Signature, sig: &Signature) -> Transaction {
4495                 let mut tx = closing_tx.trust().built_transaction().clone();
4496
4497                 tx.input[0].witness.push(Vec::new()); // First is the multisig dummy
4498
4499                 let funding_key = self.context.get_holder_pubkeys().funding_pubkey.serialize();
4500                 let counterparty_funding_key = self.context.counterparty_funding_pubkey().serialize();
4501                 let mut holder_sig = sig.serialize_der().to_vec();
4502                 holder_sig.push(EcdsaSighashType::All as u8);
4503                 let mut cp_sig = counterparty_sig.serialize_der().to_vec();
4504                 cp_sig.push(EcdsaSighashType::All as u8);
4505                 if funding_key[..] < counterparty_funding_key[..] {
4506                         tx.input[0].witness.push(holder_sig);
4507                         tx.input[0].witness.push(cp_sig);
4508                 } else {
4509                         tx.input[0].witness.push(cp_sig);
4510                         tx.input[0].witness.push(holder_sig);
4511                 }
4512
4513                 tx.input[0].witness.push(self.context.get_funding_redeemscript().into_bytes());
4514                 tx
4515         }
4516
4517         pub fn closing_signed<F: Deref>(
4518                 &mut self, fee_estimator: &LowerBoundedFeeEstimator<F>, msg: &msgs::ClosingSigned)
4519                 -> Result<(Option<msgs::ClosingSigned>, Option<Transaction>, Option<ShutdownResult>), ChannelError>
4520                 where F::Target: FeeEstimator
4521         {
4522                 if self.context.channel_state & BOTH_SIDES_SHUTDOWN_MASK != BOTH_SIDES_SHUTDOWN_MASK {
4523                         return Err(ChannelError::Close("Remote end sent us a closing_signed before both sides provided a shutdown".to_owned()));
4524                 }
4525                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == ChannelState::PeerDisconnected as u32 {
4526                         return Err(ChannelError::Close("Peer sent closing_signed when we needed a channel_reestablish".to_owned()));
4527                 }
4528                 if !self.context.pending_inbound_htlcs.is_empty() || !self.context.pending_outbound_htlcs.is_empty() {
4529                         return Err(ChannelError::Close("Remote end sent us a closing_signed while there were still pending HTLCs".to_owned()));
4530                 }
4531                 if msg.fee_satoshis > TOTAL_BITCOIN_SUPPLY_SATOSHIS { // this is required to stop potential overflow in build_closing_transaction
4532                         return Err(ChannelError::Close("Remote tried to send us a closing tx with > 21 million BTC fee".to_owned()));
4533                 }
4534
4535                 if self.context.is_outbound() && self.context.last_sent_closing_fee.is_none() {
4536                         return Err(ChannelError::Close("Remote tried to send a closing_signed when we were supposed to propose the first one".to_owned()));
4537                 }
4538
4539                 if self.context.channel_state & ChannelState::MonitorUpdateInProgress as u32 != 0 {
4540                         self.context.pending_counterparty_closing_signed = Some(msg.clone());
4541                         return Ok((None, None, None));
4542                 }
4543
4544                 let funding_redeemscript = self.context.get_funding_redeemscript();
4545                 let (mut closing_tx, used_total_fee) = self.build_closing_transaction(msg.fee_satoshis, false);
4546                 if used_total_fee != msg.fee_satoshis {
4547                         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)));
4548                 }
4549                 let sighash = closing_tx.trust().get_sighash_all(&funding_redeemscript, self.context.channel_value_satoshis);
4550
4551                 match self.context.secp_ctx.verify_ecdsa(&sighash, &msg.signature, &self.context.get_counterparty_pubkeys().funding_pubkey) {
4552                         Ok(_) => {},
4553                         Err(_e) => {
4554                                 // The remote end may have decided to revoke their output due to inconsistent dust
4555                                 // limits, so check for that case by re-checking the signature here.
4556                                 closing_tx = self.build_closing_transaction(msg.fee_satoshis, true).0;
4557                                 let sighash = closing_tx.trust().get_sighash_all(&funding_redeemscript, self.context.channel_value_satoshis);
4558                                 secp_check!(self.context.secp_ctx.verify_ecdsa(&sighash, &msg.signature, self.context.counterparty_funding_pubkey()), "Invalid closing tx signature from peer".to_owned());
4559                         },
4560                 };
4561
4562                 for outp in closing_tx.trust().built_transaction().output.iter() {
4563                         if !outp.script_pubkey.is_witness_program() && outp.value < MAX_STD_OUTPUT_DUST_LIMIT_SATOSHIS {
4564                                 return Err(ChannelError::Close("Remote sent us a closing_signed with a dust output. Always use segwit closing scripts!".to_owned()));
4565                         }
4566                 }
4567
4568                 assert!(self.context.shutdown_scriptpubkey.is_some());
4569                 if let Some((last_fee, sig)) = self.context.last_sent_closing_fee {
4570                         if last_fee == msg.fee_satoshis {
4571                                 let shutdown_result = ShutdownResult {
4572                                         monitor_update: None,
4573                                         dropped_outbound_htlcs: Vec::new(),
4574                                         unbroadcasted_batch_funding_txid: self.context.unbroadcasted_batch_funding_txid(),
4575                                 };
4576                                 let tx = self.build_signed_closing_transaction(&mut closing_tx, &msg.signature, &sig);
4577                                 self.context.channel_state = ChannelState::ShutdownComplete as u32;
4578                                 self.context.update_time_counter += 1;
4579                                 return Ok((None, Some(tx), Some(shutdown_result)));
4580                         }
4581                 }
4582
4583                 let (our_min_fee, our_max_fee) = self.calculate_closing_fee_limits(fee_estimator);
4584
4585                 macro_rules! propose_fee {
4586                         ($new_fee: expr) => {
4587                                 let (closing_tx, used_fee) = if $new_fee == msg.fee_satoshis {
4588                                         (closing_tx, $new_fee)
4589                                 } else {
4590                                         self.build_closing_transaction($new_fee, false)
4591                                 };
4592
4593                                 return match &self.context.holder_signer {
4594                                         ChannelSignerType::Ecdsa(ecdsa) => {
4595                                                 let sig = ecdsa
4596                                                         .sign_closing_transaction(&closing_tx, &self.context.secp_ctx)
4597                                                         .map_err(|_| ChannelError::Close("External signer refused to sign closing transaction".to_owned()))?;
4598                                                 let (signed_tx, shutdown_result) = if $new_fee == msg.fee_satoshis {
4599                                                         let shutdown_result = ShutdownResult {
4600                                                                 monitor_update: None,
4601                                                                 dropped_outbound_htlcs: Vec::new(),
4602                                                                 unbroadcasted_batch_funding_txid: self.context.unbroadcasted_batch_funding_txid(),
4603                                                         };
4604                                                         self.context.channel_state = ChannelState::ShutdownComplete as u32;
4605                                                         self.context.update_time_counter += 1;
4606                                                         let tx = self.build_signed_closing_transaction(&closing_tx, &msg.signature, &sig);
4607                                                         (Some(tx), Some(shutdown_result))
4608                                                 } else {
4609                                                         (None, None)
4610                                                 };
4611
4612                                                 self.context.last_sent_closing_fee = Some((used_fee, sig.clone()));
4613                                                 Ok((Some(msgs::ClosingSigned {
4614                                                         channel_id: self.context.channel_id,
4615                                                         fee_satoshis: used_fee,
4616                                                         signature: sig,
4617                                                         fee_range: Some(msgs::ClosingSignedFeeRange {
4618                                                                 min_fee_satoshis: our_min_fee,
4619                                                                 max_fee_satoshis: our_max_fee,
4620                                                         }),
4621                                                 }), signed_tx, shutdown_result))
4622                                         }
4623                                 }
4624                         }
4625                 }
4626
4627                 if let Some(msgs::ClosingSignedFeeRange { min_fee_satoshis, max_fee_satoshis }) = msg.fee_range {
4628                         if msg.fee_satoshis < min_fee_satoshis || msg.fee_satoshis > max_fee_satoshis {
4629                                 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)));
4630                         }
4631                         if max_fee_satoshis < our_min_fee {
4632                                 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)));
4633                         }
4634                         if min_fee_satoshis > our_max_fee {
4635                                 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)));
4636                         }
4637
4638                         if !self.context.is_outbound() {
4639                                 // They have to pay, so pick the highest fee in the overlapping range.
4640                                 // We should never set an upper bound aside from their full balance
4641                                 debug_assert_eq!(our_max_fee, self.context.channel_value_satoshis - (self.context.value_to_self_msat + 999) / 1000);
4642                                 propose_fee!(cmp::min(max_fee_satoshis, our_max_fee));
4643                         } else {
4644                                 if msg.fee_satoshis < our_min_fee || msg.fee_satoshis > our_max_fee {
4645                                         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.",
4646                                                 msg.fee_satoshis, our_min_fee, our_max_fee)));
4647                                 }
4648                                 // The proposed fee is in our acceptable range, accept it and broadcast!
4649                                 propose_fee!(msg.fee_satoshis);
4650                         }
4651                 } else {
4652                         // Old fee style negotiation. We don't bother to enforce whether they are complying
4653                         // with the "making progress" requirements, we just comply and hope for the best.
4654                         if let Some((last_fee, _)) = self.context.last_sent_closing_fee {
4655                                 if msg.fee_satoshis > last_fee {
4656                                         if msg.fee_satoshis < our_max_fee {
4657                                                 propose_fee!(msg.fee_satoshis);
4658                                         } else if last_fee < our_max_fee {
4659                                                 propose_fee!(our_max_fee);
4660                                         } else {
4661                                                 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)));
4662                                         }
4663                                 } else {
4664                                         if msg.fee_satoshis > our_min_fee {
4665                                                 propose_fee!(msg.fee_satoshis);
4666                                         } else if last_fee > our_min_fee {
4667                                                 propose_fee!(our_min_fee);
4668                                         } else {
4669                                                 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)));
4670                                         }
4671                                 }
4672                         } else {
4673                                 if msg.fee_satoshis < our_min_fee {
4674                                         propose_fee!(our_min_fee);
4675                                 } else if msg.fee_satoshis > our_max_fee {
4676                                         propose_fee!(our_max_fee);
4677                                 } else {
4678                                         propose_fee!(msg.fee_satoshis);
4679                                 }
4680                         }
4681                 }
4682         }
4683
4684         fn internal_htlc_satisfies_config(
4685                 &self, htlc: &msgs::UpdateAddHTLC, amt_to_forward: u64, outgoing_cltv_value: u32, config: &ChannelConfig,
4686         ) -> Result<(), (&'static str, u16)> {
4687                 let fee = amt_to_forward.checked_mul(config.forwarding_fee_proportional_millionths as u64)
4688                         .and_then(|prop_fee| (prop_fee / 1000000).checked_add(config.forwarding_fee_base_msat as u64));
4689                 if fee.is_none() || htlc.amount_msat < fee.unwrap() ||
4690                         (htlc.amount_msat - fee.unwrap()) < amt_to_forward {
4691                         return Err((
4692                                 "Prior hop has deviated from specified fees parameters or origin node has obsolete ones",
4693                                 0x1000 | 12, // fee_insufficient
4694                         ));
4695                 }
4696                 if (htlc.cltv_expiry as u64) < outgoing_cltv_value as u64 + config.cltv_expiry_delta as u64 {
4697                         return Err((
4698                                 "Forwarding node has tampered with the intended HTLC values or origin node has an obsolete cltv_expiry_delta",
4699                                 0x1000 | 13, // incorrect_cltv_expiry
4700                         ));
4701                 }
4702                 Ok(())
4703         }
4704
4705         /// Determines whether the parameters of an incoming HTLC to be forwarded satisfy the channel's
4706         /// [`ChannelConfig`]. This first looks at the channel's current [`ChannelConfig`], and if
4707         /// unsuccessful, falls back to the previous one if one exists.
4708         pub fn htlc_satisfies_config(
4709                 &self, htlc: &msgs::UpdateAddHTLC, amt_to_forward: u64, outgoing_cltv_value: u32,
4710         ) -> Result<(), (&'static str, u16)> {
4711                 self.internal_htlc_satisfies_config(&htlc, amt_to_forward, outgoing_cltv_value, &self.context.config())
4712                         .or_else(|err| {
4713                                 if let Some(prev_config) = self.context.prev_config() {
4714                                         self.internal_htlc_satisfies_config(htlc, amt_to_forward, outgoing_cltv_value, &prev_config)
4715                                 } else {
4716                                         Err(err)
4717                                 }
4718                         })
4719         }
4720
4721         pub fn get_cur_holder_commitment_transaction_number(&self) -> u64 {
4722                 self.context.cur_holder_commitment_transaction_number + 1
4723         }
4724
4725         pub fn get_cur_counterparty_commitment_transaction_number(&self) -> u64 {
4726                 self.context.cur_counterparty_commitment_transaction_number + 1 - if self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32) != 0 { 1 } else { 0 }
4727         }
4728
4729         pub fn get_revoked_counterparty_commitment_transaction_number(&self) -> u64 {
4730                 self.context.cur_counterparty_commitment_transaction_number + 2
4731         }
4732
4733         #[cfg(test)]
4734         pub fn get_signer(&self) -> &ChannelSignerType<<SP::Target as SignerProvider>::Signer> {
4735                 &self.context.holder_signer
4736         }
4737
4738         #[cfg(test)]
4739         pub fn get_value_stat(&self) -> ChannelValueStat {
4740                 ChannelValueStat {
4741                         value_to_self_msat: self.context.value_to_self_msat,
4742                         channel_value_msat: self.context.channel_value_satoshis * 1000,
4743                         channel_reserve_msat: self.context.counterparty_selected_channel_reserve_satoshis.unwrap() * 1000,
4744                         pending_outbound_htlcs_amount_msat: self.context.pending_outbound_htlcs.iter().map(|ref h| h.amount_msat).sum::<u64>(),
4745                         pending_inbound_htlcs_amount_msat: self.context.pending_inbound_htlcs.iter().map(|ref h| h.amount_msat).sum::<u64>(),
4746                         holding_cell_outbound_amount_msat: {
4747                                 let mut res = 0;
4748                                 for h in self.context.holding_cell_htlc_updates.iter() {
4749                                         match h {
4750                                                 &HTLCUpdateAwaitingACK::AddHTLC{amount_msat, .. } => {
4751                                                         res += amount_msat;
4752                                                 }
4753                                                 _ => {}
4754                                         }
4755                                 }
4756                                 res
4757                         },
4758                         counterparty_max_htlc_value_in_flight_msat: self.context.counterparty_max_htlc_value_in_flight_msat,
4759                         counterparty_dust_limit_msat: self.context.counterparty_dust_limit_satoshis * 1000,
4760                 }
4761         }
4762
4763         /// Returns true if this channel has been marked as awaiting a monitor update to move forward.
4764         /// Allowed in any state (including after shutdown)
4765         pub fn is_awaiting_monitor_update(&self) -> bool {
4766                 (self.context.channel_state & ChannelState::MonitorUpdateInProgress as u32) != 0
4767         }
4768
4769         /// Gets the latest [`ChannelMonitorUpdate`] ID which has been released and is in-flight.
4770         pub fn get_latest_unblocked_monitor_update_id(&self) -> u64 {
4771                 if self.context.blocked_monitor_updates.is_empty() { return self.context.get_latest_monitor_update_id(); }
4772                 self.context.blocked_monitor_updates[0].update.update_id - 1
4773         }
4774
4775         /// Returns the next blocked monitor update, if one exists, and a bool which indicates a
4776         /// further blocked monitor update exists after the next.
4777         pub fn unblock_next_blocked_monitor_update(&mut self) -> Option<(ChannelMonitorUpdate, bool)> {
4778                 if self.context.blocked_monitor_updates.is_empty() { return None; }
4779                 Some((self.context.blocked_monitor_updates.remove(0).update,
4780                         !self.context.blocked_monitor_updates.is_empty()))
4781         }
4782
4783         /// Pushes a new monitor update into our monitor update queue, returning it if it should be
4784         /// immediately given to the user for persisting or `None` if it should be held as blocked.
4785         fn push_ret_blockable_mon_update(&mut self, update: ChannelMonitorUpdate)
4786         -> Option<ChannelMonitorUpdate> {
4787                 let release_monitor = self.context.blocked_monitor_updates.is_empty();
4788                 if !release_monitor {
4789                         self.context.blocked_monitor_updates.push(PendingChannelMonitorUpdate {
4790                                 update,
4791                         });
4792                         None
4793                 } else {
4794                         Some(update)
4795                 }
4796         }
4797
4798         pub fn blocked_monitor_updates_pending(&self) -> usize {
4799                 self.context.blocked_monitor_updates.len()
4800         }
4801
4802         /// Returns true if the channel is awaiting the persistence of the initial ChannelMonitor.
4803         /// If the channel is outbound, this implies we have not yet broadcasted the funding
4804         /// transaction. If the channel is inbound, this implies simply that the channel has not
4805         /// advanced state.
4806         pub fn is_awaiting_initial_mon_persist(&self) -> bool {
4807                 if !self.is_awaiting_monitor_update() { return false; }
4808                 if self.context.channel_state &
4809                         !(ChannelState::TheirChannelReady as u32 | ChannelState::PeerDisconnected as u32 | ChannelState::MonitorUpdateInProgress as u32 | ChannelState::WaitingForBatch as u32)
4810                                 == ChannelState::FundingSent as u32 {
4811                         // If we're not a 0conf channel, we'll be waiting on a monitor update with only
4812                         // FundingSent set, though our peer could have sent their channel_ready.
4813                         debug_assert!(self.context.minimum_depth.unwrap_or(1) > 0);
4814                         return true;
4815                 }
4816                 if self.context.cur_holder_commitment_transaction_number == INITIAL_COMMITMENT_NUMBER - 1 &&
4817                         self.context.cur_counterparty_commitment_transaction_number == INITIAL_COMMITMENT_NUMBER - 1 {
4818                         // If we're a 0-conf channel, we'll move beyond FundingSent immediately even while
4819                         // waiting for the initial monitor persistence. Thus, we check if our commitment
4820                         // transaction numbers have both been iterated only exactly once (for the
4821                         // funding_signed), and we're awaiting monitor update.
4822                         //
4823                         // If we got here, we shouldn't have yet broadcasted the funding transaction (as the
4824                         // only way to get an awaiting-monitor-update state during initial funding is if the
4825                         // initial monitor persistence is still pending).
4826                         //
4827                         // Because deciding we're awaiting initial broadcast spuriously could result in
4828                         // funds-loss (as we don't have a monitor, but have the funding transaction confirmed),
4829                         // we hard-assert here, even in production builds.
4830                         if self.context.is_outbound() { assert!(self.context.funding_transaction.is_some()); }
4831                         assert!(self.context.monitor_pending_channel_ready);
4832                         assert_eq!(self.context.latest_monitor_update_id, 0);
4833                         return true;
4834                 }
4835                 false
4836         }
4837
4838         /// Returns true if our channel_ready has been sent
4839         pub fn is_our_channel_ready(&self) -> bool {
4840                 (self.context.channel_state & ChannelState::OurChannelReady as u32) != 0 || self.context.channel_state & !STATE_FLAGS >= ChannelState::ChannelReady as u32
4841         }
4842
4843         /// Returns true if our peer has either initiated or agreed to shut down the channel.
4844         pub fn received_shutdown(&self) -> bool {
4845                 (self.context.channel_state & ChannelState::RemoteShutdownSent as u32) != 0
4846         }
4847
4848         /// Returns true if we either initiated or agreed to shut down the channel.
4849         pub fn sent_shutdown(&self) -> bool {
4850                 (self.context.channel_state & ChannelState::LocalShutdownSent as u32) != 0
4851         }
4852
4853         /// Returns true if this channel is fully shut down. True here implies that no further actions
4854         /// may/will be taken on this channel, and thus this object should be freed. Any future changes
4855         /// will be handled appropriately by the chain monitor.
4856         pub fn is_shutdown(&self) -> bool {
4857                 if (self.context.channel_state & ChannelState::ShutdownComplete as u32) == ChannelState::ShutdownComplete as u32  {
4858                         assert!(self.context.channel_state == ChannelState::ShutdownComplete as u32);
4859                         true
4860                 } else { false }
4861         }
4862
4863         pub fn channel_update_status(&self) -> ChannelUpdateStatus {
4864                 self.context.channel_update_status
4865         }
4866
4867         pub fn set_channel_update_status(&mut self, status: ChannelUpdateStatus) {
4868                 self.context.update_time_counter += 1;
4869                 self.context.channel_update_status = status;
4870         }
4871
4872         fn check_get_channel_ready(&mut self, height: u32) -> Option<msgs::ChannelReady> {
4873                 // Called:
4874                 //  * always when a new block/transactions are confirmed with the new height
4875                 //  * when funding is signed with a height of 0
4876                 if self.context.funding_tx_confirmation_height == 0 && self.context.minimum_depth != Some(0) {
4877                         return None;
4878                 }
4879
4880                 let funding_tx_confirmations = height as i64 - self.context.funding_tx_confirmation_height as i64 + 1;
4881                 if funding_tx_confirmations <= 0 {
4882                         self.context.funding_tx_confirmation_height = 0;
4883                 }
4884
4885                 if funding_tx_confirmations < self.context.minimum_depth.unwrap_or(0) as i64 {
4886                         return None;
4887                 }
4888
4889                 // If we're still pending the signature on a funding transaction, then we're not ready to send a
4890                 // channel_ready yet.
4891                 if self.context.signer_pending_funding {
4892                         return None;
4893                 }
4894
4895                 // Note that we don't include ChannelState::WaitingForBatch as we don't want to send
4896                 // channel_ready until the entire batch is ready.
4897                 let non_shutdown_state = self.context.channel_state & (!MULTI_STATE_FLAGS);
4898                 let need_commitment_update = if non_shutdown_state == ChannelState::FundingSent as u32 {
4899                         self.context.channel_state |= ChannelState::OurChannelReady as u32;
4900                         true
4901                 } else if non_shutdown_state == (ChannelState::FundingSent as u32 | ChannelState::TheirChannelReady as u32) {
4902                         self.context.channel_state = ChannelState::ChannelReady as u32 | (self.context.channel_state & MULTI_STATE_FLAGS);
4903                         self.context.update_time_counter += 1;
4904                         true
4905                 } else if non_shutdown_state == (ChannelState::FundingSent as u32 | ChannelState::OurChannelReady as u32) {
4906                         // We got a reorg but not enough to trigger a force close, just ignore.
4907                         false
4908                 } else {
4909                         if self.context.funding_tx_confirmation_height != 0 && self.context.channel_state & !STATE_FLAGS < ChannelState::ChannelReady as u32 {
4910                                 // We should never see a funding transaction on-chain until we've received
4911                                 // funding_signed (if we're an outbound channel), or seen funding_generated (if we're
4912                                 // an inbound channel - before that we have no known funding TXID). The fuzzer,
4913                                 // however, may do this and we shouldn't treat it as a bug.
4914                                 #[cfg(not(fuzzing))]
4915                                 panic!("Started confirming a channel in a state pre-FundingSent: {}.\n\
4916                                         Do NOT broadcast a funding transaction manually - let LDK do it for you!",
4917                                         self.context.channel_state);
4918                         }
4919                         // We got a reorg but not enough to trigger a force close, just ignore.
4920                         false
4921                 };
4922
4923                 if need_commitment_update {
4924                         if self.context.channel_state & (ChannelState::MonitorUpdateInProgress as u32) == 0 {
4925                                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32) == 0 {
4926                                         let next_per_commitment_point =
4927                                                 self.context.holder_signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER - 1, &self.context.secp_ctx);
4928                                         return Some(msgs::ChannelReady {
4929                                                 channel_id: self.context.channel_id,
4930                                                 next_per_commitment_point,
4931                                                 short_channel_id_alias: Some(self.context.outbound_scid_alias),
4932                                         });
4933                                 }
4934                         } else {
4935                                 self.context.monitor_pending_channel_ready = true;
4936                         }
4937                 }
4938                 None
4939         }
4940
4941         /// When a transaction is confirmed, we check whether it is or spends the funding transaction
4942         /// In the first case, we store the confirmation height and calculating the short channel id.
4943         /// In the second, we simply return an Err indicating we need to be force-closed now.
4944         pub fn transactions_confirmed<NS: Deref, L: Deref>(
4945                 &mut self, block_hash: &BlockHash, height: u32, txdata: &TransactionData,
4946                 chain_hash: ChainHash, node_signer: &NS, user_config: &UserConfig, logger: &L
4947         ) -> Result<(Option<msgs::ChannelReady>, Option<msgs::AnnouncementSignatures>), ClosureReason>
4948         where
4949                 NS::Target: NodeSigner,
4950                 L::Target: Logger
4951         {
4952                 let mut msgs = (None, None);
4953                 if let Some(funding_txo) = self.context.get_funding_txo() {
4954                         for &(index_in_block, tx) in txdata.iter() {
4955                                 // Check if the transaction is the expected funding transaction, and if it is,
4956                                 // check that it pays the right amount to the right script.
4957                                 if self.context.funding_tx_confirmation_height == 0 {
4958                                         if tx.txid() == funding_txo.txid {
4959                                                 let txo_idx = funding_txo.index as usize;
4960                                                 if txo_idx >= tx.output.len() || tx.output[txo_idx].script_pubkey != self.context.get_funding_redeemscript().to_v0_p2wsh() ||
4961                                                                 tx.output[txo_idx].value != self.context.channel_value_satoshis {
4962                                                         if self.context.is_outbound() {
4963                                                                 // If we generated the funding transaction and it doesn't match what it
4964                                                                 // should, the client is really broken and we should just panic and
4965                                                                 // tell them off. That said, because hash collisions happen with high
4966                                                                 // probability in fuzzing mode, if we're fuzzing we just close the
4967                                                                 // channel and move on.
4968                                                                 #[cfg(not(fuzzing))]
4969                                                                 panic!("Client called ChannelManager::funding_transaction_generated with bogus transaction!");
4970                                                         }
4971                                                         self.context.update_time_counter += 1;
4972                                                         let err_reason = "funding tx had wrong script/value or output index";
4973                                                         return Err(ClosureReason::ProcessingError { err: err_reason.to_owned() });
4974                                                 } else {
4975                                                         if self.context.is_outbound() {
4976                                                                 if !tx.is_coin_base() {
4977                                                                         for input in tx.input.iter() {
4978                                                                                 if input.witness.is_empty() {
4979                                                                                         // We generated a malleable funding transaction, implying we've
4980                                                                                         // just exposed ourselves to funds loss to our counterparty.
4981                                                                                         #[cfg(not(fuzzing))]
4982                                                                                         panic!("Client called ChannelManager::funding_transaction_generated with bogus transaction!");
4983                                                                                 }
4984                                                                         }
4985                                                                 }
4986                                                         }
4987                                                         self.context.funding_tx_confirmation_height = height;
4988                                                         self.context.funding_tx_confirmed_in = Some(*block_hash);
4989                                                         self.context.short_channel_id = match scid_from_parts(height as u64, index_in_block as u64, txo_idx as u64) {
4990                                                                 Ok(scid) => Some(scid),
4991                                                                 Err(_) => panic!("Block was bogus - either height was > 16 million, had > 16 million transactions, or had > 65k outputs"),
4992                                                         }
4993                                                 }
4994                                                 // If this is a coinbase transaction and not a 0-conf channel
4995                                                 // we should update our min_depth to 100 to handle coinbase maturity
4996                                                 if tx.is_coin_base() &&
4997                                                         self.context.minimum_depth.unwrap_or(0) > 0 &&
4998                                                         self.context.minimum_depth.unwrap_or(0) < COINBASE_MATURITY {
4999                                                         self.context.minimum_depth = Some(COINBASE_MATURITY);
5000                                                 }
5001                                         }
5002                                         // If we allow 1-conf funding, we may need to check for channel_ready here and
5003                                         // send it immediately instead of waiting for a best_block_updated call (which
5004                                         // may have already happened for this block).
5005                                         if let Some(channel_ready) = self.check_get_channel_ready(height) {
5006                                                 log_info!(logger, "Sending a channel_ready to our peer for channel {}", &self.context.channel_id);
5007                                                 let announcement_sigs = self.get_announcement_sigs(node_signer, chain_hash, user_config, height, logger);
5008                                                 msgs = (Some(channel_ready), announcement_sigs);
5009                                         }
5010                                 }
5011                                 for inp in tx.input.iter() {
5012                                         if inp.previous_output == funding_txo.into_bitcoin_outpoint() {
5013                                                 log_info!(logger, "Detected channel-closing tx {} spending {}:{}, closing channel {}", tx.txid(), inp.previous_output.txid, inp.previous_output.vout, &self.context.channel_id());
5014                                                 return Err(ClosureReason::CommitmentTxConfirmed);
5015                                         }
5016                                 }
5017                         }
5018                 }
5019                 Ok(msgs)
5020         }
5021
5022         /// When a new block is connected, we check the height of the block against outbound holding
5023         /// cell HTLCs in case we need to give up on them prematurely and time them out. Everything
5024         /// else (e.g. commitment transaction broadcasts, HTLC transaction broadcasting, etc) is
5025         /// handled by the ChannelMonitor.
5026         ///
5027         /// If we return Err, the channel may have been closed, at which point the standard
5028         /// requirements apply - no calls may be made except those explicitly stated to be allowed
5029         /// post-shutdown.
5030         ///
5031         /// May return some HTLCs (and their payment_hash) which have timed out and should be failed
5032         /// back.
5033         pub fn best_block_updated<NS: Deref, L: Deref>(
5034                 &mut self, height: u32, highest_header_time: u32, chain_hash: ChainHash,
5035                 node_signer: &NS, user_config: &UserConfig, logger: &L
5036         ) -> Result<(Option<msgs::ChannelReady>, Vec<(HTLCSource, PaymentHash)>, Option<msgs::AnnouncementSignatures>), ClosureReason>
5037         where
5038                 NS::Target: NodeSigner,
5039                 L::Target: Logger
5040         {
5041                 self.do_best_block_updated(height, highest_header_time, Some((chain_hash, node_signer, user_config)), logger)
5042         }
5043
5044         fn do_best_block_updated<NS: Deref, L: Deref>(
5045                 &mut self, height: u32, highest_header_time: u32,
5046                 chain_node_signer: Option<(ChainHash, &NS, &UserConfig)>, logger: &L
5047         ) -> Result<(Option<msgs::ChannelReady>, Vec<(HTLCSource, PaymentHash)>, Option<msgs::AnnouncementSignatures>), ClosureReason>
5048         where
5049                 NS::Target: NodeSigner,
5050                 L::Target: Logger
5051         {
5052                 let mut timed_out_htlcs = Vec::new();
5053                 // This mirrors the check in ChannelManager::decode_update_add_htlc_onion, refusing to
5054                 // forward an HTLC when our counterparty should almost certainly just fail it for expiring
5055                 // ~now.
5056                 let unforwarded_htlc_cltv_limit = height + LATENCY_GRACE_PERIOD_BLOCKS;
5057                 self.context.holding_cell_htlc_updates.retain(|htlc_update| {
5058                         match htlc_update {
5059                                 &HTLCUpdateAwaitingACK::AddHTLC { ref payment_hash, ref source, ref cltv_expiry, .. } => {
5060                                         if *cltv_expiry <= unforwarded_htlc_cltv_limit {
5061                                                 timed_out_htlcs.push((source.clone(), payment_hash.clone()));
5062                                                 false
5063                                         } else { true }
5064                                 },
5065                                 _ => true
5066                         }
5067                 });
5068
5069                 self.context.update_time_counter = cmp::max(self.context.update_time_counter, highest_header_time);
5070
5071                 if let Some(channel_ready) = self.check_get_channel_ready(height) {
5072                         let announcement_sigs = if let Some((chain_hash, node_signer, user_config)) = chain_node_signer {
5073                                 self.get_announcement_sigs(node_signer, chain_hash, user_config, height, logger)
5074                         } else { None };
5075                         log_info!(logger, "Sending a channel_ready to our peer for channel {}", &self.context.channel_id);
5076                         return Ok((Some(channel_ready), timed_out_htlcs, announcement_sigs));
5077                 }
5078
5079                 let non_shutdown_state = self.context.channel_state & (!MULTI_STATE_FLAGS);
5080                 if non_shutdown_state & !STATE_FLAGS >= ChannelState::ChannelReady as u32 ||
5081                    (non_shutdown_state & ChannelState::OurChannelReady as u32) == ChannelState::OurChannelReady as u32 {
5082                         let mut funding_tx_confirmations = height as i64 - self.context.funding_tx_confirmation_height as i64 + 1;
5083                         if self.context.funding_tx_confirmation_height == 0 {
5084                                 // Note that check_get_channel_ready may reset funding_tx_confirmation_height to
5085                                 // zero if it has been reorged out, however in either case, our state flags
5086                                 // indicate we've already sent a channel_ready
5087                                 funding_tx_confirmations = 0;
5088                         }
5089
5090                         // If we've sent channel_ready (or have both sent and received channel_ready), and
5091                         // the funding transaction has become unconfirmed,
5092                         // close the channel and hope we can get the latest state on chain (because presumably
5093                         // the funding transaction is at least still in the mempool of most nodes).
5094                         //
5095                         // Note that ideally we wouldn't force-close if we see *any* reorg on a 1-conf or
5096                         // 0-conf channel, but not doing so may lead to the
5097                         // `ChannelManager::short_to_chan_info` map  being inconsistent, so we currently have
5098                         // to.
5099                         if funding_tx_confirmations == 0 && self.context.funding_tx_confirmed_in.is_some() {
5100                                 let err_reason = format!("Funding transaction was un-confirmed. Locked at {} confs, now have {} confs.",
5101                                         self.context.minimum_depth.unwrap(), funding_tx_confirmations);
5102                                 return Err(ClosureReason::ProcessingError { err: err_reason });
5103                         }
5104                 } else if !self.context.is_outbound() && self.context.funding_tx_confirmed_in.is_none() &&
5105                                 height >= self.context.channel_creation_height + FUNDING_CONF_DEADLINE_BLOCKS {
5106                         log_info!(logger, "Closing channel {} due to funding timeout", &self.context.channel_id);
5107                         // If funding_tx_confirmed_in is unset, the channel must not be active
5108                         assert!(non_shutdown_state & !STATE_FLAGS <= ChannelState::ChannelReady as u32);
5109                         assert_eq!(non_shutdown_state & ChannelState::OurChannelReady as u32, 0);
5110                         return Err(ClosureReason::FundingTimedOut);
5111                 }
5112
5113                 let announcement_sigs = if let Some((chain_hash, node_signer, user_config)) = chain_node_signer {
5114                         self.get_announcement_sigs(node_signer, chain_hash, user_config, height, logger)
5115                 } else { None };
5116                 Ok((None, timed_out_htlcs, announcement_sigs))
5117         }
5118
5119         /// Indicates the funding transaction is no longer confirmed in the main chain. This may
5120         /// force-close the channel, but may also indicate a harmless reorganization of a block or two
5121         /// before the channel has reached channel_ready and we can just wait for more blocks.
5122         pub fn funding_transaction_unconfirmed<L: Deref>(&mut self, logger: &L) -> Result<(), ClosureReason> where L::Target: Logger {
5123                 if self.context.funding_tx_confirmation_height != 0 {
5124                         // We handle the funding disconnection by calling best_block_updated with a height one
5125                         // below where our funding was connected, implying a reorg back to conf_height - 1.
5126                         let reorg_height = self.context.funding_tx_confirmation_height - 1;
5127                         // We use the time field to bump the current time we set on channel updates if its
5128                         // larger. If we don't know that time has moved forward, we can just set it to the last
5129                         // time we saw and it will be ignored.
5130                         let best_time = self.context.update_time_counter;
5131                         match self.do_best_block_updated(reorg_height, best_time, None::<(ChainHash, &&NodeSigner, &UserConfig)>, logger) {
5132                                 Ok((channel_ready, timed_out_htlcs, announcement_sigs)) => {
5133                                         assert!(channel_ready.is_none(), "We can't generate a funding with 0 confirmations?");
5134                                         assert!(timed_out_htlcs.is_empty(), "We can't have accepted HTLCs with a timeout before our funding confirmation?");
5135                                         assert!(announcement_sigs.is_none(), "We can't generate an announcement_sigs with 0 confirmations?");
5136                                         Ok(())
5137                                 },
5138                                 Err(e) => Err(e)
5139                         }
5140                 } else {
5141                         // We never learned about the funding confirmation anyway, just ignore
5142                         Ok(())
5143                 }
5144         }
5145
5146         // Methods to get unprompted messages to send to the remote end (or where we already returned
5147         // something in the handler for the message that prompted this message):
5148
5149         /// Gets an UnsignedChannelAnnouncement for this channel. The channel must be publicly
5150         /// announceable and available for use (have exchanged [`ChannelReady`] messages in both
5151         /// directions). Should be used for both broadcasted announcements and in response to an
5152         /// AnnouncementSignatures message from the remote peer.
5153         ///
5154         /// Will only fail if we're not in a state where channel_announcement may be sent (including
5155         /// closing).
5156         ///
5157         /// This will only return ChannelError::Ignore upon failure.
5158         ///
5159         /// [`ChannelReady`]: crate::ln::msgs::ChannelReady
5160         fn get_channel_announcement<NS: Deref>(
5161                 &self, node_signer: &NS, chain_hash: ChainHash, user_config: &UserConfig,
5162         ) -> Result<msgs::UnsignedChannelAnnouncement, ChannelError> where NS::Target: NodeSigner {
5163                 if !self.context.config.announced_channel {
5164                         return Err(ChannelError::Ignore("Channel is not available for public announcements".to_owned()));
5165                 }
5166                 if !self.context.is_usable() {
5167                         return Err(ChannelError::Ignore("Cannot get a ChannelAnnouncement if the channel is not currently usable".to_owned()));
5168                 }
5169
5170                 let short_channel_id = self.context.get_short_channel_id()
5171                         .ok_or(ChannelError::Ignore("Cannot get a ChannelAnnouncement if the channel has not been confirmed yet".to_owned()))?;
5172                 let node_id = NodeId::from_pubkey(&node_signer.get_node_id(Recipient::Node)
5173                         .map_err(|_| ChannelError::Ignore("Failed to retrieve own public key".to_owned()))?);
5174                 let counterparty_node_id = NodeId::from_pubkey(&self.context.get_counterparty_node_id());
5175                 let were_node_one = node_id.as_slice() < counterparty_node_id.as_slice();
5176
5177                 let msg = msgs::UnsignedChannelAnnouncement {
5178                         features: channelmanager::provided_channel_features(&user_config),
5179                         chain_hash,
5180                         short_channel_id,
5181                         node_id_1: if were_node_one { node_id } else { counterparty_node_id },
5182                         node_id_2: if were_node_one { counterparty_node_id } else { node_id },
5183                         bitcoin_key_1: NodeId::from_pubkey(if were_node_one { &self.context.get_holder_pubkeys().funding_pubkey } else { self.context.counterparty_funding_pubkey() }),
5184                         bitcoin_key_2: NodeId::from_pubkey(if were_node_one { self.context.counterparty_funding_pubkey() } else { &self.context.get_holder_pubkeys().funding_pubkey }),
5185                         excess_data: Vec::new(),
5186                 };
5187
5188                 Ok(msg)
5189         }
5190
5191         fn get_announcement_sigs<NS: Deref, L: Deref>(
5192                 &mut self, node_signer: &NS, chain_hash: ChainHash, user_config: &UserConfig,
5193                 best_block_height: u32, logger: &L
5194         ) -> Option<msgs::AnnouncementSignatures>
5195         where
5196                 NS::Target: NodeSigner,
5197                 L::Target: Logger
5198         {
5199                 if self.context.funding_tx_confirmation_height == 0 || self.context.funding_tx_confirmation_height + 5 > best_block_height {
5200                         return None;
5201                 }
5202
5203                 if !self.context.is_usable() {
5204                         return None;
5205                 }
5206
5207                 if self.context.channel_state & ChannelState::PeerDisconnected as u32 != 0 {
5208                         log_trace!(logger, "Cannot create an announcement_signatures as our peer is disconnected");
5209                         return None;
5210                 }
5211
5212                 if self.context.announcement_sigs_state != AnnouncementSigsState::NotSent {
5213                         return None;
5214                 }
5215
5216                 log_trace!(logger, "Creating an announcement_signatures message for channel {}", &self.context.channel_id());
5217                 let announcement = match self.get_channel_announcement(node_signer, chain_hash, user_config) {
5218                         Ok(a) => a,
5219                         Err(e) => {
5220                                 log_trace!(logger, "{:?}", e);
5221                                 return None;
5222                         }
5223                 };
5224                 let our_node_sig = match node_signer.sign_gossip_message(msgs::UnsignedGossipMessage::ChannelAnnouncement(&announcement)) {
5225                         Err(_) => {
5226                                 log_error!(logger, "Failed to generate node signature for channel_announcement. Channel will not be announced!");
5227                                 return None;
5228                         },
5229                         Ok(v) => v
5230                 };
5231                 match &self.context.holder_signer {
5232                         ChannelSignerType::Ecdsa(ecdsa) => {
5233                                 let our_bitcoin_sig = match ecdsa.sign_channel_announcement_with_funding_key(&announcement, &self.context.secp_ctx) {
5234                                         Err(_) => {
5235                                                 log_error!(logger, "Signer rejected channel_announcement signing. Channel will not be announced!");
5236                                                 return None;
5237                                         },
5238                                         Ok(v) => v
5239                                 };
5240                                 let short_channel_id = match self.context.get_short_channel_id() {
5241                                         Some(scid) => scid,
5242                                         None => return None,
5243                                 };
5244
5245                                 self.context.announcement_sigs_state = AnnouncementSigsState::MessageSent;
5246
5247                                 Some(msgs::AnnouncementSignatures {
5248                                         channel_id: self.context.channel_id(),
5249                                         short_channel_id,
5250                                         node_signature: our_node_sig,
5251                                         bitcoin_signature: our_bitcoin_sig,
5252                                 })
5253                         }
5254                 }
5255         }
5256
5257         /// Signs the given channel announcement, returning a ChannelError::Ignore if no keys are
5258         /// available.
5259         fn sign_channel_announcement<NS: Deref>(
5260                 &self, node_signer: &NS, announcement: msgs::UnsignedChannelAnnouncement
5261         ) -> Result<msgs::ChannelAnnouncement, ChannelError> where NS::Target: NodeSigner {
5262                 if let Some((their_node_sig, their_bitcoin_sig)) = self.context.announcement_sigs {
5263                         let our_node_key = NodeId::from_pubkey(&node_signer.get_node_id(Recipient::Node)
5264                                 .map_err(|_| ChannelError::Ignore("Signer failed to retrieve own public key".to_owned()))?);
5265                         let were_node_one = announcement.node_id_1 == our_node_key;
5266
5267                         let our_node_sig = node_signer.sign_gossip_message(msgs::UnsignedGossipMessage::ChannelAnnouncement(&announcement))
5268                                 .map_err(|_| ChannelError::Ignore("Failed to generate node signature for channel_announcement".to_owned()))?;
5269                         match &self.context.holder_signer {
5270                                 ChannelSignerType::Ecdsa(ecdsa) => {
5271                                         let our_bitcoin_sig = ecdsa.sign_channel_announcement_with_funding_key(&announcement, &self.context.secp_ctx)
5272                                                 .map_err(|_| ChannelError::Ignore("Signer rejected channel_announcement".to_owned()))?;
5273                                         Ok(msgs::ChannelAnnouncement {
5274                                                 node_signature_1: if were_node_one { our_node_sig } else { their_node_sig },
5275                                                 node_signature_2: if were_node_one { their_node_sig } else { our_node_sig },
5276                                                 bitcoin_signature_1: if were_node_one { our_bitcoin_sig } else { their_bitcoin_sig },
5277                                                 bitcoin_signature_2: if were_node_one { their_bitcoin_sig } else { our_bitcoin_sig },
5278                                                 contents: announcement,
5279                                         })
5280                                 }
5281                         }
5282                 } else {
5283                         Err(ChannelError::Ignore("Attempted to sign channel announcement before we'd received announcement_signatures".to_string()))
5284                 }
5285         }
5286
5287         /// Processes an incoming announcement_signatures message, providing a fully-signed
5288         /// channel_announcement message which we can broadcast and storing our counterparty's
5289         /// signatures for later reconstruction/rebroadcast of the channel_announcement.
5290         pub fn announcement_signatures<NS: Deref>(
5291                 &mut self, node_signer: &NS, chain_hash: ChainHash, best_block_height: u32,
5292                 msg: &msgs::AnnouncementSignatures, user_config: &UserConfig
5293         ) -> Result<msgs::ChannelAnnouncement, ChannelError> where NS::Target: NodeSigner {
5294                 let announcement = self.get_channel_announcement(node_signer, chain_hash, user_config)?;
5295
5296                 let msghash = hash_to_message!(&Sha256d::hash(&announcement.encode()[..])[..]);
5297
5298                 if self.context.secp_ctx.verify_ecdsa(&msghash, &msg.node_signature, &self.context.get_counterparty_node_id()).is_err() {
5299                         return Err(ChannelError::Close(format!(
5300                                 "Bad announcement_signatures. Failed to verify node_signature. UnsignedChannelAnnouncement used for verification is {:?}. their_node_key is {:?}",
5301                                  &announcement, self.context.get_counterparty_node_id())));
5302                 }
5303                 if self.context.secp_ctx.verify_ecdsa(&msghash, &msg.bitcoin_signature, self.context.counterparty_funding_pubkey()).is_err() {
5304                         return Err(ChannelError::Close(format!(
5305                                 "Bad announcement_signatures. Failed to verify bitcoin_signature. UnsignedChannelAnnouncement used for verification is {:?}. their_bitcoin_key is ({:?})",
5306                                 &announcement, self.context.counterparty_funding_pubkey())));
5307                 }
5308
5309                 self.context.announcement_sigs = Some((msg.node_signature, msg.bitcoin_signature));
5310                 if self.context.funding_tx_confirmation_height == 0 || self.context.funding_tx_confirmation_height + 5 > best_block_height {
5311                         return Err(ChannelError::Ignore(
5312                                 "Got announcement_signatures prior to the required six confirmations - we may not have received a block yet that our peer has".to_owned()));
5313                 }
5314
5315                 self.sign_channel_announcement(node_signer, announcement)
5316         }
5317
5318         /// Gets a signed channel_announcement for this channel, if we previously received an
5319         /// announcement_signatures from our counterparty.
5320         pub fn get_signed_channel_announcement<NS: Deref>(
5321                 &self, node_signer: &NS, chain_hash: ChainHash, best_block_height: u32, user_config: &UserConfig
5322         ) -> Option<msgs::ChannelAnnouncement> where NS::Target: NodeSigner {
5323                 if self.context.funding_tx_confirmation_height == 0 || self.context.funding_tx_confirmation_height + 5 > best_block_height {
5324                         return None;
5325                 }
5326                 let announcement = match self.get_channel_announcement(node_signer, chain_hash, user_config) {
5327                         Ok(res) => res,
5328                         Err(_) => return None,
5329                 };
5330                 match self.sign_channel_announcement(node_signer, announcement) {
5331                         Ok(res) => Some(res),
5332                         Err(_) => None,
5333                 }
5334         }
5335
5336         /// May panic if called on a channel that wasn't immediately-previously
5337         /// self.remove_uncommitted_htlcs_and_mark_paused()'d
5338         pub fn get_channel_reestablish<L: Deref>(&mut self, logger: &L) -> msgs::ChannelReestablish where L::Target: Logger {
5339                 assert_eq!(self.context.channel_state & ChannelState::PeerDisconnected as u32, ChannelState::PeerDisconnected as u32);
5340                 assert_ne!(self.context.cur_counterparty_commitment_transaction_number, INITIAL_COMMITMENT_NUMBER);
5341                 // Prior to static_remotekey, my_current_per_commitment_point was critical to claiming
5342                 // current to_remote balances. However, it no longer has any use, and thus is now simply
5343                 // set to a dummy (but valid, as required by the spec) public key.
5344                 // fuzzing mode marks a subset of pubkeys as invalid so that we can hit "invalid pubkey"
5345                 // branches, but we unwrap it below, so we arbitrarily select a dummy pubkey which is both
5346                 // valid, and valid in fuzzing mode's arbitrary validity criteria:
5347                 let mut pk = [2; 33]; pk[1] = 0xff;
5348                 let dummy_pubkey = PublicKey::from_slice(&pk).unwrap();
5349                 let remote_last_secret = if self.context.cur_counterparty_commitment_transaction_number + 1 < INITIAL_COMMITMENT_NUMBER {
5350                         let remote_last_secret = self.context.commitment_secrets.get_secret(self.context.cur_counterparty_commitment_transaction_number + 2).unwrap();
5351                         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());
5352                         remote_last_secret
5353                 } else {
5354                         log_info!(logger, "Sending a data_loss_protect with no previous remote per_commitment_secret for channel {}", &self.context.channel_id());
5355                         [0;32]
5356                 };
5357                 self.mark_awaiting_response();
5358                 msgs::ChannelReestablish {
5359                         channel_id: self.context.channel_id(),
5360                         // The protocol has two different commitment number concepts - the "commitment
5361                         // transaction number", which starts from 0 and counts up, and the "revocation key
5362                         // index" which starts at INITIAL_COMMITMENT_NUMBER and counts down. We track
5363                         // commitment transaction numbers by the index which will be used to reveal the
5364                         // revocation key for that commitment transaction, which means we have to convert them
5365                         // to protocol-level commitment numbers here...
5366
5367                         // next_local_commitment_number is the next commitment_signed number we expect to
5368                         // receive (indicating if they need to resend one that we missed).
5369                         next_local_commitment_number: INITIAL_COMMITMENT_NUMBER - self.context.cur_holder_commitment_transaction_number,
5370                         // We have to set next_remote_commitment_number to the next revoke_and_ack we expect to
5371                         // receive, however we track it by the next commitment number for a remote transaction
5372                         // (which is one further, as they always revoke previous commitment transaction, not
5373                         // the one we send) so we have to decrement by 1. Note that if
5374                         // cur_counterparty_commitment_transaction_number is INITIAL_COMMITMENT_NUMBER we will have
5375                         // dropped this channel on disconnect as it hasn't yet reached FundingSent so we can't
5376                         // overflow here.
5377                         next_remote_commitment_number: INITIAL_COMMITMENT_NUMBER - self.context.cur_counterparty_commitment_transaction_number - 1,
5378                         your_last_per_commitment_secret: remote_last_secret,
5379                         my_current_per_commitment_point: dummy_pubkey,
5380                         // TODO(dual_funding): If we've sent `commtiment_signed` for an interactive transaction
5381                         // construction but have not received `tx_signatures` we MUST set `next_funding_txid` to the
5382                         // txid of that interactive transaction, else we MUST NOT set it.
5383                         next_funding_txid: None,
5384                 }
5385         }
5386
5387
5388         // Send stuff to our remote peers:
5389
5390         /// Queues up an outbound HTLC to send by placing it in the holding cell. You should call
5391         /// [`Self::maybe_free_holding_cell_htlcs`] in order to actually generate and send the
5392         /// commitment update.
5393         ///
5394         /// `Err`s will only be [`ChannelError::Ignore`].
5395         pub fn queue_add_htlc<F: Deref, L: Deref>(
5396                 &mut self, amount_msat: u64, payment_hash: PaymentHash, cltv_expiry: u32, source: HTLCSource,
5397                 onion_routing_packet: msgs::OnionPacket, skimmed_fee_msat: Option<u64>,
5398                 fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L
5399         ) -> Result<(), ChannelError>
5400         where F::Target: FeeEstimator, L::Target: Logger
5401         {
5402                 self
5403                         .send_htlc(amount_msat, payment_hash, cltv_expiry, source, onion_routing_packet, true,
5404                                 skimmed_fee_msat, fee_estimator, logger)
5405                         .map(|msg_opt| assert!(msg_opt.is_none(), "We forced holding cell?"))
5406                         .map_err(|err| {
5407                                 if let ChannelError::Ignore(_) = err { /* fine */ }
5408                                 else { debug_assert!(false, "Queueing cannot trigger channel failure"); }
5409                                 err
5410                         })
5411         }
5412
5413         /// Adds a pending outbound HTLC to this channel, note that you probably want
5414         /// [`Self::send_htlc_and_commit`] instead cause you'll want both messages at once.
5415         ///
5416         /// This returns an optional UpdateAddHTLC as we may be in a state where we cannot add HTLCs on
5417         /// the wire:
5418         /// * In cases where we're waiting on the remote peer to send us a revoke_and_ack, we
5419         ///   wouldn't be able to determine what they actually ACK'ed if we have two sets of updates
5420         ///   awaiting ACK.
5421         /// * In cases where we're marked MonitorUpdateInProgress, we cannot commit to a new state as
5422         ///   we may not yet have sent the previous commitment update messages and will need to
5423         ///   regenerate them.
5424         ///
5425         /// You MUST call [`Self::send_commitment_no_state_update`] prior to calling any other methods
5426         /// on this [`Channel`] if `force_holding_cell` is false.
5427         ///
5428         /// `Err`s will only be [`ChannelError::Ignore`].
5429         fn send_htlc<F: Deref, L: Deref>(
5430                 &mut self, amount_msat: u64, payment_hash: PaymentHash, cltv_expiry: u32, source: HTLCSource,
5431                 onion_routing_packet: msgs::OnionPacket, mut force_holding_cell: bool,
5432                 skimmed_fee_msat: Option<u64>, fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L
5433         ) -> Result<Option<msgs::UpdateAddHTLC>, ChannelError>
5434         where F::Target: FeeEstimator, L::Target: Logger
5435         {
5436                 if (self.context.channel_state & (ChannelState::ChannelReady as u32 | BOTH_SIDES_SHUTDOWN_MASK)) != (ChannelState::ChannelReady as u32) {
5437                         return Err(ChannelError::Ignore("Cannot send HTLC until channel is fully established and we haven't started shutting down".to_owned()));
5438                 }
5439                 let channel_total_msat = self.context.channel_value_satoshis * 1000;
5440                 if amount_msat > channel_total_msat {
5441                         return Err(ChannelError::Ignore(format!("Cannot send amount {}, because it is more than the total value of the channel {}", amount_msat, channel_total_msat)));
5442                 }
5443
5444                 if amount_msat == 0 {
5445                         return Err(ChannelError::Ignore("Cannot send 0-msat HTLC".to_owned()));
5446                 }
5447
5448                 let available_balances = self.context.get_available_balances(fee_estimator);
5449                 if amount_msat < available_balances.next_outbound_htlc_minimum_msat {
5450                         return Err(ChannelError::Ignore(format!("Cannot send less than our next-HTLC minimum - {} msat",
5451                                 available_balances.next_outbound_htlc_minimum_msat)));
5452                 }
5453
5454                 if amount_msat > available_balances.next_outbound_htlc_limit_msat {
5455                         return Err(ChannelError::Ignore(format!("Cannot send more than our next-HTLC maximum - {} msat",
5456                                 available_balances.next_outbound_htlc_limit_msat)));
5457                 }
5458
5459                 if (self.context.channel_state & (ChannelState::PeerDisconnected as u32)) != 0 {
5460                         // Note that this should never really happen, if we're !is_live() on receipt of an
5461                         // incoming HTLC for relay will result in us rejecting the HTLC and we won't allow
5462                         // the user to send directly into a !is_live() channel. However, if we
5463                         // disconnected during the time the previous hop was doing the commitment dance we may
5464                         // end up getting here after the forwarding delay. In any case, returning an
5465                         // IgnoreError will get ChannelManager to do the right thing and fail backwards now.
5466                         return Err(ChannelError::Ignore("Cannot send an HTLC while disconnected from channel counterparty".to_owned()));
5467                 }
5468
5469                 let need_holding_cell = (self.context.channel_state & (ChannelState::AwaitingRemoteRevoke as u32 | ChannelState::MonitorUpdateInProgress as u32)) != 0;
5470                 log_debug!(logger, "Pushing new outbound HTLC with hash {} for {} msat {}",
5471                         payment_hash, amount_msat,
5472                         if force_holding_cell { "into holding cell" }
5473                         else if need_holding_cell { "into holding cell as we're awaiting an RAA or monitor" }
5474                         else { "to peer" });
5475
5476                 if need_holding_cell {
5477                         force_holding_cell = true;
5478                 }
5479
5480                 // Now update local state:
5481                 if force_holding_cell {
5482                         self.context.holding_cell_htlc_updates.push(HTLCUpdateAwaitingACK::AddHTLC {
5483                                 amount_msat,
5484                                 payment_hash,
5485                                 cltv_expiry,
5486                                 source,
5487                                 onion_routing_packet,
5488                                 skimmed_fee_msat,
5489                         });
5490                         return Ok(None);
5491                 }
5492
5493                 self.context.pending_outbound_htlcs.push(OutboundHTLCOutput {
5494                         htlc_id: self.context.next_holder_htlc_id,
5495                         amount_msat,
5496                         payment_hash: payment_hash.clone(),
5497                         cltv_expiry,
5498                         state: OutboundHTLCState::LocalAnnounced(Box::new(onion_routing_packet.clone())),
5499                         source,
5500                         skimmed_fee_msat,
5501                 });
5502
5503                 let res = msgs::UpdateAddHTLC {
5504                         channel_id: self.context.channel_id,
5505                         htlc_id: self.context.next_holder_htlc_id,
5506                         amount_msat,
5507                         payment_hash,
5508                         cltv_expiry,
5509                         onion_routing_packet,
5510                         skimmed_fee_msat,
5511                 };
5512                 self.context.next_holder_htlc_id += 1;
5513
5514                 Ok(Some(res))
5515         }
5516
5517         fn build_commitment_no_status_check<L: Deref>(&mut self, logger: &L) -> ChannelMonitorUpdate where L::Target: Logger {
5518                 log_trace!(logger, "Updating HTLC state for a newly-sent commitment_signed...");
5519                 // We can upgrade the status of some HTLCs that are waiting on a commitment, even if we
5520                 // fail to generate this, we still are at least at a position where upgrading their status
5521                 // is acceptable.
5522                 for htlc in self.context.pending_inbound_htlcs.iter_mut() {
5523                         let new_state = if let &InboundHTLCState::AwaitingRemoteRevokeToAnnounce(ref forward_info) = &htlc.state {
5524                                 Some(InboundHTLCState::AwaitingAnnouncedRemoteRevoke(forward_info.clone()))
5525                         } else { None };
5526                         if let Some(state) = new_state {
5527                                 log_trace!(logger, " ...promoting inbound AwaitingRemoteRevokeToAnnounce {} to AwaitingAnnouncedRemoteRevoke", &htlc.payment_hash);
5528                                 htlc.state = state;
5529                         }
5530                 }
5531                 for htlc in self.context.pending_outbound_htlcs.iter_mut() {
5532                         if let &mut OutboundHTLCState::AwaitingRemoteRevokeToRemove(ref mut outcome) = &mut htlc.state {
5533                                 log_trace!(logger, " ...promoting outbound AwaitingRemoteRevokeToRemove {} to AwaitingRemovedRemoteRevoke", &htlc.payment_hash);
5534                                 // Grab the preimage, if it exists, instead of cloning
5535                                 let mut reason = OutboundHTLCOutcome::Success(None);
5536                                 mem::swap(outcome, &mut reason);
5537                                 htlc.state = OutboundHTLCState::AwaitingRemovedRemoteRevoke(reason);
5538                         }
5539                 }
5540                 if let Some((feerate, update_state)) = self.context.pending_update_fee {
5541                         if update_state == FeeUpdateState::AwaitingRemoteRevokeToAnnounce {
5542                                 debug_assert!(!self.context.is_outbound());
5543                                 log_trace!(logger, " ...promoting inbound AwaitingRemoteRevokeToAnnounce fee update {} to Committed", feerate);
5544                                 self.context.feerate_per_kw = feerate;
5545                                 self.context.pending_update_fee = None;
5546                         }
5547                 }
5548                 self.context.resend_order = RAACommitmentOrder::RevokeAndACKFirst;
5549
5550                 let (mut htlcs_ref, counterparty_commitment_tx) =
5551                         self.build_commitment_no_state_update(logger);
5552                 let counterparty_commitment_txid = counterparty_commitment_tx.trust().txid();
5553                 let htlcs: Vec<(HTLCOutputInCommitment, Option<Box<HTLCSource>>)> =
5554                         htlcs_ref.drain(..).map(|(htlc, htlc_source)| (htlc, htlc_source.map(|source_ref| Box::new(source_ref.clone())))).collect();
5555
5556                 if self.context.announcement_sigs_state == AnnouncementSigsState::MessageSent {
5557                         self.context.announcement_sigs_state = AnnouncementSigsState::Committed;
5558                 }
5559
5560                 self.context.latest_monitor_update_id += 1;
5561                 let monitor_update = ChannelMonitorUpdate {
5562                         update_id: self.context.latest_monitor_update_id,
5563                         updates: vec![ChannelMonitorUpdateStep::LatestCounterpartyCommitmentTXInfo {
5564                                 commitment_txid: counterparty_commitment_txid,
5565                                 htlc_outputs: htlcs.clone(),
5566                                 commitment_number: self.context.cur_counterparty_commitment_transaction_number,
5567                                 their_per_commitment_point: self.context.counterparty_cur_commitment_point.unwrap(),
5568                                 feerate_per_kw: Some(counterparty_commitment_tx.feerate_per_kw()),
5569                                 to_broadcaster_value_sat: Some(counterparty_commitment_tx.to_broadcaster_value_sat()),
5570                                 to_countersignatory_value_sat: Some(counterparty_commitment_tx.to_countersignatory_value_sat()),
5571                         }]
5572                 };
5573                 self.context.channel_state |= ChannelState::AwaitingRemoteRevoke as u32;
5574                 monitor_update
5575         }
5576
5577         fn build_commitment_no_state_update<L: Deref>(&self, logger: &L)
5578         -> (Vec<(HTLCOutputInCommitment, Option<&HTLCSource>)>, CommitmentTransaction)
5579         where L::Target: Logger
5580         {
5581                 let counterparty_keys = self.context.build_remote_transaction_keys();
5582                 let commitment_stats = self.context.build_commitment_transaction(self.context.cur_counterparty_commitment_transaction_number, &counterparty_keys, false, true, logger);
5583                 let counterparty_commitment_tx = commitment_stats.tx;
5584
5585                 #[cfg(any(test, fuzzing))]
5586                 {
5587                         if !self.context.is_outbound() {
5588                                 let projected_commit_tx_info = self.context.next_remote_commitment_tx_fee_info_cached.lock().unwrap().take();
5589                                 *self.context.next_local_commitment_tx_fee_info_cached.lock().unwrap() = None;
5590                                 if let Some(info) = projected_commit_tx_info {
5591                                         let total_pending_htlcs = self.context.pending_inbound_htlcs.len() + self.context.pending_outbound_htlcs.len();
5592                                         if info.total_pending_htlcs == total_pending_htlcs
5593                                                 && info.next_holder_htlc_id == self.context.next_holder_htlc_id
5594                                                 && info.next_counterparty_htlc_id == self.context.next_counterparty_htlc_id
5595                                                 && info.feerate == self.context.feerate_per_kw {
5596                                                         let actual_fee = commit_tx_fee_msat(self.context.feerate_per_kw, commitment_stats.num_nondust_htlcs, self.context.get_channel_type());
5597                                                         assert_eq!(actual_fee, info.fee);
5598                                                 }
5599                                 }
5600                         }
5601                 }
5602
5603                 (commitment_stats.htlcs_included, counterparty_commitment_tx)
5604         }
5605
5606         /// Only fails in case of signer rejection. Used for channel_reestablish commitment_signed
5607         /// generation when we shouldn't change HTLC/channel state.
5608         fn send_commitment_no_state_update<L: Deref>(&self, logger: &L) -> Result<(msgs::CommitmentSigned, (Txid, Vec<(HTLCOutputInCommitment, Option<&HTLCSource>)>)), ChannelError> where L::Target: Logger {
5609                 // Get the fee tests from `build_commitment_no_state_update`
5610                 #[cfg(any(test, fuzzing))]
5611                 self.build_commitment_no_state_update(logger);
5612
5613                 let counterparty_keys = self.context.build_remote_transaction_keys();
5614                 let commitment_stats = self.context.build_commitment_transaction(self.context.cur_counterparty_commitment_transaction_number, &counterparty_keys, false, true, logger);
5615                 let counterparty_commitment_txid = commitment_stats.tx.trust().txid();
5616
5617                 match &self.context.holder_signer {
5618                         ChannelSignerType::Ecdsa(ecdsa) => {
5619                                 let (signature, htlc_signatures);
5620
5621                                 {
5622                                         let mut htlcs = Vec::with_capacity(commitment_stats.htlcs_included.len());
5623                                         for &(ref htlc, _) in commitment_stats.htlcs_included.iter() {
5624                                                 htlcs.push(htlc);
5625                                         }
5626
5627                                         let res = ecdsa.sign_counterparty_commitment(&commitment_stats.tx, commitment_stats.preimages, &self.context.secp_ctx)
5628                                                 .map_err(|_| ChannelError::Ignore("Failed to get signatures for new commitment_signed".to_owned()))?;
5629                                         signature = res.0;
5630                                         htlc_signatures = res.1;
5631
5632                                         log_trace!(logger, "Signed remote commitment tx {} (txid {}) with redeemscript {} -> {} in channel {}",
5633                                                 encode::serialize_hex(&commitment_stats.tx.trust().built_transaction().transaction),
5634                                                 &counterparty_commitment_txid, encode::serialize_hex(&self.context.get_funding_redeemscript()),
5635                                                 log_bytes!(signature.serialize_compact()[..]), &self.context.channel_id());
5636
5637                                         for (ref htlc_sig, ref htlc) in htlc_signatures.iter().zip(htlcs) {
5638                                                 log_trace!(logger, "Signed remote HTLC tx {} with redeemscript {} with pubkey {} -> {} in channel {}",
5639                                                         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)),
5640                                                         encode::serialize_hex(&chan_utils::get_htlc_redeemscript(&htlc, &self.context.channel_type, &counterparty_keys)),
5641                                                         log_bytes!(counterparty_keys.broadcaster_htlc_key.serialize()),
5642                                                         log_bytes!(htlc_sig.serialize_compact()[..]), &self.context.channel_id());
5643                                         }
5644                                 }
5645
5646                                 Ok((msgs::CommitmentSigned {
5647                                         channel_id: self.context.channel_id,
5648                                         signature,
5649                                         htlc_signatures,
5650                                         #[cfg(taproot)]
5651                                         partial_signature_with_nonce: None,
5652                                 }, (counterparty_commitment_txid, commitment_stats.htlcs_included)))
5653                         }
5654                 }
5655         }
5656
5657         /// Adds a pending outbound HTLC to this channel, and builds a new remote commitment
5658         /// transaction and generates the corresponding [`ChannelMonitorUpdate`] in one go.
5659         ///
5660         /// Shorthand for calling [`Self::send_htlc`] followed by a commitment update, see docs on
5661         /// [`Self::send_htlc`] and [`Self::build_commitment_no_state_update`] for more info.
5662         pub fn send_htlc_and_commit<F: Deref, L: Deref>(
5663                 &mut self, amount_msat: u64, payment_hash: PaymentHash, cltv_expiry: u32,
5664                 source: HTLCSource, onion_routing_packet: msgs::OnionPacket, skimmed_fee_msat: Option<u64>,
5665                 fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L
5666         ) -> Result<Option<ChannelMonitorUpdate>, ChannelError>
5667         where F::Target: FeeEstimator, L::Target: Logger
5668         {
5669                 let send_res = self.send_htlc(amount_msat, payment_hash, cltv_expiry, source,
5670                         onion_routing_packet, false, skimmed_fee_msat, fee_estimator, logger);
5671                 if let Err(e) = &send_res { if let ChannelError::Ignore(_) = e {} else { debug_assert!(false, "Sending cannot trigger channel failure"); } }
5672                 match send_res? {
5673                         Some(_) => {
5674                                 let monitor_update = self.build_commitment_no_status_check(logger);
5675                                 self.monitor_updating_paused(false, true, false, Vec::new(), Vec::new(), Vec::new());
5676                                 Ok(self.push_ret_blockable_mon_update(monitor_update))
5677                         },
5678                         None => Ok(None)
5679                 }
5680         }
5681
5682         /// Applies the `ChannelUpdate` and returns a boolean indicating whether a change actually
5683         /// happened.
5684         pub fn channel_update(&mut self, msg: &msgs::ChannelUpdate) -> Result<bool, ChannelError> {
5685                 let new_forwarding_info = Some(CounterpartyForwardingInfo {
5686                         fee_base_msat: msg.contents.fee_base_msat,
5687                         fee_proportional_millionths: msg.contents.fee_proportional_millionths,
5688                         cltv_expiry_delta: msg.contents.cltv_expiry_delta
5689                 });
5690                 let did_change = self.context.counterparty_forwarding_info != new_forwarding_info;
5691                 if did_change {
5692                         self.context.counterparty_forwarding_info = new_forwarding_info;
5693                 }
5694
5695                 Ok(did_change)
5696         }
5697
5698         /// Begins the shutdown process, getting a message for the remote peer and returning all
5699         /// holding cell HTLCs for payment failure.
5700         ///
5701         /// May jump to the channel being fully shutdown (see [`Self::is_shutdown`]) in which case no
5702         /// [`ChannelMonitorUpdate`] will be returned).
5703         pub fn get_shutdown(&mut self, signer_provider: &SP, their_features: &InitFeatures,
5704                 target_feerate_sats_per_kw: Option<u32>, override_shutdown_script: Option<ShutdownScript>)
5705         -> Result<(msgs::Shutdown, Option<ChannelMonitorUpdate>, Vec<(HTLCSource, PaymentHash)>, Option<ShutdownResult>), APIError>
5706         {
5707                 for htlc in self.context.pending_outbound_htlcs.iter() {
5708                         if let OutboundHTLCState::LocalAnnounced(_) = htlc.state {
5709                                 return Err(APIError::APIMisuseError{err: "Cannot begin shutdown with pending HTLCs. Process pending events first".to_owned()});
5710                         }
5711                 }
5712                 if self.context.channel_state & BOTH_SIDES_SHUTDOWN_MASK != 0 {
5713                         if (self.context.channel_state & ChannelState::LocalShutdownSent as u32) == ChannelState::LocalShutdownSent as u32 {
5714                                 return Err(APIError::APIMisuseError{err: "Shutdown already in progress".to_owned()});
5715                         }
5716                         else if (self.context.channel_state & ChannelState::RemoteShutdownSent as u32) == ChannelState::RemoteShutdownSent as u32 {
5717                                 return Err(APIError::ChannelUnavailable{err: "Shutdown already in progress by remote".to_owned()});
5718                         }
5719                 }
5720                 if self.context.shutdown_scriptpubkey.is_some() && override_shutdown_script.is_some() {
5721                         return Err(APIError::APIMisuseError{err: "Cannot override shutdown script for a channel with one already set".to_owned()});
5722                 }
5723                 assert_eq!(self.context.channel_state & ChannelState::ShutdownComplete as u32, 0);
5724                 if self.context.channel_state & (ChannelState::PeerDisconnected as u32 | ChannelState::MonitorUpdateInProgress as u32) != 0 {
5725                         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()});
5726                 }
5727
5728                 // If we haven't funded the channel yet, we don't need to bother ensuring the shutdown
5729                 // script is set, we just force-close and call it a day.
5730                 let mut chan_closed = false;
5731                 if self.context.channel_state & !STATE_FLAGS < ChannelState::FundingSent as u32 {
5732                         chan_closed = true;
5733                 }
5734
5735                 let update_shutdown_script = match self.context.shutdown_scriptpubkey {
5736                         Some(_) => false,
5737                         None if !chan_closed => {
5738                                 // use override shutdown script if provided
5739                                 let shutdown_scriptpubkey = match override_shutdown_script {
5740                                         Some(script) => script,
5741                                         None => {
5742                                                 // otherwise, use the shutdown scriptpubkey provided by the signer
5743                                                 match signer_provider.get_shutdown_scriptpubkey() {
5744                                                         Ok(scriptpubkey) => scriptpubkey,
5745                                                         Err(_) => return Err(APIError::ChannelUnavailable{err: "Failed to get shutdown scriptpubkey".to_owned()}),
5746                                                 }
5747                                         },
5748                                 };
5749                                 if !shutdown_scriptpubkey.is_compatible(their_features) {
5750                                         return Err(APIError::IncompatibleShutdownScript { script: shutdown_scriptpubkey.clone() });
5751                                 }
5752                                 self.context.shutdown_scriptpubkey = Some(shutdown_scriptpubkey);
5753                                 true
5754                         },
5755                         None => false,
5756                 };
5757
5758                 // From here on out, we may not fail!
5759                 self.context.target_closing_feerate_sats_per_kw = target_feerate_sats_per_kw;
5760                 let shutdown_result = if self.context.channel_state & !STATE_FLAGS < ChannelState::FundingSent as u32 {
5761                         let shutdown_result = ShutdownResult {
5762                                 monitor_update: None,
5763                                 dropped_outbound_htlcs: Vec::new(),
5764                                 unbroadcasted_batch_funding_txid: self.context.unbroadcasted_batch_funding_txid(),
5765                         };
5766                         self.context.channel_state = ChannelState::ShutdownComplete as u32;
5767                         Some(shutdown_result)
5768                 } else {
5769                         self.context.channel_state |= ChannelState::LocalShutdownSent as u32;
5770                         None
5771                 };
5772                 self.context.update_time_counter += 1;
5773
5774                 let monitor_update = if update_shutdown_script {
5775                         self.context.latest_monitor_update_id += 1;
5776                         let monitor_update = ChannelMonitorUpdate {
5777                                 update_id: self.context.latest_monitor_update_id,
5778                                 updates: vec![ChannelMonitorUpdateStep::ShutdownScript {
5779                                         scriptpubkey: self.get_closing_scriptpubkey(),
5780                                 }],
5781                         };
5782                         self.monitor_updating_paused(false, false, false, Vec::new(), Vec::new(), Vec::new());
5783                         self.push_ret_blockable_mon_update(monitor_update)
5784                 } else { None };
5785                 let shutdown = msgs::Shutdown {
5786                         channel_id: self.context.channel_id,
5787                         scriptpubkey: self.get_closing_scriptpubkey(),
5788                 };
5789
5790                 // Go ahead and drop holding cell updates as we'd rather fail payments than wait to send
5791                 // our shutdown until we've committed all of the pending changes.
5792                 self.context.holding_cell_update_fee = None;
5793                 let mut dropped_outbound_htlcs = Vec::with_capacity(self.context.holding_cell_htlc_updates.len());
5794                 self.context.holding_cell_htlc_updates.retain(|htlc_update| {
5795                         match htlc_update {
5796                                 &HTLCUpdateAwaitingACK::AddHTLC { ref payment_hash, ref source, .. } => {
5797                                         dropped_outbound_htlcs.push((source.clone(), payment_hash.clone()));
5798                                         false
5799                                 },
5800                                 _ => true
5801                         }
5802                 });
5803
5804                 debug_assert!(!self.is_shutdown() || monitor_update.is_none(),
5805                         "we can't both complete shutdown and return a monitor update");
5806
5807                 Ok((shutdown, monitor_update, dropped_outbound_htlcs, shutdown_result))
5808         }
5809
5810         pub fn inflight_htlc_sources(&self) -> impl Iterator<Item=(&HTLCSource, &PaymentHash)> {
5811                 self.context.holding_cell_htlc_updates.iter()
5812                         .flat_map(|htlc_update| {
5813                                 match htlc_update {
5814                                         HTLCUpdateAwaitingACK::AddHTLC { source, payment_hash, .. }
5815                                                 => Some((source, payment_hash)),
5816                                         _ => None,
5817                                 }
5818                         })
5819                         .chain(self.context.pending_outbound_htlcs.iter().map(|htlc| (&htlc.source, &htlc.payment_hash)))
5820         }
5821 }
5822
5823 /// A not-yet-funded outbound (from holder) channel using V1 channel establishment.
5824 pub(super) struct OutboundV1Channel<SP: Deref> where SP::Target: SignerProvider {
5825         pub context: ChannelContext<SP>,
5826         pub unfunded_context: UnfundedChannelContext,
5827 }
5828
5829 impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
5830         pub fn new<ES: Deref, F: Deref>(
5831                 fee_estimator: &LowerBoundedFeeEstimator<F>, entropy_source: &ES, signer_provider: &SP, counterparty_node_id: PublicKey, their_features: &InitFeatures,
5832                 channel_value_satoshis: u64, push_msat: u64, user_id: u128, config: &UserConfig, current_chain_height: u32,
5833                 outbound_scid_alias: u64
5834         ) -> Result<OutboundV1Channel<SP>, APIError>
5835         where ES::Target: EntropySource,
5836               F::Target: FeeEstimator
5837         {
5838                 let holder_selected_contest_delay = config.channel_handshake_config.our_to_self_delay;
5839                 let channel_keys_id = signer_provider.generate_channel_keys_id(false, channel_value_satoshis, user_id);
5840                 let holder_signer = signer_provider.derive_channel_signer(channel_value_satoshis, channel_keys_id);
5841                 let pubkeys = holder_signer.pubkeys().clone();
5842
5843                 if !their_features.supports_wumbo() && channel_value_satoshis > MAX_FUNDING_SATOSHIS_NO_WUMBO {
5844                         return Err(APIError::APIMisuseError{err: format!("funding_value must not exceed {}, it was {}", MAX_FUNDING_SATOSHIS_NO_WUMBO, channel_value_satoshis)});
5845                 }
5846                 if channel_value_satoshis >= TOTAL_BITCOIN_SUPPLY_SATOSHIS {
5847                         return Err(APIError::APIMisuseError{err: format!("funding_value must be smaller than the total bitcoin supply, it was {}", channel_value_satoshis)});
5848                 }
5849                 let channel_value_msat = channel_value_satoshis * 1000;
5850                 if push_msat > channel_value_msat {
5851                         return Err(APIError::APIMisuseError { err: format!("Push value ({}) was larger than channel_value ({})", push_msat, channel_value_msat) });
5852                 }
5853                 if holder_selected_contest_delay < BREAKDOWN_TIMEOUT {
5854                         return Err(APIError::APIMisuseError {err: format!("Configured with an unreasonable our_to_self_delay ({}) putting user funds at risks", holder_selected_contest_delay)});
5855                 }
5856                 let holder_selected_channel_reserve_satoshis = get_holder_selected_channel_reserve_satoshis(channel_value_satoshis, config);
5857                 if holder_selected_channel_reserve_satoshis < MIN_CHAN_DUST_LIMIT_SATOSHIS {
5858                         // Protocol level safety check in place, although it should never happen because
5859                         // of `MIN_THEIR_CHAN_RESERVE_SATOSHIS`
5860                         return Err(APIError::APIMisuseError { err: format!("Holder selected channel  reserve below implemention limit dust_limit_satoshis {}", holder_selected_channel_reserve_satoshis) });
5861                 }
5862
5863                 let channel_type = Self::get_initial_channel_type(&config, their_features);
5864                 debug_assert!(channel_type.is_subset(&channelmanager::provided_channel_type_features(&config)));
5865
5866                 let (commitment_conf_target, anchor_outputs_value_msat)  = if channel_type.supports_anchors_zero_fee_htlc_tx() {
5867                         (ConfirmationTarget::AnchorChannelFee, ANCHOR_OUTPUT_VALUE_SATOSHI * 2 * 1000)
5868                 } else {
5869                         (ConfirmationTarget::NonAnchorChannelFee, 0)
5870                 };
5871                 let commitment_feerate = fee_estimator.bounded_sat_per_1000_weight(commitment_conf_target);
5872
5873                 let value_to_self_msat = channel_value_satoshis * 1000 - push_msat;
5874                 let commitment_tx_fee = commit_tx_fee_msat(commitment_feerate, MIN_AFFORDABLE_HTLC_COUNT, &channel_type);
5875                 if value_to_self_msat.saturating_sub(anchor_outputs_value_msat) < commitment_tx_fee {
5876                         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) });
5877                 }
5878
5879                 let mut secp_ctx = Secp256k1::new();
5880                 secp_ctx.seeded_randomize(&entropy_source.get_secure_random_bytes());
5881
5882                 let shutdown_scriptpubkey = if config.channel_handshake_config.commit_upfront_shutdown_pubkey {
5883                         match signer_provider.get_shutdown_scriptpubkey() {
5884                                 Ok(scriptpubkey) => Some(scriptpubkey),
5885                                 Err(_) => return Err(APIError::ChannelUnavailable { err: "Failed to get shutdown scriptpubkey".to_owned()}),
5886                         }
5887                 } else { None };
5888
5889                 if let Some(shutdown_scriptpubkey) = &shutdown_scriptpubkey {
5890                         if !shutdown_scriptpubkey.is_compatible(&their_features) {
5891                                 return Err(APIError::IncompatibleShutdownScript { script: shutdown_scriptpubkey.clone() });
5892                         }
5893                 }
5894
5895                 let destination_script = match signer_provider.get_destination_script() {
5896                         Ok(script) => script,
5897                         Err(_) => return Err(APIError::ChannelUnavailable { err: "Failed to get destination script".to_owned()}),
5898                 };
5899
5900                 let temporary_channel_id = ChannelId::temporary_from_entropy_source(entropy_source);
5901
5902                 Ok(Self {
5903                         context: ChannelContext {
5904                                 user_id,
5905
5906                                 config: LegacyChannelConfig {
5907                                         options: config.channel_config.clone(),
5908                                         announced_channel: config.channel_handshake_config.announced_channel,
5909                                         commit_upfront_shutdown_pubkey: config.channel_handshake_config.commit_upfront_shutdown_pubkey,
5910                                 },
5911
5912                                 prev_config: None,
5913
5914                                 inbound_handshake_limits_override: Some(config.channel_handshake_limits.clone()),
5915
5916                                 channel_id: temporary_channel_id,
5917                                 temporary_channel_id: Some(temporary_channel_id),
5918                                 channel_state: ChannelState::OurInitSent as u32,
5919                                 announcement_sigs_state: AnnouncementSigsState::NotSent,
5920                                 secp_ctx,
5921                                 channel_value_satoshis,
5922
5923                                 latest_monitor_update_id: 0,
5924
5925                                 holder_signer: ChannelSignerType::Ecdsa(holder_signer),
5926                                 shutdown_scriptpubkey,
5927                                 destination_script,
5928
5929                                 cur_holder_commitment_transaction_number: INITIAL_COMMITMENT_NUMBER,
5930                                 cur_counterparty_commitment_transaction_number: INITIAL_COMMITMENT_NUMBER,
5931                                 value_to_self_msat,
5932
5933                                 pending_inbound_htlcs: Vec::new(),
5934                                 pending_outbound_htlcs: Vec::new(),
5935                                 holding_cell_htlc_updates: Vec::new(),
5936                                 pending_update_fee: None,
5937                                 holding_cell_update_fee: None,
5938                                 next_holder_htlc_id: 0,
5939                                 next_counterparty_htlc_id: 0,
5940                                 update_time_counter: 1,
5941
5942                                 resend_order: RAACommitmentOrder::CommitmentFirst,
5943
5944                                 monitor_pending_channel_ready: false,
5945                                 monitor_pending_revoke_and_ack: false,
5946                                 monitor_pending_commitment_signed: false,
5947                                 monitor_pending_forwards: Vec::new(),
5948                                 monitor_pending_failures: Vec::new(),
5949                                 monitor_pending_finalized_fulfills: Vec::new(),
5950
5951                                 signer_pending_commitment_update: false,
5952                                 signer_pending_funding: false,
5953
5954                                 #[cfg(debug_assertions)]
5955                                 holder_max_commitment_tx_output: Mutex::new((channel_value_satoshis * 1000 - push_msat, push_msat)),
5956                                 #[cfg(debug_assertions)]
5957                                 counterparty_max_commitment_tx_output: Mutex::new((channel_value_satoshis * 1000 - push_msat, push_msat)),
5958
5959                                 last_sent_closing_fee: None,
5960                                 pending_counterparty_closing_signed: None,
5961                                 closing_fee_limits: None,
5962                                 target_closing_feerate_sats_per_kw: None,
5963
5964                                 funding_tx_confirmed_in: None,
5965                                 funding_tx_confirmation_height: 0,
5966                                 short_channel_id: None,
5967                                 channel_creation_height: current_chain_height,
5968
5969                                 feerate_per_kw: commitment_feerate,
5970                                 counterparty_dust_limit_satoshis: 0,
5971                                 holder_dust_limit_satoshis: MIN_CHAN_DUST_LIMIT_SATOSHIS,
5972                                 counterparty_max_htlc_value_in_flight_msat: 0,
5973                                 holder_max_htlc_value_in_flight_msat: get_holder_max_htlc_value_in_flight_msat(channel_value_satoshis, &config.channel_handshake_config),
5974                                 counterparty_selected_channel_reserve_satoshis: None, // Filled in in accept_channel
5975                                 holder_selected_channel_reserve_satoshis,
5976                                 counterparty_htlc_minimum_msat: 0,
5977                                 holder_htlc_minimum_msat: if config.channel_handshake_config.our_htlc_minimum_msat == 0 { 1 } else { config.channel_handshake_config.our_htlc_minimum_msat },
5978                                 counterparty_max_accepted_htlcs: 0,
5979                                 holder_max_accepted_htlcs: cmp::min(config.channel_handshake_config.our_max_accepted_htlcs, MAX_HTLCS),
5980                                 minimum_depth: None, // Filled in in accept_channel
5981
5982                                 counterparty_forwarding_info: None,
5983
5984                                 channel_transaction_parameters: ChannelTransactionParameters {
5985                                         holder_pubkeys: pubkeys,
5986                                         holder_selected_contest_delay: config.channel_handshake_config.our_to_self_delay,
5987                                         is_outbound_from_holder: true,
5988                                         counterparty_parameters: None,
5989                                         funding_outpoint: None,
5990                                         channel_type_features: channel_type.clone()
5991                                 },
5992                                 funding_transaction: None,
5993                                 is_batch_funding: None,
5994
5995                                 counterparty_cur_commitment_point: None,
5996                                 counterparty_prev_commitment_point: None,
5997                                 counterparty_node_id,
5998
5999                                 counterparty_shutdown_scriptpubkey: None,
6000
6001                                 commitment_secrets: CounterpartyCommitmentSecrets::new(),
6002
6003                                 channel_update_status: ChannelUpdateStatus::Enabled,
6004                                 closing_signed_in_flight: false,
6005
6006                                 announcement_sigs: None,
6007
6008                                 #[cfg(any(test, fuzzing))]
6009                                 next_local_commitment_tx_fee_info_cached: Mutex::new(None),
6010                                 #[cfg(any(test, fuzzing))]
6011                                 next_remote_commitment_tx_fee_info_cached: Mutex::new(None),
6012
6013                                 workaround_lnd_bug_4006: None,
6014                                 sent_message_awaiting_response: None,
6015
6016                                 latest_inbound_scid_alias: None,
6017                                 outbound_scid_alias,
6018
6019                                 channel_pending_event_emitted: false,
6020                                 channel_ready_event_emitted: false,
6021
6022                                 #[cfg(any(test, fuzzing))]
6023                                 historical_inbound_htlc_fulfills: HashSet::new(),
6024
6025                                 channel_type,
6026                                 channel_keys_id,
6027
6028                                 blocked_monitor_updates: Vec::new(),
6029                         },
6030                         unfunded_context: UnfundedChannelContext { unfunded_channel_age_ticks: 0 }
6031                 })
6032         }
6033
6034         /// Updates channel state with knowledge of the funding transaction's txid/index, and generates
6035         /// a funding_created message for the remote peer.
6036         /// Panics if called at some time other than immediately after initial handshake, if called twice,
6037         /// or if called on an inbound channel.
6038         /// Note that channel_id changes during this call!
6039         /// Do NOT broadcast the funding transaction until after a successful funding_signed call!
6040         /// If an Err is returned, it is a ChannelError::Close.
6041         pub fn get_funding_created<L: Deref>(mut self, funding_transaction: Transaction, funding_txo: OutPoint, is_batch_funding: bool, logger: &L)
6042         -> Result<(Channel<SP>, Option<msgs::FundingCreated>), (Self, ChannelError)> where L::Target: Logger {
6043                 if !self.context.is_outbound() {
6044                         panic!("Tried to create outbound funding_created message on an inbound channel!");
6045                 }
6046                 if self.context.channel_state != (ChannelState::OurInitSent as u32 | ChannelState::TheirInitSent as u32) {
6047                         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)");
6048                 }
6049                 if self.context.commitment_secrets.get_min_seen_secret() != (1 << 48) ||
6050                                 self.context.cur_counterparty_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER ||
6051                                 self.context.cur_holder_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER {
6052                         panic!("Should not have advanced channel commitment tx numbers prior to funding_created");
6053                 }
6054
6055                 self.context.channel_transaction_parameters.funding_outpoint = Some(funding_txo);
6056                 self.context.holder_signer.as_mut().provide_channel_parameters(&self.context.channel_transaction_parameters);
6057
6058                 // Now that we're past error-generating stuff, update our local state:
6059
6060                 self.context.channel_state = ChannelState::FundingCreated as u32;
6061                 self.context.channel_id = funding_txo.to_channel_id();
6062
6063                 // If the funding transaction is a coinbase transaction, we need to set the minimum depth to 100.
6064                 // We can skip this if it is a zero-conf channel.
6065                 if funding_transaction.is_coin_base() &&
6066                         self.context.minimum_depth.unwrap_or(0) > 0 &&
6067                         self.context.minimum_depth.unwrap_or(0) < COINBASE_MATURITY {
6068                         self.context.minimum_depth = Some(COINBASE_MATURITY);
6069                 }
6070
6071                 self.context.funding_transaction = Some(funding_transaction);
6072                 self.context.is_batch_funding = Some(()).filter(|_| is_batch_funding);
6073
6074                 let funding_created = self.context.get_funding_created_msg(logger);
6075                 if funding_created.is_none() {
6076                         if !self.context.signer_pending_funding {
6077                                 log_trace!(logger, "funding_created awaiting signer; setting signer_pending_funding");
6078                                 self.context.signer_pending_funding = true;
6079                         }
6080                 }
6081
6082                 let channel = Channel {
6083                         context: self.context,
6084                 };
6085
6086                 Ok((channel, funding_created))
6087         }
6088
6089         fn get_initial_channel_type(config: &UserConfig, their_features: &InitFeatures) -> ChannelTypeFeatures {
6090                 // The default channel type (ie the first one we try) depends on whether the channel is
6091                 // public - if it is, we just go with `only_static_remotekey` as it's the only option
6092                 // available. If it's private, we first try `scid_privacy` as it provides better privacy
6093                 // with no other changes, and fall back to `only_static_remotekey`.
6094                 let mut ret = ChannelTypeFeatures::only_static_remote_key();
6095                 if !config.channel_handshake_config.announced_channel &&
6096                         config.channel_handshake_config.negotiate_scid_privacy &&
6097                         their_features.supports_scid_privacy() {
6098                         ret.set_scid_privacy_required();
6099                 }
6100
6101                 // Optionally, if the user would like to negotiate the `anchors_zero_fee_htlc_tx` option, we
6102                 // set it now. If they don't understand it, we'll fall back to our default of
6103                 // `only_static_remotekey`.
6104                 if config.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx &&
6105                         their_features.supports_anchors_zero_fee_htlc_tx() {
6106                         ret.set_anchors_zero_fee_htlc_tx_required();
6107                 }
6108
6109                 ret
6110         }
6111
6112         /// If we receive an error message, it may only be a rejection of the channel type we tried,
6113         /// not of our ability to open any channel at all. Thus, on error, we should first call this
6114         /// and see if we get a new `OpenChannel` message, otherwise the channel is failed.
6115         pub(crate) fn maybe_handle_error_without_close<F: Deref>(
6116                 &mut self, chain_hash: ChainHash, fee_estimator: &LowerBoundedFeeEstimator<F>
6117         ) -> Result<msgs::OpenChannel, ()>
6118         where
6119                 F::Target: FeeEstimator
6120         {
6121                 if !self.context.is_outbound() || self.context.channel_state != ChannelState::OurInitSent as u32 { return Err(()); }
6122                 if self.context.channel_type == ChannelTypeFeatures::only_static_remote_key() {
6123                         // We've exhausted our options
6124                         return Err(());
6125                 }
6126                 // We support opening a few different types of channels. Try removing our additional
6127                 // features one by one until we've either arrived at our default or the counterparty has
6128                 // accepted one.
6129                 //
6130                 // Due to the order below, we may not negotiate `option_anchors_zero_fee_htlc_tx` if the
6131                 // counterparty doesn't support `option_scid_privacy`. Since `get_initial_channel_type`
6132                 // checks whether the counterparty supports every feature, this would only happen if the
6133                 // counterparty is advertising the feature, but rejecting channels proposing the feature for
6134                 // whatever reason.
6135                 if self.context.channel_type.supports_anchors_zero_fee_htlc_tx() {
6136                         self.context.channel_type.clear_anchors_zero_fee_htlc_tx();
6137                         self.context.feerate_per_kw = fee_estimator.bounded_sat_per_1000_weight(ConfirmationTarget::NonAnchorChannelFee);
6138                         assert!(!self.context.channel_transaction_parameters.channel_type_features.supports_anchors_nonzero_fee_htlc_tx());
6139                 } else if self.context.channel_type.supports_scid_privacy() {
6140                         self.context.channel_type.clear_scid_privacy();
6141                 } else {
6142                         self.context.channel_type = ChannelTypeFeatures::only_static_remote_key();
6143                 }
6144                 self.context.channel_transaction_parameters.channel_type_features = self.context.channel_type.clone();
6145                 Ok(self.get_open_channel(chain_hash))
6146         }
6147
6148         pub fn get_open_channel(&self, chain_hash: ChainHash) -> msgs::OpenChannel {
6149                 if !self.context.is_outbound() {
6150                         panic!("Tried to open a channel for an inbound channel?");
6151                 }
6152                 if self.context.channel_state != ChannelState::OurInitSent as u32 {
6153                         panic!("Cannot generate an open_channel after we've moved forward");
6154                 }
6155
6156                 if self.context.cur_holder_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER {
6157                         panic!("Tried to send an open_channel for a channel that has already advanced");
6158                 }
6159
6160                 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);
6161                 let keys = self.context.get_holder_pubkeys();
6162
6163                 msgs::OpenChannel {
6164                         chain_hash,
6165                         temporary_channel_id: self.context.channel_id,
6166                         funding_satoshis: self.context.channel_value_satoshis,
6167                         push_msat: self.context.channel_value_satoshis * 1000 - self.context.value_to_self_msat,
6168                         dust_limit_satoshis: self.context.holder_dust_limit_satoshis,
6169                         max_htlc_value_in_flight_msat: self.context.holder_max_htlc_value_in_flight_msat,
6170                         channel_reserve_satoshis: self.context.holder_selected_channel_reserve_satoshis,
6171                         htlc_minimum_msat: self.context.holder_htlc_minimum_msat,
6172                         feerate_per_kw: self.context.feerate_per_kw as u32,
6173                         to_self_delay: self.context.get_holder_selected_contest_delay(),
6174                         max_accepted_htlcs: self.context.holder_max_accepted_htlcs,
6175                         funding_pubkey: keys.funding_pubkey,
6176                         revocation_basepoint: keys.revocation_basepoint,
6177                         payment_point: keys.payment_point,
6178                         delayed_payment_basepoint: keys.delayed_payment_basepoint,
6179                         htlc_basepoint: keys.htlc_basepoint,
6180                         first_per_commitment_point,
6181                         channel_flags: if self.context.config.announced_channel {1} else {0},
6182                         shutdown_scriptpubkey: Some(match &self.context.shutdown_scriptpubkey {
6183                                 Some(script) => script.clone().into_inner(),
6184                                 None => Builder::new().into_script(),
6185                         }),
6186                         channel_type: Some(self.context.channel_type.clone()),
6187                 }
6188         }
6189
6190         // Message handlers
6191         pub fn accept_channel(&mut self, msg: &msgs::AcceptChannel, default_limits: &ChannelHandshakeLimits, their_features: &InitFeatures) -> Result<(), ChannelError> {
6192                 let peer_limits = if let Some(ref limits) = self.context.inbound_handshake_limits_override { limits } else { default_limits };
6193
6194                 // Check sanity of message fields:
6195                 if !self.context.is_outbound() {
6196                         return Err(ChannelError::Close("Got an accept_channel message from an inbound peer".to_owned()));
6197                 }
6198                 if self.context.channel_state != ChannelState::OurInitSent as u32 {
6199                         return Err(ChannelError::Close("Got an accept_channel message at a strange time".to_owned()));
6200                 }
6201                 if msg.dust_limit_satoshis > 21000000 * 100000000 {
6202                         return Err(ChannelError::Close(format!("Peer never wants payout outputs? dust_limit_satoshis was {}", msg.dust_limit_satoshis)));
6203                 }
6204                 if msg.channel_reserve_satoshis > self.context.channel_value_satoshis {
6205                         return Err(ChannelError::Close(format!("Bogus channel_reserve_satoshis ({}). Must not be greater than ({})", msg.channel_reserve_satoshis, self.context.channel_value_satoshis)));
6206                 }
6207                 if msg.dust_limit_satoshis > self.context.holder_selected_channel_reserve_satoshis {
6208                         return Err(ChannelError::Close(format!("Dust limit ({}) is bigger than our channel reserve ({})", msg.dust_limit_satoshis, self.context.holder_selected_channel_reserve_satoshis)));
6209                 }
6210                 if msg.channel_reserve_satoshis > self.context.channel_value_satoshis - self.context.holder_selected_channel_reserve_satoshis {
6211                         return Err(ChannelError::Close(format!("Bogus channel_reserve_satoshis ({}). Must not be greater than channel value minus our reserve ({})",
6212                                 msg.channel_reserve_satoshis, self.context.channel_value_satoshis - self.context.holder_selected_channel_reserve_satoshis)));
6213                 }
6214                 let full_channel_value_msat = (self.context.channel_value_satoshis - msg.channel_reserve_satoshis) * 1000;
6215                 if msg.htlc_minimum_msat >= full_channel_value_msat {
6216                         return Err(ChannelError::Close(format!("Minimum htlc value ({}) is full channel value ({})", msg.htlc_minimum_msat, full_channel_value_msat)));
6217                 }
6218                 let max_delay_acceptable = u16::min(peer_limits.their_to_self_delay, MAX_LOCAL_BREAKDOWN_TIMEOUT);
6219                 if msg.to_self_delay > max_delay_acceptable {
6220                         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)));
6221                 }
6222                 if msg.max_accepted_htlcs < 1 {
6223                         return Err(ChannelError::Close("0 max_accepted_htlcs makes for a useless channel".to_owned()));
6224                 }
6225                 if msg.max_accepted_htlcs > MAX_HTLCS {
6226                         return Err(ChannelError::Close(format!("max_accepted_htlcs was {}. It must not be larger than {}", msg.max_accepted_htlcs, MAX_HTLCS)));
6227                 }
6228
6229                 // Now check against optional parameters as set by config...
6230                 if msg.htlc_minimum_msat > peer_limits.max_htlc_minimum_msat {
6231                         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)));
6232                 }
6233                 if msg.max_htlc_value_in_flight_msat < peer_limits.min_max_htlc_value_in_flight_msat {
6234                         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)));
6235                 }
6236                 if msg.channel_reserve_satoshis > peer_limits.max_channel_reserve_satoshis {
6237                         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)));
6238                 }
6239                 if msg.max_accepted_htlcs < peer_limits.min_max_accepted_htlcs {
6240                         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)));
6241                 }
6242                 if msg.dust_limit_satoshis < MIN_CHAN_DUST_LIMIT_SATOSHIS {
6243                         return Err(ChannelError::Close(format!("dust_limit_satoshis ({}) is less than the implementation limit ({})", msg.dust_limit_satoshis, MIN_CHAN_DUST_LIMIT_SATOSHIS)));
6244                 }
6245                 if msg.dust_limit_satoshis > MAX_CHAN_DUST_LIMIT_SATOSHIS {
6246                         return Err(ChannelError::Close(format!("dust_limit_satoshis ({}) is greater than the implementation limit ({})", msg.dust_limit_satoshis, MAX_CHAN_DUST_LIMIT_SATOSHIS)));
6247                 }
6248                 if msg.minimum_depth > peer_limits.max_minimum_depth {
6249                         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)));
6250                 }
6251
6252                 if let Some(ty) = &msg.channel_type {
6253                         if *ty != self.context.channel_type {
6254                                 return Err(ChannelError::Close("Channel Type in accept_channel didn't match the one sent in open_channel.".to_owned()));
6255                         }
6256                 } else if their_features.supports_channel_type() {
6257                         // Assume they've accepted the channel type as they said they understand it.
6258                 } else {
6259                         let channel_type = ChannelTypeFeatures::from_init(&their_features);
6260                         if channel_type != ChannelTypeFeatures::only_static_remote_key() {
6261                                 return Err(ChannelError::Close("Only static_remote_key is supported for non-negotiated channel types".to_owned()));
6262                         }
6263                         self.context.channel_type = channel_type.clone();
6264                         self.context.channel_transaction_parameters.channel_type_features = channel_type;
6265                 }
6266
6267                 let counterparty_shutdown_scriptpubkey = if their_features.supports_upfront_shutdown_script() {
6268                         match &msg.shutdown_scriptpubkey {
6269                                 &Some(ref script) => {
6270                                         // Peer is signaling upfront_shutdown and has opt-out with a 0-length script. We don't enforce anything
6271                                         if script.len() == 0 {
6272                                                 None
6273                                         } else {
6274                                                 if !script::is_bolt2_compliant(&script, their_features) {
6275                                                         return Err(ChannelError::Close(format!("Peer is signaling upfront_shutdown but has provided an unacceptable scriptpubkey format: {}", script)));
6276                                                 }
6277                                                 Some(script.clone())
6278                                         }
6279                                 },
6280                                 // 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
6281                                 &None => {
6282                                         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()));
6283                                 }
6284                         }
6285                 } else { None };
6286
6287                 self.context.counterparty_dust_limit_satoshis = msg.dust_limit_satoshis;
6288                 self.context.counterparty_max_htlc_value_in_flight_msat = cmp::min(msg.max_htlc_value_in_flight_msat, self.context.channel_value_satoshis * 1000);
6289                 self.context.counterparty_selected_channel_reserve_satoshis = Some(msg.channel_reserve_satoshis);
6290                 self.context.counterparty_htlc_minimum_msat = msg.htlc_minimum_msat;
6291                 self.context.counterparty_max_accepted_htlcs = msg.max_accepted_htlcs;
6292
6293                 if peer_limits.trust_own_funding_0conf {
6294                         self.context.minimum_depth = Some(msg.minimum_depth);
6295                 } else {
6296                         self.context.minimum_depth = Some(cmp::max(1, msg.minimum_depth));
6297                 }
6298
6299                 let counterparty_pubkeys = ChannelPublicKeys {
6300                         funding_pubkey: msg.funding_pubkey,
6301                         revocation_basepoint: msg.revocation_basepoint,
6302                         payment_point: msg.payment_point,
6303                         delayed_payment_basepoint: msg.delayed_payment_basepoint,
6304                         htlc_basepoint: msg.htlc_basepoint
6305                 };
6306
6307                 self.context.channel_transaction_parameters.counterparty_parameters = Some(CounterpartyChannelTransactionParameters {
6308                         selected_contest_delay: msg.to_self_delay,
6309                         pubkeys: counterparty_pubkeys,
6310                 });
6311
6312                 self.context.counterparty_cur_commitment_point = Some(msg.first_per_commitment_point);
6313                 self.context.counterparty_shutdown_scriptpubkey = counterparty_shutdown_scriptpubkey;
6314
6315                 self.context.channel_state = ChannelState::OurInitSent as u32 | ChannelState::TheirInitSent as u32;
6316                 self.context.inbound_handshake_limits_override = None; // We're done enforcing limits on our peer's handshake now.
6317
6318                 Ok(())
6319         }
6320 }
6321
6322 /// A not-yet-funded inbound (from counterparty) channel using V1 channel establishment.
6323 pub(super) struct InboundV1Channel<SP: Deref> where SP::Target: SignerProvider {
6324         pub context: ChannelContext<SP>,
6325         pub unfunded_context: UnfundedChannelContext,
6326 }
6327
6328 impl<SP: Deref> InboundV1Channel<SP> where SP::Target: SignerProvider {
6329         /// Creates a new channel from a remote sides' request for one.
6330         /// Assumes chain_hash has already been checked and corresponds with what we expect!
6331         pub fn new<ES: Deref, F: Deref, L: Deref>(
6332                 fee_estimator: &LowerBoundedFeeEstimator<F>, entropy_source: &ES, signer_provider: &SP,
6333                 counterparty_node_id: PublicKey, our_supported_features: &ChannelTypeFeatures,
6334                 their_features: &InitFeatures, msg: &msgs::OpenChannel, user_id: u128, config: &UserConfig,
6335                 current_chain_height: u32, logger: &L, is_0conf: bool,
6336         ) -> Result<InboundV1Channel<SP>, ChannelError>
6337                 where ES::Target: EntropySource,
6338                           F::Target: FeeEstimator,
6339                           L::Target: Logger,
6340         {
6341                 let announced_channel = if (msg.channel_flags & 1) == 1 { true } else { false };
6342
6343                 // First check the channel type is known, failing before we do anything else if we don't
6344                 // support this channel type.
6345                 let channel_type = if let Some(channel_type) = &msg.channel_type {
6346                         if channel_type.supports_any_optional_bits() {
6347                                 return Err(ChannelError::Close("Channel Type field contained optional bits - this is not allowed".to_owned()));
6348                         }
6349
6350                         // We only support the channel types defined by the `ChannelManager` in
6351                         // `provided_channel_type_features`. The channel type must always support
6352                         // `static_remote_key`.
6353                         if !channel_type.requires_static_remote_key() {
6354                                 return Err(ChannelError::Close("Channel Type was not understood - we require static remote key".to_owned()));
6355                         }
6356                         // Make sure we support all of the features behind the channel type.
6357                         if !channel_type.is_subset(our_supported_features) {
6358                                 return Err(ChannelError::Close("Channel Type contains unsupported features".to_owned()));
6359                         }
6360                         if channel_type.requires_scid_privacy() && announced_channel {
6361                                 return Err(ChannelError::Close("SCID Alias/Privacy Channel Type cannot be set on a public channel".to_owned()));
6362                         }
6363                         channel_type.clone()
6364                 } else {
6365                         let channel_type = ChannelTypeFeatures::from_init(&their_features);
6366                         if channel_type != ChannelTypeFeatures::only_static_remote_key() {
6367                                 return Err(ChannelError::Close("Only static_remote_key is supported for non-negotiated channel types".to_owned()));
6368                         }
6369                         channel_type
6370                 };
6371
6372                 let channel_keys_id = signer_provider.generate_channel_keys_id(true, msg.funding_satoshis, user_id);
6373                 let holder_signer = signer_provider.derive_channel_signer(msg.funding_satoshis, channel_keys_id);
6374                 let pubkeys = holder_signer.pubkeys().clone();
6375                 let counterparty_pubkeys = ChannelPublicKeys {
6376                         funding_pubkey: msg.funding_pubkey,
6377                         revocation_basepoint: msg.revocation_basepoint,
6378                         payment_point: msg.payment_point,
6379                         delayed_payment_basepoint: msg.delayed_payment_basepoint,
6380                         htlc_basepoint: msg.htlc_basepoint
6381                 };
6382
6383                 if config.channel_handshake_config.our_to_self_delay < BREAKDOWN_TIMEOUT {
6384                         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)));
6385                 }
6386
6387                 // Check sanity of message fields:
6388                 if msg.funding_satoshis > config.channel_handshake_limits.max_funding_satoshis {
6389                         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)));
6390                 }
6391                 if msg.funding_satoshis >= TOTAL_BITCOIN_SUPPLY_SATOSHIS {
6392                         return Err(ChannelError::Close(format!("Funding must be smaller than the total bitcoin supply. It was {}", msg.funding_satoshis)));
6393                 }
6394                 if msg.channel_reserve_satoshis > msg.funding_satoshis {
6395                         return Err(ChannelError::Close(format!("Bogus channel_reserve_satoshis ({}). Must be not greater than funding_satoshis: {}", msg.channel_reserve_satoshis, msg.funding_satoshis)));
6396                 }
6397                 let full_channel_value_msat = (msg.funding_satoshis - msg.channel_reserve_satoshis) * 1000;
6398                 if msg.push_msat > full_channel_value_msat {
6399                         return Err(ChannelError::Close(format!("push_msat {} was larger than channel amount minus reserve ({})", msg.push_msat, full_channel_value_msat)));
6400                 }
6401                 if msg.dust_limit_satoshis > msg.funding_satoshis {
6402                         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)));
6403                 }
6404                 if msg.htlc_minimum_msat >= full_channel_value_msat {
6405                         return Err(ChannelError::Close(format!("Minimum htlc value ({}) was larger than full channel value ({})", msg.htlc_minimum_msat, full_channel_value_msat)));
6406                 }
6407                 Channel::<SP>::check_remote_fee(&channel_type, fee_estimator, msg.feerate_per_kw, None, logger)?;
6408
6409                 let max_counterparty_selected_contest_delay = u16::min(config.channel_handshake_limits.their_to_self_delay, MAX_LOCAL_BREAKDOWN_TIMEOUT);
6410                 if msg.to_self_delay > max_counterparty_selected_contest_delay {
6411                         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)));
6412                 }
6413                 if msg.max_accepted_htlcs < 1 {
6414                         return Err(ChannelError::Close("0 max_accepted_htlcs makes for a useless channel".to_owned()));
6415                 }
6416                 if msg.max_accepted_htlcs > MAX_HTLCS {
6417                         return Err(ChannelError::Close(format!("max_accepted_htlcs was {}. It must not be larger than {}", msg.max_accepted_htlcs, MAX_HTLCS)));
6418                 }
6419
6420                 // Now check against optional parameters as set by config...
6421                 if msg.funding_satoshis < config.channel_handshake_limits.min_funding_satoshis {
6422                         return Err(ChannelError::Close(format!("Funding satoshis ({}) is less than the user specified limit ({})", msg.funding_satoshis, config.channel_handshake_limits.min_funding_satoshis)));
6423                 }
6424                 if msg.htlc_minimum_msat > config.channel_handshake_limits.max_htlc_minimum_msat {
6425                         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)));
6426                 }
6427                 if msg.max_htlc_value_in_flight_msat < config.channel_handshake_limits.min_max_htlc_value_in_flight_msat {
6428                         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)));
6429                 }
6430                 if msg.channel_reserve_satoshis > config.channel_handshake_limits.max_channel_reserve_satoshis {
6431                         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)));
6432                 }
6433                 if msg.max_accepted_htlcs < config.channel_handshake_limits.min_max_accepted_htlcs {
6434                         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)));
6435                 }
6436                 if msg.dust_limit_satoshis < MIN_CHAN_DUST_LIMIT_SATOSHIS {
6437                         return Err(ChannelError::Close(format!("dust_limit_satoshis ({}) is less than the implementation limit ({})", msg.dust_limit_satoshis, MIN_CHAN_DUST_LIMIT_SATOSHIS)));
6438                 }
6439                 if msg.dust_limit_satoshis >  MAX_CHAN_DUST_LIMIT_SATOSHIS {
6440                         return Err(ChannelError::Close(format!("dust_limit_satoshis ({}) is greater than the implementation limit ({})", msg.dust_limit_satoshis, MAX_CHAN_DUST_LIMIT_SATOSHIS)));
6441                 }
6442
6443                 // Convert things into internal flags and prep our state:
6444
6445                 if config.channel_handshake_limits.force_announced_channel_preference {
6446                         if config.channel_handshake_config.announced_channel != announced_channel {
6447                                 return Err(ChannelError::Close("Peer tried to open channel but their announcement preference is different from ours".to_owned()));
6448                         }
6449                 }
6450
6451                 let holder_selected_channel_reserve_satoshis = get_holder_selected_channel_reserve_satoshis(msg.funding_satoshis, config);
6452                 if holder_selected_channel_reserve_satoshis < MIN_CHAN_DUST_LIMIT_SATOSHIS {
6453                         // Protocol level safety check in place, although it should never happen because
6454                         // of `MIN_THEIR_CHAN_RESERVE_SATOSHIS`
6455                         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)));
6456                 }
6457                 if holder_selected_channel_reserve_satoshis * 1000 >= full_channel_value_msat {
6458                         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)));
6459                 }
6460                 if msg.channel_reserve_satoshis < MIN_CHAN_DUST_LIMIT_SATOSHIS {
6461                         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.",
6462                                 msg.channel_reserve_satoshis, MIN_CHAN_DUST_LIMIT_SATOSHIS);
6463                 }
6464                 if holder_selected_channel_reserve_satoshis < msg.dust_limit_satoshis {
6465                         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)));
6466                 }
6467
6468                 // check if the funder's amount for the initial commitment tx is sufficient
6469                 // for full fee payment plus a few HTLCs to ensure the channel will be useful.
6470                 let anchor_outputs_value = if channel_type.supports_anchors_zero_fee_htlc_tx() {
6471                         ANCHOR_OUTPUT_VALUE_SATOSHI * 2
6472                 } else {
6473                         0
6474                 };
6475                 let funders_amount_msat = msg.funding_satoshis * 1000 - msg.push_msat;
6476                 let commitment_tx_fee = commit_tx_fee_msat(msg.feerate_per_kw, MIN_AFFORDABLE_HTLC_COUNT, &channel_type) / 1000;
6477                 if (funders_amount_msat / 1000).saturating_sub(anchor_outputs_value) < commitment_tx_fee {
6478                         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)));
6479                 }
6480
6481                 let to_remote_satoshis = funders_amount_msat / 1000 - commitment_tx_fee - anchor_outputs_value;
6482                 // While it's reasonable for us to not meet the channel reserve initially (if they don't
6483                 // want to push much to us), our counterparty should always have more than our reserve.
6484                 if to_remote_satoshis < holder_selected_channel_reserve_satoshis {
6485                         return Err(ChannelError::Close("Insufficient funding amount for initial reserve".to_owned()));
6486                 }
6487
6488                 let counterparty_shutdown_scriptpubkey = if their_features.supports_upfront_shutdown_script() {
6489                         match &msg.shutdown_scriptpubkey {
6490                                 &Some(ref script) => {
6491                                         // Peer is signaling upfront_shutdown and has opt-out with a 0-length script. We don't enforce anything
6492                                         if script.len() == 0 {
6493                                                 None
6494                                         } else {
6495                                                 if !script::is_bolt2_compliant(&script, their_features) {
6496                                                         return Err(ChannelError::Close(format!("Peer is signaling upfront_shutdown but has provided an unacceptable scriptpubkey format: {}", script)))
6497                                                 }
6498                                                 Some(script.clone())
6499                                         }
6500                                 },
6501                                 // 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
6502                                 &None => {
6503                                         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()));
6504                                 }
6505                         }
6506                 } else { None };
6507
6508                 let shutdown_scriptpubkey = if config.channel_handshake_config.commit_upfront_shutdown_pubkey {
6509                         match signer_provider.get_shutdown_scriptpubkey() {
6510                                 Ok(scriptpubkey) => Some(scriptpubkey),
6511                                 Err(_) => return Err(ChannelError::Close("Failed to get upfront shutdown scriptpubkey".to_owned())),
6512                         }
6513                 } else { None };
6514
6515                 if let Some(shutdown_scriptpubkey) = &shutdown_scriptpubkey {
6516                         if !shutdown_scriptpubkey.is_compatible(&their_features) {
6517                                 return Err(ChannelError::Close(format!("Provided a scriptpubkey format not accepted by peer: {}", shutdown_scriptpubkey)));
6518                         }
6519                 }
6520
6521                 let destination_script = match signer_provider.get_destination_script() {
6522                         Ok(script) => script,
6523                         Err(_) => return Err(ChannelError::Close("Failed to get destination script".to_owned())),
6524                 };
6525
6526                 let mut secp_ctx = Secp256k1::new();
6527                 secp_ctx.seeded_randomize(&entropy_source.get_secure_random_bytes());
6528
6529                 let minimum_depth = if is_0conf {
6530                         Some(0)
6531                 } else {
6532                         Some(cmp::max(config.channel_handshake_config.minimum_depth, 1))
6533                 };
6534
6535                 let chan = Self {
6536                         context: ChannelContext {
6537                                 user_id,
6538
6539                                 config: LegacyChannelConfig {
6540                                         options: config.channel_config.clone(),
6541                                         announced_channel,
6542                                         commit_upfront_shutdown_pubkey: config.channel_handshake_config.commit_upfront_shutdown_pubkey,
6543                                 },
6544
6545                                 prev_config: None,
6546
6547                                 inbound_handshake_limits_override: None,
6548
6549                                 temporary_channel_id: Some(msg.temporary_channel_id),
6550                                 channel_id: msg.temporary_channel_id,
6551                                 channel_state: (ChannelState::OurInitSent as u32) | (ChannelState::TheirInitSent as u32),
6552                                 announcement_sigs_state: AnnouncementSigsState::NotSent,
6553                                 secp_ctx,
6554
6555                                 latest_monitor_update_id: 0,
6556
6557                                 holder_signer: ChannelSignerType::Ecdsa(holder_signer),
6558                                 shutdown_scriptpubkey,
6559                                 destination_script,
6560
6561                                 cur_holder_commitment_transaction_number: INITIAL_COMMITMENT_NUMBER,
6562                                 cur_counterparty_commitment_transaction_number: INITIAL_COMMITMENT_NUMBER,
6563                                 value_to_self_msat: msg.push_msat,
6564
6565                                 pending_inbound_htlcs: Vec::new(),
6566                                 pending_outbound_htlcs: Vec::new(),
6567                                 holding_cell_htlc_updates: Vec::new(),
6568                                 pending_update_fee: None,
6569                                 holding_cell_update_fee: None,
6570                                 next_holder_htlc_id: 0,
6571                                 next_counterparty_htlc_id: 0,
6572                                 update_time_counter: 1,
6573
6574                                 resend_order: RAACommitmentOrder::CommitmentFirst,
6575
6576                                 monitor_pending_channel_ready: false,
6577                                 monitor_pending_revoke_and_ack: false,
6578                                 monitor_pending_commitment_signed: false,
6579                                 monitor_pending_forwards: Vec::new(),
6580                                 monitor_pending_failures: Vec::new(),
6581                                 monitor_pending_finalized_fulfills: Vec::new(),
6582
6583                                 signer_pending_commitment_update: false,
6584                                 signer_pending_funding: false,
6585
6586                                 #[cfg(debug_assertions)]
6587                                 holder_max_commitment_tx_output: Mutex::new((msg.push_msat, msg.funding_satoshis * 1000 - msg.push_msat)),
6588                                 #[cfg(debug_assertions)]
6589                                 counterparty_max_commitment_tx_output: Mutex::new((msg.push_msat, msg.funding_satoshis * 1000 - msg.push_msat)),
6590
6591                                 last_sent_closing_fee: None,
6592                                 pending_counterparty_closing_signed: None,
6593                                 closing_fee_limits: None,
6594                                 target_closing_feerate_sats_per_kw: None,
6595
6596                                 funding_tx_confirmed_in: None,
6597                                 funding_tx_confirmation_height: 0,
6598                                 short_channel_id: None,
6599                                 channel_creation_height: current_chain_height,
6600
6601                                 feerate_per_kw: msg.feerate_per_kw,
6602                                 channel_value_satoshis: msg.funding_satoshis,
6603                                 counterparty_dust_limit_satoshis: msg.dust_limit_satoshis,
6604                                 holder_dust_limit_satoshis: MIN_CHAN_DUST_LIMIT_SATOSHIS,
6605                                 counterparty_max_htlc_value_in_flight_msat: cmp::min(msg.max_htlc_value_in_flight_msat, msg.funding_satoshis * 1000),
6606                                 holder_max_htlc_value_in_flight_msat: get_holder_max_htlc_value_in_flight_msat(msg.funding_satoshis, &config.channel_handshake_config),
6607                                 counterparty_selected_channel_reserve_satoshis: Some(msg.channel_reserve_satoshis),
6608                                 holder_selected_channel_reserve_satoshis,
6609                                 counterparty_htlc_minimum_msat: msg.htlc_minimum_msat,
6610                                 holder_htlc_minimum_msat: if config.channel_handshake_config.our_htlc_minimum_msat == 0 { 1 } else { config.channel_handshake_config.our_htlc_minimum_msat },
6611                                 counterparty_max_accepted_htlcs: msg.max_accepted_htlcs,
6612                                 holder_max_accepted_htlcs: cmp::min(config.channel_handshake_config.our_max_accepted_htlcs, MAX_HTLCS),
6613                                 minimum_depth,
6614
6615                                 counterparty_forwarding_info: None,
6616
6617                                 channel_transaction_parameters: ChannelTransactionParameters {
6618                                         holder_pubkeys: pubkeys,
6619                                         holder_selected_contest_delay: config.channel_handshake_config.our_to_self_delay,
6620                                         is_outbound_from_holder: false,
6621                                         counterparty_parameters: Some(CounterpartyChannelTransactionParameters {
6622                                                 selected_contest_delay: msg.to_self_delay,
6623                                                 pubkeys: counterparty_pubkeys,
6624                                         }),
6625                                         funding_outpoint: None,
6626                                         channel_type_features: channel_type.clone()
6627                                 },
6628                                 funding_transaction: None,
6629                                 is_batch_funding: None,
6630
6631                                 counterparty_cur_commitment_point: Some(msg.first_per_commitment_point),
6632                                 counterparty_prev_commitment_point: None,
6633                                 counterparty_node_id,
6634
6635                                 counterparty_shutdown_scriptpubkey,
6636
6637                                 commitment_secrets: CounterpartyCommitmentSecrets::new(),
6638
6639                                 channel_update_status: ChannelUpdateStatus::Enabled,
6640                                 closing_signed_in_flight: false,
6641
6642                                 announcement_sigs: None,
6643
6644                                 #[cfg(any(test, fuzzing))]
6645                                 next_local_commitment_tx_fee_info_cached: Mutex::new(None),
6646                                 #[cfg(any(test, fuzzing))]
6647                                 next_remote_commitment_tx_fee_info_cached: Mutex::new(None),
6648
6649                                 workaround_lnd_bug_4006: None,
6650                                 sent_message_awaiting_response: None,
6651
6652                                 latest_inbound_scid_alias: None,
6653                                 outbound_scid_alias: 0,
6654
6655                                 channel_pending_event_emitted: false,
6656                                 channel_ready_event_emitted: false,
6657
6658                                 #[cfg(any(test, fuzzing))]
6659                                 historical_inbound_htlc_fulfills: HashSet::new(),
6660
6661                                 channel_type,
6662                                 channel_keys_id,
6663
6664                                 blocked_monitor_updates: Vec::new(),
6665                         },
6666                         unfunded_context: UnfundedChannelContext { unfunded_channel_age_ticks: 0 }
6667                 };
6668
6669                 Ok(chan)
6670         }
6671
6672         /// Marks an inbound channel as accepted and generates a [`msgs::AcceptChannel`] message which
6673         /// should be sent back to the counterparty node.
6674         ///
6675         /// [`msgs::AcceptChannel`]: crate::ln::msgs::AcceptChannel
6676         pub fn accept_inbound_channel(&mut self) -> msgs::AcceptChannel {
6677                 if self.context.is_outbound() {
6678                         panic!("Tried to send accept_channel for an outbound channel?");
6679                 }
6680                 if self.context.channel_state != (ChannelState::OurInitSent as u32) | (ChannelState::TheirInitSent as u32) {
6681                         panic!("Tried to send accept_channel after channel had moved forward");
6682                 }
6683                 if self.context.cur_holder_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER {
6684                         panic!("Tried to send an accept_channel for a channel that has already advanced");
6685                 }
6686
6687                 self.generate_accept_channel_message()
6688         }
6689
6690         /// This function is used to explicitly generate a [`msgs::AcceptChannel`] message for an
6691         /// inbound channel. If the intention is to accept an inbound channel, use
6692         /// [`InboundV1Channel::accept_inbound_channel`] instead.
6693         ///
6694         /// [`msgs::AcceptChannel`]: crate::ln::msgs::AcceptChannel
6695         fn generate_accept_channel_message(&self) -> msgs::AcceptChannel {
6696                 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);
6697                 let keys = self.context.get_holder_pubkeys();
6698
6699                 msgs::AcceptChannel {
6700                         temporary_channel_id: self.context.channel_id,
6701                         dust_limit_satoshis: self.context.holder_dust_limit_satoshis,
6702                         max_htlc_value_in_flight_msat: self.context.holder_max_htlc_value_in_flight_msat,
6703                         channel_reserve_satoshis: self.context.holder_selected_channel_reserve_satoshis,
6704                         htlc_minimum_msat: self.context.holder_htlc_minimum_msat,
6705                         minimum_depth: self.context.minimum_depth.unwrap(),
6706                         to_self_delay: self.context.get_holder_selected_contest_delay(),
6707                         max_accepted_htlcs: self.context.holder_max_accepted_htlcs,
6708                         funding_pubkey: keys.funding_pubkey,
6709                         revocation_basepoint: keys.revocation_basepoint,
6710                         payment_point: keys.payment_point,
6711                         delayed_payment_basepoint: keys.delayed_payment_basepoint,
6712                         htlc_basepoint: keys.htlc_basepoint,
6713                         first_per_commitment_point,
6714                         shutdown_scriptpubkey: Some(match &self.context.shutdown_scriptpubkey {
6715                                 Some(script) => script.clone().into_inner(),
6716                                 None => Builder::new().into_script(),
6717                         }),
6718                         channel_type: Some(self.context.channel_type.clone()),
6719                         #[cfg(taproot)]
6720                         next_local_nonce: None,
6721                 }
6722         }
6723
6724         /// Enables the possibility for tests to extract a [`msgs::AcceptChannel`] message for an
6725         /// inbound channel without accepting it.
6726         ///
6727         /// [`msgs::AcceptChannel`]: crate::ln::msgs::AcceptChannel
6728         #[cfg(test)]
6729         pub fn get_accept_channel_message(&self) -> msgs::AcceptChannel {
6730                 self.generate_accept_channel_message()
6731         }
6732
6733         fn funding_created_signature<L: Deref>(&mut self, sig: &Signature, logger: &L) -> Result<(CommitmentTransaction, CommitmentTransaction, Option<Signature>), ChannelError> where L::Target: Logger {
6734                 let funding_script = self.context.get_funding_redeemscript();
6735
6736                 let keys = self.context.build_holder_transaction_keys(self.context.cur_holder_commitment_transaction_number);
6737                 let initial_commitment_tx = self.context.build_commitment_transaction(self.context.cur_holder_commitment_transaction_number, &keys, true, false, logger).tx;
6738                 {
6739                         let trusted_tx = initial_commitment_tx.trust();
6740                         let initial_commitment_bitcoin_tx = trusted_tx.built_transaction();
6741                         let sighash = initial_commitment_bitcoin_tx.get_sighash_all(&funding_script, self.context.channel_value_satoshis);
6742                         // They sign the holder commitment transaction...
6743                         log_trace!(logger, "Checking funding_created tx signature {} by key {} against tx {} (sighash {}) with redeemscript {} for channel {}.",
6744                                 log_bytes!(sig.serialize_compact()[..]), log_bytes!(self.context.counterparty_funding_pubkey().serialize()),
6745                                 encode::serialize_hex(&initial_commitment_bitcoin_tx.transaction), log_bytes!(sighash[..]),
6746                                 encode::serialize_hex(&funding_script), &self.context.channel_id());
6747                         secp_check!(self.context.secp_ctx.verify_ecdsa(&sighash, &sig, self.context.counterparty_funding_pubkey()), "Invalid funding_created signature from peer".to_owned());
6748                 }
6749
6750                 let counterparty_keys = self.context.build_remote_transaction_keys();
6751                 let counterparty_initial_commitment_tx = self.context.build_commitment_transaction(self.context.cur_counterparty_commitment_transaction_number, &counterparty_keys, false, false, logger).tx;
6752
6753                 let counterparty_trusted_tx = counterparty_initial_commitment_tx.trust();
6754                 let counterparty_initial_bitcoin_tx = counterparty_trusted_tx.built_transaction();
6755                 log_trace!(logger, "Initial counterparty tx for channel {} is: txid {} tx {}",
6756                         &self.context.channel_id(), counterparty_initial_bitcoin_tx.txid, encode::serialize_hex(&counterparty_initial_bitcoin_tx.transaction));
6757
6758                 match &self.context.holder_signer {
6759                         // TODO (arik): move match into calling method for Taproot
6760                         ChannelSignerType::Ecdsa(ecdsa) => {
6761                                 let counterparty_signature = ecdsa.sign_counterparty_commitment(&counterparty_initial_commitment_tx, Vec::new(), &self.context.secp_ctx)
6762                                         .map(|(sig, _)| sig).ok();
6763
6764                                 // We sign "counterparty" commitment transaction, allowing them to broadcast the tx if they wish.
6765                                 Ok((counterparty_initial_commitment_tx, initial_commitment_tx, counterparty_signature))
6766                         }
6767                 }
6768         }
6769
6770         pub fn funding_created<L: Deref>(
6771                 mut self, msg: &msgs::FundingCreated, best_block: BestBlock, signer_provider: &SP, logger: &L
6772         ) -> Result<(Channel<SP>, Option<msgs::FundingSigned>, ChannelMonitor<<SP::Target as SignerProvider>::Signer>), (Self, ChannelError)>
6773         where
6774                 L::Target: Logger
6775         {
6776                 if self.context.is_outbound() {
6777                         return Err((self, ChannelError::Close("Received funding_created for an outbound channel?".to_owned())));
6778                 }
6779                 if self.context.channel_state != (ChannelState::OurInitSent as u32 | ChannelState::TheirInitSent as u32) {
6780                         // BOLT 2 says that if we disconnect before we send funding_signed we SHOULD NOT
6781                         // remember the channel, so it's safe to just send an error_message here and drop the
6782                         // channel.
6783                         return Err((self, ChannelError::Close("Received funding_created after we got the channel!".to_owned())));
6784                 }
6785                 if self.context.commitment_secrets.get_min_seen_secret() != (1 << 48) ||
6786                                 self.context.cur_counterparty_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER ||
6787                                 self.context.cur_holder_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER {
6788                         panic!("Should not have advanced channel commitment tx numbers prior to funding_created");
6789                 }
6790
6791                 let funding_txo = OutPoint { txid: msg.funding_txid, index: msg.funding_output_index };
6792                 self.context.channel_transaction_parameters.funding_outpoint = Some(funding_txo);
6793                 // This is an externally observable change before we finish all our checks.  In particular
6794                 // funding_created_signature may fail.
6795                 self.context.holder_signer.as_mut().provide_channel_parameters(&self.context.channel_transaction_parameters);
6796
6797                 let (counterparty_initial_commitment_tx, initial_commitment_tx, sig_opt) = match self.funding_created_signature(&msg.signature, logger) {
6798                         Ok(res) => res,
6799                         Err(ChannelError::Close(e)) => {
6800                                 self.context.channel_transaction_parameters.funding_outpoint = None;
6801                                 return Err((self, ChannelError::Close(e)));
6802                         },
6803                         Err(e) => {
6804                                 // The only error we know how to handle is ChannelError::Close, so we fall over here
6805                                 // to make sure we don't continue with an inconsistent state.
6806                                 panic!("unexpected error type from funding_created_signature {:?}", e);
6807                         }
6808                 };
6809
6810                 let holder_commitment_tx = HolderCommitmentTransaction::new(
6811                         initial_commitment_tx,
6812                         msg.signature,
6813                         Vec::new(),
6814                         &self.context.get_holder_pubkeys().funding_pubkey,
6815                         self.context.counterparty_funding_pubkey()
6816                 );
6817
6818                 if let Err(_) = self.context.holder_signer.as_ref().validate_holder_commitment(&holder_commitment_tx, Vec::new()) {
6819                         return Err((self, ChannelError::Close("Failed to validate our commitment".to_owned())));
6820                 }
6821
6822                 // Now that we're past error-generating stuff, update our local state:
6823
6824                 let funding_redeemscript = self.context.get_funding_redeemscript();
6825                 let funding_txo_script = funding_redeemscript.to_v0_p2wsh();
6826                 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());
6827                 let shutdown_script = self.context.shutdown_scriptpubkey.clone().map(|script| script.into_inner());
6828                 let mut monitor_signer = signer_provider.derive_channel_signer(self.context.channel_value_satoshis, self.context.channel_keys_id);
6829                 monitor_signer.provide_channel_parameters(&self.context.channel_transaction_parameters);
6830                 let channel_monitor = ChannelMonitor::new(self.context.secp_ctx.clone(), monitor_signer,
6831                                                           shutdown_script, self.context.get_holder_selected_contest_delay(),
6832                                                           &self.context.destination_script, (funding_txo, funding_txo_script.clone()),
6833                                                           &self.context.channel_transaction_parameters,
6834                                                           funding_redeemscript.clone(), self.context.channel_value_satoshis,
6835                                                           obscure_factor,
6836                                                           holder_commitment_tx, best_block, self.context.counterparty_node_id);
6837
6838                 channel_monitor.provide_initial_counterparty_commitment_tx(
6839                         counterparty_initial_commitment_tx.trust().txid(), Vec::new(),
6840                         self.context.cur_counterparty_commitment_transaction_number,
6841                         self.context.counterparty_cur_commitment_point.unwrap(), self.context.feerate_per_kw,
6842                         counterparty_initial_commitment_tx.to_broadcaster_value_sat(),
6843                         counterparty_initial_commitment_tx.to_countersignatory_value_sat(), logger);
6844
6845                 self.context.channel_state = ChannelState::FundingSent as u32;
6846                 self.context.channel_id = funding_txo.to_channel_id();
6847                 self.context.cur_counterparty_commitment_transaction_number -= 1;
6848                 self.context.cur_holder_commitment_transaction_number -= 1;
6849
6850                 log_info!(logger, "Generated funding_signed for peer for channel {}", &self.context.channel_id());
6851
6852                 // Promote the channel to a full-fledged one now that we have updated the state and have a
6853                 // `ChannelMonitor`.
6854                 let mut channel = Channel {
6855                         context: self.context,
6856                 };
6857                 let channel_id = channel.context.channel_id.clone();
6858                 let need_channel_ready = channel.check_get_channel_ready(0).is_some();
6859                 channel.monitor_updating_paused(false, false, need_channel_ready, Vec::new(), Vec::new(), Vec::new());
6860
6861                 let funding_signed = if let Some(signature) = sig_opt {
6862                         Some(msgs::FundingSigned {
6863                                 channel_id,
6864                                 signature,
6865                                 #[cfg(taproot)]
6866                                 partial_signature_with_nonce: None,
6867                         })
6868                 } else {
6869                         channel.context.signer_pending_funding = true;
6870                         None
6871                 };
6872
6873                 Ok((channel, funding_signed, channel_monitor))
6874         }
6875 }
6876
6877 const SERIALIZATION_VERSION: u8 = 3;
6878 const MIN_SERIALIZATION_VERSION: u8 = 2;
6879
6880 impl_writeable_tlv_based_enum!(InboundHTLCRemovalReason,;
6881         (0, FailRelay),
6882         (1, FailMalformed),
6883         (2, Fulfill),
6884 );
6885
6886 impl Writeable for ChannelUpdateStatus {
6887         fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
6888                 // We only care about writing out the current state as it was announced, ie only either
6889                 // Enabled or Disabled. In the case of DisabledStaged, we most recently announced the
6890                 // channel as enabled, so we write 0. For EnabledStaged, we similarly write a 1.
6891                 match self {
6892                         ChannelUpdateStatus::Enabled => 0u8.write(writer)?,
6893                         ChannelUpdateStatus::DisabledStaged(_) => 0u8.write(writer)?,
6894                         ChannelUpdateStatus::EnabledStaged(_) => 1u8.write(writer)?,
6895                         ChannelUpdateStatus::Disabled => 1u8.write(writer)?,
6896                 }
6897                 Ok(())
6898         }
6899 }
6900
6901 impl Readable for ChannelUpdateStatus {
6902         fn read<R: io::Read>(reader: &mut R) -> Result<Self, DecodeError> {
6903                 Ok(match <u8 as Readable>::read(reader)? {
6904                         0 => ChannelUpdateStatus::Enabled,
6905                         1 => ChannelUpdateStatus::Disabled,
6906                         _ => return Err(DecodeError::InvalidValue),
6907                 })
6908         }
6909 }
6910
6911 impl Writeable for AnnouncementSigsState {
6912         fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
6913                 // We only care about writing out the current state as if we had just disconnected, at
6914                 // which point we always set anything but AnnouncementSigsReceived to NotSent.
6915                 match self {
6916                         AnnouncementSigsState::NotSent => 0u8.write(writer),
6917                         AnnouncementSigsState::MessageSent => 0u8.write(writer),
6918                         AnnouncementSigsState::Committed => 0u8.write(writer),
6919                         AnnouncementSigsState::PeerReceived => 1u8.write(writer),
6920                 }
6921         }
6922 }
6923
6924 impl Readable for AnnouncementSigsState {
6925         fn read<R: io::Read>(reader: &mut R) -> Result<Self, DecodeError> {
6926                 Ok(match <u8 as Readable>::read(reader)? {
6927                         0 => AnnouncementSigsState::NotSent,
6928                         1 => AnnouncementSigsState::PeerReceived,
6929                         _ => return Err(DecodeError::InvalidValue),
6930                 })
6931         }
6932 }
6933
6934 impl<SP: Deref> Writeable for Channel<SP> where SP::Target: SignerProvider {
6935         fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
6936                 // Note that we write out as if remove_uncommitted_htlcs_and_mark_paused had just been
6937                 // called.
6938
6939                 write_ver_prefix!(writer, MIN_SERIALIZATION_VERSION, MIN_SERIALIZATION_VERSION);
6940
6941                 // `user_id` used to be a single u64 value. In order to remain backwards compatible with
6942                 // versions prior to 0.0.113, the u128 is serialized as two separate u64 values. We write
6943                 // the low bytes now and the optional high bytes later.
6944                 let user_id_low = self.context.user_id as u64;
6945                 user_id_low.write(writer)?;
6946
6947                 // Version 1 deserializers expected to read parts of the config object here. Version 2
6948                 // deserializers (0.0.99) now read config through TLVs, and as we now require them for
6949                 // `minimum_depth` we simply write dummy values here.
6950                 writer.write_all(&[0; 8])?;
6951
6952                 self.context.channel_id.write(writer)?;
6953                 (self.context.channel_state | ChannelState::PeerDisconnected as u32).write(writer)?;
6954                 self.context.channel_value_satoshis.write(writer)?;
6955
6956                 self.context.latest_monitor_update_id.write(writer)?;
6957
6958                 let mut key_data = VecWriter(Vec::new());
6959                 // TODO (taproot|arik): Introduce serialization distinction for non-ECDSA signers.
6960                 self.context.holder_signer.as_ecdsa().expect("Only ECDSA signers may be serialized").write(&mut key_data)?;
6961                 assert!(key_data.0.len() < core::usize::MAX);
6962                 assert!(key_data.0.len() < core::u32::MAX as usize);
6963                 (key_data.0.len() as u32).write(writer)?;
6964                 writer.write_all(&key_data.0[..])?;
6965
6966                 // Write out the old serialization for shutdown_pubkey for backwards compatibility, if
6967                 // deserialized from that format.
6968                 match self.context.shutdown_scriptpubkey.as_ref().and_then(|script| script.as_legacy_pubkey()) {
6969                         Some(shutdown_pubkey) => shutdown_pubkey.write(writer)?,
6970                         None => [0u8; PUBLIC_KEY_SIZE].write(writer)?,
6971                 }
6972                 self.context.destination_script.write(writer)?;
6973
6974                 self.context.cur_holder_commitment_transaction_number.write(writer)?;
6975                 self.context.cur_counterparty_commitment_transaction_number.write(writer)?;
6976                 self.context.value_to_self_msat.write(writer)?;
6977
6978                 let mut dropped_inbound_htlcs = 0;
6979                 for htlc in self.context.pending_inbound_htlcs.iter() {
6980                         if let InboundHTLCState::RemoteAnnounced(_) = htlc.state {
6981                                 dropped_inbound_htlcs += 1;
6982                         }
6983                 }
6984                 (self.context.pending_inbound_htlcs.len() as u64 - dropped_inbound_htlcs).write(writer)?;
6985                 for htlc in self.context.pending_inbound_htlcs.iter() {
6986                         if let &InboundHTLCState::RemoteAnnounced(_) = &htlc.state {
6987                                 continue; // Drop
6988                         }
6989                         htlc.htlc_id.write(writer)?;
6990                         htlc.amount_msat.write(writer)?;
6991                         htlc.cltv_expiry.write(writer)?;
6992                         htlc.payment_hash.write(writer)?;
6993                         match &htlc.state {
6994                                 &InboundHTLCState::RemoteAnnounced(_) => unreachable!(),
6995                                 &InboundHTLCState::AwaitingRemoteRevokeToAnnounce(ref htlc_state) => {
6996                                         1u8.write(writer)?;
6997                                         htlc_state.write(writer)?;
6998                                 },
6999                                 &InboundHTLCState::AwaitingAnnouncedRemoteRevoke(ref htlc_state) => {
7000                                         2u8.write(writer)?;
7001                                         htlc_state.write(writer)?;
7002                                 },
7003                                 &InboundHTLCState::Committed => {
7004                                         3u8.write(writer)?;
7005                                 },
7006                                 &InboundHTLCState::LocalRemoved(ref removal_reason) => {
7007                                         4u8.write(writer)?;
7008                                         removal_reason.write(writer)?;
7009                                 },
7010                         }
7011                 }
7012
7013                 let mut preimages: Vec<&Option<PaymentPreimage>> = vec![];
7014                 let mut pending_outbound_skimmed_fees: Vec<Option<u64>> = Vec::new();
7015
7016                 (self.context.pending_outbound_htlcs.len() as u64).write(writer)?;
7017                 for (idx, htlc) in self.context.pending_outbound_htlcs.iter().enumerate() {
7018                         htlc.htlc_id.write(writer)?;
7019                         htlc.amount_msat.write(writer)?;
7020                         htlc.cltv_expiry.write(writer)?;
7021                         htlc.payment_hash.write(writer)?;
7022                         htlc.source.write(writer)?;
7023                         match &htlc.state {
7024                                 &OutboundHTLCState::LocalAnnounced(ref onion_packet) => {
7025                                         0u8.write(writer)?;
7026                                         onion_packet.write(writer)?;
7027                                 },
7028                                 &OutboundHTLCState::Committed => {
7029                                         1u8.write(writer)?;
7030                                 },
7031                                 &OutboundHTLCState::RemoteRemoved(_) => {
7032                                         // Treat this as a Committed because we haven't received the CS - they'll
7033                                         // resend the claim/fail on reconnect as we all (hopefully) the missing CS.
7034                                         1u8.write(writer)?;
7035                                 },
7036                                 &OutboundHTLCState::AwaitingRemoteRevokeToRemove(ref outcome) => {
7037                                         3u8.write(writer)?;
7038                                         if let OutboundHTLCOutcome::Success(preimage) = outcome {
7039                                                 preimages.push(preimage);
7040                                         }
7041                                         let reason: Option<&HTLCFailReason> = outcome.into();
7042                                         reason.write(writer)?;
7043                                 }
7044                                 &OutboundHTLCState::AwaitingRemovedRemoteRevoke(ref outcome) => {
7045                                         4u8.write(writer)?;
7046                                         if let OutboundHTLCOutcome::Success(preimage) = outcome {
7047                                                 preimages.push(preimage);
7048                                         }
7049                                         let reason: Option<&HTLCFailReason> = outcome.into();
7050                                         reason.write(writer)?;
7051                                 }
7052                         }
7053                         if let Some(skimmed_fee) = htlc.skimmed_fee_msat {
7054                                 if pending_outbound_skimmed_fees.is_empty() {
7055                                         for _ in 0..idx { pending_outbound_skimmed_fees.push(None); }
7056                                 }
7057                                 pending_outbound_skimmed_fees.push(Some(skimmed_fee));
7058                         } else if !pending_outbound_skimmed_fees.is_empty() {
7059                                 pending_outbound_skimmed_fees.push(None);
7060                         }
7061                 }
7062
7063                 let mut holding_cell_skimmed_fees: Vec<Option<u64>> = Vec::new();
7064                 (self.context.holding_cell_htlc_updates.len() as u64).write(writer)?;
7065                 for (idx, update) in self.context.holding_cell_htlc_updates.iter().enumerate() {
7066                         match update {
7067                                 &HTLCUpdateAwaitingACK::AddHTLC {
7068                                         ref amount_msat, ref cltv_expiry, ref payment_hash, ref source, ref onion_routing_packet,
7069                                         skimmed_fee_msat,
7070                                 } => {
7071                                         0u8.write(writer)?;
7072                                         amount_msat.write(writer)?;
7073                                         cltv_expiry.write(writer)?;
7074                                         payment_hash.write(writer)?;
7075                                         source.write(writer)?;
7076                                         onion_routing_packet.write(writer)?;
7077
7078                                         if let Some(skimmed_fee) = skimmed_fee_msat {
7079                                                 if holding_cell_skimmed_fees.is_empty() {
7080                                                         for _ in 0..idx { holding_cell_skimmed_fees.push(None); }
7081                                                 }
7082                                                 holding_cell_skimmed_fees.push(Some(skimmed_fee));
7083                                         } else if !holding_cell_skimmed_fees.is_empty() { holding_cell_skimmed_fees.push(None); }
7084                                 },
7085                                 &HTLCUpdateAwaitingACK::ClaimHTLC { ref payment_preimage, ref htlc_id } => {
7086                                         1u8.write(writer)?;
7087                                         payment_preimage.write(writer)?;
7088                                         htlc_id.write(writer)?;
7089                                 },
7090                                 &HTLCUpdateAwaitingACK::FailHTLC { ref htlc_id, ref err_packet } => {
7091                                         2u8.write(writer)?;
7092                                         htlc_id.write(writer)?;
7093                                         err_packet.write(writer)?;
7094                                 }
7095                         }
7096                 }
7097
7098                 match self.context.resend_order {
7099                         RAACommitmentOrder::CommitmentFirst => 0u8.write(writer)?,
7100                         RAACommitmentOrder::RevokeAndACKFirst => 1u8.write(writer)?,
7101                 }
7102
7103                 self.context.monitor_pending_channel_ready.write(writer)?;
7104                 self.context.monitor_pending_revoke_and_ack.write(writer)?;
7105                 self.context.monitor_pending_commitment_signed.write(writer)?;
7106
7107                 (self.context.monitor_pending_forwards.len() as u64).write(writer)?;
7108                 for &(ref pending_forward, ref htlc_id) in self.context.monitor_pending_forwards.iter() {
7109                         pending_forward.write(writer)?;
7110                         htlc_id.write(writer)?;
7111                 }
7112
7113                 (self.context.monitor_pending_failures.len() as u64).write(writer)?;
7114                 for &(ref htlc_source, ref payment_hash, ref fail_reason) in self.context.monitor_pending_failures.iter() {
7115                         htlc_source.write(writer)?;
7116                         payment_hash.write(writer)?;
7117                         fail_reason.write(writer)?;
7118                 }
7119
7120                 if self.context.is_outbound() {
7121                         self.context.pending_update_fee.map(|(a, _)| a).write(writer)?;
7122                 } else if let Some((feerate, FeeUpdateState::AwaitingRemoteRevokeToAnnounce)) = self.context.pending_update_fee {
7123                         Some(feerate).write(writer)?;
7124                 } else {
7125                         // As for inbound HTLCs, if the update was only announced and never committed in a
7126                         // commitment_signed, drop it.
7127                         None::<u32>.write(writer)?;
7128                 }
7129                 self.context.holding_cell_update_fee.write(writer)?;
7130
7131                 self.context.next_holder_htlc_id.write(writer)?;
7132                 (self.context.next_counterparty_htlc_id - dropped_inbound_htlcs).write(writer)?;
7133                 self.context.update_time_counter.write(writer)?;
7134                 self.context.feerate_per_kw.write(writer)?;
7135
7136                 // Versions prior to 0.0.100 expected to read the fields of `last_sent_closing_fee` here,
7137                 // however we are supposed to restart shutdown fee negotiation on reconnect (and wipe
7138                 // `last_send_closing_fee` in `remove_uncommitted_htlcs_and_mark_paused`) so we should never
7139                 // consider the stale state on reload.
7140                 0u8.write(writer)?;
7141
7142                 self.context.funding_tx_confirmed_in.write(writer)?;
7143                 self.context.funding_tx_confirmation_height.write(writer)?;
7144                 self.context.short_channel_id.write(writer)?;
7145
7146                 self.context.counterparty_dust_limit_satoshis.write(writer)?;
7147                 self.context.holder_dust_limit_satoshis.write(writer)?;
7148                 self.context.counterparty_max_htlc_value_in_flight_msat.write(writer)?;
7149
7150                 // Note that this field is ignored by 0.0.99+ as the TLV Optional variant is used instead.
7151                 self.context.counterparty_selected_channel_reserve_satoshis.unwrap_or(0).write(writer)?;
7152
7153                 self.context.counterparty_htlc_minimum_msat.write(writer)?;
7154                 self.context.holder_htlc_minimum_msat.write(writer)?;
7155                 self.context.counterparty_max_accepted_htlcs.write(writer)?;
7156
7157                 // Note that this field is ignored by 0.0.99+ as the TLV Optional variant is used instead.
7158                 self.context.minimum_depth.unwrap_or(0).write(writer)?;
7159
7160                 match &self.context.counterparty_forwarding_info {
7161                         Some(info) => {
7162                                 1u8.write(writer)?;
7163                                 info.fee_base_msat.write(writer)?;
7164                                 info.fee_proportional_millionths.write(writer)?;
7165                                 info.cltv_expiry_delta.write(writer)?;
7166                         },
7167                         None => 0u8.write(writer)?
7168                 }
7169
7170                 self.context.channel_transaction_parameters.write(writer)?;
7171                 self.context.funding_transaction.write(writer)?;
7172
7173                 self.context.counterparty_cur_commitment_point.write(writer)?;
7174                 self.context.counterparty_prev_commitment_point.write(writer)?;
7175                 self.context.counterparty_node_id.write(writer)?;
7176
7177                 self.context.counterparty_shutdown_scriptpubkey.write(writer)?;
7178
7179                 self.context.commitment_secrets.write(writer)?;
7180
7181                 self.context.channel_update_status.write(writer)?;
7182
7183                 #[cfg(any(test, fuzzing))]
7184                 (self.context.historical_inbound_htlc_fulfills.len() as u64).write(writer)?;
7185                 #[cfg(any(test, fuzzing))]
7186                 for htlc in self.context.historical_inbound_htlc_fulfills.iter() {
7187                         htlc.write(writer)?;
7188                 }
7189
7190                 // If the channel type is something other than only-static-remote-key, then we need to have
7191                 // older clients fail to deserialize this channel at all. If the type is
7192                 // only-static-remote-key, we simply consider it "default" and don't write the channel type
7193                 // out at all.
7194                 let chan_type = if self.context.channel_type != ChannelTypeFeatures::only_static_remote_key() {
7195                         Some(&self.context.channel_type) } else { None };
7196
7197                 // The same logic applies for `holder_selected_channel_reserve_satoshis` values other than
7198                 // the default, and when `holder_max_htlc_value_in_flight_msat` is configured to be set to
7199                 // a different percentage of the channel value then 10%, which older versions of LDK used
7200                 // to set it to before the percentage was made configurable.
7201                 let serialized_holder_selected_reserve =
7202                         if self.context.holder_selected_channel_reserve_satoshis != get_legacy_default_holder_selected_channel_reserve_satoshis(self.context.channel_value_satoshis)
7203                         { Some(self.context.holder_selected_channel_reserve_satoshis) } else { None };
7204
7205                 let mut old_max_in_flight_percent_config = UserConfig::default().channel_handshake_config;
7206                 old_max_in_flight_percent_config.max_inbound_htlc_value_in_flight_percent_of_channel = MAX_IN_FLIGHT_PERCENT_LEGACY;
7207                 let serialized_holder_htlc_max_in_flight =
7208                         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)
7209                         { Some(self.context.holder_max_htlc_value_in_flight_msat) } else { None };
7210
7211                 let channel_pending_event_emitted = Some(self.context.channel_pending_event_emitted);
7212                 let channel_ready_event_emitted = Some(self.context.channel_ready_event_emitted);
7213
7214                 // `user_id` used to be a single u64 value. In order to remain backwards compatible with
7215                 // versions prior to 0.0.113, the u128 is serialized as two separate u64 values. Therefore,
7216                 // we write the high bytes as an option here.
7217                 let user_id_high_opt = Some((self.context.user_id >> 64) as u64);
7218
7219                 let holder_max_accepted_htlcs = if self.context.holder_max_accepted_htlcs == DEFAULT_MAX_HTLCS { None } else { Some(self.context.holder_max_accepted_htlcs) };
7220
7221                 write_tlv_fields!(writer, {
7222                         (0, self.context.announcement_sigs, option),
7223                         // minimum_depth and counterparty_selected_channel_reserve_satoshis used to have a
7224                         // default value instead of being Option<>al. Thus, to maintain compatibility we write
7225                         // them twice, once with their original default values above, and once as an option
7226                         // here. On the read side, old versions will simply ignore the odd-type entries here,
7227                         // and new versions map the default values to None and allow the TLV entries here to
7228                         // override that.
7229                         (1, self.context.minimum_depth, option),
7230                         (2, chan_type, option),
7231                         (3, self.context.counterparty_selected_channel_reserve_satoshis, option),
7232                         (4, serialized_holder_selected_reserve, option),
7233                         (5, self.context.config, required),
7234                         (6, serialized_holder_htlc_max_in_flight, option),
7235                         (7, self.context.shutdown_scriptpubkey, option),
7236                         (8, self.context.blocked_monitor_updates, optional_vec),
7237                         (9, self.context.target_closing_feerate_sats_per_kw, option),
7238                         (11, self.context.monitor_pending_finalized_fulfills, required_vec),
7239                         (13, self.context.channel_creation_height, required),
7240                         (15, preimages, required_vec),
7241                         (17, self.context.announcement_sigs_state, required),
7242                         (19, self.context.latest_inbound_scid_alias, option),
7243                         (21, self.context.outbound_scid_alias, required),
7244                         (23, channel_ready_event_emitted, option),
7245                         (25, user_id_high_opt, option),
7246                         (27, self.context.channel_keys_id, required),
7247                         (28, holder_max_accepted_htlcs, option),
7248                         (29, self.context.temporary_channel_id, option),
7249                         (31, channel_pending_event_emitted, option),
7250                         (35, pending_outbound_skimmed_fees, optional_vec),
7251                         (37, holding_cell_skimmed_fees, optional_vec),
7252                         (38, self.context.is_batch_funding, option),
7253                 });
7254
7255                 Ok(())
7256         }
7257 }
7258
7259 const MAX_ALLOC_SIZE: usize = 64*1024;
7260 impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c ChannelTypeFeatures)> for Channel<SP>
7261                 where
7262                         ES::Target: EntropySource,
7263                         SP::Target: SignerProvider
7264 {
7265         fn read<R : io::Read>(reader: &mut R, args: (&'a ES, &'b SP, u32, &'c ChannelTypeFeatures)) -> Result<Self, DecodeError> {
7266                 let (entropy_source, signer_provider, serialized_height, our_supported_features) = args;
7267                 let ver = read_ver_prefix!(reader, SERIALIZATION_VERSION);
7268
7269                 // `user_id` used to be a single u64 value. In order to remain backwards compatible with
7270                 // versions prior to 0.0.113, the u128 is serialized as two separate u64 values. We read
7271                 // the low bytes now and the high bytes later.
7272                 let user_id_low: u64 = Readable::read(reader)?;
7273
7274                 let mut config = Some(LegacyChannelConfig::default());
7275                 if ver == 1 {
7276                         // Read the old serialization of the ChannelConfig from version 0.0.98.
7277                         config.as_mut().unwrap().options.forwarding_fee_proportional_millionths = Readable::read(reader)?;
7278                         config.as_mut().unwrap().options.cltv_expiry_delta = Readable::read(reader)?;
7279                         config.as_mut().unwrap().announced_channel = Readable::read(reader)?;
7280                         config.as_mut().unwrap().commit_upfront_shutdown_pubkey = Readable::read(reader)?;
7281                 } else {
7282                         // Read the 8 bytes of backwards-compatibility ChannelConfig data.
7283                         let mut _val: u64 = Readable::read(reader)?;
7284                 }
7285
7286                 let channel_id = Readable::read(reader)?;
7287                 let channel_state = Readable::read(reader)?;
7288                 let channel_value_satoshis = Readable::read(reader)?;
7289
7290                 let latest_monitor_update_id = Readable::read(reader)?;
7291
7292                 let mut keys_data = None;
7293                 if ver <= 2 {
7294                         // Read the serialize signer bytes. We'll choose to deserialize them or not based on whether
7295                         // the `channel_keys_id` TLV is present below.
7296                         let keys_len: u32 = Readable::read(reader)?;
7297                         keys_data = Some(Vec::with_capacity(cmp::min(keys_len as usize, MAX_ALLOC_SIZE)));
7298                         while keys_data.as_ref().unwrap().len() != keys_len as usize {
7299                                 // Read 1KB at a time to avoid accidentally allocating 4GB on corrupted channel keys
7300                                 let mut data = [0; 1024];
7301                                 let read_slice = &mut data[0..cmp::min(1024, keys_len as usize - keys_data.as_ref().unwrap().len())];
7302                                 reader.read_exact(read_slice)?;
7303                                 keys_data.as_mut().unwrap().extend_from_slice(read_slice);
7304                         }
7305                 }
7306
7307                 // Read the old serialization for shutdown_pubkey, preferring the TLV field later if set.
7308                 let mut shutdown_scriptpubkey = match <PublicKey as Readable>::read(reader) {
7309                         Ok(pubkey) => Some(ShutdownScript::new_p2wpkh_from_pubkey(pubkey)),
7310                         Err(_) => None,
7311                 };
7312                 let destination_script = Readable::read(reader)?;
7313
7314                 let cur_holder_commitment_transaction_number = Readable::read(reader)?;
7315                 let cur_counterparty_commitment_transaction_number = Readable::read(reader)?;
7316                 let value_to_self_msat = Readable::read(reader)?;
7317
7318                 let pending_inbound_htlc_count: u64 = Readable::read(reader)?;
7319
7320                 let mut pending_inbound_htlcs = Vec::with_capacity(cmp::min(pending_inbound_htlc_count as usize, DEFAULT_MAX_HTLCS as usize));
7321                 for _ in 0..pending_inbound_htlc_count {
7322                         pending_inbound_htlcs.push(InboundHTLCOutput {
7323                                 htlc_id: Readable::read(reader)?,
7324                                 amount_msat: Readable::read(reader)?,
7325                                 cltv_expiry: Readable::read(reader)?,
7326                                 payment_hash: Readable::read(reader)?,
7327                                 state: match <u8 as Readable>::read(reader)? {
7328                                         1 => InboundHTLCState::AwaitingRemoteRevokeToAnnounce(Readable::read(reader)?),
7329                                         2 => InboundHTLCState::AwaitingAnnouncedRemoteRevoke(Readable::read(reader)?),
7330                                         3 => InboundHTLCState::Committed,
7331                                         4 => InboundHTLCState::LocalRemoved(Readable::read(reader)?),
7332                                         _ => return Err(DecodeError::InvalidValue),
7333                                 },
7334                         });
7335                 }
7336
7337                 let pending_outbound_htlc_count: u64 = Readable::read(reader)?;
7338                 let mut pending_outbound_htlcs = Vec::with_capacity(cmp::min(pending_outbound_htlc_count as usize, DEFAULT_MAX_HTLCS as usize));
7339                 for _ in 0..pending_outbound_htlc_count {
7340                         pending_outbound_htlcs.push(OutboundHTLCOutput {
7341                                 htlc_id: Readable::read(reader)?,
7342                                 amount_msat: Readable::read(reader)?,
7343                                 cltv_expiry: Readable::read(reader)?,
7344                                 payment_hash: Readable::read(reader)?,
7345                                 source: Readable::read(reader)?,
7346                                 state: match <u8 as Readable>::read(reader)? {
7347                                         0 => OutboundHTLCState::LocalAnnounced(Box::new(Readable::read(reader)?)),
7348                                         1 => OutboundHTLCState::Committed,
7349                                         2 => {
7350                                                 let option: Option<HTLCFailReason> = Readable::read(reader)?;
7351                                                 OutboundHTLCState::RemoteRemoved(option.into())
7352                                         },
7353                                         3 => {
7354                                                 let option: Option<HTLCFailReason> = Readable::read(reader)?;
7355                                                 OutboundHTLCState::AwaitingRemoteRevokeToRemove(option.into())
7356                                         },
7357                                         4 => {
7358                                                 let option: Option<HTLCFailReason> = Readable::read(reader)?;
7359                                                 OutboundHTLCState::AwaitingRemovedRemoteRevoke(option.into())
7360                                         },
7361                                         _ => return Err(DecodeError::InvalidValue),
7362                                 },
7363                                 skimmed_fee_msat: None,
7364                         });
7365                 }
7366
7367                 let holding_cell_htlc_update_count: u64 = Readable::read(reader)?;
7368                 let mut holding_cell_htlc_updates = Vec::with_capacity(cmp::min(holding_cell_htlc_update_count as usize, DEFAULT_MAX_HTLCS as usize*2));
7369                 for _ in 0..holding_cell_htlc_update_count {
7370                         holding_cell_htlc_updates.push(match <u8 as Readable>::read(reader)? {
7371                                 0 => HTLCUpdateAwaitingACK::AddHTLC {
7372                                         amount_msat: Readable::read(reader)?,
7373                                         cltv_expiry: Readable::read(reader)?,
7374                                         payment_hash: Readable::read(reader)?,
7375                                         source: Readable::read(reader)?,
7376                                         onion_routing_packet: Readable::read(reader)?,
7377                                         skimmed_fee_msat: None,
7378                                 },
7379                                 1 => HTLCUpdateAwaitingACK::ClaimHTLC {
7380                                         payment_preimage: Readable::read(reader)?,
7381                                         htlc_id: Readable::read(reader)?,
7382                                 },
7383                                 2 => HTLCUpdateAwaitingACK::FailHTLC {
7384                                         htlc_id: Readable::read(reader)?,
7385                                         err_packet: Readable::read(reader)?,
7386                                 },
7387                                 _ => return Err(DecodeError::InvalidValue),
7388                         });
7389                 }
7390
7391                 let resend_order = match <u8 as Readable>::read(reader)? {
7392                         0 => RAACommitmentOrder::CommitmentFirst,
7393                         1 => RAACommitmentOrder::RevokeAndACKFirst,
7394                         _ => return Err(DecodeError::InvalidValue),
7395                 };
7396
7397                 let monitor_pending_channel_ready = Readable::read(reader)?;
7398                 let monitor_pending_revoke_and_ack = Readable::read(reader)?;
7399                 let monitor_pending_commitment_signed = Readable::read(reader)?;
7400
7401                 let monitor_pending_forwards_count: u64 = Readable::read(reader)?;
7402                 let mut monitor_pending_forwards = Vec::with_capacity(cmp::min(monitor_pending_forwards_count as usize, DEFAULT_MAX_HTLCS as usize));
7403                 for _ in 0..monitor_pending_forwards_count {
7404                         monitor_pending_forwards.push((Readable::read(reader)?, Readable::read(reader)?));
7405                 }
7406
7407                 let monitor_pending_failures_count: u64 = Readable::read(reader)?;
7408                 let mut monitor_pending_failures = Vec::with_capacity(cmp::min(monitor_pending_failures_count as usize, DEFAULT_MAX_HTLCS as usize));
7409                 for _ in 0..monitor_pending_failures_count {
7410                         monitor_pending_failures.push((Readable::read(reader)?, Readable::read(reader)?, Readable::read(reader)?));
7411                 }
7412
7413                 let pending_update_fee_value: Option<u32> = Readable::read(reader)?;
7414
7415                 let holding_cell_update_fee = Readable::read(reader)?;
7416
7417                 let next_holder_htlc_id = Readable::read(reader)?;
7418                 let next_counterparty_htlc_id = Readable::read(reader)?;
7419                 let update_time_counter = Readable::read(reader)?;
7420                 let feerate_per_kw = Readable::read(reader)?;
7421
7422                 // Versions prior to 0.0.100 expected to read the fields of `last_sent_closing_fee` here,
7423                 // however we are supposed to restart shutdown fee negotiation on reconnect (and wipe
7424                 // `last_send_closing_fee` in `remove_uncommitted_htlcs_and_mark_paused`) so we should never
7425                 // consider the stale state on reload.
7426                 match <u8 as Readable>::read(reader)? {
7427                         0 => {},
7428                         1 => {
7429                                 let _: u32 = Readable::read(reader)?;
7430                                 let _: u64 = Readable::read(reader)?;
7431                                 let _: Signature = Readable::read(reader)?;
7432                         },
7433                         _ => return Err(DecodeError::InvalidValue),
7434                 }
7435
7436                 let funding_tx_confirmed_in = Readable::read(reader)?;
7437                 let funding_tx_confirmation_height = Readable::read(reader)?;
7438                 let short_channel_id = Readable::read(reader)?;
7439
7440                 let counterparty_dust_limit_satoshis = Readable::read(reader)?;
7441                 let holder_dust_limit_satoshis = Readable::read(reader)?;
7442                 let counterparty_max_htlc_value_in_flight_msat = Readable::read(reader)?;
7443                 let mut counterparty_selected_channel_reserve_satoshis = None;
7444                 if ver == 1 {
7445                         // Read the old serialization from version 0.0.98.
7446                         counterparty_selected_channel_reserve_satoshis = Some(Readable::read(reader)?);
7447                 } else {
7448                         // Read the 8 bytes of backwards-compatibility data.
7449                         let _dummy: u64 = Readable::read(reader)?;
7450                 }
7451                 let counterparty_htlc_minimum_msat = Readable::read(reader)?;
7452                 let holder_htlc_minimum_msat = Readable::read(reader)?;
7453                 let counterparty_max_accepted_htlcs = Readable::read(reader)?;
7454
7455                 let mut minimum_depth = None;
7456                 if ver == 1 {
7457                         // Read the old serialization from version 0.0.98.
7458                         minimum_depth = Some(Readable::read(reader)?);
7459                 } else {
7460                         // Read the 4 bytes of backwards-compatibility data.
7461                         let _dummy: u32 = Readable::read(reader)?;
7462                 }
7463
7464                 let counterparty_forwarding_info = match <u8 as Readable>::read(reader)? {
7465                         0 => None,
7466                         1 => Some(CounterpartyForwardingInfo {
7467                                 fee_base_msat: Readable::read(reader)?,
7468                                 fee_proportional_millionths: Readable::read(reader)?,
7469                                 cltv_expiry_delta: Readable::read(reader)?,
7470                         }),
7471                         _ => return Err(DecodeError::InvalidValue),
7472                 };
7473
7474                 let mut channel_parameters: ChannelTransactionParameters = Readable::read(reader)?;
7475                 let funding_transaction: Option<Transaction> = Readable::read(reader)?;
7476
7477                 let counterparty_cur_commitment_point = Readable::read(reader)?;
7478
7479                 let counterparty_prev_commitment_point = Readable::read(reader)?;
7480                 let counterparty_node_id = Readable::read(reader)?;
7481
7482                 let counterparty_shutdown_scriptpubkey = Readable::read(reader)?;
7483                 let commitment_secrets = Readable::read(reader)?;
7484
7485                 let channel_update_status = Readable::read(reader)?;
7486
7487                 #[cfg(any(test, fuzzing))]
7488                 let mut historical_inbound_htlc_fulfills = HashSet::new();
7489                 #[cfg(any(test, fuzzing))]
7490                 {
7491                         let htlc_fulfills_len: u64 = Readable::read(reader)?;
7492                         for _ in 0..htlc_fulfills_len {
7493                                 assert!(historical_inbound_htlc_fulfills.insert(Readable::read(reader)?));
7494                         }
7495                 }
7496
7497                 let pending_update_fee = if let Some(feerate) = pending_update_fee_value {
7498                         Some((feerate, if channel_parameters.is_outbound_from_holder {
7499                                 FeeUpdateState::Outbound
7500                         } else {
7501                                 FeeUpdateState::AwaitingRemoteRevokeToAnnounce
7502                         }))
7503                 } else {
7504                         None
7505                 };
7506
7507                 let mut announcement_sigs = None;
7508                 let mut target_closing_feerate_sats_per_kw = None;
7509                 let mut monitor_pending_finalized_fulfills = Some(Vec::new());
7510                 let mut holder_selected_channel_reserve_satoshis = Some(get_legacy_default_holder_selected_channel_reserve_satoshis(channel_value_satoshis));
7511                 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));
7512                 // Prior to supporting channel type negotiation, all of our channels were static_remotekey
7513                 // only, so we default to that if none was written.
7514                 let mut channel_type = Some(ChannelTypeFeatures::only_static_remote_key());
7515                 let mut channel_creation_height = Some(serialized_height);
7516                 let mut preimages_opt: Option<Vec<Option<PaymentPreimage>>> = None;
7517
7518                 // If we read an old Channel, for simplicity we just treat it as "we never sent an
7519                 // AnnouncementSignatures" which implies we'll re-send it on reconnect, but that's fine.
7520                 let mut announcement_sigs_state = Some(AnnouncementSigsState::NotSent);
7521                 let mut latest_inbound_scid_alias = None;
7522                 let mut outbound_scid_alias = None;
7523                 let mut channel_pending_event_emitted = None;
7524                 let mut channel_ready_event_emitted = None;
7525
7526                 let mut user_id_high_opt: Option<u64> = None;
7527                 let mut channel_keys_id: Option<[u8; 32]> = None;
7528                 let mut temporary_channel_id: Option<ChannelId> = None;
7529                 let mut holder_max_accepted_htlcs: Option<u16> = None;
7530
7531                 let mut blocked_monitor_updates = Some(Vec::new());
7532
7533                 let mut pending_outbound_skimmed_fees_opt: Option<Vec<Option<u64>>> = None;
7534                 let mut holding_cell_skimmed_fees_opt: Option<Vec<Option<u64>>> = None;
7535
7536                 let mut is_batch_funding: Option<()> = None;
7537
7538                 read_tlv_fields!(reader, {
7539                         (0, announcement_sigs, option),
7540                         (1, minimum_depth, option),
7541                         (2, channel_type, option),
7542                         (3, counterparty_selected_channel_reserve_satoshis, option),
7543                         (4, holder_selected_channel_reserve_satoshis, option),
7544                         (5, config, option), // Note that if none is provided we will *not* overwrite the existing one.
7545                         (6, holder_max_htlc_value_in_flight_msat, option),
7546                         (7, shutdown_scriptpubkey, option),
7547                         (8, blocked_monitor_updates, optional_vec),
7548                         (9, target_closing_feerate_sats_per_kw, option),
7549                         (11, monitor_pending_finalized_fulfills, optional_vec),
7550                         (13, channel_creation_height, option),
7551                         (15, preimages_opt, optional_vec),
7552                         (17, announcement_sigs_state, option),
7553                         (19, latest_inbound_scid_alias, option),
7554                         (21, outbound_scid_alias, option),
7555                         (23, channel_ready_event_emitted, option),
7556                         (25, user_id_high_opt, option),
7557                         (27, channel_keys_id, option),
7558                         (28, holder_max_accepted_htlcs, option),
7559                         (29, temporary_channel_id, option),
7560                         (31, channel_pending_event_emitted, option),
7561                         (35, pending_outbound_skimmed_fees_opt, optional_vec),
7562                         (37, holding_cell_skimmed_fees_opt, optional_vec),
7563                         (38, is_batch_funding, option),
7564                 });
7565
7566                 let (channel_keys_id, holder_signer) = if let Some(channel_keys_id) = channel_keys_id {
7567                         let mut holder_signer = signer_provider.derive_channel_signer(channel_value_satoshis, channel_keys_id);
7568                         // If we've gotten to the funding stage of the channel, populate the signer with its
7569                         // required channel parameters.
7570                         let non_shutdown_state = channel_state & (!MULTI_STATE_FLAGS);
7571                         if non_shutdown_state & !STATE_FLAGS >= (ChannelState::FundingCreated as u32) {
7572                                 holder_signer.provide_channel_parameters(&channel_parameters);
7573                         }
7574                         (channel_keys_id, holder_signer)
7575                 } else {
7576                         // `keys_data` can be `None` if we had corrupted data.
7577                         let keys_data = keys_data.ok_or(DecodeError::InvalidValue)?;
7578                         let holder_signer = signer_provider.read_chan_signer(&keys_data)?;
7579                         (holder_signer.channel_keys_id(), holder_signer)
7580                 };
7581
7582                 if let Some(preimages) = preimages_opt {
7583                         let mut iter = preimages.into_iter();
7584                         for htlc in pending_outbound_htlcs.iter_mut() {
7585                                 match &htlc.state {
7586                                         OutboundHTLCState::AwaitingRemoteRevokeToRemove(OutboundHTLCOutcome::Success(None)) => {
7587                                                 htlc.state = OutboundHTLCState::AwaitingRemoteRevokeToRemove(OutboundHTLCOutcome::Success(iter.next().ok_or(DecodeError::InvalidValue)?));
7588                                         }
7589                                         OutboundHTLCState::AwaitingRemovedRemoteRevoke(OutboundHTLCOutcome::Success(None)) => {
7590                                                 htlc.state = OutboundHTLCState::AwaitingRemovedRemoteRevoke(OutboundHTLCOutcome::Success(iter.next().ok_or(DecodeError::InvalidValue)?));
7591                                         }
7592                                         _ => {}
7593                                 }
7594                         }
7595                         // We expect all preimages to be consumed above
7596                         if iter.next().is_some() {
7597                                 return Err(DecodeError::InvalidValue);
7598                         }
7599                 }
7600
7601                 let chan_features = channel_type.as_ref().unwrap();
7602                 if !chan_features.is_subset(our_supported_features) {
7603                         // If the channel was written by a new version and negotiated with features we don't
7604                         // understand yet, refuse to read it.
7605                         return Err(DecodeError::UnknownRequiredFeature);
7606                 }
7607
7608                 // ChannelTransactionParameters may have had an empty features set upon deserialization.
7609                 // To account for that, we're proactively setting/overriding the field here.
7610                 channel_parameters.channel_type_features = chan_features.clone();
7611
7612                 let mut secp_ctx = Secp256k1::new();
7613                 secp_ctx.seeded_randomize(&entropy_source.get_secure_random_bytes());
7614
7615                 // `user_id` used to be a single u64 value. In order to remain backwards
7616                 // compatible with versions prior to 0.0.113, the u128 is serialized as two
7617                 // separate u64 values.
7618                 let user_id = user_id_low as u128 + ((user_id_high_opt.unwrap_or(0) as u128) << 64);
7619
7620                 let holder_max_accepted_htlcs = holder_max_accepted_htlcs.unwrap_or(DEFAULT_MAX_HTLCS);
7621
7622                 if let Some(skimmed_fees) = pending_outbound_skimmed_fees_opt {
7623                         let mut iter = skimmed_fees.into_iter();
7624                         for htlc in pending_outbound_htlcs.iter_mut() {
7625                                 htlc.skimmed_fee_msat = iter.next().ok_or(DecodeError::InvalidValue)?;
7626                         }
7627                         // We expect all skimmed fees to be consumed above
7628                         if iter.next().is_some() { return Err(DecodeError::InvalidValue) }
7629                 }
7630                 if let Some(skimmed_fees) = holding_cell_skimmed_fees_opt {
7631                         let mut iter = skimmed_fees.into_iter();
7632                         for htlc in holding_cell_htlc_updates.iter_mut() {
7633                                 if let HTLCUpdateAwaitingACK::AddHTLC { ref mut skimmed_fee_msat, .. } = htlc {
7634                                         *skimmed_fee_msat = iter.next().ok_or(DecodeError::InvalidValue)?;
7635                                 }
7636                         }
7637                         // We expect all skimmed fees to be consumed above
7638                         if iter.next().is_some() { return Err(DecodeError::InvalidValue) }
7639                 }
7640
7641                 Ok(Channel {
7642                         context: ChannelContext {
7643                                 user_id,
7644
7645                                 config: config.unwrap(),
7646
7647                                 prev_config: None,
7648
7649                                 // Note that we don't care about serializing handshake limits as we only ever serialize
7650                                 // channel data after the handshake has completed.
7651                                 inbound_handshake_limits_override: None,
7652
7653                                 channel_id,
7654                                 temporary_channel_id,
7655                                 channel_state,
7656                                 announcement_sigs_state: announcement_sigs_state.unwrap(),
7657                                 secp_ctx,
7658                                 channel_value_satoshis,
7659
7660                                 latest_monitor_update_id,
7661
7662                                 holder_signer: ChannelSignerType::Ecdsa(holder_signer),
7663                                 shutdown_scriptpubkey,
7664                                 destination_script,
7665
7666                                 cur_holder_commitment_transaction_number,
7667                                 cur_counterparty_commitment_transaction_number,
7668                                 value_to_self_msat,
7669
7670                                 holder_max_accepted_htlcs,
7671                                 pending_inbound_htlcs,
7672                                 pending_outbound_htlcs,
7673                                 holding_cell_htlc_updates,
7674
7675                                 resend_order,
7676
7677                                 monitor_pending_channel_ready,
7678                                 monitor_pending_revoke_and_ack,
7679                                 monitor_pending_commitment_signed,
7680                                 monitor_pending_forwards,
7681                                 monitor_pending_failures,
7682                                 monitor_pending_finalized_fulfills: monitor_pending_finalized_fulfills.unwrap(),
7683
7684                                 signer_pending_commitment_update: false,
7685                                 signer_pending_funding: false,
7686
7687                                 pending_update_fee,
7688                                 holding_cell_update_fee,
7689                                 next_holder_htlc_id,
7690                                 next_counterparty_htlc_id,
7691                                 update_time_counter,
7692                                 feerate_per_kw,
7693
7694                                 #[cfg(debug_assertions)]
7695                                 holder_max_commitment_tx_output: Mutex::new((0, 0)),
7696                                 #[cfg(debug_assertions)]
7697                                 counterparty_max_commitment_tx_output: Mutex::new((0, 0)),
7698
7699                                 last_sent_closing_fee: None,
7700                                 pending_counterparty_closing_signed: None,
7701                                 closing_fee_limits: None,
7702                                 target_closing_feerate_sats_per_kw,
7703
7704                                 funding_tx_confirmed_in,
7705                                 funding_tx_confirmation_height,
7706                                 short_channel_id,
7707                                 channel_creation_height: channel_creation_height.unwrap(),
7708
7709                                 counterparty_dust_limit_satoshis,
7710                                 holder_dust_limit_satoshis,
7711                                 counterparty_max_htlc_value_in_flight_msat,
7712                                 holder_max_htlc_value_in_flight_msat: holder_max_htlc_value_in_flight_msat.unwrap(),
7713                                 counterparty_selected_channel_reserve_satoshis,
7714                                 holder_selected_channel_reserve_satoshis: holder_selected_channel_reserve_satoshis.unwrap(),
7715                                 counterparty_htlc_minimum_msat,
7716                                 holder_htlc_minimum_msat,
7717                                 counterparty_max_accepted_htlcs,
7718                                 minimum_depth,
7719
7720                                 counterparty_forwarding_info,
7721
7722                                 channel_transaction_parameters: channel_parameters,
7723                                 funding_transaction,
7724                                 is_batch_funding,
7725
7726                                 counterparty_cur_commitment_point,
7727                                 counterparty_prev_commitment_point,
7728                                 counterparty_node_id,
7729
7730                                 counterparty_shutdown_scriptpubkey,
7731
7732                                 commitment_secrets,
7733
7734                                 channel_update_status,
7735                                 closing_signed_in_flight: false,
7736
7737                                 announcement_sigs,
7738
7739                                 #[cfg(any(test, fuzzing))]
7740                                 next_local_commitment_tx_fee_info_cached: Mutex::new(None),
7741                                 #[cfg(any(test, fuzzing))]
7742                                 next_remote_commitment_tx_fee_info_cached: Mutex::new(None),
7743
7744                                 workaround_lnd_bug_4006: None,
7745                                 sent_message_awaiting_response: None,
7746
7747                                 latest_inbound_scid_alias,
7748                                 // Later in the ChannelManager deserialization phase we scan for channels and assign scid aliases if its missing
7749                                 outbound_scid_alias: outbound_scid_alias.unwrap_or(0),
7750
7751                                 channel_pending_event_emitted: channel_pending_event_emitted.unwrap_or(true),
7752                                 channel_ready_event_emitted: channel_ready_event_emitted.unwrap_or(true),
7753
7754                                 #[cfg(any(test, fuzzing))]
7755                                 historical_inbound_htlc_fulfills,
7756
7757                                 channel_type: channel_type.unwrap(),
7758                                 channel_keys_id,
7759
7760                                 blocked_monitor_updates: blocked_monitor_updates.unwrap(),
7761                         }
7762                 })
7763         }
7764 }
7765
7766 #[cfg(test)]
7767 mod tests {
7768         use std::cmp;
7769         use bitcoin::blockdata::constants::ChainHash;
7770         use bitcoin::blockdata::script::{Script, Builder};
7771         use bitcoin::blockdata::transaction::{Transaction, TxOut};
7772         use bitcoin::blockdata::opcodes;
7773         use bitcoin::network::constants::Network;
7774         use hex;
7775         use crate::ln::PaymentHash;
7776         use crate::ln::channelmanager::{self, HTLCSource, PaymentId};
7777         use crate::ln::channel::InitFeatures;
7778         use crate::ln::channel::{Channel, ChannelState, InboundHTLCOutput, OutboundV1Channel, InboundV1Channel, OutboundHTLCOutput, InboundHTLCState, OutboundHTLCState, HTLCCandidate, HTLCInitiator, commit_tx_fee_msat};
7779         use crate::ln::channel::{MAX_FUNDING_SATOSHIS_NO_WUMBO, TOTAL_BITCOIN_SUPPLY_SATOSHIS, MIN_THEIR_CHAN_RESERVE_SATOSHIS};
7780         use crate::ln::features::ChannelTypeFeatures;
7781         use crate::ln::msgs::{ChannelUpdate, DecodeError, UnsignedChannelUpdate, MAX_VALUE_MSAT};
7782         use crate::ln::script::ShutdownScript;
7783         use crate::ln::chan_utils;
7784         use crate::ln::chan_utils::{htlc_success_tx_weight, htlc_timeout_tx_weight};
7785         use crate::chain::BestBlock;
7786         use crate::chain::chaininterface::{FeeEstimator, LowerBoundedFeeEstimator, ConfirmationTarget};
7787         use crate::sign::{ChannelSigner, InMemorySigner, EntropySource, SignerProvider};
7788         use crate::chain::transaction::OutPoint;
7789         use crate::routing::router::Path;
7790         use crate::util::config::UserConfig;
7791         use crate::util::errors::APIError;
7792         use crate::util::test_utils;
7793         use crate::util::test_utils::{OnGetShutdownScriptpubkey, TestKeysInterface};
7794         use bitcoin::secp256k1::{Secp256k1, ecdsa::Signature};
7795         use bitcoin::secp256k1::ffi::Signature as FFISignature;
7796         use bitcoin::secp256k1::{SecretKey,PublicKey};
7797         use bitcoin::hashes::sha256::Hash as Sha256;
7798         use bitcoin::hashes::Hash;
7799         use bitcoin::hash_types::WPubkeyHash;
7800         use bitcoin::PackedLockTime;
7801         use bitcoin::util::address::WitnessVersion;
7802         use crate::prelude::*;
7803
7804         struct TestFeeEstimator {
7805                 fee_est: u32
7806         }
7807         impl FeeEstimator for TestFeeEstimator {
7808                 fn get_est_sat_per_1000_weight(&self, _: ConfirmationTarget) -> u32 {
7809                         self.fee_est
7810                 }
7811         }
7812
7813         #[test]
7814         fn test_max_funding_satoshis_no_wumbo() {
7815                 assert_eq!(TOTAL_BITCOIN_SUPPLY_SATOSHIS, 21_000_000 * 100_000_000);
7816                 assert!(MAX_FUNDING_SATOSHIS_NO_WUMBO <= TOTAL_BITCOIN_SUPPLY_SATOSHIS,
7817                         "MAX_FUNDING_SATOSHIS_NO_WUMBO is greater than all satoshis in existence");
7818         }
7819
7820         #[test]
7821         fn test_no_fee_check_overflow() {
7822                 // Previously, calling `check_remote_fee` with a fee of 0xffffffff would overflow in
7823                 // arithmetic, causing a panic with debug assertions enabled.
7824                 let fee_est = TestFeeEstimator { fee_est: 42 };
7825                 let bounded_fee_estimator = LowerBoundedFeeEstimator::new(&fee_est);
7826                 assert!(Channel::<&TestKeysInterface>::check_remote_fee(
7827                         &ChannelTypeFeatures::only_static_remote_key(), &bounded_fee_estimator,
7828                         u32::max_value(), None, &&test_utils::TestLogger::new()).is_err());
7829         }
7830
7831         struct Keys {
7832                 signer: InMemorySigner,
7833         }
7834
7835         impl EntropySource for Keys {
7836                 fn get_secure_random_bytes(&self) -> [u8; 32] { [0; 32] }
7837         }
7838
7839         impl SignerProvider for Keys {
7840                 type Signer = InMemorySigner;
7841
7842                 fn generate_channel_keys_id(&self, _inbound: bool, _channel_value_satoshis: u64, _user_channel_id: u128) -> [u8; 32] {
7843                         self.signer.channel_keys_id()
7844                 }
7845
7846                 fn derive_channel_signer(&self, _channel_value_satoshis: u64, _channel_keys_id: [u8; 32]) -> Self::Signer {
7847                         self.signer.clone()
7848                 }
7849
7850                 fn read_chan_signer(&self, _data: &[u8]) -> Result<Self::Signer, DecodeError> { panic!(); }
7851
7852                 fn get_destination_script(&self) -> Result<Script, ()> {
7853                         let secp_ctx = Secp256k1::signing_only();
7854                         let channel_monitor_claim_key = SecretKey::from_slice(&hex::decode("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap()[..]).unwrap();
7855                         let channel_monitor_claim_key_hash = WPubkeyHash::hash(&PublicKey::from_secret_key(&secp_ctx, &channel_monitor_claim_key).serialize());
7856                         Ok(Builder::new().push_opcode(opcodes::all::OP_PUSHBYTES_0).push_slice(&channel_monitor_claim_key_hash[..]).into_script())
7857                 }
7858
7859                 fn get_shutdown_scriptpubkey(&self) -> Result<ShutdownScript, ()> {
7860                         let secp_ctx = Secp256k1::signing_only();
7861                         let channel_close_key = SecretKey::from_slice(&hex::decode("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap()[..]).unwrap();
7862                         Ok(ShutdownScript::new_p2wpkh_from_pubkey(PublicKey::from_secret_key(&secp_ctx, &channel_close_key)))
7863                 }
7864         }
7865
7866         #[cfg(all(feature = "_test_vectors", not(feature = "grind_signatures")))]
7867         fn public_from_secret_hex(secp_ctx: &Secp256k1<bitcoin::secp256k1::All>, hex: &str) -> PublicKey {
7868                 PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&hex::decode(hex).unwrap()[..]).unwrap())
7869         }
7870
7871         #[test]
7872         fn upfront_shutdown_script_incompatibility() {
7873                 let features = channelmanager::provided_init_features(&UserConfig::default()).clear_shutdown_anysegwit();
7874                 let non_v0_segwit_shutdown_script =
7875                         ShutdownScript::new_witness_program(WitnessVersion::V16, &[0, 40]).unwrap();
7876
7877                 let seed = [42; 32];
7878                 let network = Network::Testnet;
7879                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
7880                 keys_provider.expect(OnGetShutdownScriptpubkey {
7881                         returns: non_v0_segwit_shutdown_script.clone(),
7882                 });
7883
7884                 let secp_ctx = Secp256k1::new();
7885                 let node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
7886                 let config = UserConfig::default();
7887                 match OutboundV1Channel::<&TestKeysInterface>::new(&LowerBoundedFeeEstimator::new(&TestFeeEstimator { fee_est: 253 }), &&keys_provider, &&keys_provider, node_id, &features, 10000000, 100000, 42, &config, 0, 42) {
7888                         Err(APIError::IncompatibleShutdownScript { script }) => {
7889                                 assert_eq!(script.into_inner(), non_v0_segwit_shutdown_script.into_inner());
7890                         },
7891                         Err(e) => panic!("Unexpected error: {:?}", e),
7892                         Ok(_) => panic!("Expected error"),
7893                 }
7894         }
7895
7896         // Check that, during channel creation, we use the same feerate in the open channel message
7897         // as we do in the Channel object creation itself.
7898         #[test]
7899         fn test_open_channel_msg_fee() {
7900                 let original_fee = 253;
7901                 let mut fee_est = TestFeeEstimator{fee_est: original_fee };
7902                 let bounded_fee_estimator = LowerBoundedFeeEstimator::new(&fee_est);
7903                 let secp_ctx = Secp256k1::new();
7904                 let seed = [42; 32];
7905                 let network = Network::Testnet;
7906                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
7907
7908                 let node_a_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
7909                 let config = UserConfig::default();
7910                 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();
7911
7912                 // Now change the fee so we can check that the fee in the open_channel message is the
7913                 // same as the old fee.
7914                 fee_est.fee_est = 500;
7915                 let open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network));
7916                 assert_eq!(open_channel_msg.feerate_per_kw, original_fee);
7917         }
7918
7919         #[test]
7920         fn test_holder_vs_counterparty_dust_limit() {
7921                 // Test that when calculating the local and remote commitment transaction fees, the correct
7922                 // dust limits are used.
7923                 let feeest = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
7924                 let secp_ctx = Secp256k1::new();
7925                 let seed = [42; 32];
7926                 let network = Network::Testnet;
7927                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
7928                 let logger = test_utils::TestLogger::new();
7929                 let best_block = BestBlock::from_network(network);
7930
7931                 // Go through the flow of opening a channel between two nodes, making sure
7932                 // they have different dust limits.
7933
7934                 // Create Node A's channel pointing to Node B's pubkey
7935                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
7936                 let config = UserConfig::default();
7937                 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();
7938
7939                 // Create Node B's channel by receiving Node A's open_channel message
7940                 // Make sure A's dust limit is as we expect.
7941                 let open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network));
7942                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
7943                 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();
7944
7945                 // Node B --> Node A: accept channel, explicitly setting B's dust limit.
7946                 let mut accept_channel_msg = node_b_chan.accept_inbound_channel();
7947                 accept_channel_msg.dust_limit_satoshis = 546;
7948                 node_a_chan.accept_channel(&accept_channel_msg, &config.channel_handshake_limits, &channelmanager::provided_init_features(&config)).unwrap();
7949                 node_a_chan.context.holder_dust_limit_satoshis = 1560;
7950
7951                 // Node A --> Node B: funding created
7952                 let output_script = node_a_chan.context.get_funding_redeemscript();
7953                 let tx = Transaction { version: 1, lock_time: PackedLockTime::ZERO, input: Vec::new(), output: vec![TxOut {
7954                         value: 10000000, script_pubkey: output_script.clone(),
7955                 }]};
7956                 let funding_outpoint = OutPoint{ txid: tx.txid(), index: 0 };
7957                 let (mut node_a_chan, funding_created_msg) = node_a_chan.get_funding_created(tx.clone(), funding_outpoint, false, &&logger).map_err(|_| ()).unwrap();
7958                 let (_, funding_signed_msg, _) = node_b_chan.funding_created(&funding_created_msg.unwrap(), best_block, &&keys_provider, &&logger).map_err(|_| ()).unwrap();
7959
7960                 // Node B --> Node A: funding signed
7961                 let _ = node_a_chan.funding_signed(&funding_signed_msg.unwrap(), best_block, &&keys_provider, &&logger).unwrap();
7962
7963                 // Put some inbound and outbound HTLCs in A's channel.
7964                 let htlc_amount_msat = 11_092_000; // put an amount below A's effective dust limit but above B's.
7965                 node_a_chan.context.pending_inbound_htlcs.push(InboundHTLCOutput {
7966                         htlc_id: 0,
7967                         amount_msat: htlc_amount_msat,
7968                         payment_hash: PaymentHash(Sha256::hash(&[42; 32]).into_inner()),
7969                         cltv_expiry: 300000000,
7970                         state: InboundHTLCState::Committed,
7971                 });
7972
7973                 node_a_chan.context.pending_outbound_htlcs.push(OutboundHTLCOutput {
7974                         htlc_id: 1,
7975                         amount_msat: htlc_amount_msat, // put an amount below A's dust amount but above B's.
7976                         payment_hash: PaymentHash(Sha256::hash(&[43; 32]).into_inner()),
7977                         cltv_expiry: 200000000,
7978                         state: OutboundHTLCState::Committed,
7979                         source: HTLCSource::OutboundRoute {
7980                                 path: Path { hops: Vec::new(), blinded_tail: None },
7981                                 session_priv: SecretKey::from_slice(&hex::decode("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap()[..]).unwrap(),
7982                                 first_hop_htlc_msat: 548,
7983                                 payment_id: PaymentId([42; 32]),
7984                         },
7985                         skimmed_fee_msat: None,
7986                 });
7987
7988                 // Make sure when Node A calculates their local commitment transaction, none of the HTLCs pass
7989                 // the dust limit check.
7990                 let htlc_candidate = HTLCCandidate::new(htlc_amount_msat, HTLCInitiator::LocalOffered);
7991                 let local_commit_tx_fee = node_a_chan.context.next_local_commit_tx_fee_msat(htlc_candidate, None);
7992                 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());
7993                 assert_eq!(local_commit_tx_fee, local_commit_fee_0_htlcs);
7994
7995                 // Finally, make sure that when Node A calculates the remote's commitment transaction fees, all
7996                 // of the HTLCs are seen to be above the dust limit.
7997                 node_a_chan.context.channel_transaction_parameters.is_outbound_from_holder = false;
7998                 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());
7999                 let htlc_candidate = HTLCCandidate::new(htlc_amount_msat, HTLCInitiator::LocalOffered);
8000                 let remote_commit_tx_fee = node_a_chan.context.next_remote_commit_tx_fee_msat(htlc_candidate, None);
8001                 assert_eq!(remote_commit_tx_fee, remote_commit_fee_3_htlcs);
8002         }
8003
8004         #[test]
8005         fn test_timeout_vs_success_htlc_dust_limit() {
8006                 // Make sure that when `next_remote_commit_tx_fee_msat` and `next_local_commit_tx_fee_msat`
8007                 // calculate the real dust limits for HTLCs (i.e. the dust limit given by the counterparty
8008                 // *plus* the fees paid for the HTLC) they don't swap `HTLC_SUCCESS_TX_WEIGHT` for
8009                 // `HTLC_TIMEOUT_TX_WEIGHT`, and vice versa.
8010                 let fee_est = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 253 });
8011                 let secp_ctx = Secp256k1::new();
8012                 let seed = [42; 32];
8013                 let network = Network::Testnet;
8014                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
8015
8016                 let node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
8017                 let config = UserConfig::default();
8018                 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();
8019
8020                 let commitment_tx_fee_0_htlcs = commit_tx_fee_msat(chan.context.feerate_per_kw, 0, chan.context.get_channel_type());
8021                 let commitment_tx_fee_1_htlc = commit_tx_fee_msat(chan.context.feerate_per_kw, 1, chan.context.get_channel_type());
8022
8023                 // If HTLC_SUCCESS_TX_WEIGHT and HTLC_TIMEOUT_TX_WEIGHT were swapped: then this HTLC would be
8024                 // counted as dust when it shouldn't be.
8025                 let htlc_amt_above_timeout = ((253 * htlc_timeout_tx_weight(chan.context.get_channel_type()) / 1000) + chan.context.holder_dust_limit_satoshis + 1) * 1000;
8026                 let htlc_candidate = HTLCCandidate::new(htlc_amt_above_timeout, HTLCInitiator::LocalOffered);
8027                 let commitment_tx_fee = chan.context.next_local_commit_tx_fee_msat(htlc_candidate, None);
8028                 assert_eq!(commitment_tx_fee, commitment_tx_fee_1_htlc);
8029
8030                 // If swapped: this HTLC would be counted as non-dust when it shouldn't be.
8031                 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;
8032                 let htlc_candidate = HTLCCandidate::new(dust_htlc_amt_below_success, HTLCInitiator::RemoteOffered);
8033                 let commitment_tx_fee = chan.context.next_local_commit_tx_fee_msat(htlc_candidate, None);
8034                 assert_eq!(commitment_tx_fee, commitment_tx_fee_0_htlcs);
8035
8036                 chan.context.channel_transaction_parameters.is_outbound_from_holder = false;
8037
8038                 // If swapped: this HTLC would be counted as non-dust when it shouldn't be.
8039                 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;
8040                 let htlc_candidate = HTLCCandidate::new(dust_htlc_amt_above_timeout, HTLCInitiator::LocalOffered);
8041                 let commitment_tx_fee = chan.context.next_remote_commit_tx_fee_msat(htlc_candidate, None);
8042                 assert_eq!(commitment_tx_fee, commitment_tx_fee_0_htlcs);
8043
8044                 // If swapped: this HTLC would be counted as dust when it shouldn't be.
8045                 let htlc_amt_below_success = ((253 * htlc_success_tx_weight(chan.context.get_channel_type()) / 1000) + chan.context.counterparty_dust_limit_satoshis - 1) * 1000;
8046                 let htlc_candidate = HTLCCandidate::new(htlc_amt_below_success, HTLCInitiator::RemoteOffered);
8047                 let commitment_tx_fee = chan.context.next_remote_commit_tx_fee_msat(htlc_candidate, None);
8048                 assert_eq!(commitment_tx_fee, commitment_tx_fee_1_htlc);
8049         }
8050
8051         #[test]
8052         fn channel_reestablish_no_updates() {
8053                 let feeest = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
8054                 let logger = test_utils::TestLogger::new();
8055                 let secp_ctx = Secp256k1::new();
8056                 let seed = [42; 32];
8057                 let network = Network::Testnet;
8058                 let best_block = BestBlock::from_network(network);
8059                 let chain_hash = ChainHash::using_genesis_block(network);
8060                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
8061
8062                 // Go through the flow of opening a channel between two nodes.
8063
8064                 // Create Node A's channel pointing to Node B's pubkey
8065                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
8066                 let config = UserConfig::default();
8067                 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();
8068
8069                 // Create Node B's channel by receiving Node A's open_channel message
8070                 let open_channel_msg = node_a_chan.get_open_channel(chain_hash);
8071                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
8072                 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();
8073
8074                 // Node B --> Node A: accept channel
8075                 let accept_channel_msg = node_b_chan.accept_inbound_channel();
8076                 node_a_chan.accept_channel(&accept_channel_msg, &config.channel_handshake_limits, &channelmanager::provided_init_features(&config)).unwrap();
8077
8078                 // Node A --> Node B: funding created
8079                 let output_script = node_a_chan.context.get_funding_redeemscript();
8080                 let tx = Transaction { version: 1, lock_time: PackedLockTime::ZERO, input: Vec::new(), output: vec![TxOut {
8081                         value: 10000000, script_pubkey: output_script.clone(),
8082                 }]};
8083                 let funding_outpoint = OutPoint{ txid: tx.txid(), index: 0 };
8084                 let (mut node_a_chan, funding_created_msg) = node_a_chan.get_funding_created(tx.clone(), funding_outpoint, false, &&logger).map_err(|_| ()).unwrap();
8085                 let (mut node_b_chan, funding_signed_msg, _) = node_b_chan.funding_created(&funding_created_msg.unwrap(), best_block, &&keys_provider, &&logger).map_err(|_| ()).unwrap();
8086
8087                 // Node B --> Node A: funding signed
8088                 let _ = node_a_chan.funding_signed(&funding_signed_msg.unwrap(), best_block, &&keys_provider, &&logger).unwrap();
8089
8090                 // Now disconnect the two nodes and check that the commitment point in
8091                 // Node B's channel_reestablish message is sane.
8092                 assert!(node_b_chan.remove_uncommitted_htlcs_and_mark_paused(&&logger).is_ok());
8093                 let msg = node_b_chan.get_channel_reestablish(&&logger);
8094                 assert_eq!(msg.next_local_commitment_number, 1); // now called next_commitment_number
8095                 assert_eq!(msg.next_remote_commitment_number, 0); // now called next_revocation_number
8096                 assert_eq!(msg.your_last_per_commitment_secret, [0; 32]);
8097
8098                 // Check that the commitment point in Node A's channel_reestablish message
8099                 // is sane.
8100                 assert!(node_a_chan.remove_uncommitted_htlcs_and_mark_paused(&&logger).is_ok());
8101                 let msg = node_a_chan.get_channel_reestablish(&&logger);
8102                 assert_eq!(msg.next_local_commitment_number, 1); // now called next_commitment_number
8103                 assert_eq!(msg.next_remote_commitment_number, 0); // now called next_revocation_number
8104                 assert_eq!(msg.your_last_per_commitment_secret, [0; 32]);
8105         }
8106
8107         #[test]
8108         fn test_configured_holder_max_htlc_value_in_flight() {
8109                 let feeest = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
8110                 let logger = test_utils::TestLogger::new();
8111                 let secp_ctx = Secp256k1::new();
8112                 let seed = [42; 32];
8113                 let network = Network::Testnet;
8114                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
8115                 let outbound_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
8116                 let inbound_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
8117
8118                 let mut config_2_percent = UserConfig::default();
8119                 config_2_percent.channel_handshake_config.max_inbound_htlc_value_in_flight_percent_of_channel = 2;
8120                 let mut config_99_percent = UserConfig::default();
8121                 config_99_percent.channel_handshake_config.max_inbound_htlc_value_in_flight_percent_of_channel = 99;
8122                 let mut config_0_percent = UserConfig::default();
8123                 config_0_percent.channel_handshake_config.max_inbound_htlc_value_in_flight_percent_of_channel = 0;
8124                 let mut config_101_percent = UserConfig::default();
8125                 config_101_percent.channel_handshake_config.max_inbound_htlc_value_in_flight_percent_of_channel = 101;
8126
8127                 // Test that `OutboundV1Channel::new` creates a channel with the correct value for
8128                 // `holder_max_htlc_value_in_flight_msat`, when configured with a valid percentage value,
8129                 // which is set to the lower bound + 1 (2%) of the `channel_value`.
8130                 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();
8131                 let chan_1_value_msat = chan_1.context.channel_value_satoshis * 1000;
8132                 assert_eq!(chan_1.context.holder_max_htlc_value_in_flight_msat, (chan_1_value_msat as f64 * 0.02) as u64);
8133
8134                 // Test with the upper bound - 1 of valid values (99%).
8135                 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();
8136                 let chan_2_value_msat = chan_2.context.channel_value_satoshis * 1000;
8137                 assert_eq!(chan_2.context.holder_max_htlc_value_in_flight_msat, (chan_2_value_msat as f64 * 0.99) as u64);
8138
8139                 let chan_1_open_channel_msg = chan_1.get_open_channel(ChainHash::using_genesis_block(network));
8140
8141                 // Test that `InboundV1Channel::new` creates a channel with the correct value for
8142                 // `holder_max_htlc_value_in_flight_msat`, when configured with a valid percentage value,
8143                 // which is set to the lower bound - 1 (2%) of the `channel_value`.
8144                 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();
8145                 let chan_3_value_msat = chan_3.context.channel_value_satoshis * 1000;
8146                 assert_eq!(chan_3.context.holder_max_htlc_value_in_flight_msat, (chan_3_value_msat as f64 * 0.02) as u64);
8147
8148                 // Test with the upper bound - 1 of valid values (99%).
8149                 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();
8150                 let chan_4_value_msat = chan_4.context.channel_value_satoshis * 1000;
8151                 assert_eq!(chan_4.context.holder_max_htlc_value_in_flight_msat, (chan_4_value_msat as f64 * 0.99) as u64);
8152
8153                 // Test that `OutboundV1Channel::new` uses the lower bound of the configurable percentage values (1%)
8154                 // if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a value less than 1.
8155                 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();
8156                 let chan_5_value_msat = chan_5.context.channel_value_satoshis * 1000;
8157                 assert_eq!(chan_5.context.holder_max_htlc_value_in_flight_msat, (chan_5_value_msat as f64 * 0.01) as u64);
8158
8159                 // Test that `OutboundV1Channel::new` uses the upper bound of the configurable percentage values
8160                 // (100%) if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a larger value
8161                 // than 100.
8162                 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();
8163                 let chan_6_value_msat = chan_6.context.channel_value_satoshis * 1000;
8164                 assert_eq!(chan_6.context.holder_max_htlc_value_in_flight_msat, chan_6_value_msat);
8165
8166                 // Test that `InboundV1Channel::new` uses the lower bound of the configurable percentage values (1%)
8167                 // if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a value less than 1.
8168                 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();
8169                 let chan_7_value_msat = chan_7.context.channel_value_satoshis * 1000;
8170                 assert_eq!(chan_7.context.holder_max_htlc_value_in_flight_msat, (chan_7_value_msat as f64 * 0.01) as u64);
8171
8172                 // Test that `InboundV1Channel::new` uses the upper bound of the configurable percentage values
8173                 // (100%) if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a larger value
8174                 // than 100.
8175                 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();
8176                 let chan_8_value_msat = chan_8.context.channel_value_satoshis * 1000;
8177                 assert_eq!(chan_8.context.holder_max_htlc_value_in_flight_msat, chan_8_value_msat);
8178         }
8179
8180         #[test]
8181         fn test_configured_holder_selected_channel_reserve_satoshis() {
8182
8183                 // Test that `OutboundV1Channel::new` and `InboundV1Channel::new` create a channel with the correct
8184                 // channel reserves, when `their_channel_reserve_proportional_millionths` is configured.
8185                 test_self_and_counterparty_channel_reserve(10_000_000, 0.02, 0.02);
8186
8187                 // Test with valid but unreasonably high channel reserves
8188                 // Requesting and accepting parties have requested for 49%-49% and 60%-30% channel reserve
8189                 test_self_and_counterparty_channel_reserve(10_000_000, 0.49, 0.49);
8190                 test_self_and_counterparty_channel_reserve(10_000_000, 0.60, 0.30);
8191
8192                 // Test with calculated channel reserve less than lower bound
8193                 // i.e `MIN_THEIR_CHAN_RESERVE_SATOSHIS`
8194                 test_self_and_counterparty_channel_reserve(100_000, 0.00002, 0.30);
8195
8196                 // Test with invalid channel reserves since sum of both is greater than or equal
8197                 // to channel value
8198                 test_self_and_counterparty_channel_reserve(10_000_000, 0.50, 0.50);
8199                 test_self_and_counterparty_channel_reserve(10_000_000, 0.60, 0.50);
8200         }
8201
8202         fn test_self_and_counterparty_channel_reserve(channel_value_satoshis: u64, outbound_selected_channel_reserve_perc: f64, inbound_selected_channel_reserve_perc: f64) {
8203                 let fee_est = LowerBoundedFeeEstimator::new(&TestFeeEstimator { fee_est: 15_000 });
8204                 let logger = test_utils::TestLogger::new();
8205                 let secp_ctx = Secp256k1::new();
8206                 let seed = [42; 32];
8207                 let network = Network::Testnet;
8208                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
8209                 let outbound_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
8210                 let inbound_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
8211
8212
8213                 let mut outbound_node_config = UserConfig::default();
8214                 outbound_node_config.channel_handshake_config.their_channel_reserve_proportional_millionths = (outbound_selected_channel_reserve_perc * 1_000_000.0) as u32;
8215                 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();
8216
8217                 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);
8218                 assert_eq!(chan.context.holder_selected_channel_reserve_satoshis, expected_outbound_selected_chan_reserve);
8219
8220                 let chan_open_channel_msg = chan.get_open_channel(ChainHash::using_genesis_block(network));
8221                 let mut inbound_node_config = UserConfig::default();
8222                 inbound_node_config.channel_handshake_config.their_channel_reserve_proportional_millionths = (inbound_selected_channel_reserve_perc * 1_000_000.0) as u32;
8223
8224                 if outbound_selected_channel_reserve_perc + inbound_selected_channel_reserve_perc < 1.0 {
8225                         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();
8226
8227                         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);
8228
8229                         assert_eq!(chan_inbound_node.context.holder_selected_channel_reserve_satoshis, expected_inbound_selected_chan_reserve);
8230                         assert_eq!(chan_inbound_node.context.counterparty_selected_channel_reserve_satoshis.unwrap(), expected_outbound_selected_chan_reserve);
8231                 } else {
8232                         // Channel Negotiations failed
8233                         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);
8234                         assert!(result.is_err());
8235                 }
8236         }
8237
8238         #[test]
8239         fn channel_update() {
8240                 let feeest = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
8241                 let logger = test_utils::TestLogger::new();
8242                 let secp_ctx = Secp256k1::new();
8243                 let seed = [42; 32];
8244                 let network = Network::Testnet;
8245                 let best_block = BestBlock::from_network(network);
8246                 let chain_hash = ChainHash::using_genesis_block(network);
8247                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
8248
8249                 // Create Node A's channel pointing to Node B's pubkey
8250                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
8251                 let config = UserConfig::default();
8252                 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();
8253
8254                 // Create Node B's channel by receiving Node A's open_channel message
8255                 // Make sure A's dust limit is as we expect.
8256                 let open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network));
8257                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
8258                 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();
8259
8260                 // Node B --> Node A: accept channel, explicitly setting B's dust limit.
8261                 let mut accept_channel_msg = node_b_chan.accept_inbound_channel();
8262                 accept_channel_msg.dust_limit_satoshis = 546;
8263                 node_a_chan.accept_channel(&accept_channel_msg, &config.channel_handshake_limits, &channelmanager::provided_init_features(&config)).unwrap();
8264                 node_a_chan.context.holder_dust_limit_satoshis = 1560;
8265
8266                 // Node A --> Node B: funding created
8267                 let output_script = node_a_chan.context.get_funding_redeemscript();
8268                 let tx = Transaction { version: 1, lock_time: PackedLockTime::ZERO, input: Vec::new(), output: vec![TxOut {
8269                         value: 10000000, script_pubkey: output_script.clone(),
8270                 }]};
8271                 let funding_outpoint = OutPoint{ txid: tx.txid(), index: 0 };
8272                 let (mut node_a_chan, funding_created_msg) = node_a_chan.get_funding_created(tx.clone(), funding_outpoint, false, &&logger).map_err(|_| ()).unwrap();
8273                 let (_, funding_signed_msg, _) = node_b_chan.funding_created(&funding_created_msg.unwrap(), best_block, &&keys_provider, &&logger).map_err(|_| ()).unwrap();
8274
8275                 // Node B --> Node A: funding signed
8276                 let _ = node_a_chan.funding_signed(&funding_signed_msg.unwrap(), best_block, &&keys_provider, &&logger).unwrap();
8277
8278                 // Make sure that receiving a channel update will update the Channel as expected.
8279                 let update = ChannelUpdate {
8280                         contents: UnsignedChannelUpdate {
8281                                 chain_hash,
8282                                 short_channel_id: 0,
8283                                 timestamp: 0,
8284                                 flags: 0,
8285                                 cltv_expiry_delta: 100,
8286                                 htlc_minimum_msat: 5,
8287                                 htlc_maximum_msat: MAX_VALUE_MSAT,
8288                                 fee_base_msat: 110,
8289                                 fee_proportional_millionths: 11,
8290                                 excess_data: Vec::new(),
8291                         },
8292                         signature: Signature::from(unsafe { FFISignature::new() })
8293                 };
8294                 assert!(node_a_chan.channel_update(&update).unwrap());
8295
8296                 // The counterparty can send an update with a higher minimum HTLC, but that shouldn't
8297                 // change our official htlc_minimum_msat.
8298                 assert_eq!(node_a_chan.context.holder_htlc_minimum_msat, 1);
8299                 match node_a_chan.context.counterparty_forwarding_info() {
8300                         Some(info) => {
8301                                 assert_eq!(info.cltv_expiry_delta, 100);
8302                                 assert_eq!(info.fee_base_msat, 110);
8303                                 assert_eq!(info.fee_proportional_millionths, 11);
8304                         },
8305                         None => panic!("expected counterparty forwarding info to be Some")
8306                 }
8307
8308                 assert!(!node_a_chan.channel_update(&update).unwrap());
8309         }
8310
8311         #[cfg(feature = "_test_vectors")]
8312         #[test]
8313         fn outbound_commitment_test() {
8314                 use bitcoin::util::sighash;
8315                 use bitcoin::consensus::encode::serialize;
8316                 use bitcoin::blockdata::transaction::EcdsaSighashType;
8317                 use bitcoin::hashes::hex::FromHex;
8318                 use bitcoin::hash_types::Txid;
8319                 use bitcoin::secp256k1::Message;
8320                 use crate::sign::{ChannelDerivationParameters, HTLCDescriptor, EcdsaChannelSigner};
8321                 use crate::ln::PaymentPreimage;
8322                 use crate::ln::channel::{HTLCOutputInCommitment ,TxCreationKeys};
8323                 use crate::ln::chan_utils::{ChannelPublicKeys, HolderCommitmentTransaction, CounterpartyChannelTransactionParameters};
8324                 use crate::util::logger::Logger;
8325                 use crate::sync::Arc;
8326
8327                 // Test vectors from BOLT 3 Appendices C and F (anchors):
8328                 let feeest = TestFeeEstimator{fee_est: 15000};
8329                 let logger : Arc<Logger> = Arc::new(test_utils::TestLogger::new());
8330                 let secp_ctx = Secp256k1::new();
8331
8332                 let mut signer = InMemorySigner::new(
8333                         &secp_ctx,
8334                         SecretKey::from_slice(&hex::decode("30ff4956bbdd3222d44cc5e8a1261dab1e07957bdac5ae88fe3261ef321f3749").unwrap()[..]).unwrap(),
8335                         SecretKey::from_slice(&hex::decode("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap()[..]).unwrap(),
8336                         SecretKey::from_slice(&hex::decode("1111111111111111111111111111111111111111111111111111111111111111").unwrap()[..]).unwrap(),
8337                         SecretKey::from_slice(&hex::decode("3333333333333333333333333333333333333333333333333333333333333333").unwrap()[..]).unwrap(),
8338                         SecretKey::from_slice(&hex::decode("1111111111111111111111111111111111111111111111111111111111111111").unwrap()[..]).unwrap(),
8339
8340                         // These aren't set in the test vectors:
8341                         [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],
8342                         10_000_000,
8343                         [0; 32],
8344                         [0; 32],
8345                 );
8346
8347                 assert_eq!(signer.pubkeys().funding_pubkey.serialize()[..],
8348                                 hex::decode("023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb").unwrap()[..]);
8349                 let keys_provider = Keys { signer: signer.clone() };
8350
8351                 let counterparty_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
8352                 let mut config = UserConfig::default();
8353                 config.channel_handshake_config.announced_channel = false;
8354                 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
8355                 chan.context.holder_dust_limit_satoshis = 546;
8356                 chan.context.counterparty_selected_channel_reserve_satoshis = Some(0); // Filled in in accept_channel
8357
8358                 let funding_info = OutPoint{ txid: Txid::from_hex("8984484a580b825b9972d7adb15050b3ab624ccd731946b3eeddb92f4e7ef6be").unwrap(), index: 0 };
8359
8360                 let counterparty_pubkeys = ChannelPublicKeys {
8361                         funding_pubkey: public_from_secret_hex(&secp_ctx, "1552dfba4f6cf29a62a0af13c8d6981d36d0ef8d61ba10fb0fe90da7634d7e13"),
8362                         revocation_basepoint: PublicKey::from_slice(&hex::decode("02466d7fcae563e5cb09a0d1870bb580344804617879a14949cf22285f1bae3f27").unwrap()[..]).unwrap(),
8363                         payment_point: public_from_secret_hex(&secp_ctx, "4444444444444444444444444444444444444444444444444444444444444444"),
8364                         delayed_payment_basepoint: public_from_secret_hex(&secp_ctx, "1552dfba4f6cf29a62a0af13c8d6981d36d0ef8d61ba10fb0fe90da7634d7e13"),
8365                         htlc_basepoint: public_from_secret_hex(&secp_ctx, "4444444444444444444444444444444444444444444444444444444444444444")
8366                 };
8367                 chan.context.channel_transaction_parameters.counterparty_parameters = Some(
8368                         CounterpartyChannelTransactionParameters {
8369                                 pubkeys: counterparty_pubkeys.clone(),
8370                                 selected_contest_delay: 144
8371                         });
8372                 chan.context.channel_transaction_parameters.funding_outpoint = Some(funding_info);
8373                 signer.provide_channel_parameters(&chan.context.channel_transaction_parameters);
8374
8375                 assert_eq!(counterparty_pubkeys.payment_point.serialize()[..],
8376                            hex::decode("032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e668680991").unwrap()[..]);
8377
8378                 assert_eq!(counterparty_pubkeys.funding_pubkey.serialize()[..],
8379                            hex::decode("030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c1").unwrap()[..]);
8380
8381                 assert_eq!(counterparty_pubkeys.htlc_basepoint.serialize()[..],
8382                            hex::decode("032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e668680991").unwrap()[..]);
8383
8384                 // We can't just use build_holder_transaction_keys here as the per_commitment_secret is not
8385                 // derived from a commitment_seed, so instead we copy it here and call
8386                 // build_commitment_transaction.
8387                 let delayed_payment_base = &chan.context.holder_signer.as_ref().pubkeys().delayed_payment_basepoint;
8388                 let per_commitment_secret = SecretKey::from_slice(&hex::decode("1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100").unwrap()[..]).unwrap();
8389                 let per_commitment_point = PublicKey::from_secret_key(&secp_ctx, &per_commitment_secret);
8390                 let htlc_basepoint = &chan.context.holder_signer.as_ref().pubkeys().htlc_basepoint;
8391                 let keys = TxCreationKeys::derive_new(&secp_ctx, &per_commitment_point, delayed_payment_base, htlc_basepoint, &counterparty_pubkeys.revocation_basepoint, &counterparty_pubkeys.htlc_basepoint);
8392
8393                 macro_rules! test_commitment {
8394                         ( $counterparty_sig_hex: expr, $sig_hex: expr, $tx_hex: expr, $($remain:tt)* ) => {
8395                                 chan.context.channel_transaction_parameters.channel_type_features = ChannelTypeFeatures::only_static_remote_key();
8396                                 test_commitment_common!($counterparty_sig_hex, $sig_hex, $tx_hex, &ChannelTypeFeatures::only_static_remote_key(), $($remain)*);
8397                         };
8398                 }
8399
8400                 macro_rules! test_commitment_with_anchors {
8401                         ( $counterparty_sig_hex: expr, $sig_hex: expr, $tx_hex: expr, $($remain:tt)* ) => {
8402                                 chan.context.channel_transaction_parameters.channel_type_features = ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies();
8403                                 test_commitment_common!($counterparty_sig_hex, $sig_hex, $tx_hex, &ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies(), $($remain)*);
8404                         };
8405                 }
8406
8407                 macro_rules! test_commitment_common {
8408                         ( $counterparty_sig_hex: expr, $sig_hex: expr, $tx_hex: expr, $opt_anchors: expr, {
8409                                 $( { $htlc_idx: expr, $counterparty_htlc_sig_hex: expr, $htlc_sig_hex: expr, $htlc_tx_hex: expr } ), *
8410                         } ) => { {
8411                                 let (commitment_tx, htlcs): (_, Vec<HTLCOutputInCommitment>) = {
8412                                         let mut commitment_stats = chan.context.build_commitment_transaction(0xffffffffffff - 42, &keys, true, false, &logger);
8413
8414                                         let htlcs = commitment_stats.htlcs_included.drain(..)
8415                                                 .filter_map(|(htlc, _)| if htlc.transaction_output_index.is_some() { Some(htlc) } else { None })
8416                                                 .collect();
8417                                         (commitment_stats.tx, htlcs)
8418                                 };
8419                                 let trusted_tx = commitment_tx.trust();
8420                                 let unsigned_tx = trusted_tx.built_transaction();
8421                                 let redeemscript = chan.context.get_funding_redeemscript();
8422                                 let counterparty_signature = Signature::from_der(&hex::decode($counterparty_sig_hex).unwrap()[..]).unwrap();
8423                                 let sighash = unsigned_tx.get_sighash_all(&redeemscript, chan.context.channel_value_satoshis);
8424                                 log_trace!(logger, "unsigned_tx = {}", hex::encode(serialize(&unsigned_tx.transaction)));
8425                                 assert!(secp_ctx.verify_ecdsa(&sighash, &counterparty_signature, chan.context.counterparty_funding_pubkey()).is_ok(), "verify counterparty commitment sig");
8426
8427                                 let mut per_htlc: Vec<(HTLCOutputInCommitment, Option<Signature>)> = Vec::new();
8428                                 per_htlc.clear(); // Don't warn about excess mut for no-HTLC calls
8429                                 let mut counterparty_htlc_sigs = Vec::new();
8430                                 counterparty_htlc_sigs.clear(); // Don't warn about excess mut for no-HTLC calls
8431                                 $({
8432                                         let remote_signature = Signature::from_der(&hex::decode($counterparty_htlc_sig_hex).unwrap()[..]).unwrap();
8433                                         per_htlc.push((htlcs[$htlc_idx].clone(), Some(remote_signature)));
8434                                         counterparty_htlc_sigs.push(remote_signature);
8435                                 })*
8436                                 assert_eq!(htlcs.len(), per_htlc.len());
8437
8438                                 let holder_commitment_tx = HolderCommitmentTransaction::new(
8439                                         commitment_tx.clone(),
8440                                         counterparty_signature,
8441                                         counterparty_htlc_sigs,
8442                                         &chan.context.holder_signer.as_ref().pubkeys().funding_pubkey,
8443                                         chan.context.counterparty_funding_pubkey()
8444                                 );
8445                                 let holder_sig = signer.sign_holder_commitment(&holder_commitment_tx, &secp_ctx).unwrap();
8446                                 assert_eq!(Signature::from_der(&hex::decode($sig_hex).unwrap()[..]).unwrap(), holder_sig, "holder_sig");
8447
8448                                 let funding_redeemscript = chan.context.get_funding_redeemscript();
8449                                 let tx = holder_commitment_tx.add_holder_sig(&funding_redeemscript, holder_sig);
8450                                 assert_eq!(serialize(&tx)[..], hex::decode($tx_hex).unwrap()[..], "tx");
8451
8452                                 // ((htlc, counterparty_sig), (index, holder_sig))
8453                                 let mut htlc_counterparty_sig_iter = holder_commitment_tx.counterparty_htlc_sigs.iter();
8454
8455                                 $({
8456                                         log_trace!(logger, "verifying htlc {}", $htlc_idx);
8457                                         let remote_signature = Signature::from_der(&hex::decode($counterparty_htlc_sig_hex).unwrap()[..]).unwrap();
8458
8459                                         let ref htlc = htlcs[$htlc_idx];
8460                                         let mut htlc_tx = chan_utils::build_htlc_transaction(&unsigned_tx.txid, chan.context.feerate_per_kw,
8461                                                 chan.context.get_counterparty_selected_contest_delay().unwrap(),
8462                                                 &htlc, $opt_anchors, &keys.broadcaster_delayed_payment_key, &keys.revocation_key);
8463                                         let htlc_redeemscript = chan_utils::get_htlc_redeemscript(&htlc, $opt_anchors, &keys);
8464                                         let htlc_sighashtype = if $opt_anchors.supports_anchors_zero_fee_htlc_tx() { EcdsaSighashType::SinglePlusAnyoneCanPay } else { EcdsaSighashType::All };
8465                                         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();
8466                                         assert!(secp_ctx.verify_ecdsa(&htlc_sighash, &remote_signature, &keys.countersignatory_htlc_key).is_ok(), "verify counterparty htlc sig");
8467
8468                                         let mut preimage: Option<PaymentPreimage> = None;
8469                                         if !htlc.offered {
8470                                                 for i in 0..5 {
8471                                                         let out = PaymentHash(Sha256::hash(&[i; 32]).into_inner());
8472                                                         if out == htlc.payment_hash {
8473                                                                 preimage = Some(PaymentPreimage([i; 32]));
8474                                                         }
8475                                                 }
8476
8477                                                 assert!(preimage.is_some());
8478                                         }
8479
8480                                         let htlc_counterparty_sig = htlc_counterparty_sig_iter.next().unwrap();
8481                                         let htlc_holder_sig = signer.sign_holder_htlc_transaction(&htlc_tx, 0, &HTLCDescriptor {
8482                                                 channel_derivation_parameters: ChannelDerivationParameters {
8483                                                         value_satoshis: chan.context.channel_value_satoshis,
8484                                                         keys_id: chan.context.channel_keys_id,
8485                                                         transaction_parameters: chan.context.channel_transaction_parameters.clone(),
8486                                                 },
8487                                                 commitment_txid: trusted_tx.txid(),
8488                                                 per_commitment_number: trusted_tx.commitment_number(),
8489                                                 per_commitment_point: trusted_tx.per_commitment_point(),
8490                                                 feerate_per_kw: trusted_tx.feerate_per_kw(),
8491                                                 htlc: htlc.clone(),
8492                                                 preimage: preimage.clone(),
8493                                                 counterparty_sig: *htlc_counterparty_sig,
8494                                         }, &secp_ctx).unwrap();
8495                                         let num_anchors = if $opt_anchors.supports_anchors_zero_fee_htlc_tx() { 2 } else { 0 };
8496                                         assert_eq!(htlc.transaction_output_index, Some($htlc_idx + num_anchors), "output index");
8497
8498                                         let signature = Signature::from_der(&hex::decode($htlc_sig_hex).unwrap()[..]).unwrap();
8499                                         assert_eq!(signature, htlc_holder_sig, "htlc sig");
8500                                         let trusted_tx = holder_commitment_tx.trust();
8501                                         htlc_tx.input[0].witness = trusted_tx.build_htlc_input_witness($htlc_idx, htlc_counterparty_sig, &htlc_holder_sig, &preimage);
8502                                         log_trace!(logger, "htlc_tx = {}", hex::encode(serialize(&htlc_tx)));
8503                                         assert_eq!(serialize(&htlc_tx)[..], hex::decode($htlc_tx_hex).unwrap()[..], "htlc tx");
8504                                 })*
8505                                 assert!(htlc_counterparty_sig_iter.next().is_none());
8506                         } }
8507                 }
8508
8509                 // anchors: simple commitment tx with no HTLCs and single anchor
8510                 test_commitment_with_anchors!("30440220655bf909fb6fa81d086f1336ac72c97906dce29d1b166e305c99152d810e26e1022051f577faa46412c46707aaac46b65d50053550a66334e00a44af2706f27a8658",
8511                                                  "3044022007cf6b405e9c9b4f527b0ecad9d8bb661fabb8b12abf7d1c0b3ad1855db3ed490220616d5c1eeadccc63bd775a131149455d62d95a42c2a1b01cc7821fc42dce7778",
8512                                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80024a010000000000002200202b1b5854183c12d3316565972c4668929d314d81c5dcdbb21cb45fe8a9a8114f10529800000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400473044022007cf6b405e9c9b4f527b0ecad9d8bb661fabb8b12abf7d1c0b3ad1855db3ed490220616d5c1eeadccc63bd775a131149455d62d95a42c2a1b01cc7821fc42dce7778014730440220655bf909fb6fa81d086f1336ac72c97906dce29d1b166e305c99152d810e26e1022051f577faa46412c46707aaac46b65d50053550a66334e00a44af2706f27a865801475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8513
8514                 // simple commitment tx with no HTLCs
8515                 chan.context.value_to_self_msat = 7000000000;
8516
8517                 test_commitment!("3045022100c3127b33dcc741dd6b05b1e63cbd1a9a7d816f37af9b6756fa2376b056f032370220408b96279808fe57eb7e463710804cdf4f108388bc5cf722d8c848d2c7f9f3b0",
8518                                                  "30440220616210b2cc4d3afb601013c373bbd8aac54febd9f15400379a8cb65ce7deca60022034236c010991beb7ff770510561ae8dc885b8d38d1947248c38f2ae055647142",
8519                                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8002c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e48454a56a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e04004730440220616210b2cc4d3afb601013c373bbd8aac54febd9f15400379a8cb65ce7deca60022034236c010991beb7ff770510561ae8dc885b8d38d1947248c38f2ae05564714201483045022100c3127b33dcc741dd6b05b1e63cbd1a9a7d816f37af9b6756fa2376b056f032370220408b96279808fe57eb7e463710804cdf4f108388bc5cf722d8c848d2c7f9f3b001475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8520
8521                 // anchors: simple commitment tx with no HTLCs
8522                 test_commitment_with_anchors!("3045022100f89034eba16b2be0e5581f750a0a6309192b75cce0f202f0ee2b4ec0cc394850022076c65dc507fe42276152b7a3d90e961e678adbe966e916ecfe85e64d430e75f3",
8523                                                  "30450221008266ac6db5ea71aac3c95d97b0e172ff596844851a3216eb88382a8dddfd33d2022050e240974cfd5d708708b4365574517c18e7ae535ef732a3484d43d0d82be9f7",
8524                                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80044a010000000000002200202b1b5854183c12d3316565972c4668929d314d81c5dcdbb21cb45fe8a9a8114f4a01000000000000220020e9e86e4823faa62e222ebc858a226636856158f07e69898da3b0d1af0ddb3994c0c62d0000000000220020f3394e1e619b0eca1f91be2fb5ab4dfc59ba5b84ebe014ad1d43a564d012994a508b6a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e04004830450221008266ac6db5ea71aac3c95d97b0e172ff596844851a3216eb88382a8dddfd33d2022050e240974cfd5d708708b4365574517c18e7ae535ef732a3484d43d0d82be9f701483045022100f89034eba16b2be0e5581f750a0a6309192b75cce0f202f0ee2b4ec0cc394850022076c65dc507fe42276152b7a3d90e961e678adbe966e916ecfe85e64d430e75f301475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8525
8526                 chan.context.pending_inbound_htlcs.push({
8527                         let mut out = InboundHTLCOutput{
8528                                 htlc_id: 0,
8529                                 amount_msat: 1000000,
8530                                 cltv_expiry: 500,
8531                                 payment_hash: PaymentHash([0; 32]),
8532                                 state: InboundHTLCState::Committed,
8533                         };
8534                         out.payment_hash.0 = Sha256::hash(&hex::decode("0000000000000000000000000000000000000000000000000000000000000000").unwrap()).into_inner();
8535                         out
8536                 });
8537                 chan.context.pending_inbound_htlcs.push({
8538                         let mut out = InboundHTLCOutput{
8539                                 htlc_id: 1,
8540                                 amount_msat: 2000000,
8541                                 cltv_expiry: 501,
8542                                 payment_hash: PaymentHash([0; 32]),
8543                                 state: InboundHTLCState::Committed,
8544                         };
8545                         out.payment_hash.0 = Sha256::hash(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap()).into_inner();
8546                         out
8547                 });
8548                 chan.context.pending_outbound_htlcs.push({
8549                         let mut out = OutboundHTLCOutput{
8550                                 htlc_id: 2,
8551                                 amount_msat: 2000000,
8552                                 cltv_expiry: 502,
8553                                 payment_hash: PaymentHash([0; 32]),
8554                                 state: OutboundHTLCState::Committed,
8555                                 source: HTLCSource::dummy(),
8556                                 skimmed_fee_msat: None,
8557                         };
8558                         out.payment_hash.0 = Sha256::hash(&hex::decode("0202020202020202020202020202020202020202020202020202020202020202").unwrap()).into_inner();
8559                         out
8560                 });
8561                 chan.context.pending_outbound_htlcs.push({
8562                         let mut out = OutboundHTLCOutput{
8563                                 htlc_id: 3,
8564                                 amount_msat: 3000000,
8565                                 cltv_expiry: 503,
8566                                 payment_hash: PaymentHash([0; 32]),
8567                                 state: OutboundHTLCState::Committed,
8568                                 source: HTLCSource::dummy(),
8569                                 skimmed_fee_msat: None,
8570                         };
8571                         out.payment_hash.0 = Sha256::hash(&hex::decode("0303030303030303030303030303030303030303030303030303030303030303").unwrap()).into_inner();
8572                         out
8573                 });
8574                 chan.context.pending_inbound_htlcs.push({
8575                         let mut out = InboundHTLCOutput{
8576                                 htlc_id: 4,
8577                                 amount_msat: 4000000,
8578                                 cltv_expiry: 504,
8579                                 payment_hash: PaymentHash([0; 32]),
8580                                 state: InboundHTLCState::Committed,
8581                         };
8582                         out.payment_hash.0 = Sha256::hash(&hex::decode("0404040404040404040404040404040404040404040404040404040404040404").unwrap()).into_inner();
8583                         out
8584                 });
8585
8586                 // commitment tx with all five HTLCs untrimmed (minimum feerate)
8587                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8588                 chan.context.feerate_per_kw = 0;
8589
8590                 test_commitment!("3044022009b048187705a8cbc9ad73adbe5af148c3d012e1f067961486c822c7af08158c022006d66f3704cfab3eb2dc49dae24e4aa22a6910fc9b424007583204e3621af2e5",
8591                                  "304402206fc2d1f10ea59951eefac0b4b7c396a3c3d87b71ff0b019796ef4535beaf36f902201765b0181e514d04f4c8ad75659d7037be26cdb3f8bb6f78fe61decef484c3ea",
8592                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8007e80300000000000022002052bfef0479d7b293c27e0f1eb294bea154c63a3294ef092c19af51409bce0e2ad007000000000000220020403d394747cae42e98ff01734ad5c08f82ba123d3d9a620abda88989651e2ab5d007000000000000220020748eba944fedc8827f6b06bc44678f93c0f9e6078b35c6331ed31e75f8ce0c2db80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484e0a06a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e040047304402206fc2d1f10ea59951eefac0b4b7c396a3c3d87b71ff0b019796ef4535beaf36f902201765b0181e514d04f4c8ad75659d7037be26cdb3f8bb6f78fe61decef484c3ea01473044022009b048187705a8cbc9ad73adbe5af148c3d012e1f067961486c822c7af08158c022006d66f3704cfab3eb2dc49dae24e4aa22a6910fc9b424007583204e3621af2e501475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8593
8594                                   { 0,
8595                                   "3045022100d9e29616b8f3959f1d3d7f7ce893ffedcdc407717d0de8e37d808c91d3a7c50d022078c3033f6d00095c8720a4bc943c1b45727818c082e4e3ddbc6d3116435b624b",
8596                                   "30440220636de5682ef0c5b61f124ec74e8aa2461a69777521d6998295dcea36bc3338110220165285594b23c50b28b82df200234566628a27bcd17f7f14404bd865354eb3ce",
8597                                   "02000000000101ab84ff284f162cfbfef241f853b47d4368d171f9e2a1445160cd591c4c7d882b00000000000000000001e8030000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100d9e29616b8f3959f1d3d7f7ce893ffedcdc407717d0de8e37d808c91d3a7c50d022078c3033f6d00095c8720a4bc943c1b45727818c082e4e3ddbc6d3116435b624b014730440220636de5682ef0c5b61f124ec74e8aa2461a69777521d6998295dcea36bc3338110220165285594b23c50b28b82df200234566628a27bcd17f7f14404bd865354eb3ce012000000000000000000000000000000000000000000000000000000000000000008a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a914b8bcb07f6344b42ab04250c86a6e8b75d3fdbbc688527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f401b175ac686800000000" },
8598
8599                                   { 1,
8600                                   "30440220649fe8b20e67e46cbb0d09b4acea87dbec001b39b08dee7bdd0b1f03922a8640022037c462dff79df501cecfdb12ea7f4de91f99230bb544726f6e04527b1f896004",
8601                                   "3045022100803159dee7935dba4a1d36a61055ce8fd62caa528573cc221ae288515405a252022029c59e7cffce374fe860100a4a63787e105c3cf5156d40b12dd53ff55ac8cf3f",
8602                                   "02000000000101ab84ff284f162cfbfef241f853b47d4368d171f9e2a1445160cd591c4c7d882b01000000000000000001d0070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e05004730440220649fe8b20e67e46cbb0d09b4acea87dbec001b39b08dee7bdd0b1f03922a8640022037c462dff79df501cecfdb12ea7f4de91f99230bb544726f6e04527b1f89600401483045022100803159dee7935dba4a1d36a61055ce8fd62caa528573cc221ae288515405a252022029c59e7cffce374fe860100a4a63787e105c3cf5156d40b12dd53ff55ac8cf3f01008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6868f6010000" },
8603
8604                                   { 2,
8605                                   "30440220770fc321e97a19f38985f2e7732dd9fe08d16a2efa4bcbc0429400a447faf49102204d40b417f3113e1b0944ae0986f517564ab4acd3d190503faf97a6e420d43352",
8606                                   "3045022100a437cc2ce77400ecde441b3398fea3c3ad8bdad8132be818227fe3c5b8345989022069d45e7fa0ae551ec37240845e2c561ceb2567eacf3076a6a43a502d05865faa",
8607                                   "02000000000101ab84ff284f162cfbfef241f853b47d4368d171f9e2a1445160cd591c4c7d882b02000000000000000001d0070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e05004730440220770fc321e97a19f38985f2e7732dd9fe08d16a2efa4bcbc0429400a447faf49102204d40b417f3113e1b0944ae0986f517564ab4acd3d190503faf97a6e420d4335201483045022100a437cc2ce77400ecde441b3398fea3c3ad8bdad8132be818227fe3c5b8345989022069d45e7fa0ae551ec37240845e2c561ceb2567eacf3076a6a43a502d05865faa012001010101010101010101010101010101010101010101010101010101010101018a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac686800000000" },
8608
8609                                   { 3,
8610                                   "304402207bcbf4f60a9829b05d2dbab84ed593e0291836be715dc7db6b72a64caf646af802201e489a5a84f7c5cc130398b841d138d031a5137ac8f4c49c770a4959dc3c1363",
8611                                   "304402203121d9b9c055f354304b016a36662ee99e1110d9501cb271b087ddb6f382c2c80220549882f3f3b78d9c492de47543cb9a697cecc493174726146536c5954dac7487",
8612                                   "02000000000101ab84ff284f162cfbfef241f853b47d4368d171f9e2a1445160cd591c4c7d882b03000000000000000001b80b0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402207bcbf4f60a9829b05d2dbab84ed593e0291836be715dc7db6b72a64caf646af802201e489a5a84f7c5cc130398b841d138d031a5137ac8f4c49c770a4959dc3c13630147304402203121d9b9c055f354304b016a36662ee99e1110d9501cb271b087ddb6f382c2c80220549882f3f3b78d9c492de47543cb9a697cecc493174726146536c5954dac748701008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8613
8614                                   { 4,
8615                                   "3044022076dca5cb81ba7e466e349b7128cdba216d4d01659e29b96025b9524aaf0d1899022060de85697b88b21c749702b7d2cfa7dfeaa1f472c8f1d7d9c23f2bf968464b87",
8616                                   "3045022100d9080f103cc92bac15ec42464a95f070c7fb6925014e673ee2ea1374d36a7f7502200c65294d22eb20d48564954d5afe04a385551919d8b2ddb4ae2459daaeee1d95",
8617                                   "02000000000101ab84ff284f162cfbfef241f853b47d4368d171f9e2a1445160cd591c4c7d882b04000000000000000001a00f0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500473044022076dca5cb81ba7e466e349b7128cdba216d4d01659e29b96025b9524aaf0d1899022060de85697b88b21c749702b7d2cfa7dfeaa1f472c8f1d7d9c23f2bf968464b8701483045022100d9080f103cc92bac15ec42464a95f070c7fb6925014e673ee2ea1374d36a7f7502200c65294d22eb20d48564954d5afe04a385551919d8b2ddb4ae2459daaeee1d95012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8618                 } );
8619
8620                 // commitment tx with seven outputs untrimmed (maximum feerate)
8621                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8622                 chan.context.feerate_per_kw = 647;
8623
8624                 test_commitment!("3045022100a135f9e8a5ed25f7277446c67956b00ce6f610ead2bdec2c2f686155b7814772022059f1f6e1a8b336a68efcc1af3fe4d422d4827332b5b067501b099c47b7b5b5ee",
8625                                  "30450221009ec15c687898bb4da8b3a833e5ab8bfc51ec6e9202aaa8e66611edfd4a85ed1102203d7183e45078b9735c93450bc3415d3e5a8c576141a711ec6ddcb4a893926bb7",
8626                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8007e80300000000000022002052bfef0479d7b293c27e0f1eb294bea154c63a3294ef092c19af51409bce0e2ad007000000000000220020403d394747cae42e98ff01734ad5c08f82ba123d3d9a620abda88989651e2ab5d007000000000000220020748eba944fedc8827f6b06bc44678f93c0f9e6078b35c6331ed31e75f8ce0c2db80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484e09c6a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e04004830450221009ec15c687898bb4da8b3a833e5ab8bfc51ec6e9202aaa8e66611edfd4a85ed1102203d7183e45078b9735c93450bc3415d3e5a8c576141a711ec6ddcb4a893926bb701483045022100a135f9e8a5ed25f7277446c67956b00ce6f610ead2bdec2c2f686155b7814772022059f1f6e1a8b336a68efcc1af3fe4d422d4827332b5b067501b099c47b7b5b5ee01475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8627
8628                                   { 0,
8629                                   "30450221008437627f9ad84ac67052e2a414a4367b8556fd1f94d8b02590f89f50525cd33502205b9c21ff6e7fc864f2352746ad8ba59182510819acb644e25b8a12fc37bbf24f",
8630                                   "30440220344b0deb055230d01703e6c7acd45853c4af2328b49b5d8af4f88a060733406602202ea64f2a43d5751edfe75503cbc35a62e3141b5ed032fa03360faf4ca66f670b",
8631                                   "020000000001012cfb3e4788c206881d38f2996b6cb2109b5935acb527d14bdaa7b908afa9b2fe0000000000000000000122020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e05004830450221008437627f9ad84ac67052e2a414a4367b8556fd1f94d8b02590f89f50525cd33502205b9c21ff6e7fc864f2352746ad8ba59182510819acb644e25b8a12fc37bbf24f014730440220344b0deb055230d01703e6c7acd45853c4af2328b49b5d8af4f88a060733406602202ea64f2a43d5751edfe75503cbc35a62e3141b5ed032fa03360faf4ca66f670b012000000000000000000000000000000000000000000000000000000000000000008a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a914b8bcb07f6344b42ab04250c86a6e8b75d3fdbbc688527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f401b175ac686800000000" },
8632
8633                                   { 1,
8634                                   "304402205a67f92bf6845cf2892b48d874ac1daf88a36495cf8a06f93d83180d930a6f75022031da1621d95c3f335cc06a3056cf960199dae600b7cf89088f65fc53cdbef28c",
8635                                   "30450221009e5e3822b0185c6799a95288c597b671d6cc69ab80f43740f00c6c3d0752bdda02206da947a74bd98f3175324dc56fdba86cc783703a120a6f0297537e60632f4c7f",
8636                                   "020000000001012cfb3e4788c206881d38f2996b6cb2109b5935acb527d14bdaa7b908afa9b2fe0100000000000000000124060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402205a67f92bf6845cf2892b48d874ac1daf88a36495cf8a06f93d83180d930a6f75022031da1621d95c3f335cc06a3056cf960199dae600b7cf89088f65fc53cdbef28c014830450221009e5e3822b0185c6799a95288c597b671d6cc69ab80f43740f00c6c3d0752bdda02206da947a74bd98f3175324dc56fdba86cc783703a120a6f0297537e60632f4c7f01008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6868f6010000" },
8637
8638                                   { 2,
8639                                   "30440220437e21766054a3eef7f65690c5bcfa9920babbc5af92b819f772f6ea96df6c7402207173622024bd97328cfb26c6665e25c2f5d67c319443ccdc60c903217005d8c8",
8640                                   "3045022100fcfc47e36b712624677626cef3dc1d67f6583bd46926a6398fe6b00b0c9a37760220525788257b187fc775c6370d04eadf34d06f3650a63f8df851cee0ecb47a1673",
8641                                   "020000000001012cfb3e4788c206881d38f2996b6cb2109b5935acb527d14bdaa7b908afa9b2fe020000000000000000010a060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e05004730440220437e21766054a3eef7f65690c5bcfa9920babbc5af92b819f772f6ea96df6c7402207173622024bd97328cfb26c6665e25c2f5d67c319443ccdc60c903217005d8c801483045022100fcfc47e36b712624677626cef3dc1d67f6583bd46926a6398fe6b00b0c9a37760220525788257b187fc775c6370d04eadf34d06f3650a63f8df851cee0ecb47a1673012001010101010101010101010101010101010101010101010101010101010101018a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac686800000000" },
8642
8643                                   { 3,
8644                                   "304402207436e10737e4df499fc051686d3e11a5bb2310e4d1f1e691d287cef66514791202207cb58e71a6b7a42dd001b7e3ae672ea4f71ea3e1cd412b742e9124abb0739c64",
8645                                   "3045022100e78211b8409afb7255ffe37337da87f38646f1faebbdd61bc1920d69e3ead67a02201a626305adfcd16bfb7e9340928d9b6305464eab4aa4c4a3af6646e9b9f69dee",
8646                                   "020000000001012cfb3e4788c206881d38f2996b6cb2109b5935acb527d14bdaa7b908afa9b2fe030000000000000000010c0a0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402207436e10737e4df499fc051686d3e11a5bb2310e4d1f1e691d287cef66514791202207cb58e71a6b7a42dd001b7e3ae672ea4f71ea3e1cd412b742e9124abb0739c6401483045022100e78211b8409afb7255ffe37337da87f38646f1faebbdd61bc1920d69e3ead67a02201a626305adfcd16bfb7e9340928d9b6305464eab4aa4c4a3af6646e9b9f69dee01008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8647
8648                                   { 4,
8649                                   "30450221009acd6a827a76bfee50806178dfe0495cd4e1d9c58279c194c7b01520fe68cb8d022024d439047c368883e570997a7d40f0b430cb5a742f507965e7d3063ae3feccca",
8650                                   "3044022048762cf546bbfe474f1536365ea7c416e3c0389d60558bc9412cb148fb6ab68202207215d7083b75c96ff9d2b08c59c34e287b66820f530b486a9aa4cdd9c347d5b9",
8651                                   "020000000001012cfb3e4788c206881d38f2996b6cb2109b5935acb527d14bdaa7b908afa9b2fe04000000000000000001da0d0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e05004830450221009acd6a827a76bfee50806178dfe0495cd4e1d9c58279c194c7b01520fe68cb8d022024d439047c368883e570997a7d40f0b430cb5a742f507965e7d3063ae3feccca01473044022048762cf546bbfe474f1536365ea7c416e3c0389d60558bc9412cb148fb6ab68202207215d7083b75c96ff9d2b08c59c34e287b66820f530b486a9aa4cdd9c347d5b9012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8652                 } );
8653
8654                 // commitment tx with six outputs untrimmed (minimum feerate)
8655                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8656                 chan.context.feerate_per_kw = 648;
8657
8658                 test_commitment!("304402203948f900a5506b8de36a4d8502f94f21dd84fd9c2314ab427d52feaa7a0a19f2022059b6a37a4adaa2c5419dc8aea63c6e2a2ec4c4bde46207f6dc1fcd22152fc6e5",
8659                                  "3045022100b15f72908ba3382a34ca5b32519240a22300cc6015b6f9418635fb41f3d01d8802207adb331b9ed1575383dca0f2355e86c173802feecf8298fbea53b9d4610583e9",
8660                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8006d007000000000000220020403d394747cae42e98ff01734ad5c08f82ba123d3d9a620abda88989651e2ab5d007000000000000220020748eba944fedc8827f6b06bc44678f93c0f9e6078b35c6331ed31e75f8ce0c2db80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e4844e9d6a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100b15f72908ba3382a34ca5b32519240a22300cc6015b6f9418635fb41f3d01d8802207adb331b9ed1575383dca0f2355e86c173802feecf8298fbea53b9d4610583e90147304402203948f900a5506b8de36a4d8502f94f21dd84fd9c2314ab427d52feaa7a0a19f2022059b6a37a4adaa2c5419dc8aea63c6e2a2ec4c4bde46207f6dc1fcd22152fc6e501475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8661
8662                                   { 0,
8663                                   "3045022100a031202f3be94678f0e998622ee95ebb6ada8da1e9a5110228b5e04a747351e4022010ca6a21e18314ed53cfaae3b1f51998552a61a468e596368829a50ce40110e0",
8664                                   "304502210097e1873b57267730154595187a34949d3744f52933070c74757005e61ce2112e02204ecfba2aa42d4f14bdf8bad4206bb97217b702e6c433e0e1b0ce6587e6d46ec6",
8665                                   "020000000001010f44041fdfba175987cf4e6135ba2a154e3b7fb96483dc0ed5efc0678e5b6bf10000000000000000000123060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100a031202f3be94678f0e998622ee95ebb6ada8da1e9a5110228b5e04a747351e4022010ca6a21e18314ed53cfaae3b1f51998552a61a468e596368829a50ce40110e00148304502210097e1873b57267730154595187a34949d3744f52933070c74757005e61ce2112e02204ecfba2aa42d4f14bdf8bad4206bb97217b702e6c433e0e1b0ce6587e6d46ec601008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6868f6010000" },
8666
8667                                   { 1,
8668                                   "304402202361012a634aee7835c5ecdd6413dcffa8f404b7e77364c792cff984e4ee71e90220715c5e90baa08daa45a7439b1ee4fa4843ed77b19c058240b69406606d384124",
8669                                   "3044022019de73b00f1d818fb388e83b2c8c31f6bce35ac624e215bc12f88f9dc33edf48022006ff814bb9f700ee6abc3294e146fac3efd4f13f0005236b41c0a946ee00c9ae",
8670                                   "020000000001010f44041fdfba175987cf4e6135ba2a154e3b7fb96483dc0ed5efc0678e5b6bf10100000000000000000109060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402202361012a634aee7835c5ecdd6413dcffa8f404b7e77364c792cff984e4ee71e90220715c5e90baa08daa45a7439b1ee4fa4843ed77b19c058240b69406606d38412401473044022019de73b00f1d818fb388e83b2c8c31f6bce35ac624e215bc12f88f9dc33edf48022006ff814bb9f700ee6abc3294e146fac3efd4f13f0005236b41c0a946ee00c9ae012001010101010101010101010101010101010101010101010101010101010101018a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac686800000000" },
8671
8672                                   { 2,
8673                                   "304402207e8e82cd71ed4febeb593732c260456836e97d81896153ecd2b3cf320ca6861702202dd4a30f68f98ced7cc56a36369ac1fdd978248c5ff4ed204fc00cc625532989",
8674                                   "3045022100bd0be6100c4fd8f102ec220e1b053e4c4e2ecca25615490150007b40d314dc3902201a1e0ea266965b43164d9e6576f58fa6726d42883dd1c3996d2925c2e2260796",
8675                                   "020000000001010f44041fdfba175987cf4e6135ba2a154e3b7fb96483dc0ed5efc0678e5b6bf1020000000000000000010b0a0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402207e8e82cd71ed4febeb593732c260456836e97d81896153ecd2b3cf320ca6861702202dd4a30f68f98ced7cc56a36369ac1fdd978248c5ff4ed204fc00cc62553298901483045022100bd0be6100c4fd8f102ec220e1b053e4c4e2ecca25615490150007b40d314dc3902201a1e0ea266965b43164d9e6576f58fa6726d42883dd1c3996d2925c2e226079601008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8676
8677                                   { 3,
8678                                   "3044022024cd52e4198c8ae0e414a86d86b5a65ea7450f2eb4e783096736d93395eca5ce022078f0094745b45be4d4b2b04dd5978c9e66ba49109e5704403e84aaf5f387d6be",
8679                                   "3045022100bbfb9d0a946d420807c86e985d636cceb16e71c3694ed186316251a00cbd807202207773223f9a337e145f64673825be9b30d07ef1542c82188b264bedcf7cda78c6",
8680                                   "020000000001010f44041fdfba175987cf4e6135ba2a154e3b7fb96483dc0ed5efc0678e5b6bf103000000000000000001d90d0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500473044022024cd52e4198c8ae0e414a86d86b5a65ea7450f2eb4e783096736d93395eca5ce022078f0094745b45be4d4b2b04dd5978c9e66ba49109e5704403e84aaf5f387d6be01483045022100bbfb9d0a946d420807c86e985d636cceb16e71c3694ed186316251a00cbd807202207773223f9a337e145f64673825be9b30d07ef1542c82188b264bedcf7cda78c6012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8681                 } );
8682
8683                 // anchors: commitment tx with six outputs untrimmed (minimum dust limit)
8684                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8685                 chan.context.feerate_per_kw = 645;
8686                 chan.context.holder_dust_limit_satoshis = 1001;
8687
8688                 test_commitment_with_anchors!("3044022025d97466c8049e955a5afce28e322f4b34d2561118e52332fb400f9b908cc0a402205dc6fba3a0d67ee142c428c535580cd1f2ff42e2f89b47e0c8a01847caffc312",
8689                                  "3045022100d57697c707b6f6d053febf24b98e8989f186eea42e37e9e91663ec2c70bb8f70022079b0715a472118f262f43016a674f59c015d9cafccec885968e76d9d9c5d0051",
8690                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80084a010000000000002200202b1b5854183c12d3316565972c4668929d314d81c5dcdbb21cb45fe8a9a8114f4a01000000000000220020e9e86e4823faa62e222ebc858a226636856158f07e69898da3b0d1af0ddb3994d0070000000000002200203e68115ae0b15b8de75b6c6bc9af5ac9f01391544e0870dae443a1e8fe7837ead007000000000000220020fe0598d74fee2205cc3672e6e6647706b4f3099713b4661b62482c3addd04a5eb80b000000000000220020f96d0334feb64a4f40eb272031d07afcb038db56aa57446d60308c9f8ccadef9a00f000000000000220020ce6e751274836ff59622a0d1e07f8831d80bd6730bd48581398bfadd2bb8da9ac0c62d0000000000220020f3394e1e619b0eca1f91be2fb5ab4dfc59ba5b84ebe014ad1d43a564d012994abc996a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100d57697c707b6f6d053febf24b98e8989f186eea42e37e9e91663ec2c70bb8f70022079b0715a472118f262f43016a674f59c015d9cafccec885968e76d9d9c5d005101473044022025d97466c8049e955a5afce28e322f4b34d2561118e52332fb400f9b908cc0a402205dc6fba3a0d67ee142c428c535580cd1f2ff42e2f89b47e0c8a01847caffc31201475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8691
8692                                   { 0,
8693                                   "3045022100e04d160a326432659fe9fb127304c1d348dfeaba840081bdc57d8efd902a48d8022008a824e7cf5492b97e4d9e03c06a09f822775a44f6b5b2533a2088904abfc282",
8694                                   "3045022100b7c49846466b13b190ff739bbe3005c105482fc55539e55b1c561f76b6982b6c02200e5c35808619cf543c8405cff9fedd25f333a4a2f6f6d5e8af8150090c40ef09",
8695                                   "02000000000101104f394af4c4fad78337f95e3e9f802f4c0d86ab231853af09b285348561320002000000000100000001d0070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100e04d160a326432659fe9fb127304c1d348dfeaba840081bdc57d8efd902a48d8022008a824e7cf5492b97e4d9e03c06a09f822775a44f6b5b2533a2088904abfc28283483045022100b7c49846466b13b190ff739bbe3005c105482fc55539e55b1c561f76b6982b6c02200e5c35808619cf543c8405cff9fedd25f333a4a2f6f6d5e8af8150090c40ef0901008876a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6851b27568f6010000" },
8696
8697                                   { 1,
8698                                   "3045022100fbdc3c367ce3bf30796025cc590ee1f2ce0e72ae1ac19f5986d6d0a4fc76211f02207e45ae9267e8e820d188569604f71d1abd11bd385d58853dd7dc034cdb3e9a6e",
8699                                   "3045022100d29330f24db213b262068706099b39c15fa7e070c3fcdf8836c09723fc4d365602203ce57d01e9f28601e461a0b5c4a50119b270bde8b70148d133a6849c70b115ac",
8700                                   "02000000000101104f394af4c4fad78337f95e3e9f802f4c0d86ab231853af09b285348561320003000000000100000001d0070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100fbdc3c367ce3bf30796025cc590ee1f2ce0e72ae1ac19f5986d6d0a4fc76211f02207e45ae9267e8e820d188569604f71d1abd11bd385d58853dd7dc034cdb3e9a6e83483045022100d29330f24db213b262068706099b39c15fa7e070c3fcdf8836c09723fc4d365602203ce57d01e9f28601e461a0b5c4a50119b270bde8b70148d133a6849c70b115ac012001010101010101010101010101010101010101010101010101010101010101018d76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac6851b2756800000000" },
8701
8702                                   { 2,
8703                                   "3044022066c5ef625cee3ddd2bc7b6bfb354b5834cf1cc6d52dd972fb41b7b225437ae4a022066cb85647df65c6b87a54e416dcdcca778a776c36a9643d2b5dc793c9b29f4c1",
8704                                   "304402202d4ce515cd9000ec37575972d70b8d24f73909fb7012e8ebd8c2066ef6fe187902202830b53e64ea565fecd0f398100691da6bb2a5cf9bb0d1926f1d71d05828a11e",
8705                                   "02000000000101104f394af4c4fad78337f95e3e9f802f4c0d86ab231853af09b285348561320004000000000100000001b80b0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500473044022066c5ef625cee3ddd2bc7b6bfb354b5834cf1cc6d52dd972fb41b7b225437ae4a022066cb85647df65c6b87a54e416dcdcca778a776c36a9643d2b5dc793c9b29f4c18347304402202d4ce515cd9000ec37575972d70b8d24f73909fb7012e8ebd8c2066ef6fe187902202830b53e64ea565fecd0f398100691da6bb2a5cf9bb0d1926f1d71d05828a11e01008876a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6851b27568f7010000" },
8706
8707                                   { 3,
8708                                   "3044022022c7e11595c53ee89a57ca76baf0aed730da035952d6ab3fe6459f5eff3b337a022075e10cc5f5fd724a35ce4087a5d03cd616698626c69814032132b50bb97dc615",
8709                                   "3045022100b20cd63e0587d1711beaebda4730775c4ac8b8b2ec78fe18a0c44c3f168c25230220079abb7fc4924e2fca5950842e5b9e416735585026914570078c4ef62f286226",
8710                                   "02000000000101104f394af4c4fad78337f95e3e9f802f4c0d86ab231853af09b285348561320005000000000100000001a00f0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500473044022022c7e11595c53ee89a57ca76baf0aed730da035952d6ab3fe6459f5eff3b337a022075e10cc5f5fd724a35ce4087a5d03cd616698626c69814032132b50bb97dc61583483045022100b20cd63e0587d1711beaebda4730775c4ac8b8b2ec78fe18a0c44c3f168c25230220079abb7fc4924e2fca5950842e5b9e416735585026914570078c4ef62f286226012004040404040404040404040404040404040404040404040404040404040404048d76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac6851b2756800000000" }
8711                 } );
8712
8713                 // commitment tx with six outputs untrimmed (maximum feerate)
8714                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8715                 chan.context.feerate_per_kw = 2069;
8716                 chan.context.holder_dust_limit_satoshis = 546;
8717
8718                 test_commitment!("304502210090b96a2498ce0c0f2fadbec2aab278fed54c1a7838df793ec4d2c78d96ec096202204fdd439c50f90d483baa7b68feeef4bd33bc277695405447bcd0bfb2ca34d7bc",
8719                                  "3045022100ad9a9bbbb75d506ca3b716b336ee3cf975dd7834fcf129d7dd188146eb58a8b4022061a759ee417339f7fe2ea1e8deb83abb6a74db31a09b7648a932a639cda23e33",
8720                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8006d007000000000000220020403d394747cae42e98ff01734ad5c08f82ba123d3d9a620abda88989651e2ab5d007000000000000220020748eba944fedc8827f6b06bc44678f93c0f9e6078b35c6331ed31e75f8ce0c2db80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e48477956a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100ad9a9bbbb75d506ca3b716b336ee3cf975dd7834fcf129d7dd188146eb58a8b4022061a759ee417339f7fe2ea1e8deb83abb6a74db31a09b7648a932a639cda23e330148304502210090b96a2498ce0c0f2fadbec2aab278fed54c1a7838df793ec4d2c78d96ec096202204fdd439c50f90d483baa7b68feeef4bd33bc277695405447bcd0bfb2ca34d7bc01475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8721
8722                                   { 0,
8723                                   "3045022100f33513ee38abf1c582876f921f8fddc06acff48e04515532a32d3938de938ffd02203aa308a2c1863b7d6fdf53159a1465bf2e115c13152546cc5d74483ceaa7f699",
8724                                   "3045022100a637902a5d4c9ba9e7c472a225337d5aac9e2e3f6744f76e237132e7619ba0400220035c60d784a031c0d9f6df66b7eab8726a5c25397399ee4aa960842059eb3f9d",
8725                                   "02000000000101adbe717a63fb658add30ada1e6e12ed257637581898abe475c11d7bbcd65bd4d0000000000000000000175020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100f33513ee38abf1c582876f921f8fddc06acff48e04515532a32d3938de938ffd02203aa308a2c1863b7d6fdf53159a1465bf2e115c13152546cc5d74483ceaa7f69901483045022100a637902a5d4c9ba9e7c472a225337d5aac9e2e3f6744f76e237132e7619ba0400220035c60d784a031c0d9f6df66b7eab8726a5c25397399ee4aa960842059eb3f9d01008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6868f6010000" },
8726
8727                                   { 1,
8728                                   "3045022100ce07682cf4b90093c22dc2d9ab2a77ad6803526b655ef857221cc96af5c9e0bf02200f501cee22e7a268af40b555d15a8237c9f36ad67ef1841daf9f6a0267b1e6df",
8729                                   "3045022100e57e46234f8782d3ff7aa593b4f7446fb5316c842e693dc63ee324fd49f6a1c302204a2f7b44c48bd26e1554422afae13153eb94b29d3687b733d18930615fb2db61",
8730                                   "02000000000101adbe717a63fb658add30ada1e6e12ed257637581898abe475c11d7bbcd65bd4d0100000000000000000122020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100ce07682cf4b90093c22dc2d9ab2a77ad6803526b655ef857221cc96af5c9e0bf02200f501cee22e7a268af40b555d15a8237c9f36ad67ef1841daf9f6a0267b1e6df01483045022100e57e46234f8782d3ff7aa593b4f7446fb5316c842e693dc63ee324fd49f6a1c302204a2f7b44c48bd26e1554422afae13153eb94b29d3687b733d18930615fb2db61012001010101010101010101010101010101010101010101010101010101010101018a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac686800000000" },
8731
8732                                   { 2,
8733                                   "3045022100e3e35492e55f82ec0bc2f317ffd7a486d1f7024330fe9743c3559fc39f32ef0c02203d1d4db651fc388a91d5ad8ecdd8e83673063bc8eefe27cfd8c189090e3a23e0",
8734                                   "3044022068613fb1b98eb3aec7f44c5b115b12343c2f066c4277c82b5f873dfe68f37f50022028109b4650f3f528ca4bfe9a467aff2e3e43893b61b5159157119d5d95cf1c18",
8735                                   "02000000000101adbe717a63fb658add30ada1e6e12ed257637581898abe475c11d7bbcd65bd4d020000000000000000015d060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100e3e35492e55f82ec0bc2f317ffd7a486d1f7024330fe9743c3559fc39f32ef0c02203d1d4db651fc388a91d5ad8ecdd8e83673063bc8eefe27cfd8c189090e3a23e001473044022068613fb1b98eb3aec7f44c5b115b12343c2f066c4277c82b5f873dfe68f37f50022028109b4650f3f528ca4bfe9a467aff2e3e43893b61b5159157119d5d95cf1c1801008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8736
8737                                   { 3,
8738                                   "304402207475aeb0212ef9bf5130b60937817ad88c9a87976988ef1f323f026148cc4a850220739fea17ad3257dcad72e509c73eebe86bee30b178467b9fdab213d631b109df",
8739                                   "3045022100d315522e09e7d53d2a659a79cb67fef56d6c4bddf3f46df6772d0d20a7beb7c8022070bcc17e288607b6a72be0bd83368bb6d53488db266c1cdb4d72214e4f02ac33",
8740                                   "02000000000101adbe717a63fb658add30ada1e6e12ed257637581898abe475c11d7bbcd65bd4d03000000000000000001f2090000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402207475aeb0212ef9bf5130b60937817ad88c9a87976988ef1f323f026148cc4a850220739fea17ad3257dcad72e509c73eebe86bee30b178467b9fdab213d631b109df01483045022100d315522e09e7d53d2a659a79cb67fef56d6c4bddf3f46df6772d0d20a7beb7c8022070bcc17e288607b6a72be0bd83368bb6d53488db266c1cdb4d72214e4f02ac33012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8741                 } );
8742
8743                 // commitment tx with five outputs untrimmed (minimum feerate)
8744                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8745                 chan.context.feerate_per_kw = 2070;
8746
8747                 test_commitment!("304402204ca1ba260dee913d318271d86e10ca0f5883026fb5653155cff600fb40895223022037b145204b7054a40e08bb1fefbd826f827b40838d3e501423bcc57924bcb50c",
8748                                  "3044022001014419b5ba00e083ac4e0a85f19afc848aacac2d483b4b525d15e2ae5adbfe022015ebddad6ee1e72b47cb09f3e78459da5be01ccccd95dceca0e056a00cc773c1",
8749                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8005d007000000000000220020403d394747cae42e98ff01734ad5c08f82ba123d3d9a620abda88989651e2ab5b80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484da966a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400473044022001014419b5ba00e083ac4e0a85f19afc848aacac2d483b4b525d15e2ae5adbfe022015ebddad6ee1e72b47cb09f3e78459da5be01ccccd95dceca0e056a00cc773c10147304402204ca1ba260dee913d318271d86e10ca0f5883026fb5653155cff600fb40895223022037b145204b7054a40e08bb1fefbd826f827b40838d3e501423bcc57924bcb50c01475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8750
8751                                   { 0,
8752                                   "304402205f6b6d12d8d2529fb24f4445630566cf4abbd0f9330ab6c2bdb94222d6a2a0c502202f556258ae6f05b193749e4c541dfcc13b525a5422f6291f073f15617ba8579b",
8753                                   "30440220150b11069454da70caf2492ded9e0065c9a57f25ac2a4c52657b1d15b6c6ed85022068a38833b603c8892717206383611bad210f1cbb4b1f87ea29c6c65b9e1cb3e5",
8754                                   "02000000000101403ad7602b43293497a3a2235a12ecefda4f3a1f1d06e49b1786d945685de1ff0000000000000000000174020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402205f6b6d12d8d2529fb24f4445630566cf4abbd0f9330ab6c2bdb94222d6a2a0c502202f556258ae6f05b193749e4c541dfcc13b525a5422f6291f073f15617ba8579b014730440220150b11069454da70caf2492ded9e0065c9a57f25ac2a4c52657b1d15b6c6ed85022068a38833b603c8892717206383611bad210f1cbb4b1f87ea29c6c65b9e1cb3e501008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6868f6010000" },
8755
8756                                   { 1,
8757                                   "3045022100f960dfb1c9aee7ce1437efa65b523e399383e8149790e05d8fed27ff6e42fe0002202fe8613e062ffe0b0c518cc4101fba1c6de70f64a5bcc7ae663f2efae43b8546",
8758                                   "30450221009a6ed18e6873bc3644332a6ee21c152a5b102821865350df7a8c74451a51f9f2022050d801fb4895d7d7fbf452824c0168347f5c0cbe821cf6a97a63af5b8b2563c6",
8759                                   "02000000000101403ad7602b43293497a3a2235a12ecefda4f3a1f1d06e49b1786d945685de1ff010000000000000000015c060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100f960dfb1c9aee7ce1437efa65b523e399383e8149790e05d8fed27ff6e42fe0002202fe8613e062ffe0b0c518cc4101fba1c6de70f64a5bcc7ae663f2efae43b8546014830450221009a6ed18e6873bc3644332a6ee21c152a5b102821865350df7a8c74451a51f9f2022050d801fb4895d7d7fbf452824c0168347f5c0cbe821cf6a97a63af5b8b2563c601008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8760
8761                                   { 2,
8762                                   "3045022100ae5fc7717ae684bc1fcf9020854e5dbe9842c9e7472879ac06ff95ac2bb10e4e022057728ada4c00083a3e65493fb5d50a232165948a1a0f530ef63185c2c8c56504",
8763                                   "30440220408ad3009827a8fccf774cb285587686bfb2ed041f89a89453c311ce9c8ee0f902203c7392d9f8306d3a46522a66bd2723a7eb2628cb2d9b34d4c104f1766bf37502",
8764                                   "02000000000101403ad7602b43293497a3a2235a12ecefda4f3a1f1d06e49b1786d945685de1ff02000000000000000001f1090000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100ae5fc7717ae684bc1fcf9020854e5dbe9842c9e7472879ac06ff95ac2bb10e4e022057728ada4c00083a3e65493fb5d50a232165948a1a0f530ef63185c2c8c56504014730440220408ad3009827a8fccf774cb285587686bfb2ed041f89a89453c311ce9c8ee0f902203c7392d9f8306d3a46522a66bd2723a7eb2628cb2d9b34d4c104f1766bf37502012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8765                 } );
8766
8767                 // commitment tx with five outputs untrimmed (maximum feerate)
8768                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8769                 chan.context.feerate_per_kw = 2194;
8770
8771                 test_commitment!("304402204bb3d6e279d71d9da414c82de42f1f954267c762b2e2eb8b76bc3be4ea07d4b0022014febc009c5edc8c3fc5d94015de163200f780046f1c293bfed8568f08b70fb3",
8772                                  "3044022072c2e2b1c899b2242656a537dde2892fa3801be0d6df0a87836c550137acde8302201654aa1974d37a829083c3ba15088689f30b56d6a4f6cb14c7bad0ee3116d398",
8773                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8005d007000000000000220020403d394747cae42e98ff01734ad5c08f82ba123d3d9a620abda88989651e2ab5b80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e48440966a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400473044022072c2e2b1c899b2242656a537dde2892fa3801be0d6df0a87836c550137acde8302201654aa1974d37a829083c3ba15088689f30b56d6a4f6cb14c7bad0ee3116d3980147304402204bb3d6e279d71d9da414c82de42f1f954267c762b2e2eb8b76bc3be4ea07d4b0022014febc009c5edc8c3fc5d94015de163200f780046f1c293bfed8568f08b70fb301475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8774
8775                                   { 0,
8776                                   "3045022100939726680351a7856c1bc386d4a1f422c7d29bd7b56afc139570f508474e6c40022023175a799ccf44c017fbaadb924c40b2a12115a5b7d0dfd3228df803a2de8450",
8777                                   "304502210099c98c2edeeee6ec0fb5f3bea8b79bb016a2717afa9b5072370f34382de281d302206f5e2980a995e045cf90a547f0752a7ee99d48547bc135258fe7bc07e0154301",
8778                                   "02000000000101153cd825fdb3aa624bfe513e8031d5d08c5e582fb3d1d1fe8faf27d3eed410cd0000000000000000000122020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100939726680351a7856c1bc386d4a1f422c7d29bd7b56afc139570f508474e6c40022023175a799ccf44c017fbaadb924c40b2a12115a5b7d0dfd3228df803a2de84500148304502210099c98c2edeeee6ec0fb5f3bea8b79bb016a2717afa9b5072370f34382de281d302206f5e2980a995e045cf90a547f0752a7ee99d48547bc135258fe7bc07e015430101008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6868f6010000" },
8779
8780                                   { 1,
8781                                   "3044022021bb883bf324553d085ba2e821cad80c28ef8b303dbead8f98e548783c02d1600220638f9ef2a9bba25869afc923f4b5dc38be3bb459f9efa5d869392d5f7779a4a0",
8782                                   "3045022100fd85bd7697b89c08ec12acc8ba89b23090637d83abd26ca37e01ae93e67c367302202b551fe69386116c47f984aab9c8dfd25d864dcde5d3389cfbef2447a85c4b77",
8783                                   "02000000000101153cd825fdb3aa624bfe513e8031d5d08c5e582fb3d1d1fe8faf27d3eed410cd010000000000000000010a060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500473044022021bb883bf324553d085ba2e821cad80c28ef8b303dbead8f98e548783c02d1600220638f9ef2a9bba25869afc923f4b5dc38be3bb459f9efa5d869392d5f7779a4a001483045022100fd85bd7697b89c08ec12acc8ba89b23090637d83abd26ca37e01ae93e67c367302202b551fe69386116c47f984aab9c8dfd25d864dcde5d3389cfbef2447a85c4b7701008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8784
8785                                   { 2,
8786                                   "3045022100c9e6f0454aa598b905a35e641a70cc9f67b5f38cc4b00843a041238c4a9f1c4a0220260a2822a62da97e44583e837245995ca2e36781769c52f19e498efbdcca262b",
8787                                   "30450221008a9f2ea24cd455c2b64c1472a5fa83865b0a5f49a62b661801e884cf2849af8302204d44180e50bf6adfcf1c1e581d75af91aba4e28681ce4a5ee5f3cbf65eca10f3",
8788                                   "02000000000101153cd825fdb3aa624bfe513e8031d5d08c5e582fb3d1d1fe8faf27d3eed410cd020000000000000000019a090000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100c9e6f0454aa598b905a35e641a70cc9f67b5f38cc4b00843a041238c4a9f1c4a0220260a2822a62da97e44583e837245995ca2e36781769c52f19e498efbdcca262b014830450221008a9f2ea24cd455c2b64c1472a5fa83865b0a5f49a62b661801e884cf2849af8302204d44180e50bf6adfcf1c1e581d75af91aba4e28681ce4a5ee5f3cbf65eca10f3012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8789                 } );
8790
8791                 // commitment tx with four outputs untrimmed (minimum feerate)
8792                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8793                 chan.context.feerate_per_kw = 2195;
8794
8795                 test_commitment!("304402201a8c1b1f9671cd9e46c7323a104d7047cc48d3ee80d40d4512e0c72b8dc65666022066d7f9a2ce18c9eb22d2739ffcce05721c767f9b607622a31b6ea5793ddce403",
8796                                  "3044022044d592025b610c0d678f65032e87035cdfe89d1598c522cc32524ae8172417c30220749fef9d5b2ae8cdd91ece442ba8809bc891efedae2291e578475f97715d1767",
8797                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8004b80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484b8976a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400473044022044d592025b610c0d678f65032e87035cdfe89d1598c522cc32524ae8172417c30220749fef9d5b2ae8cdd91ece442ba8809bc891efedae2291e578475f97715d17670147304402201a8c1b1f9671cd9e46c7323a104d7047cc48d3ee80d40d4512e0c72b8dc65666022066d7f9a2ce18c9eb22d2739ffcce05721c767f9b607622a31b6ea5793ddce40301475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8798
8799                                   { 0,
8800                                   "3045022100e57b845066a06ee7c2cbfc29eabffe52daa9bf6f6de760066d04df9f9b250e0002202ffb197f0e6e0a77a75a9aff27014bd3de83b7f748d7efef986abe655e1dd50e",
8801                                   "3045022100ecc8c6529d0b2316d046f0f0757c1e1c25a636db168ec4f3aa1b9278df685dc0022067ae6b65e936f1337091f7b18a15935b608c5f2cdddb2f892ed0babfdd376d76",
8802                                   "020000000001018130a10f09b13677ba2885a8bca32860f3a952e5912b829a473639b5a2c07b900000000000000000000109060000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100e57b845066a06ee7c2cbfc29eabffe52daa9bf6f6de760066d04df9f9b250e0002202ffb197f0e6e0a77a75a9aff27014bd3de83b7f748d7efef986abe655e1dd50e01483045022100ecc8c6529d0b2316d046f0f0757c1e1c25a636db168ec4f3aa1b9278df685dc0022067ae6b65e936f1337091f7b18a15935b608c5f2cdddb2f892ed0babfdd376d7601008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8803
8804                                   { 1,
8805                                   "3045022100d193b7ecccad8057571620a0b1ffa6c48e9483311723b59cf536043b20bc51550220546d4bd37b3b101ecda14f6c907af46ec391abce1cd9c7ce22b1a62b534f2f2a",
8806                                   "3044022014d66f11f9cacf923807eba49542076c5fe5cccf252fb08fe98c78ef3ca6ab5402201b290dbe043cc512d9d78de074a5a129b8759bc6a6c546b190d120b690bd6e82",
8807                                   "020000000001018130a10f09b13677ba2885a8bca32860f3a952e5912b829a473639b5a2c07b900100000000000000000199090000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100d193b7ecccad8057571620a0b1ffa6c48e9483311723b59cf536043b20bc51550220546d4bd37b3b101ecda14f6c907af46ec391abce1cd9c7ce22b1a62b534f2f2a01473044022014d66f11f9cacf923807eba49542076c5fe5cccf252fb08fe98c78ef3ca6ab5402201b290dbe043cc512d9d78de074a5a129b8759bc6a6c546b190d120b690bd6e82012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8808                 } );
8809
8810                 // anchors: commitment tx with four outputs untrimmed (minimum dust limit)
8811                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8812                 chan.context.feerate_per_kw = 2185;
8813                 chan.context.holder_dust_limit_satoshis = 2001;
8814                 let cached_channel_type = chan.context.channel_type;
8815                 chan.context.channel_type = ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies();
8816
8817                 test_commitment_with_anchors!("3044022040f63a16148cf35c8d3d41827f5ae7f7c3746885bb64d4d1b895892a83812b3e02202fcf95c2bf02c466163b3fa3ced6a24926fbb4035095a96842ef516e86ba54c0",
8818                                  "3045022100cd8479cfe1edb1e5a1d487391e0451a469c7171e51e680183f19eb4321f20e9b02204eab7d5a6384b1b08e03baa6e4d9748dfd2b5ab2bae7e39604a0d0055bbffdd5",
8819                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80064a010000000000002200202b1b5854183c12d3316565972c4668929d314d81c5dcdbb21cb45fe8a9a8114f4a01000000000000220020e9e86e4823faa62e222ebc858a226636856158f07e69898da3b0d1af0ddb3994b80b000000000000220020f96d0334feb64a4f40eb272031d07afcb038db56aa57446d60308c9f8ccadef9a00f000000000000220020ce6e751274836ff59622a0d1e07f8831d80bd6730bd48581398bfadd2bb8da9ac0c62d0000000000220020f3394e1e619b0eca1f91be2fb5ab4dfc59ba5b84ebe014ad1d43a564d012994ac5916a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100cd8479cfe1edb1e5a1d487391e0451a469c7171e51e680183f19eb4321f20e9b02204eab7d5a6384b1b08e03baa6e4d9748dfd2b5ab2bae7e39604a0d0055bbffdd501473044022040f63a16148cf35c8d3d41827f5ae7f7c3746885bb64d4d1b895892a83812b3e02202fcf95c2bf02c466163b3fa3ced6a24926fbb4035095a96842ef516e86ba54c001475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8820
8821                                   { 0,
8822                                   "304402206870514a72ad6e723ff7f1e0370d7a33c1cd2a0b9272674143ebaf6a1d02dee102205bd953c34faf5e7322e9a1c0103581cb090280fda4f1039ee8552668afa90ebb",
8823                                   "30440220669de9ca7910eff65a7773ebd14a9fc371fe88cde5b8e2a81609d85c87ac939b02201ac29472fa4067322e92d75b624942d60be5050139b20bb363db75be79eb946f",
8824                                   "02000000000101ac13a7715f80b8e52dda43c6929cade5521bdced3a405da02b443f1ffb1e33cc02000000000100000001b80b0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402206870514a72ad6e723ff7f1e0370d7a33c1cd2a0b9272674143ebaf6a1d02dee102205bd953c34faf5e7322e9a1c0103581cb090280fda4f1039ee8552668afa90ebb834730440220669de9ca7910eff65a7773ebd14a9fc371fe88cde5b8e2a81609d85c87ac939b02201ac29472fa4067322e92d75b624942d60be5050139b20bb363db75be79eb946f01008876a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6851b27568f7010000" },
8825
8826                                   { 1,
8827                                   "3045022100949e8dd938da56445b1cdfdebe1b7efea086edd05d89910d205a1e2e033ce47102202cbd68b5262ab144d9ec12653f87dfb0bb6bd05d1f58ae1e523f028eaefd7271",
8828                                   "3045022100e3104ed8b239f8019e5f0a1a73d7782a94a8c36e7984f476c3a0b3cb0e62e27902207e3d52884600985f8a2098e53a5c30dd6a5e857733acfaa07ab2162421ed2688",
8829                                   "02000000000101ac13a7715f80b8e52dda43c6929cade5521bdced3a405da02b443f1ffb1e33cc03000000000100000001a00f0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100949e8dd938da56445b1cdfdebe1b7efea086edd05d89910d205a1e2e033ce47102202cbd68b5262ab144d9ec12653f87dfb0bb6bd05d1f58ae1e523f028eaefd727183483045022100e3104ed8b239f8019e5f0a1a73d7782a94a8c36e7984f476c3a0b3cb0e62e27902207e3d52884600985f8a2098e53a5c30dd6a5e857733acfaa07ab2162421ed2688012004040404040404040404040404040404040404040404040404040404040404048d76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac6851b2756800000000" }
8830                 } );
8831
8832                 // commitment tx with four outputs untrimmed (maximum feerate)
8833                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8834                 chan.context.feerate_per_kw = 3702;
8835                 chan.context.holder_dust_limit_satoshis = 546;
8836                 chan.context.channel_type = cached_channel_type.clone();
8837
8838                 test_commitment!("304502210092a587aeb777f869e7ff0d7898ea619ee26a3dacd1f3672b945eea600be431100220077ee9eae3528d15251f2a52b607b189820e57a6ccfac8d1af502b132ee40169",
8839                                  "3045022100e5efb73c32d32da2d79702299b6317de6fb24a60476e3855926d78484dd1b3c802203557cb66a42c944ef06e00bcc4da35a5bcb2f185aab0f8e403e519e1d66aaf75",
8840                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8004b80b000000000000220020c20b5d1f8584fd90443e7b7b720136174fa4b9333c261d04dbbd012635c0f419a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e4846f916a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100e5efb73c32d32da2d79702299b6317de6fb24a60476e3855926d78484dd1b3c802203557cb66a42c944ef06e00bcc4da35a5bcb2f185aab0f8e403e519e1d66aaf750148304502210092a587aeb777f869e7ff0d7898ea619ee26a3dacd1f3672b945eea600be431100220077ee9eae3528d15251f2a52b607b189820e57a6ccfac8d1af502b132ee4016901475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8841
8842                                   { 0,
8843                                   "304402206fa54c11f98c3bae1e93df43fc7affeb05b476bf8060c03e29c377c69bc08e8b0220672701cce50d5c379ff45a5d2cfe48ac44973adb066ac32608e21221d869bb89",
8844                                   "304402206e36c683ebf2cb16bcef3d5439cf8b53cd97280a365ed8acd7abb85a8ba5f21c02206e8621edfc2a5766cbc96eb67fd501127ff163eb6b85518a39f7d4974aef126f",
8845                                   "020000000001018db483bff65c70ee71d8282aeec5a880e2e2b39e45772bda5460403095c62e3f0000000000000000000122020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402206fa54c11f98c3bae1e93df43fc7affeb05b476bf8060c03e29c377c69bc08e8b0220672701cce50d5c379ff45a5d2cfe48ac44973adb066ac32608e21221d869bb890147304402206e36c683ebf2cb16bcef3d5439cf8b53cd97280a365ed8acd7abb85a8ba5f21c02206e8621edfc2a5766cbc96eb67fd501127ff163eb6b85518a39f7d4974aef126f01008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000" },
8846
8847                                   { 1,
8848                                   "3044022057649739b0eb74d541ead0dfdb3d4b2c15aa192720031044c3434c67812e5ca902201e5ede42d960ae551707f4a6b34b09393cf4dee2418507daa022e3550dbb5817",
8849                                   "304402207faad26678c8850e01b4a0696d60841f7305e1832b786110ee9075cb92ed14a30220516ef8ee5dfa80824ea28cbcec0dd95f8b847146257c16960db98507db15ffdc",
8850                                   "020000000001018db483bff65c70ee71d8282aeec5a880e2e2b39e45772bda5460403095c62e3f0100000000000000000176050000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500473044022057649739b0eb74d541ead0dfdb3d4b2c15aa192720031044c3434c67812e5ca902201e5ede42d960ae551707f4a6b34b09393cf4dee2418507daa022e3550dbb58170147304402207faad26678c8850e01b4a0696d60841f7305e1832b786110ee9075cb92ed14a30220516ef8ee5dfa80824ea28cbcec0dd95f8b847146257c16960db98507db15ffdc012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8851                 } );
8852
8853                 // commitment tx with three outputs untrimmed (minimum feerate)
8854                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8855                 chan.context.feerate_per_kw = 3703;
8856
8857                 test_commitment!("3045022100b495d239772a237ff2cf354b1b11be152fd852704cb184e7356d13f2fb1e5e430220723db5cdb9cbd6ead7bfd3deb419cf41053a932418cbb22a67b581f40bc1f13e",
8858                                  "304402201b736d1773a124c745586217a75bed5f66c05716fbe8c7db4fdb3c3069741cdd02205083f39c321c1bcadfc8d97e3c791a66273d936abac0c6a2fde2ed46019508e1",
8859                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8003a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484eb936a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e040047304402201b736d1773a124c745586217a75bed5f66c05716fbe8c7db4fdb3c3069741cdd02205083f39c321c1bcadfc8d97e3c791a66273d936abac0c6a2fde2ed46019508e101483045022100b495d239772a237ff2cf354b1b11be152fd852704cb184e7356d13f2fb1e5e430220723db5cdb9cbd6ead7bfd3deb419cf41053a932418cbb22a67b581f40bc1f13e01475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8860
8861                                   { 0,
8862                                   "3045022100c34c61735f93f2e324cc873c3b248111ccf8f6db15d5969583757010d4ad2b4602207867bb919b2ddd6387873e425345c9b7fd18d1d66aba41f3607bc2896ef3c30a",
8863                                   "3045022100988c143e2110067117d2321bdd4bd16ca1734c98b29290d129384af0962b634e02206c1b02478878c5f547018b833986578f90c3e9be669fe5788ad0072a55acbb05",
8864                                   "0200000000010120060e4a29579d429f0f27c17ee5f1ee282f20d706d6f90b63d35946d8f3029a0000000000000000000175050000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100c34c61735f93f2e324cc873c3b248111ccf8f6db15d5969583757010d4ad2b4602207867bb919b2ddd6387873e425345c9b7fd18d1d66aba41f3607bc2896ef3c30a01483045022100988c143e2110067117d2321bdd4bd16ca1734c98b29290d129384af0962b634e02206c1b02478878c5f547018b833986578f90c3e9be669fe5788ad0072a55acbb05012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8865                 } );
8866
8867                 // anchors: commitment tx with three outputs untrimmed (minimum dust limit)
8868                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8869                 chan.context.feerate_per_kw = 3687;
8870                 chan.context.holder_dust_limit_satoshis = 3001;
8871                 chan.context.channel_type = ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies();
8872
8873                 test_commitment_with_anchors!("3045022100ad6c71569856b2d7ff42e838b4abe74a713426b37f22fa667a195a4c88908c6902202b37272b02a42dc6d9f4f82cab3eaf84ac882d9ed762859e1e75455c2c228377",
8874                                  "3045022100c970799bcb33f43179eb43b3378a0a61991cf2923f69b36ef12548c3df0e6d500220413dc27d2e39ee583093adfcb7799be680141738babb31cc7b0669a777a31f5d",
8875                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80054a010000000000002200202b1b5854183c12d3316565972c4668929d314d81c5dcdbb21cb45fe8a9a8114f4a01000000000000220020e9e86e4823faa62e222ebc858a226636856158f07e69898da3b0d1af0ddb3994a00f000000000000220020ce6e751274836ff59622a0d1e07f8831d80bd6730bd48581398bfadd2bb8da9ac0c62d0000000000220020f3394e1e619b0eca1f91be2fb5ab4dfc59ba5b84ebe014ad1d43a564d012994aa28b6a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100c970799bcb33f43179eb43b3378a0a61991cf2923f69b36ef12548c3df0e6d500220413dc27d2e39ee583093adfcb7799be680141738babb31cc7b0669a777a31f5d01483045022100ad6c71569856b2d7ff42e838b4abe74a713426b37f22fa667a195a4c88908c6902202b37272b02a42dc6d9f4f82cab3eaf84ac882d9ed762859e1e75455c2c22837701475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8876
8877                                   { 0,
8878                                   "3044022017b558a3cf5f0cb94269e2e927b29ed22bd2416abb8a7ce6de4d1256f359b93602202e9ca2b1a23ea3e69f433c704e327739e219804b8c188b1d52f74fd5a9de954c",
8879                                   "3045022100af7a8b7c7ff2080c68995254cb66d64d9954edcc5baac3bb4f27ed2d29aaa6120220421c27da7a60574a9263f271e0f3bd34594ec6011095190022b3b54596ea03de",
8880                                   "02000000000101542562b326c08e3a076d9cfca2be175041366591da334d8d513ff1686fd95a6002000000000100000001a00f0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500473044022017b558a3cf5f0cb94269e2e927b29ed22bd2416abb8a7ce6de4d1256f359b93602202e9ca2b1a23ea3e69f433c704e327739e219804b8c188b1d52f74fd5a9de954c83483045022100af7a8b7c7ff2080c68995254cb66d64d9954edcc5baac3bb4f27ed2d29aaa6120220421c27da7a60574a9263f271e0f3bd34594ec6011095190022b3b54596ea03de012004040404040404040404040404040404040404040404040404040404040404048d76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac6851b2756800000000" }
8881                 } );
8882
8883                 // commitment tx with three outputs untrimmed (maximum feerate)
8884                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8885                 chan.context.feerate_per_kw = 4914;
8886                 chan.context.holder_dust_limit_satoshis = 546;
8887                 chan.context.channel_type = cached_channel_type.clone();
8888
8889                 test_commitment!("3045022100b4b16d5f8cc9fc4c1aff48831e832a0d8990e133978a66e302c133550954a44d022073573ce127e2200d316f6b612803a5c0c97b8d20e1e44dbe2ac0dd2fb8c95244",
8890                                  "3045022100d72638bc6308b88bb6d45861aae83e5b9ff6e10986546e13bce769c70036e2620220320be7c6d66d22f30b9fcd52af66531505b1310ca3b848c19285b38d8a1a8c19",
8891                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8003a00f0000000000002200208c48d15160397c9731df9bc3b236656efb6665fbfe92b4a6878e88a499f741c4c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484ae8f6a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100d72638bc6308b88bb6d45861aae83e5b9ff6e10986546e13bce769c70036e2620220320be7c6d66d22f30b9fcd52af66531505b1310ca3b848c19285b38d8a1a8c1901483045022100b4b16d5f8cc9fc4c1aff48831e832a0d8990e133978a66e302c133550954a44d022073573ce127e2200d316f6b612803a5c0c97b8d20e1e44dbe2ac0dd2fb8c9524401475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
8892
8893                                   { 0,
8894                                   "3045022100f43591c156038ba217756006bb3c55f7d113a325cdd7d9303c82115372858d68022016355b5aadf222bc8d12e426c75f4a03423917b2443a103eb2a498a3a2234374",
8895                                   "30440220585dee80fafa264beac535c3c0bb5838ac348b156fdc982f86adc08dfc9bfd250220130abb82f9f295cc9ef423dcfef772fde2acd85d9df48cc538981d26a10a9c10",
8896                                   "02000000000101a9172908eace869cc35128c31fc2ab502f72e4dff31aab23e0244c4b04b11ab00000000000000000000122020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100f43591c156038ba217756006bb3c55f7d113a325cdd7d9303c82115372858d68022016355b5aadf222bc8d12e426c75f4a03423917b2443a103eb2a498a3a2234374014730440220585dee80fafa264beac535c3c0bb5838ac348b156fdc982f86adc08dfc9bfd250220130abb82f9f295cc9ef423dcfef772fde2acd85d9df48cc538981d26a10a9c10012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000" }
8897                 } );
8898
8899                 // commitment tx with two outputs untrimmed (minimum feerate)
8900                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8901                 chan.context.feerate_per_kw = 4915;
8902                 chan.context.holder_dust_limit_satoshis = 546;
8903
8904                 test_commitment!("304402203a286936e74870ca1459c700c71202af0381910a6bfab687ef494ef1bc3e02c902202506c362d0e3bee15e802aa729bf378e051644648253513f1c085b264cc2a720",
8905                                  "30450221008a953551f4d67cb4df3037207fc082ddaf6be84d417b0bd14c80aab66f1b01a402207508796dc75034b2dee876fe01dc05a08b019f3e5d689ac8842ade2f1befccf5",
8906                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8002c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484fa926a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e04004830450221008a953551f4d67cb4df3037207fc082ddaf6be84d417b0bd14c80aab66f1b01a402207508796dc75034b2dee876fe01dc05a08b019f3e5d689ac8842ade2f1befccf50147304402203a286936e74870ca1459c700c71202af0381910a6bfab687ef494ef1bc3e02c902202506c362d0e3bee15e802aa729bf378e051644648253513f1c085b264cc2a72001475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8907
8908                 // anchors: commitment tx with two outputs untrimmed (minimum dust limit)
8909                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8910                 chan.context.feerate_per_kw = 4894;
8911                 chan.context.holder_dust_limit_satoshis = 4001;
8912                 chan.context.channel_type = ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies();
8913
8914                 test_commitment_with_anchors!("3045022100e784a66b1588575801e237d35e510fd92a81ae3a4a2a1b90c031ad803d07b3f3022021bc5f16501f167607d63b681442da193eb0a76b4b7fd25c2ed4f8b28fd35b95",
8915                                  "30450221009f16ac85d232e4eddb3fcd750a68ebf0b58e3356eaada45d3513ede7e817bf4c02207c2b043b4e5f971261975406cb955219fa56bffe5d834a833694b5abc1ce4cfd",
8916                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80044a010000000000002200202b1b5854183c12d3316565972c4668929d314d81c5dcdbb21cb45fe8a9a8114f4a01000000000000220020e9e86e4823faa62e222ebc858a226636856158f07e69898da3b0d1af0ddb3994c0c62d0000000000220020f3394e1e619b0eca1f91be2fb5ab4dfc59ba5b84ebe014ad1d43a564d012994ad0886a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e04004830450221009f16ac85d232e4eddb3fcd750a68ebf0b58e3356eaada45d3513ede7e817bf4c02207c2b043b4e5f971261975406cb955219fa56bffe5d834a833694b5abc1ce4cfd01483045022100e784a66b1588575801e237d35e510fd92a81ae3a4a2a1b90c031ad803d07b3f3022021bc5f16501f167607d63b681442da193eb0a76b4b7fd25c2ed4f8b28fd35b9501475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8917
8918                 // commitment tx with two outputs untrimmed (maximum feerate)
8919                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8920                 chan.context.feerate_per_kw = 9651180;
8921                 chan.context.holder_dust_limit_satoshis = 546;
8922                 chan.context.channel_type = cached_channel_type.clone();
8923
8924                 test_commitment!("304402200a8544eba1d216f5c5e530597665fa9bec56943c0f66d98fc3d028df52d84f7002201e45fa5c6bc3a506cc2553e7d1c0043a9811313fc39c954692c0d47cfce2bbd3",
8925                                  "3045022100e11b638c05c650c2f63a421d36ef8756c5ce82f2184278643520311cdf50aa200220259565fb9c8e4a87ccaf17f27a3b9ca4f20625754a0920d9c6c239d8156a11de",
8926                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b800222020000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80ec0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e4840400483045022100e11b638c05c650c2f63a421d36ef8756c5ce82f2184278643520311cdf50aa200220259565fb9c8e4a87ccaf17f27a3b9ca4f20625754a0920d9c6c239d8156a11de0147304402200a8544eba1d216f5c5e530597665fa9bec56943c0f66d98fc3d028df52d84f7002201e45fa5c6bc3a506cc2553e7d1c0043a9811313fc39c954692c0d47cfce2bbd301475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8927
8928                 // commitment tx with one output untrimmed (minimum feerate)
8929                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8930                 chan.context.feerate_per_kw = 9651181;
8931
8932                 test_commitment!("304402202ade0142008309eb376736575ad58d03e5b115499709c6db0b46e36ff394b492022037b63d78d66404d6504d4c4ac13be346f3d1802928a6d3ad95a6a944227161a2",
8933                                  "304402207e8d51e0c570a5868a78414f4e0cbfaed1106b171b9581542c30718ee4eb95ba02203af84194c97adf98898c9afe2f2ed4a7f8dba05a2dfab28ac9d9c604aa49a379",
8934                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8001c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484040047304402207e8d51e0c570a5868a78414f4e0cbfaed1106b171b9581542c30718ee4eb95ba02203af84194c97adf98898c9afe2f2ed4a7f8dba05a2dfab28ac9d9c604aa49a3790147304402202ade0142008309eb376736575ad58d03e5b115499709c6db0b46e36ff394b492022037b63d78d66404d6504d4c4ac13be346f3d1802928a6d3ad95a6a944227161a201475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8935
8936                 // anchors: commitment tx with one output untrimmed (minimum dust limit)
8937                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8938                 chan.context.feerate_per_kw = 6216010;
8939                 chan.context.holder_dust_limit_satoshis = 4001;
8940                 chan.context.channel_type = ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies();
8941
8942                 test_commitment_with_anchors!("30450221008fd5dbff02e4b59020d4cd23a3c30d3e287065fda75a0a09b402980adf68ccda022001e0b8b620cd915ddff11f1de32addf23d81d51b90e6841b2cb8dcaf3faa5ecf",
8943                                  "30450221009ad80792e3038fe6968d12ff23e6888a565c3ddd065037f357445f01675d63f3022018384915e5f1f4ae157e15debf4f49b61c8d9d2b073c7d6f97c4a68caa3ed4c1",
8944                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80024a01000000000000220020e9e86e4823faa62e222ebc858a226636856158f07e69898da3b0d1af0ddb3994c0c62d0000000000220020f3394e1e619b0eca1f91be2fb5ab4dfc59ba5b84ebe014ad1d43a564d012994a04004830450221009ad80792e3038fe6968d12ff23e6888a565c3ddd065037f357445f01675d63f3022018384915e5f1f4ae157e15debf4f49b61c8d9d2b073c7d6f97c4a68caa3ed4c1014830450221008fd5dbff02e4b59020d4cd23a3c30d3e287065fda75a0a09b402980adf68ccda022001e0b8b620cd915ddff11f1de32addf23d81d51b90e6841b2cb8dcaf3faa5ecf01475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8945
8946                 // commitment tx with fee greater than funder amount
8947                 chan.context.value_to_self_msat = 6993000000; // 7000000000 - 7000000
8948                 chan.context.feerate_per_kw = 9651936;
8949                 chan.context.holder_dust_limit_satoshis = 546;
8950                 chan.context.channel_type = cached_channel_type;
8951
8952                 test_commitment!("304402202ade0142008309eb376736575ad58d03e5b115499709c6db0b46e36ff394b492022037b63d78d66404d6504d4c4ac13be346f3d1802928a6d3ad95a6a944227161a2",
8953                                  "304402207e8d51e0c570a5868a78414f4e0cbfaed1106b171b9581542c30718ee4eb95ba02203af84194c97adf98898c9afe2f2ed4a7f8dba05a2dfab28ac9d9c604aa49a379",
8954                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8001c0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484040047304402207e8d51e0c570a5868a78414f4e0cbfaed1106b171b9581542c30718ee4eb95ba02203af84194c97adf98898c9afe2f2ed4a7f8dba05a2dfab28ac9d9c604aa49a3790147304402202ade0142008309eb376736575ad58d03e5b115499709c6db0b46e36ff394b492022037b63d78d66404d6504d4c4ac13be346f3d1802928a6d3ad95a6a944227161a201475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {});
8955
8956                 // commitment tx with 3 htlc outputs, 2 offered having the same amount and preimage
8957                 chan.context.value_to_self_msat = 7_000_000_000 - 2_000_000;
8958                 chan.context.feerate_per_kw = 253;
8959                 chan.context.pending_inbound_htlcs.clear();
8960                 chan.context.pending_inbound_htlcs.push({
8961                         let mut out = InboundHTLCOutput{
8962                                 htlc_id: 1,
8963                                 amount_msat: 2000000,
8964                                 cltv_expiry: 501,
8965                                 payment_hash: PaymentHash([0; 32]),
8966                                 state: InboundHTLCState::Committed,
8967                         };
8968                         out.payment_hash.0 = Sha256::hash(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap()).into_inner();
8969                         out
8970                 });
8971                 chan.context.pending_outbound_htlcs.clear();
8972                 chan.context.pending_outbound_htlcs.push({
8973                         let mut out = OutboundHTLCOutput{
8974                                 htlc_id: 6,
8975                                 amount_msat: 5000001,
8976                                 cltv_expiry: 506,
8977                                 payment_hash: PaymentHash([0; 32]),
8978                                 state: OutboundHTLCState::Committed,
8979                                 source: HTLCSource::dummy(),
8980                                 skimmed_fee_msat: None,
8981                         };
8982                         out.payment_hash.0 = Sha256::hash(&hex::decode("0505050505050505050505050505050505050505050505050505050505050505").unwrap()).into_inner();
8983                         out
8984                 });
8985                 chan.context.pending_outbound_htlcs.push({
8986                         let mut out = OutboundHTLCOutput{
8987                                 htlc_id: 5,
8988                                 amount_msat: 5000000,
8989                                 cltv_expiry: 505,
8990                                 payment_hash: PaymentHash([0; 32]),
8991                                 state: OutboundHTLCState::Committed,
8992                                 source: HTLCSource::dummy(),
8993                                 skimmed_fee_msat: None,
8994                         };
8995                         out.payment_hash.0 = Sha256::hash(&hex::decode("0505050505050505050505050505050505050505050505050505050505050505").unwrap()).into_inner();
8996                         out
8997                 });
8998
8999                 test_commitment!("304402207d0870964530f97b62497b11153c551dca0a1e226815ef0a336651158da0f82402200f5378beee0e77759147b8a0a284decd11bfd2bc55c8fafa41c134fe996d43c8",
9000                                  "304402200d10bf5bc5397fc59d7188ae438d80c77575595a2d488e41bd6363a810cc8d72022012b57e714fbbfdf7a28c47d5b370cb8ac37c8545f596216e5b21e9b236ef457c",
9001                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b8005d007000000000000220020748eba944fedc8827f6b06bc44678f93c0f9e6078b35c6331ed31e75f8ce0c2d8813000000000000220020305c12e1a0bc21e283c131cea1c66d68857d28b7b2fce0a6fbc40c164852121b8813000000000000220020305c12e1a0bc21e283c131cea1c66d68857d28b7b2fce0a6fbc40c164852121bc0c62d0000000000160014cc1b07838e387deacd0e5232e1e8b49f4c29e484a69f6a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e040047304402200d10bf5bc5397fc59d7188ae438d80c77575595a2d488e41bd6363a810cc8d72022012b57e714fbbfdf7a28c47d5b370cb8ac37c8545f596216e5b21e9b236ef457c0147304402207d0870964530f97b62497b11153c551dca0a1e226815ef0a336651158da0f82402200f5378beee0e77759147b8a0a284decd11bfd2bc55c8fafa41c134fe996d43c801475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
9002
9003                                   { 0,
9004                                   "3045022100b470fe12e5b7fea9eccb8cbff1972cea4f96758041898982a02bcc7f9d56d50b0220338a75b2afaab4ec00cdd2d9273c68c7581ff5a28bcbb40c4d138b81f1d45ce5",
9005                                   "3044022017b90c65207522a907fb6a137f9dd528b3389465a8ae72308d9e1d564f512cf402204fc917b4f0e88604a3e994f85bfae7c7c1f9d9e9f78e8cd112e0889720d9405b",
9006                                   "020000000001014bdccf28653066a2c554cafeffdfe1e678e64a69b056684deb0c4fba909423ec000000000000000000011f070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100b470fe12e5b7fea9eccb8cbff1972cea4f96758041898982a02bcc7f9d56d50b0220338a75b2afaab4ec00cdd2d9273c68c7581ff5a28bcbb40c4d138b81f1d45ce501473044022017b90c65207522a907fb6a137f9dd528b3389465a8ae72308d9e1d564f512cf402204fc917b4f0e88604a3e994f85bfae7c7c1f9d9e9f78e8cd112e0889720d9405b012001010101010101010101010101010101010101010101010101010101010101018a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac686800000000" },
9007                                   { 1,
9008                                   "3045022100b575379f6d8743cb0087648f81cfd82d17a97fbf8f67e058c65ce8b9d25df9500220554a210d65b02d9f36c6adf0f639430ca8293196ba5089bf67cc3a9813b7b00a",
9009                                   "3045022100ee2e16b90930a479b13f8823a7f14b600198c838161160b9436ed086d3fc57e002202a66fa2324f342a17129949c640bfe934cbc73a869ba7c06aa25c5a3d0bfb53d",
9010                                   "020000000001014bdccf28653066a2c554cafeffdfe1e678e64a69b056684deb0c4fba909423ec01000000000000000001e1120000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100b575379f6d8743cb0087648f81cfd82d17a97fbf8f67e058c65ce8b9d25df9500220554a210d65b02d9f36c6adf0f639430ca8293196ba5089bf67cc3a9813b7b00a01483045022100ee2e16b90930a479b13f8823a7f14b600198c838161160b9436ed086d3fc57e002202a66fa2324f342a17129949c640bfe934cbc73a869ba7c06aa25c5a3d0bfb53d01008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9142002cc93ebefbb1b73f0af055dcc27a0b504ad7688ac6868f9010000" },
9011                                   { 2,
9012                                   "30440220471c9f3ad92e49b13b7b8059f43ecf8f7887b0dccbb9fdb54bfe23d62a8ae332022024bd22fae0740e86a44228c35330da9526fd7306dffb2b9dc362d5e78abef7cc",
9013                                   "304402207157f452f2506d73c315192311893800cfb3cc235cc1185b1cfcc136b55230db022014be242dbc6c5da141fec4034e7f387f74d6ff1899453d72ba957467540e1ecb",
9014                                   "020000000001014bdccf28653066a2c554cafeffdfe1e678e64a69b056684deb0c4fba909423ec02000000000000000001e1120000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e05004730440220471c9f3ad92e49b13b7b8059f43ecf8f7887b0dccbb9fdb54bfe23d62a8ae332022024bd22fae0740e86a44228c35330da9526fd7306dffb2b9dc362d5e78abef7cc0147304402207157f452f2506d73c315192311893800cfb3cc235cc1185b1cfcc136b55230db022014be242dbc6c5da141fec4034e7f387f74d6ff1899453d72ba957467540e1ecb01008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9142002cc93ebefbb1b73f0af055dcc27a0b504ad7688ac6868fa010000" }
9015                 } );
9016
9017                 chan.context.channel_type = ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies();
9018                 test_commitment_with_anchors!("3044022027b38dfb654c34032ffb70bb43022981652fce923cbbe3cbe7394e2ade8b34230220584195b78da6e25c2e8da6b4308d9db25b65b64975db9266163ef592abb7c725",
9019                                  "3045022100b4014970d9d7962853f3f85196144671d7d5d87426250f0a5fdaf9a55292e92502205360910c9abb397467e19dbd63d081deb4a3240903114c98cec0a23591b79b76",
9020                                  "02000000000101bef67e4e2fb9ddeeb3461973cd4c62abb35050b1add772995b820b584a488489000000000038b02b80074a010000000000002200202b1b5854183c12d3316565972c4668929d314d81c5dcdbb21cb45fe8a9a8114f4a01000000000000220020e9e86e4823faa62e222ebc858a226636856158f07e69898da3b0d1af0ddb3994d007000000000000220020fe0598d74fee2205cc3672e6e6647706b4f3099713b4661b62482c3addd04a5e881300000000000022002018e40f9072c44350f134bdc887bab4d9bdfc8aa468a25616c80e21757ba5dac7881300000000000022002018e40f9072c44350f134bdc887bab4d9bdfc8aa468a25616c80e21757ba5dac7c0c62d0000000000220020f3394e1e619b0eca1f91be2fb5ab4dfc59ba5b84ebe014ad1d43a564d012994aad9c6a00000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0400483045022100b4014970d9d7962853f3f85196144671d7d5d87426250f0a5fdaf9a55292e92502205360910c9abb397467e19dbd63d081deb4a3240903114c98cec0a23591b79b7601473044022027b38dfb654c34032ffb70bb43022981652fce923cbbe3cbe7394e2ade8b34230220584195b78da6e25c2e8da6b4308d9db25b65b64975db9266163ef592abb7c72501475221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae3e195220", {
9021
9022                                   { 0,
9023                                   "30440220078fe5343dab88c348a3a8a9c1a9293259dbf35507ae971702cc39dd623ea9af022011ed0c0f35243cd0bb4d9ca3c772379b2b5f4af93140e9fdc5600dfec1cdb0c2",
9024                                   "304402205df665e2908c7690d2d33eb70e6e119958c28febe141a94ed0dd9a55ce7c8cfc0220364d02663a5d019af35c5cd5fda9465d985d85bbd12db207738d61163449a424",
9025                                   "020000000001013d060d0305c9616eaabc21d41fae85bcb5477b5d7f1c92aa429cf15339bbe1c402000000000100000001d0070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e05004730440220078fe5343dab88c348a3a8a9c1a9293259dbf35507ae971702cc39dd623ea9af022011ed0c0f35243cd0bb4d9ca3c772379b2b5f4af93140e9fdc5600dfec1cdb0c28347304402205df665e2908c7690d2d33eb70e6e119958c28febe141a94ed0dd9a55ce7c8cfc0220364d02663a5d019af35c5cd5fda9465d985d85bbd12db207738d61163449a424012001010101010101010101010101010101010101010101010101010101010101018d76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac6851b2756800000000" },
9026                                   { 1,
9027                                   "304402202df6bf0f98a42cfd0172a16bded7d1b16c14f5f42ba23f5c54648c14b647531302200fe1508626817f23925bb56951d5e4b2654c751743ab6db48a6cce7dda17c01c",
9028                                   "304402203f99ec05cdd89558a23683b471c1dcce8f6a92295f1fff3b0b5d21be4d4f97ea022019d29070690fc2c126fe27cc4ab2f503f289d362721b2efa7418e7fddb939a5b",
9029                                   "020000000001013d060d0305c9616eaabc21d41fae85bcb5477b5d7f1c92aa429cf15339bbe1c40300000000010000000188130000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402202df6bf0f98a42cfd0172a16bded7d1b16c14f5f42ba23f5c54648c14b647531302200fe1508626817f23925bb56951d5e4b2654c751743ab6db48a6cce7dda17c01c8347304402203f99ec05cdd89558a23683b471c1dcce8f6a92295f1fff3b0b5d21be4d4f97ea022019d29070690fc2c126fe27cc4ab2f503f289d362721b2efa7418e7fddb939a5b01008876a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9142002cc93ebefbb1b73f0af055dcc27a0b504ad7688ac6851b27568f9010000" },
9030                                   { 2,
9031                                   "3045022100bd206b420c495f3aa714d3ea4766cbe95441deacb5d2f737f1913349aee7c2ae02200249d2c950dd3b15326bf378ae5d2b871d33d6737f5d70735f3de8383140f2a1",
9032                                   "3045022100f2cd35e385b9b7e15b92a5d78d120b6b2c5af4e974bc01e884c5facb3bb5966c0220706e0506477ce809a40022d6de8e041e9ef13136c45abee9c36f58a01fdb188b",
9033                                   "020000000001013d060d0305c9616eaabc21d41fae85bcb5477b5d7f1c92aa429cf15339bbe1c40400000000010000000188130000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100bd206b420c495f3aa714d3ea4766cbe95441deacb5d2f737f1913349aee7c2ae02200249d2c950dd3b15326bf378ae5d2b871d33d6737f5d70735f3de8383140f2a183483045022100f2cd35e385b9b7e15b92a5d78d120b6b2c5af4e974bc01e884c5facb3bb5966c0220706e0506477ce809a40022d6de8e041e9ef13136c45abee9c36f58a01fdb188b01008876a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9142002cc93ebefbb1b73f0af055dcc27a0b504ad7688ac6851b27568fa010000" }
9034                 } );
9035         }
9036
9037         #[test]
9038         fn test_per_commitment_secret_gen() {
9039                 // Test vectors from BOLT 3 Appendix D:
9040
9041                 let mut seed = [0; 32];
9042                 seed[0..32].clone_from_slice(&hex::decode("0000000000000000000000000000000000000000000000000000000000000000").unwrap());
9043                 assert_eq!(chan_utils::build_commitment_secret(&seed, 281474976710655),
9044                            hex::decode("02a40c85b6f28da08dfdbe0926c53fab2de6d28c10301f8f7c4073d5e42e3148").unwrap()[..]);
9045
9046                 seed[0..32].clone_from_slice(&hex::decode("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF").unwrap());
9047                 assert_eq!(chan_utils::build_commitment_secret(&seed, 281474976710655),
9048                            hex::decode("7cc854b54e3e0dcdb010d7a3fee464a9687be6e8db3be6854c475621e007a5dc").unwrap()[..]);
9049
9050                 assert_eq!(chan_utils::build_commitment_secret(&seed, 0xaaaaaaaaaaa),
9051                            hex::decode("56f4008fb007ca9acf0e15b054d5c9fd12ee06cea347914ddbaed70d1c13a528").unwrap()[..]);
9052
9053                 assert_eq!(chan_utils::build_commitment_secret(&seed, 0x555555555555),
9054                            hex::decode("9015daaeb06dba4ccc05b91b2f73bd54405f2be9f217fbacd3c5ac2e62327d31").unwrap()[..]);
9055
9056                 seed[0..32].clone_from_slice(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap());
9057                 assert_eq!(chan_utils::build_commitment_secret(&seed, 1),
9058                            hex::decode("915c75942a26bb3a433a8ce2cb0427c29ec6c1775cfc78328b57f6ba7bfeaa9c").unwrap()[..]);
9059         }
9060
9061         #[test]
9062         fn test_key_derivation() {
9063                 // Test vectors from BOLT 3 Appendix E:
9064                 let secp_ctx = Secp256k1::new();
9065
9066                 let base_secret = SecretKey::from_slice(&hex::decode("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f").unwrap()[..]).unwrap();
9067                 let per_commitment_secret = SecretKey::from_slice(&hex::decode("1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100").unwrap()[..]).unwrap();
9068
9069                 let base_point = PublicKey::from_secret_key(&secp_ctx, &base_secret);
9070                 assert_eq!(base_point.serialize()[..], hex::decode("036d6caac248af96f6afa7f904f550253a0f3ef3f5aa2fe6838a95b216691468e2").unwrap()[..]);
9071
9072                 let per_commitment_point = PublicKey::from_secret_key(&secp_ctx, &per_commitment_secret);
9073                 assert_eq!(per_commitment_point.serialize()[..], hex::decode("025f7117a78150fe2ef97db7cfc83bd57b2e2c0d0dd25eaf467a4a1c2a45ce1486").unwrap()[..]);
9074
9075                 assert_eq!(chan_utils::derive_public_key(&secp_ctx, &per_commitment_point, &base_point).serialize()[..],
9076                                 hex::decode("0235f2dbfaa89b57ec7b055afe29849ef7ddfeb1cefdb9ebdc43f5494984db29e5").unwrap()[..]);
9077
9078                 assert_eq!(chan_utils::derive_private_key(&secp_ctx, &per_commitment_point, &base_secret),
9079                                 SecretKey::from_slice(&hex::decode("cbced912d3b21bf196a766651e436aff192362621ce317704ea2f75d87e7be0f").unwrap()[..]).unwrap());
9080
9081                 assert_eq!(chan_utils::derive_public_revocation_key(&secp_ctx, &per_commitment_point, &base_point).serialize()[..],
9082                                 hex::decode("02916e326636d19c33f13e8c0c3a03dd157f332f3e99c317c141dd865eb01f8ff0").unwrap()[..]);
9083
9084                 assert_eq!(chan_utils::derive_private_revocation_key(&secp_ctx, &per_commitment_secret, &base_secret),
9085                                 SecretKey::from_slice(&hex::decode("d09ffff62ddb2297ab000cc85bcb4283fdeb6aa052affbc9dddcf33b61078110").unwrap()[..]).unwrap());
9086         }
9087
9088         #[test]
9089         fn test_zero_conf_channel_type_support() {
9090                 let feeest = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
9091                 let secp_ctx = Secp256k1::new();
9092                 let seed = [42; 32];
9093                 let network = Network::Testnet;
9094                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
9095                 let logger = test_utils::TestLogger::new();
9096
9097                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9098                 let config = UserConfig::default();
9099                 let node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider,
9100                         node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42).unwrap();
9101
9102                 let mut channel_type_features = ChannelTypeFeatures::only_static_remote_key();
9103                 channel_type_features.set_zero_conf_required();
9104
9105                 let mut open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network));
9106                 open_channel_msg.channel_type = Some(channel_type_features);
9107                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
9108                 let res = InboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider,
9109                         node_b_node_id, &channelmanager::provided_channel_type_features(&config),
9110                         &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false);
9111                 assert!(res.is_ok());
9112         }
9113
9114         #[test]
9115         fn test_supports_anchors_zero_htlc_tx_fee() {
9116                 // Tests that if both sides support and negotiate `anchors_zero_fee_htlc_tx`, it is the
9117                 // resulting `channel_type`.
9118                 let secp_ctx = Secp256k1::new();
9119                 let fee_estimator = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
9120                 let network = Network::Testnet;
9121                 let keys_provider = test_utils::TestKeysInterface::new(&[42; 32], network);
9122                 let logger = test_utils::TestLogger::new();
9123
9124                 let node_id_a = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[1; 32]).unwrap());
9125                 let node_id_b = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[2; 32]).unwrap());
9126
9127                 let mut config = UserConfig::default();
9128                 config.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx = true;
9129
9130                 // It is not enough for just the initiator to signal `option_anchors_zero_fee_htlc_tx`, both
9131                 // need to signal it.
9132                 let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
9133                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
9134                         &channelmanager::provided_init_features(&UserConfig::default()), 10000000, 100000, 42,
9135                         &config, 0, 42
9136                 ).unwrap();
9137                 assert!(!channel_a.context.channel_type.supports_anchors_zero_fee_htlc_tx());
9138
9139                 let mut expected_channel_type = ChannelTypeFeatures::empty();
9140                 expected_channel_type.set_static_remote_key_required();
9141                 expected_channel_type.set_anchors_zero_fee_htlc_tx_required();
9142
9143                 let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
9144                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
9145                         &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42
9146                 ).unwrap();
9147
9148                 let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
9149                 let channel_b = InboundV1Channel::<&TestKeysInterface>::new(
9150                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
9151                         &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config),
9152                         &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false
9153                 ).unwrap();
9154
9155                 assert_eq!(channel_a.context.channel_type, expected_channel_type);
9156                 assert_eq!(channel_b.context.channel_type, expected_channel_type);
9157         }
9158
9159         #[test]
9160         fn test_rejects_implicit_simple_anchors() {
9161                 // Tests that if `option_anchors` is being negotiated implicitly through the intersection of
9162                 // each side's `InitFeatures`, it is rejected.
9163                 let secp_ctx = Secp256k1::new();
9164                 let fee_estimator = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
9165                 let network = Network::Testnet;
9166                 let keys_provider = test_utils::TestKeysInterface::new(&[42; 32], network);
9167                 let logger = test_utils::TestLogger::new();
9168
9169                 let node_id_a = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[1; 32]).unwrap());
9170                 let node_id_b = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[2; 32]).unwrap());
9171
9172                 let config = UserConfig::default();
9173
9174                 // See feature bit assignments: https://github.com/lightning/bolts/blob/master/09-features.md
9175                 let static_remote_key_required: u64 = 1 << 12;
9176                 let simple_anchors_required: u64 = 1 << 20;
9177                 let raw_init_features = static_remote_key_required | simple_anchors_required;
9178                 let init_features_with_simple_anchors = InitFeatures::from_le_bytes(raw_init_features.to_le_bytes().to_vec());
9179
9180                 let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
9181                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
9182                         &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42
9183                 ).unwrap();
9184
9185                 // Set `channel_type` to `None` to force the implicit feature negotiation.
9186                 let mut open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
9187                 open_channel_msg.channel_type = None;
9188
9189                 // Since A supports both `static_remote_key` and `option_anchors`, but B only accepts
9190                 // `static_remote_key`, it will fail the channel.
9191                 let channel_b = InboundV1Channel::<&TestKeysInterface>::new(
9192                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
9193                         &channelmanager::provided_channel_type_features(&config), &init_features_with_simple_anchors,
9194                         &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false
9195                 );
9196                 assert!(channel_b.is_err());
9197         }
9198
9199         #[test]
9200         fn test_rejects_simple_anchors_channel_type() {
9201                 // Tests that if `option_anchors` is being negotiated through the `channel_type` feature,
9202                 // it is rejected.
9203                 let secp_ctx = Secp256k1::new();
9204                 let fee_estimator = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
9205                 let network = Network::Testnet;
9206                 let keys_provider = test_utils::TestKeysInterface::new(&[42; 32], network);
9207                 let logger = test_utils::TestLogger::new();
9208
9209                 let node_id_a = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[1; 32]).unwrap());
9210                 let node_id_b = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[2; 32]).unwrap());
9211
9212                 let config = UserConfig::default();
9213
9214                 // See feature bit assignments: https://github.com/lightning/bolts/blob/master/09-features.md
9215                 let static_remote_key_required: u64 = 1 << 12;
9216                 let simple_anchors_required: u64 = 1 << 20;
9217                 let simple_anchors_raw_features = static_remote_key_required | simple_anchors_required;
9218                 let simple_anchors_init = InitFeatures::from_le_bytes(simple_anchors_raw_features.to_le_bytes().to_vec());
9219                 let simple_anchors_channel_type = ChannelTypeFeatures::from_le_bytes(simple_anchors_raw_features.to_le_bytes().to_vec());
9220                 assert!(!simple_anchors_init.requires_unknown_bits());
9221                 assert!(!simple_anchors_channel_type.requires_unknown_bits());
9222
9223                 // First, we'll try to open a channel between A and B where A requests a channel type for
9224                 // the original `option_anchors` feature (non zero fee htlc tx). This should be rejected by
9225                 // B as it's not supported by LDK.
9226                 let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
9227                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
9228                         &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42
9229                 ).unwrap();
9230
9231                 let mut open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
9232                 open_channel_msg.channel_type = Some(simple_anchors_channel_type.clone());
9233
9234                 let res = InboundV1Channel::<&TestKeysInterface>::new(
9235                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
9236                         &channelmanager::provided_channel_type_features(&config), &simple_anchors_init,
9237                         &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false
9238                 );
9239                 assert!(res.is_err());
9240
9241                 // Then, we'll try to open another channel where A requests a channel type for
9242                 // `anchors_zero_fee_htlc_tx`. B is malicious and tries to downgrade the channel type to the
9243                 // original `option_anchors` feature, which should be rejected by A as it's not supported by
9244                 // LDK.
9245                 let mut channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
9246                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_b, &simple_anchors_init,
9247                         10000000, 100000, 42, &config, 0, 42
9248                 ).unwrap();
9249
9250                 let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
9251
9252                 let channel_b = InboundV1Channel::<&TestKeysInterface>::new(
9253                         &fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
9254                         &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config),
9255                         &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false
9256                 ).unwrap();
9257
9258                 let mut accept_channel_msg = channel_b.get_accept_channel_message();
9259                 accept_channel_msg.channel_type = Some(simple_anchors_channel_type.clone());
9260
9261                 let res = channel_a.accept_channel(
9262                         &accept_channel_msg, &config.channel_handshake_limits, &simple_anchors_init
9263                 );
9264                 assert!(res.is_err());
9265         }
9266
9267         #[test]
9268         fn test_waiting_for_batch() {
9269                 let feeest = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
9270                 let logger = test_utils::TestLogger::new();
9271                 let secp_ctx = Secp256k1::new();
9272                 let seed = [42; 32];
9273                 let network = Network::Testnet;
9274                 let best_block = BestBlock::from_network(network);
9275                 let chain_hash = ChainHash::using_genesis_block(network);
9276                 let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
9277
9278                 let mut config = UserConfig::default();
9279                 // Set trust_own_funding_0conf while ensuring we don't send channel_ready for a
9280                 // channel in a batch before all channels are ready.
9281                 config.channel_handshake_limits.trust_own_funding_0conf = true;
9282
9283                 // Create a channel from node a to node b that will be part of batch funding.
9284                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9285                 let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(
9286                         &feeest,
9287                         &&keys_provider,
9288                         &&keys_provider,
9289                         node_b_node_id,
9290                         &channelmanager::provided_init_features(&config),
9291                         10000000,
9292                         100000,
9293                         42,
9294                         &config,
9295                         0,
9296                         42,
9297                 ).unwrap();
9298
9299                 let open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network));
9300                 let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
9301                 let mut node_b_chan = InboundV1Channel::<&TestKeysInterface>::new(
9302                         &feeest,
9303                         &&keys_provider,
9304                         &&keys_provider,
9305                         node_b_node_id,
9306                         &channelmanager::provided_channel_type_features(&config),
9307                         &channelmanager::provided_init_features(&config),
9308                         &open_channel_msg,
9309                         7,
9310                         &config,
9311                         0,
9312                         &&logger,
9313                         true,  // Allow node b to send a 0conf channel_ready.
9314                 ).unwrap();
9315
9316                 let accept_channel_msg = node_b_chan.accept_inbound_channel();
9317                 node_a_chan.accept_channel(
9318                         &accept_channel_msg,
9319                         &config.channel_handshake_limits,
9320                         &channelmanager::provided_init_features(&config),
9321                 ).unwrap();
9322
9323                 // Fund the channel with a batch funding transaction.
9324                 let output_script = node_a_chan.context.get_funding_redeemscript();
9325                 let tx = Transaction {
9326                         version: 1,
9327                         lock_time: PackedLockTime::ZERO,
9328                         input: Vec::new(),
9329                         output: vec![
9330                                 TxOut {
9331                                         value: 10000000, script_pubkey: output_script.clone(),
9332                                 },
9333                                 TxOut {
9334                                         value: 10000000, script_pubkey: Builder::new().into_script(),
9335                                 },
9336                         ]};
9337                 let funding_outpoint = OutPoint{ txid: tx.txid(), index: 0 };
9338                 let (mut node_a_chan, funding_created_msg) = node_a_chan.get_funding_created(
9339                         tx.clone(),
9340                         funding_outpoint,
9341                         true,
9342                         &&logger,
9343                 ).map_err(|_| ()).unwrap();
9344                 let (mut node_b_chan, funding_signed_msg, _) = node_b_chan.funding_created(
9345                         &funding_created_msg.unwrap(),
9346                         best_block,
9347                         &&keys_provider,
9348                         &&logger,
9349                 ).map_err(|_| ()).unwrap();
9350                 let node_b_updates = node_b_chan.monitor_updating_restored(
9351                         &&logger,
9352                         &&keys_provider,
9353                         chain_hash,
9354                         &config,
9355                         0,
9356                 );
9357
9358                 // Receive funding_signed, but the channel will be configured to hold sending channel_ready and
9359                 // broadcasting the funding transaction until the batch is ready.
9360                 let _ = node_a_chan.funding_signed(
9361                         &funding_signed_msg.unwrap(),
9362                         best_block,
9363                         &&keys_provider,
9364                         &&logger,
9365                 ).unwrap();
9366                 let node_a_updates = node_a_chan.monitor_updating_restored(
9367                         &&logger,
9368                         &&keys_provider,
9369                         chain_hash,
9370                         &config,
9371                         0,
9372                 );
9373                 // Our channel_ready shouldn't be sent yet, even with trust_own_funding_0conf set,
9374                 // as the funding transaction depends on all channels in the batch becoming ready.
9375                 assert!(node_a_updates.channel_ready.is_none());
9376                 assert!(node_a_updates.funding_broadcastable.is_none());
9377                 assert_eq!(
9378                         node_a_chan.context.channel_state,
9379                         ChannelState::FundingSent as u32 |
9380                         ChannelState::WaitingForBatch as u32,
9381                 );
9382
9383                 // It is possible to receive a 0conf channel_ready from the remote node.
9384                 node_a_chan.channel_ready(
9385                         &node_b_updates.channel_ready.unwrap(),
9386                         &&keys_provider,
9387                         chain_hash,
9388                         &config,
9389                         &best_block,
9390                         &&logger,
9391                 ).unwrap();
9392                 assert_eq!(
9393                         node_a_chan.context.channel_state,
9394                         ChannelState::FundingSent as u32 |
9395                         ChannelState::WaitingForBatch as u32 |
9396                         ChannelState::TheirChannelReady as u32,
9397                 );
9398
9399                 // Clear the ChannelState::WaitingForBatch only when called by ChannelManager.
9400                 node_a_chan.set_batch_ready();
9401                 assert_eq!(
9402                         node_a_chan.context.channel_state,
9403                         ChannelState::FundingSent as u32 |
9404                         ChannelState::TheirChannelReady as u32,
9405                 );
9406                 assert!(node_a_chan.check_get_channel_ready(0).is_some());
9407         }
9408 }