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