@@ -134,7 +134,7 @@ pub enum MonitorEvent {
134
134
HTLCEvent ( HTLCUpdate ) ,
135
135
136
136
/// A monitor event that the Channel's commitment transaction was confirmed.
137
- CommitmentTxConfirmed ( OutPoint ) ,
137
+ HolderForceClosed ( OutPoint ) ,
138
138
139
139
/// Indicates a [`ChannelMonitor`] update has completed. See
140
140
/// [`ChannelMonitorUpdateStatus::InProgress`] for more information on how this is used.
@@ -150,24 +150,18 @@ pub enum MonitorEvent {
150
150
/// same [`ChannelMonitor`] have been applied and persisted.
151
151
monitor_update_id : u64 ,
152
152
} ,
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 ) ,
159
153
}
160
154
impl_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.
163
157
( 0 , Completed ) => {
164
158
( 0 , funding_txo, required) ,
165
159
( 2 , monitor_update_id, required) ,
166
160
} ,
167
161
;
168
162
( 2 , HTLCEvent ) ,
169
- ( 4 , CommitmentTxConfirmed ) ,
170
- ( 6 , UpdateFailed ) ,
163
+ ( 4 , HolderForceClosed ) ,
164
+ // 6 was ` UpdateFailed` until LDK 0.0.117
171
165
) ;
172
166
173
167
/// 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
1037
1031
1038
1032
writer. write_all ( & ( self . pending_monitor_events . iter ( ) . filter ( |ev| match ev {
1039
1033
MonitorEvent :: HTLCEvent ( _) => true ,
1040
- MonitorEvent :: CommitmentTxConfirmed ( _) => true ,
1034
+ MonitorEvent :: HolderForceClosed ( _) => true ,
1041
1035
_ => false ,
1042
1036
} ) . count ( ) as u64 ) . to_be_bytes ( ) ) ?;
1043
1037
for event in self . pending_monitor_events . iter ( ) {
@@ -1046,7 +1040,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for ChannelMonitorImpl<Signe
1046
1040
0u8 . write ( writer) ?;
1047
1041
upd. write ( writer) ?;
1048
1042
} ,
1049
- MonitorEvent :: CommitmentTxConfirmed ( _) => 1u8 . write ( writer) ?,
1043
+ MonitorEvent :: HolderForceClosed ( _) => 1u8 . write ( writer) ?,
1050
1044
_ => { } , // Covered in the TLV writes below
1051
1045
}
1052
1046
}
@@ -1488,21 +1482,20 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitor<Signer> {
1488
1482
self . inner . lock ( ) . unwrap ( ) . counterparty_node_id
1489
1483
}
1490
1484
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.
1493
1487
///
1494
1488
/// 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).
1498
1491
///
1499
1492
/// Broadcasting these transactions in the second case is UNSAFE, as they allow counterparty
1500
1493
/// side to punish you. Nevertheless you may want to broadcast them if counterparty doesn't
1501
1494
/// close channel with their commitment transaction after a substantial amount of time. Best
1502
1495
/// 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.
1504
1497
///
1505
- /// [`ChannelMonitorUpdateStatus::PermanentFailure `]: super::ChannelMonitorUpdateStatus::PermanentFailure
1498
+ /// [`ChannelManager `]: crate::ln::channelmanager::ChannelManager
1506
1499
pub fn get_latest_holder_commitment_txn < L : Deref > ( & self , logger : & L ) -> Vec < Transaction >
1507
1500
where L :: Target : Logger {
1508
1501
self . inner . lock ( ) . unwrap ( ) . get_latest_holder_commitment_txn ( logger)
@@ -2533,7 +2526,7 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitorImpl<Signer> {
2533
2526
txs. push ( tx) ;
2534
2527
}
2535
2528
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 ) ) ;
2537
2530
}
2538
2531
2539
2532
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> {
2599
2592
ChannelMonitorUpdateStep :: CommitmentSecret { idx, secret } => {
2600
2593
log_trace ! ( logger, "Updating ChannelMonitor with commitment secret" ) ;
2601
2594
if let Err ( e) = self . provide_secret ( * idx, * secret) {
2595
+ debug_assert ! ( false , "Latest counterparty commitment secret was invalid" ) ;
2602
2596
log_error ! ( logger, "Providing latest counterparty commitment secret failed/was refused:" ) ;
2603
2597
log_error ! ( logger, " {}" , e) ;
2604
2598
ret = Err ( ( ) ) ;
@@ -2645,7 +2639,7 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitorImpl<Signer> {
2645
2639
log_error ! ( logger, " in channel monitor for channel {}!" , & self . funding_info. 0 . to_channel_id( ) ) ;
2646
2640
log_error ! ( logger, " Read the docs for ChannelMonitor::get_latest_holder_commitment_txn and take manual action!" ) ;
2647
2641
} else {
2648
- // If we generated a MonitorEvent::CommitmentTxConfirmed , the ChannelManager
2642
+ // If we generated a MonitorEvent::HolderForceClosed , the ChannelManager
2649
2643
// will still give us a ChannelForceClosed event with !should_broadcast, but we
2650
2644
// shouldn't print the scary warning above.
2651
2645
log_info ! ( logger, "Channel off-chain state closed after we broadcasted our latest commitment transaction." ) ;
@@ -3490,7 +3484,7 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitorImpl<Signer> {
3490
3484
let funding_outp = HolderFundingOutput :: build ( self . funding_redeemscript . clone ( ) , self . channel_value_satoshis , self . onchain_tx_handler . channel_type_features ( ) . clone ( ) ) ;
3491
3485
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 ( ) ) ;
3492
3486
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 ) ) ;
3494
3488
// Although we aren't signing the transaction directly here, the transaction will be signed
3495
3489
// in the claim that is queued to OnchainTxHandler. We set holder_tx_signed here to reject
3496
3490
// new channel updates.
@@ -4254,7 +4248,7 @@ impl<'a, 'b, ES: EntropySource, SP: SignerProvider> ReadableArgs<(&'a ES, &'b SP
4254
4248
for _ in 0 ..pending_monitor_events_len {
4255
4249
let ev = match <u8 as Readable >:: read ( reader) ? {
4256
4250
0 => MonitorEvent :: HTLCEvent ( Readable :: read ( reader) ?) ,
4257
- 1 => MonitorEvent :: CommitmentTxConfirmed ( funding_info. 0 ) ,
4251
+ 1 => MonitorEvent :: HolderForceClosed ( funding_info. 0 ) ,
4258
4252
_ => return Err ( DecodeError :: InvalidValue )
4259
4253
} ;
4260
4254
pending_monitor_events. as_mut ( ) . unwrap ( ) . push ( ev) ;
@@ -4413,13 +4407,12 @@ mod tests {
4413
4407
use crate :: chain:: chaininterface:: LowerBoundedFeeEstimator ;
4414
4408
4415
4409
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} ;
4417
4411
use crate :: chain:: { BestBlock , Confirm } ;
4418
4412
use crate :: chain:: channelmonitor:: ChannelMonitor ;
4419
4413
use crate :: chain:: package:: { weight_offered_htlc, weight_received_htlc, weight_revoked_offered_htlc, weight_revoked_received_htlc, WEIGHT_REVOKED_OUTPUT } ;
4420
4414
use crate :: chain:: transaction:: OutPoint ;
4421
4415
use crate :: sign:: InMemorySigner ;
4422
- use crate :: events:: ClosureReason ;
4423
4416
use crate :: ln:: { PaymentPreimage , PaymentHash } ;
4424
4417
use crate :: ln:: chan_utils;
4425
4418
use crate :: ln:: chan_utils:: { HTLCOutputInCommitment , ChannelPublicKeys , ChannelTransactionParameters , HolderCommitmentTransaction , CounterpartyChannelTransactionParameters } ;
@@ -4485,18 +4478,14 @@ mod tests {
4485
4478
let ( route, payment_hash, _, payment_secret) = get_route_and_payment_hash ! ( nodes[ 1 ] , nodes[ 0 ] , 100_000 ) ;
4486
4479
unwrap_send_err ! ( nodes[ 1 ] . node. send_payment_with_route( & route, payment_hash,
4487
4480
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 ) ;
4494
4483
4495
4484
// Build a new ChannelMonitorUpdate which contains both the failing commitment tx update
4496
4485
// and provides the claim preimages for the two pending HTLCs. The first update generates
4497
4486
// an error, but the point of this test is to ensure the later updates are still applied.
4498
4487
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 ( ) ;
4500
4489
assert_eq ! ( replay_update. updates. len( ) , 1 ) ;
4501
4490
if let ChannelMonitorUpdateStep :: LatestCounterpartyCommitmentTXInfo { .. } = replay_update. updates [ 0 ] {
4502
4491
} else { panic ! ( ) ; }
0 commit comments