@@ -461,37 +461,11 @@ impl ChannelMonitor {
461
461
Ok ( ( ) )
462
462
}
463
463
464
- /// Tracks the next revocation point which may be required to claim HTLC outputs which we know
465
- /// the preimage of in case the remote end force-closes using their latest state. When called at
466
- /// channel opening revocation point is the CURRENT one used for first commitment tx. Needed in case of sizeable push_msat.
467
- pub ( super ) fn provide_their_next_revocation_point ( & mut self , their_next_revocation_point : Option < ( u64 , PublicKey ) > ) {
468
- if let Some ( new_revocation_point) = their_next_revocation_point {
469
- match self . their_cur_revocation_points {
470
- Some ( old_points) => {
471
- if old_points. 0 == new_revocation_point. 0 + 1 {
472
- self . their_cur_revocation_points = Some ( ( old_points. 0 , old_points. 1 , Some ( new_revocation_point. 1 ) ) ) ;
473
- } else if old_points. 0 == new_revocation_point. 0 + 2 {
474
- if let Some ( old_second_point) = old_points. 2 {
475
- self . their_cur_revocation_points = Some ( ( old_points. 0 - 1 , old_second_point, Some ( new_revocation_point. 1 ) ) ) ;
476
- } else {
477
- self . their_cur_revocation_points = Some ( ( new_revocation_point. 0 , new_revocation_point. 1 , None ) ) ;
478
- }
479
- } else {
480
- self . their_cur_revocation_points = Some ( ( new_revocation_point. 0 , new_revocation_point. 1 , None ) ) ;
481
- }
482
- } ,
483
- None => {
484
- self . their_cur_revocation_points = Some ( ( new_revocation_point. 0 , new_revocation_point. 1 , None ) ) ;
485
- }
486
- }
487
- }
488
- }
489
-
490
464
/// Informs this monitor of the latest remote (ie non-broadcastable) commitment transaction.
491
465
/// The monitor watches for it to be broadcasted and then uses the HTLC information (and
492
466
/// possibly future revocation/preimage information) to claim outputs where possible.
493
467
/// We cache also the mapping hash:commitment number to lighten pruning of old preimages by watchtowers.
494
- pub ( super ) fn provide_latest_remote_commitment_tx_info ( & mut self , unsigned_commitment_tx : & Transaction , htlc_outputs : Vec < HTLCOutputInCommitment > , commitment_number : u64 ) {
468
+ pub ( super ) fn provide_latest_remote_commitment_tx_info ( & mut self , unsigned_commitment_tx : & Transaction , htlc_outputs : Vec < HTLCOutputInCommitment > , commitment_number : u64 , their_revocation_point : PublicKey ) {
495
469
// TODO: Encrypt the htlc_outputs data with the single-hash of the commitment transaction
496
470
// so that a remote monitor doesn't learn anything unless there is a malicious close.
497
471
// (only maybe, sadly we cant do the same for local info, as we need to be aware of
@@ -501,6 +475,25 @@ impl ChannelMonitor {
501
475
}
502
476
self . remote_claimable_outpoints . insert ( unsigned_commitment_tx. txid ( ) , htlc_outputs) ;
503
477
self . current_remote_commitment_number = commitment_number;
478
+ //TODO: Merge this into the other per-remote-transaction output storage stuff
479
+ match self . their_cur_revocation_points {
480
+ Some ( old_points) => {
481
+ if old_points. 0 == commitment_number + 1 {
482
+ self . their_cur_revocation_points = Some ( ( old_points. 0 , old_points. 1 , Some ( their_revocation_point) ) ) ;
483
+ } else if old_points. 0 == commitment_number + 2 {
484
+ if let Some ( old_second_point) = old_points. 2 {
485
+ self . their_cur_revocation_points = Some ( ( old_points. 0 - 1 , old_second_point, Some ( their_revocation_point) ) ) ;
486
+ } else {
487
+ self . their_cur_revocation_points = Some ( ( commitment_number, their_revocation_point, None ) ) ;
488
+ }
489
+ } else {
490
+ self . their_cur_revocation_points = Some ( ( commitment_number, their_revocation_point, None ) ) ;
491
+ }
492
+ } ,
493
+ None => {
494
+ self . their_cur_revocation_points = Some ( ( commitment_number, their_revocation_point, None ) ) ;
495
+ }
496
+ }
504
497
}
505
498
506
499
/// Informs this monitor of the latest local (ie broadcastable) commitment transaction. The
@@ -2161,10 +2154,10 @@ mod tests {
2161
2154
let logger = Arc :: new ( TestLogger :: new ( ) ) ;
2162
2155
let dummy_sig = Signature :: from_der ( & secp_ctx, & hex:: decode ( "3045022100fa86fa9a36a8cd6a7bb8f06a541787d51371d067951a9461d5404de6b928782e02201c8b7c334c10aed8976a3a465be9a28abff4cb23acbf00022295b378ce1fa3cd" ) . unwrap ( ) [ ..] ) . unwrap ( ) ;
2163
2156
2157
+ let dummy_key = PublicKey :: from_secret_key ( & secp_ctx, & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) ) ;
2164
2158
macro_rules! dummy_keys {
2165
2159
( ) => {
2166
2160
{
2167
- let dummy_key = PublicKey :: from_secret_key( & secp_ctx, & SecretKey :: from_slice( & secp_ctx, & [ 42 ; 32 ] ) . unwrap( ) ) ;
2168
2161
TxCreationKeys {
2169
2162
per_commitment_point: dummy_key. clone( ) ,
2170
2163
revocation_key: dummy_key. clone( ) ,
@@ -2233,10 +2226,10 @@ mod tests {
2233
2226
monitor. set_their_to_self_delay ( 10 ) ;
2234
2227
2235
2228
monitor. provide_latest_local_commitment_tx_info ( dummy_tx. clone ( ) , dummy_keys ! ( ) , 0 , preimages_to_local_htlcs ! ( preimages[ 0 ..10 ] ) ) ;
2236
- monitor. provide_latest_remote_commitment_tx_info ( & dummy_tx, preimages_slice_to_htlc_outputs ! ( preimages[ 5 ..15 ] ) , 281474976710655 ) ;
2237
- monitor. provide_latest_remote_commitment_tx_info ( & dummy_tx, preimages_slice_to_htlc_outputs ! ( preimages[ 15 ..20 ] ) , 281474976710654 ) ;
2238
- monitor. provide_latest_remote_commitment_tx_info ( & dummy_tx, preimages_slice_to_htlc_outputs ! ( preimages[ 17 ..20 ] ) , 281474976710653 ) ;
2239
- monitor. provide_latest_remote_commitment_tx_info ( & dummy_tx, preimages_slice_to_htlc_outputs ! ( preimages[ 18 ..20 ] ) , 281474976710652 ) ;
2229
+ monitor. provide_latest_remote_commitment_tx_info ( & dummy_tx, preimages_slice_to_htlc_outputs ! ( preimages[ 5 ..15 ] ) , 281474976710655 , dummy_key ) ;
2230
+ monitor. provide_latest_remote_commitment_tx_info ( & dummy_tx, preimages_slice_to_htlc_outputs ! ( preimages[ 15 ..20 ] ) , 281474976710654 , dummy_key ) ;
2231
+ monitor. provide_latest_remote_commitment_tx_info ( & dummy_tx, preimages_slice_to_htlc_outputs ! ( preimages[ 17 ..20 ] ) , 281474976710653 , dummy_key ) ;
2232
+ monitor. provide_latest_remote_commitment_tx_info ( & dummy_tx, preimages_slice_to_htlc_outputs ! ( preimages[ 18 ..20 ] ) , 281474976710652 , dummy_key ) ;
2240
2233
for & ( ref preimage, ref hash) in preimages. iter ( ) {
2241
2234
monitor. provide_payment_preimage ( hash, preimage) ;
2242
2235
}
0 commit comments