@@ -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 ;
@@ -48,6 +49,13 @@ enum OnchainEvent {
48
49
}
49
50
}
50
51
52
+ /// Cache remote basepoint to compute any transaction on
53
+ /// remote outputs, either justice or preimage/timeout transactions.
54
+ struct RemoteTxCache {
55
+ remote_delayed_payment_base_key : PublicKey ,
56
+ remote_htlc_base_key : PublicKey
57
+ }
58
+
51
59
/// Higher-level cache structure needed to re-generate bumped claim txn if needed
52
60
#[ derive( Clone , PartialEq ) ]
53
61
pub struct ClaimTxBumpMaterial {
@@ -195,6 +203,8 @@ pub struct OnchainTxHandler<ChanSigner: ChannelKeys> {
195
203
prev_local_commitment : Option < LocalCommitmentTransaction > ,
196
204
prev_local_htlc_sigs : Option < Vec < Option < ( usize , Signature ) > > > ,
197
205
local_csv : u16 ,
206
+ remote_tx_cache : RemoteTxCache ,
207
+ remote_csv : u16 ,
198
208
199
209
key_storage : ChanSigner ,
200
210
@@ -241,6 +251,10 @@ impl<ChanSigner: ChannelKeys + Writeable> OnchainTxHandler<ChanSigner> {
241
251
242
252
self . local_csv . write ( writer) ?;
243
253
254
+ self . remote_tx_cache . remote_delayed_payment_base_key . write ( writer) ?;
255
+ self . remote_tx_cache . remote_htlc_base_key . write ( writer) ?;
256
+ self . remote_csv . write ( writer) ?;
257
+
244
258
self . key_storage . write ( writer) ?;
245
259
246
260
writer. write_all ( & byte_utils:: be64_to_array ( self . pending_claim_requests . len ( ) as u64 ) ) ?;
@@ -289,6 +303,16 @@ impl<ChanSigner: ChannelKeys + Readable> ReadableArgs<Arc<Logger>> for OnchainTx
289
303
290
304
let local_csv = Readable :: read ( reader) ?;
291
305
306
+ let remote_tx_cache = {
307
+ let remote_delayed_payment_base_key = Readable :: read ( reader) ?;
308
+ let remote_htlc_base_key = Readable :: read ( reader) ?;
309
+ RemoteTxCache {
310
+ remote_delayed_payment_base_key,
311
+ remote_htlc_base_key,
312
+ }
313
+ } ;
314
+ let remote_csv = Readable :: read ( reader) ?;
315
+
292
316
let key_storage = Readable :: read ( reader) ?;
293
317
294
318
let pending_claim_requests_len: u64 = Readable :: read ( reader) ?;
@@ -341,6 +365,8 @@ impl<ChanSigner: ChannelKeys + Readable> ReadableArgs<Arc<Logger>> for OnchainTx
341
365
prev_local_commitment,
342
366
prev_local_htlc_sigs,
343
367
local_csv,
368
+ remote_tx_cache,
369
+ remote_csv,
344
370
key_storage,
345
371
claimable_outpoints,
346
372
pending_claim_requests,
@@ -352,17 +378,24 @@ impl<ChanSigner: ChannelKeys + Readable> ReadableArgs<Arc<Logger>> for OnchainTx
352
378
}
353
379
354
380
impl < ChanSigner : ChannelKeys > OnchainTxHandler < ChanSigner > {
355
- pub ( super ) fn new ( destination_script : Script , keys : ChanSigner , local_csv : u16 , logger : Arc < Logger > ) -> Self {
381
+ pub ( super ) fn new ( destination_script : Script , keys : ChanSigner , local_csv : u16 , remote_delayed_payment_base_key : PublicKey , remote_htlc_base_key : PublicKey , remote_csv : u16 , logger : Arc < Logger > ) -> Self {
356
382
357
383
let key_storage = keys;
358
384
385
+ let remote_tx_cache = RemoteTxCache {
386
+ remote_delayed_payment_base_key,
387
+ remote_htlc_base_key,
388
+ } ;
389
+
359
390
OnchainTxHandler {
360
391
destination_script,
361
392
local_commitment : None ,
362
393
local_htlc_sigs : None ,
363
394
prev_local_commitment : None ,
364
395
prev_local_htlc_sigs : None ,
365
396
local_csv,
397
+ remote_tx_cache,
398
+ remote_csv,
366
399
key_storage,
367
400
pending_claim_requests : HashMap :: new ( ) ,
368
401
claimable_outpoints : HashMap :: new ( ) ,
0 commit comments