Skip to content

Commit 3244e41

Browse files
author
Antoine Riard
committed
Cache remote basepoint and remote_csv in new OnchainTxHandler::RemoteTxCache
Used in next commits to avoid passing script between ChannelMonitor and OnchainTxHandler. ChannelMonitor duplicata will be removed in future commits.
1 parent 12e2a81 commit 3244e41

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

lightning/src/ln/channelmonitor.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,7 +1064,7 @@ impl<ChanSigner: ChannelKeys> ChannelMonitor<ChanSigner> {
10641064
let our_channel_close_key_hash = Hash160::hash(&shutdown_pubkey.serialize());
10651065
let shutdown_script = Builder::new().push_opcode(opcodes::all::OP_PUSHBYTES_0).push_slice(&our_channel_close_key_hash[..]).into_script();
10661066

1067-
let mut onchain_tx_handler = OnchainTxHandler::new(destination_script.clone(), keys.clone(), their_to_self_delay, logger.clone());
1067+
let mut onchain_tx_handler = OnchainTxHandler::new(destination_script.clone(), keys.clone(), their_to_self_delay, their_delayed_payment_base_key.clone(), their_htlc_base_key.clone(), our_to_self_delay, logger.clone());
10681068

10691069
let local_tx_sequence = initial_local_commitment_tx.unsigned_tx.input[0].sequence as u64;
10701070
let local_tx_locktime = initial_local_commitment_tx.unsigned_tx.lock_time as u64;
@@ -1099,8 +1099,8 @@ impl<ChanSigner: ChannelKeys> ChannelMonitor<ChanSigner> {
10991099
current_remote_commitment_txid: None,
11001100
prev_remote_commitment_txid: None,
11011101

1102-
their_htlc_base_key: their_htlc_base_key.clone(),
1103-
their_delayed_payment_base_key: their_delayed_payment_base_key.clone(),
1102+
their_htlc_base_key: *their_htlc_base_key,
1103+
their_delayed_payment_base_key: *their_delayed_payment_base_key,
11041104
funding_redeemscript,
11051105
channel_value_satoshis: channel_value_satoshis,
11061106
their_cur_revocation_points: None,

lightning/src/ln/onchaintx.rs

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use bitcoin::util::bip143;
1111
use bitcoin_hashes::sha256d::Hash as Sha256dHash;
1212

1313
use secp256k1::{Secp256k1, Signature};
14+
use secp256k1::key::PublicKey;
1415
use secp256k1;
1516

1617
use ln::msgs::DecodeError;
@@ -48,6 +49,13 @@ enum OnchainEvent {
4849
}
4950
}
5051

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+
5159
/// Higher-level cache structure needed to re-generate bumped claim txn if needed
5260
#[derive(Clone, PartialEq)]
5361
pub struct ClaimTxBumpMaterial {
@@ -195,6 +203,8 @@ pub struct OnchainTxHandler<ChanSigner: ChannelKeys> {
195203
prev_local_commitment: Option<LocalCommitmentTransaction>,
196204
prev_local_htlc_sigs: Option<Vec<Option<(usize, Signature)>>>,
197205
local_csv: u16,
206+
remote_tx_cache: RemoteTxCache,
207+
remote_csv: u16,
198208

199209
key_storage: ChanSigner,
200210

@@ -241,6 +251,10 @@ impl<ChanSigner: ChannelKeys + Writeable> OnchainTxHandler<ChanSigner> {
241251

242252
self.local_csv.write(writer)?;
243253

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+
244258
self.key_storage.write(writer)?;
245259

246260
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
289303

290304
let local_csv = Readable::read(reader)?;
291305

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+
292316
let key_storage = Readable::read(reader)?;
293317

294318
let pending_claim_requests_len: u64 = Readable::read(reader)?;
@@ -341,6 +365,8 @@ impl<ChanSigner: ChannelKeys + Readable> ReadableArgs<Arc<Logger>> for OnchainTx
341365
prev_local_commitment,
342366
prev_local_htlc_sigs,
343367
local_csv,
368+
remote_tx_cache,
369+
remote_csv,
344370
key_storage,
345371
claimable_outpoints,
346372
pending_claim_requests,
@@ -352,17 +378,24 @@ impl<ChanSigner: ChannelKeys + Readable> ReadableArgs<Arc<Logger>> for OnchainTx
352378
}
353379

354380
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 {
356382

357383
let key_storage = keys;
358384

385+
let remote_tx_cache = RemoteTxCache {
386+
remote_delayed_payment_base_key,
387+
remote_htlc_base_key,
388+
};
389+
359390
OnchainTxHandler {
360391
destination_script,
361392
local_commitment: None,
362393
local_htlc_sigs: None,
363394
prev_local_commitment: None,
364395
prev_local_htlc_sigs: None,
365396
local_csv,
397+
remote_tx_cache,
398+
remote_csv,
366399
key_storage,
367400
pending_claim_requests: HashMap::new(),
368401
claimable_outpoints: HashMap::new(),

0 commit comments

Comments
 (0)