@@ -11,6 +11,7 @@ use bitcoin::util::bip143;
11
11
use bitcoin_hashes:: sha256d:: Hash as Sha256dHash ;
12
12
13
13
use secp256k1:: { Secp256k1 , Signature } ;
14
+ use secp256k1:: key:: PublicKey ;
14
15
use secp256k1;
15
16
16
17
use ln:: msgs:: DecodeError ;
@@ -58,6 +59,12 @@ struct HTLCTxCache {
58
59
per_htlc : HashMap < u32 , ( HTLCOutputInCommitment , Option < Signature > ) >
59
60
}
60
61
62
+ /// Cache remote basepoint to compute any justice tx.
63
+ struct JusticeTxCache {
64
+ remote_delayed_payment_base_key : PublicKey ,
65
+ remote_htlc_base_key : PublicKey
66
+ }
67
+
61
68
/// Higher-level cache structure needed to re-generate bumped claim txn if needed
62
69
#[ derive( Clone , PartialEq ) ]
63
70
pub struct ClaimTxBumpMaterial {
@@ -158,6 +165,8 @@ pub struct OnchainTxHandler<ChanSigner: ChannelKeys> {
158
165
current_htlc_cache : Option < HTLCTxCache > ,
159
166
prev_htlc_cache : Option < HTLCTxCache > ,
160
167
local_csv : u16 ,
168
+ justice_tx_cache : JusticeTxCache ,
169
+ remote_csv : u16 ,
161
170
162
171
key_storage : ChanSigner ,
163
172
@@ -233,6 +242,10 @@ impl<ChanSigner: ChannelKeys + Writeable> OnchainTxHandler<ChanSigner> {
233
242
}
234
243
self . local_csv . write ( writer) ?;
235
244
245
+ self . justice_tx_cache . remote_delayed_payment_base_key . write ( writer) ?;
246
+ self . justice_tx_cache . remote_htlc_base_key . write ( writer) ?;
247
+ self . remote_csv . write ( writer) ?;
248
+
236
249
self . key_storage . write ( writer) ?;
237
250
238
251
writer. write_all ( & byte_utils:: be64_to_array ( self . pending_claim_requests . len ( ) as u64 ) ) ?;
@@ -319,6 +332,16 @@ impl<ChanSigner: ChannelKeys + Readable> ReadableArgs<Arc<Logger>> for OnchainTx
319
332
} ;
320
333
let local_csv = Readable :: read ( reader) ?;
321
334
335
+ let justice_tx_cache = {
336
+ let remote_delayed_payment_base_key = Readable :: read ( reader) ?;
337
+ let remote_htlc_base_key = Readable :: read ( reader) ?;
338
+ JusticeTxCache {
339
+ remote_delayed_payment_base_key,
340
+ remote_htlc_base_key,
341
+ }
342
+ } ;
343
+ let remote_csv = Readable :: read ( reader) ?;
344
+
322
345
let key_storage = Readable :: read ( reader) ?;
323
346
324
347
let pending_claim_requests_len: u64 = Readable :: read ( reader) ?;
@@ -372,6 +395,8 @@ impl<ChanSigner: ChannelKeys + Readable> ReadableArgs<Arc<Logger>> for OnchainTx
372
395
current_htlc_cache,
373
396
prev_htlc_cache,
374
397
local_csv,
398
+ justice_tx_cache,
399
+ remote_csv,
375
400
key_storage,
376
401
claimable_outpoints,
377
402
pending_claim_requests,
@@ -383,10 +408,15 @@ impl<ChanSigner: ChannelKeys + Readable> ReadableArgs<Arc<Logger>> for OnchainTx
383
408
}
384
409
385
410
impl < ChanSigner : ChannelKeys > OnchainTxHandler < ChanSigner > {
386
- pub ( super ) fn new ( destination_script : Script , keys : ChanSigner , funding_redeemscript : Script , local_csv : u16 , logger : Arc < Logger > ) -> Self {
411
+ pub ( super ) fn new ( destination_script : Script , keys : ChanSigner , funding_redeemscript : Script , local_csv : u16 , remote_delayed_payment_base_key : PublicKey , remote_htlc_base_key : PublicKey , remote_csv : u16 , logger : Arc < Logger > ) -> Self {
387
412
388
413
let key_storage = keys;
389
414
415
+ let justice_tx_cache = JusticeTxCache {
416
+ remote_delayed_payment_base_key,
417
+ remote_htlc_base_key,
418
+ } ;
419
+
390
420
OnchainTxHandler {
391
421
destination_script,
392
422
funding_redeemscript,
@@ -395,6 +425,8 @@ impl<ChanSigner: ChannelKeys> OnchainTxHandler<ChanSigner> {
395
425
current_htlc_cache : None ,
396
426
prev_htlc_cache : None ,
397
427
local_csv,
428
+ justice_tx_cache,
429
+ remote_csv,
398
430
key_storage,
399
431
pending_claim_requests : HashMap :: new ( ) ,
400
432
claimable_outpoints : HashMap :: new ( ) ,
0 commit comments