@@ -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,13 @@ struct HTLCTxCache {
58
59
per_htlc : HashMap < u32 , ( HTLCOutputInCommitment , Option < Signature > ) >
59
60
}
60
61
62
+ /// Cache remote basepoint to compute any transaction on
63
+ /// remote outputs, either justice or preimage/timeout transactions.
64
+ struct RemoteTxCache {
65
+ remote_delayed_payment_base_key : PublicKey ,
66
+ remote_htlc_base_key : PublicKey
67
+ }
68
+
61
69
/// Higher-level cache structure needed to re-generate bumped claim txn if needed
62
70
#[ derive( Clone , PartialEq ) ]
63
71
pub struct ClaimTxBumpMaterial {
@@ -158,6 +166,8 @@ pub struct OnchainTxHandler<ChanSigner: ChannelKeys> {
158
166
current_htlc_cache : Option < HTLCTxCache > ,
159
167
prev_htlc_cache : Option < HTLCTxCache > ,
160
168
local_csv : u16 ,
169
+ remote_tx_cache : RemoteTxCache ,
170
+ remote_csv : u16 ,
161
171
162
172
key_storage : ChanSigner ,
163
173
@@ -233,6 +243,10 @@ impl<ChanSigner: ChannelKeys + Writeable> OnchainTxHandler<ChanSigner> {
233
243
}
234
244
self . local_csv . write ( writer) ?;
235
245
246
+ self . remote_tx_cache . remote_delayed_payment_base_key . write ( writer) ?;
247
+ self . remote_tx_cache . remote_htlc_base_key . write ( writer) ?;
248
+ self . remote_csv . write ( writer) ?;
249
+
236
250
self . key_storage . write ( writer) ?;
237
251
238
252
writer. write_all ( & byte_utils:: be64_to_array ( self . pending_claim_requests . len ( ) as u64 ) ) ?;
@@ -319,6 +333,16 @@ impl<ChanSigner: ChannelKeys + Readable> ReadableArgs<Arc<Logger>> for OnchainTx
319
333
} ;
320
334
let local_csv = Readable :: read ( reader) ?;
321
335
336
+ let remote_tx_cache = {
337
+ let remote_delayed_payment_base_key = Readable :: read ( reader) ?;
338
+ let remote_htlc_base_key = Readable :: read ( reader) ?;
339
+ RemoteTxCache {
340
+ remote_delayed_payment_base_key,
341
+ remote_htlc_base_key,
342
+ }
343
+ } ;
344
+ let remote_csv = Readable :: read ( reader) ?;
345
+
322
346
let key_storage = Readable :: read ( reader) ?;
323
347
324
348
let pending_claim_requests_len: u64 = Readable :: read ( reader) ?;
@@ -372,6 +396,8 @@ impl<ChanSigner: ChannelKeys + Readable> ReadableArgs<Arc<Logger>> for OnchainTx
372
396
current_htlc_cache,
373
397
prev_htlc_cache,
374
398
local_csv,
399
+ remote_tx_cache,
400
+ remote_csv,
375
401
key_storage,
376
402
claimable_outpoints,
377
403
pending_claim_requests,
@@ -383,10 +409,15 @@ impl<ChanSigner: ChannelKeys + Readable> ReadableArgs<Arc<Logger>> for OnchainTx
383
409
}
384
410
385
411
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 {
412
+ 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
413
388
414
let key_storage = keys;
389
415
416
+ let remote_tx_cache = RemoteTxCache {
417
+ remote_delayed_payment_base_key,
418
+ remote_htlc_base_key,
419
+ } ;
420
+
390
421
OnchainTxHandler {
391
422
destination_script,
392
423
funding_redeemscript,
@@ -395,6 +426,8 @@ impl<ChanSigner: ChannelKeys> OnchainTxHandler<ChanSigner> {
395
426
current_htlc_cache : None ,
396
427
prev_htlc_cache : None ,
397
428
local_csv,
429
+ remote_tx_cache,
430
+ remote_csv,
398
431
key_storage,
399
432
pending_claim_requests : HashMap :: new ( ) ,
400
433
claimable_outpoints : HashMap :: new ( ) ,
0 commit comments