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