@@ -134,7 +134,7 @@ pub enum MonitorEvent {
134134 HTLCEvent ( HTLCUpdate ) ,
135135
136136 /// A monitor event that the Channel's commitment transaction was confirmed.
137- CommitmentTxConfirmed ( OutPoint ) ,
137+ HolderForceClosed ( OutPoint ) ,
138138
139139 /// Indicates a [`ChannelMonitor`] update has completed. See
140140 /// [`ChannelMonitorUpdateStatus::InProgress`] for more information on how this is used.
@@ -150,24 +150,18 @@ pub enum MonitorEvent {
150150 /// same [`ChannelMonitor`] have been applied and persisted.
151151 monitor_update_id : u64 ,
152152 } ,
153-
154- /// Indicates a [`ChannelMonitor`] update has failed. See
155- /// [`ChannelMonitorUpdateStatus::PermanentFailure`] for more information on how this is used.
156- ///
157- /// [`ChannelMonitorUpdateStatus::PermanentFailure`]: super::ChannelMonitorUpdateStatus::PermanentFailure
158- UpdateFailed ( OutPoint ) ,
159153}
160154impl_writeable_tlv_based_enum_upgradable ! ( MonitorEvent ,
161- // Note that Completed and UpdateFailed are currently never serialized to disk as they are
162- // generated only in ChainMonitor
155+ // Note that Completed is currently never serialized to disk as it is generated only in
156+ // ChainMonitor.
163157 ( 0 , Completed ) => {
164158 ( 0 , funding_txo, required) ,
165159 ( 2 , monitor_update_id, required) ,
166160 } ,
167161;
168162 ( 2 , HTLCEvent ) ,
169- ( 4 , CommitmentTxConfirmed ) ,
170- ( 6 , UpdateFailed ) ,
163+ ( 4 , HolderForceClosed ) ,
164+ // 6 was ` UpdateFailed` until LDK 0.0.117
171165) ;
172166
173167/// Simple structure sent back by `chain::Watch` when an HTLC from a forward channel is detected on
@@ -1037,7 +1031,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for ChannelMonitorImpl<Signe
10371031
10381032 writer. write_all ( & ( self . pending_monitor_events . iter ( ) . filter ( |ev| match ev {
10391033 MonitorEvent :: HTLCEvent ( _) => true ,
1040- MonitorEvent :: CommitmentTxConfirmed ( _) => true ,
1034+ MonitorEvent :: HolderForceClosed ( _) => true ,
10411035 _ => false ,
10421036 } ) . count ( ) as u64 ) . to_be_bytes ( ) ) ?;
10431037 for event in self . pending_monitor_events . iter ( ) {
@@ -1046,7 +1040,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for ChannelMonitorImpl<Signe
10461040 0u8 . write ( writer) ?;
10471041 upd. write ( writer) ?;
10481042 } ,
1049- MonitorEvent :: CommitmentTxConfirmed ( _) => 1u8 . write ( writer) ?,
1043+ MonitorEvent :: HolderForceClosed ( _) => 1u8 . write ( writer) ?,
10501044 _ => { } , // Covered in the TLV writes below
10511045 }
10521046 }
@@ -1488,21 +1482,20 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitor<Signer> {
14881482 self . inner . lock ( ) . unwrap ( ) . counterparty_node_id
14891483 }
14901484
1491- /// Used by ChannelManager deserialization to broadcast the latest holder state if its copy of
1492- /// the Channel was out-of-date.
1485+ /// Used by [` ChannelManager`] deserialization to broadcast the latest holder state if its copy
1486+ /// of the channel state was out-of-date.
14931487 ///
14941488 /// You may also use this to broadcast the latest local commitment transaction, either because
1495- /// a monitor update failed with [`ChannelMonitorUpdateStatus::PermanentFailure`] or because we've
1496- /// fallen behind (i.e. we've received proof that our counterparty side knows a revocation
1497- /// secret we gave them that they shouldn't know).
1489+ /// a monitor update failed or because we've fallen behind (i.e. we've received proof that our
1490+ /// counterparty side knows a revocation secret we gave them that they shouldn't know).
14981491 ///
14991492 /// Broadcasting these transactions in the second case is UNSAFE, as they allow counterparty
15001493 /// side to punish you. Nevertheless you may want to broadcast them if counterparty doesn't
15011494 /// close channel with their commitment transaction after a substantial amount of time. Best
15021495 /// may be to contact the other node operator out-of-band to coordinate other options available
1503- /// to you. In any-case, the choice is up to you.
1496+ /// to you.
15041497 ///
1505- /// [`ChannelMonitorUpdateStatus::PermanentFailure `]: super::ChannelMonitorUpdateStatus::PermanentFailure
1498+ /// [`ChannelManager `]: crate::ln::channelmanager::ChannelManager
15061499 pub fn get_latest_holder_commitment_txn < L : Deref > ( & self , logger : & L ) -> Vec < Transaction >
15071500 where L :: Target : Logger {
15081501 self . inner . lock ( ) . unwrap ( ) . get_latest_holder_commitment_txn ( logger)
@@ -2533,7 +2526,7 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitorImpl<Signer> {
25332526 txs. push ( tx) ;
25342527 }
25352528 broadcaster. broadcast_transactions ( & txs) ;
2536- self . pending_monitor_events . push ( MonitorEvent :: CommitmentTxConfirmed ( self . funding_info . 0 ) ) ;
2529+ self . pending_monitor_events . push ( MonitorEvent :: HolderForceClosed ( self . funding_info . 0 ) ) ;
25372530 }
25382531
25392532 pub fn update_monitor < B : Deref , F : Deref , L : Deref > ( & mut self , updates : & ChannelMonitorUpdate , broadcaster : & B , fee_estimator : F , logger : & L ) -> Result < ( ) , ( ) >
@@ -2599,6 +2592,7 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitorImpl<Signer> {
25992592 ChannelMonitorUpdateStep :: CommitmentSecret { idx, secret } => {
26002593 log_trace ! ( logger, "Updating ChannelMonitor with commitment secret" ) ;
26012594 if let Err ( e) = self . provide_secret ( * idx, * secret) {
2595+ debug_assert ! ( false , "Latest counterparty commitment secret was invalid" ) ;
26022596 log_error ! ( logger, "Providing latest counterparty commitment secret failed/was refused:" ) ;
26032597 log_error ! ( logger, " {}" , e) ;
26042598 ret = Err ( ( ) ) ;
@@ -2645,7 +2639,7 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitorImpl<Signer> {
26452639 log_error ! ( logger, " in channel monitor for channel {}!" , & self . funding_info. 0 . to_channel_id( ) ) ;
26462640 log_error ! ( logger, " Read the docs for ChannelMonitor::get_latest_holder_commitment_txn and take manual action!" ) ;
26472641 } else {
2648- // If we generated a MonitorEvent::CommitmentTxConfirmed , the ChannelManager
2642+ // If we generated a MonitorEvent::HolderForceClosed , the ChannelManager
26492643 // will still give us a ChannelForceClosed event with !should_broadcast, but we
26502644 // shouldn't print the scary warning above.
26512645 log_info ! ( logger, "Channel off-chain state closed after we broadcasted our latest commitment transaction." ) ;
@@ -3490,7 +3484,7 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitorImpl<Signer> {
34903484 let funding_outp = HolderFundingOutput :: build ( self . funding_redeemscript . clone ( ) , self . channel_value_satoshis , self . onchain_tx_handler . channel_type_features ( ) . clone ( ) ) ;
34913485 let commitment_package = PackageTemplate :: build_package ( self . funding_info . 0 . txid . clone ( ) , self . funding_info . 0 . index as u32 , PackageSolvingData :: HolderFundingOutput ( funding_outp) , self . best_block . height ( ) , self . best_block . height ( ) ) ;
34923486 claimable_outpoints. push ( commitment_package) ;
3493- self . pending_monitor_events . push ( MonitorEvent :: CommitmentTxConfirmed ( self . funding_info . 0 ) ) ;
3487+ self . pending_monitor_events . push ( MonitorEvent :: HolderForceClosed ( self . funding_info . 0 ) ) ;
34943488 // Although we aren't signing the transaction directly here, the transaction will be signed
34953489 // in the claim that is queued to OnchainTxHandler. We set holder_tx_signed here to reject
34963490 // new channel updates.
@@ -4254,7 +4248,7 @@ impl<'a, 'b, ES: EntropySource, SP: SignerProvider> ReadableArgs<(&'a ES, &'b SP
42544248 for _ in 0 ..pending_monitor_events_len {
42554249 let ev = match <u8 as Readable >:: read ( reader) ? {
42564250 0 => MonitorEvent :: HTLCEvent ( Readable :: read ( reader) ?) ,
4257- 1 => MonitorEvent :: CommitmentTxConfirmed ( funding_info. 0 ) ,
4251+ 1 => MonitorEvent :: HolderForceClosed ( funding_info. 0 ) ,
42584252 _ => return Err ( DecodeError :: InvalidValue )
42594253 } ;
42604254 pending_monitor_events. as_mut ( ) . unwrap ( ) . push ( ev) ;
@@ -4413,13 +4407,12 @@ mod tests {
44134407 use crate :: chain:: chaininterface:: LowerBoundedFeeEstimator ;
44144408
44154409 use super :: ChannelMonitorUpdateStep ;
4416- use crate :: { check_added_monitors, check_closed_broadcast , check_closed_event , check_spends, get_local_commitment_txn, get_monitor, get_route_and_payment_hash, unwrap_send_err} ;
4410+ use crate :: { check_added_monitors, check_spends, get_local_commitment_txn, get_monitor, get_route_and_payment_hash, unwrap_send_err} ;
44174411 use crate :: chain:: { BestBlock , Confirm } ;
44184412 use crate :: chain:: channelmonitor:: ChannelMonitor ;
44194413 use crate :: chain:: package:: { weight_offered_htlc, weight_received_htlc, weight_revoked_offered_htlc, weight_revoked_received_htlc, WEIGHT_REVOKED_OUTPUT } ;
44204414 use crate :: chain:: transaction:: OutPoint ;
44214415 use crate :: sign:: InMemorySigner ;
4422- use crate :: events:: ClosureReason ;
44234416 use crate :: ln:: { PaymentPreimage , PaymentHash } ;
44244417 use crate :: ln:: chan_utils;
44254418 use crate :: ln:: chan_utils:: { HTLCOutputInCommitment , ChannelPublicKeys , ChannelTransactionParameters , HolderCommitmentTransaction , CounterpartyChannelTransactionParameters } ;
@@ -4485,18 +4478,14 @@ mod tests {
44854478 let ( route, payment_hash, _, payment_secret) = get_route_and_payment_hash ! ( nodes[ 1 ] , nodes[ 0 ] , 100_000 ) ;
44864479 unwrap_send_err ! ( nodes[ 1 ] . node. send_payment_with_route( & route, payment_hash,
44874480 RecipientOnionFields :: secret_only( payment_secret) , PaymentId ( payment_hash. 0 )
4488- ) , true , APIError :: ChannelUnavailable { ref err } ,
4489- assert!( err. contains( "ChannelMonitor storage failure" ) ) ) ;
4490- check_added_monitors ! ( nodes[ 1 ] , 2 ) ; // After the failure we generate a close-channel monitor update
4491- check_closed_broadcast ! ( nodes[ 1 ] , true ) ;
4492- check_closed_event ! ( nodes[ 1 ] , 1 , ClosureReason :: ProcessingError { err: "ChannelMonitor storage failure" . to_string( ) } ,
4493- [ nodes[ 0 ] . node. get_our_node_id( ) ] , 100000 ) ;
4481+ ) , false , APIError :: MonitorUpdateInProgress , { } ) ;
4482+ check_added_monitors ! ( nodes[ 1 ] , 1 ) ;
44944483
44954484 // Build a new ChannelMonitorUpdate which contains both the failing commitment tx update
44964485 // and provides the claim preimages for the two pending HTLCs. The first update generates
44974486 // an error, but the point of this test is to ensure the later updates are still applied.
44984487 let monitor_updates = nodes[ 1 ] . chain_monitor . monitor_updates . lock ( ) . unwrap ( ) ;
4499- let mut replay_update = monitor_updates. get ( & channel. 2 ) . unwrap ( ) . iter ( ) . rev ( ) . skip ( 1 ) . next ( ) . unwrap ( ) . clone ( ) ;
4488+ let mut replay_update = monitor_updates. get ( & channel. 2 ) . unwrap ( ) . iter ( ) . rev ( ) . next ( ) . unwrap ( ) . clone ( ) ;
45004489 assert_eq ! ( replay_update. updates. len( ) , 1 ) ;
45014490 if let ChannelMonitorUpdateStep :: LatestCounterpartyCommitmentTXInfo { .. } = replay_update. updates [ 0 ] {
45024491 } else { panic ! ( ) ; }
0 commit comments