Skip to content

Commit 04084e9

Browse files
author
Antoine Riard
committed
-f Dry-up height_timer from OnchainRequest to PackageTemplate
1 parent 6c7d87a commit 04084e9

File tree

3 files changed

+38
-25
lines changed

3 files changed

+38
-25
lines changed

lightning/src/chain/channelmonitor.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1462,8 +1462,8 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
14621462
for (idx, outp) in tx.output.iter().enumerate() {
14631463
if outp.script_pubkey == revokeable_p2wsh {
14641464
let revk_outp = RevokedOutput::build(per_commitment_point, per_commitment_key, self.counterparty_tx_cache.counterparty_delayed_payment_base_key, self.counterparty_tx_cache.counterparty_htlc_base_key, InputDescriptors::RevokedOutput, outp.value, None, self.counterparty_tx_cache.on_counterparty_tx_csv);
1465-
let justice_package = PackageTemplate::build_package(commitment_txid, idx as u32, PackageSolvingData::RevokedOutput(revk_outp), PackageMalleability::Malleable, height + self.counterparty_tx_cache.on_counterparty_tx_csv as u32, true, 0);
1466-
claimable_outpoints.push(OnchainRequest { height_timer: None, height_original: height, content: justice_package});
1465+
let justice_package = PackageTemplate::build_package(commitment_txid, idx as u32, PackageSolvingData::RevokedOutput(revk_outp), PackageMalleability::Malleable, height + self.counterparty_tx_cache.on_counterparty_tx_csv as u32, true, 0, None);
1466+
claimable_outpoints.push(OnchainRequest { height_original: height, content: justice_package});
14671467
}
14681468
}
14691469

@@ -1476,8 +1476,8 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
14761476
return (claimable_outpoints, (commitment_txid, watch_outputs)); // Corrupted per_commitment_data, fuck this user
14771477
}
14781478
let revk_outp = RevokedOutput::build(per_commitment_point, per_commitment_key, self.counterparty_tx_cache.counterparty_delayed_payment_base_key, self.counterparty_tx_cache.counterparty_htlc_base_key, if htlc.offered { InputDescriptors::RevokedOfferedHTLC } else { InputDescriptors::RevokedReceivedHTLC }, htlc.amount_msat / 1000, Some(htlc.clone()), self.counterparty_tx_cache.on_counterparty_tx_csv);
1479-
let justice_package = PackageTemplate::build_package(commitment_txid, transaction_output_index, PackageSolvingData::RevokedOutput(revk_outp), PackageMalleability::Malleable, htlc.cltv_expiry, true, 0);
1480-
claimable_outpoints.push(OnchainRequest { height_timer: None, height_original: height, content: justice_package});
1479+
let justice_package = PackageTemplate::build_package(commitment_txid, transaction_output_index, PackageSolvingData::RevokedOutput(revk_outp), PackageMalleability::Malleable, htlc.cltv_expiry, true, 0, None);
1480+
claimable_outpoints.push(OnchainRequest { height_original: height, content: justice_package});
14811481
}
14821482
}
14831483
}
@@ -1626,8 +1626,8 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
16261626
let preimage = if htlc.offered { if let Some(p) = self.payment_preimages.get(&htlc.payment_hash) { Some(*p) } else { None } } else { None };
16271627
if preimage.is_some() || !htlc.offered {
16281628
let counterparty_htlc_outp = CounterpartyHTLCOutput::build(*revocation_point, self.counterparty_tx_cache.counterparty_delayed_payment_base_key, self.counterparty_tx_cache.counterparty_htlc_base_key, preimage, htlc.clone());
1629-
let counterparty_package = PackageTemplate::build_package(commitment_txid, transaction_output_index, PackageSolvingData::CounterpartyHTLCOutput(counterparty_htlc_outp), PackageMalleability::Malleable, htlc.cltv_expiry, if !htlc.offered { false } else { true }, 0);
1630-
claimable_outpoints.push(OnchainRequest { height_timer: None, height_original: /*XXX(ariard) Option<height> */ 0, content: counterparty_package });
1629+
let counterparty_package = PackageTemplate::build_package(commitment_txid, transaction_output_index, PackageSolvingData::CounterpartyHTLCOutput(counterparty_htlc_outp), PackageMalleability::Malleable, htlc.cltv_expiry, if !htlc.offered { false } else { true }, 0, None);
1630+
claimable_outpoints.push(OnchainRequest { height_original: /*XXX(ariard) Option<height> */ 0, content: counterparty_package });
16311631
}
16321632
}
16331633
}
@@ -1659,8 +1659,8 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
16591659

16601660
log_trace!(logger, "Counterparty HTLC broadcast {}:{}", htlc_txid, 0);
16611661
let revk_outp = RevokedOutput::build(per_commitment_point, per_commitment_key, self.counterparty_tx_cache.counterparty_delayed_payment_base_key, self.counterparty_tx_cache.counterparty_htlc_base_key, InputDescriptors::RevokedOutput, tx.output[0].value, None, self.counterparty_tx_cache.on_counterparty_tx_csv);
1662-
let justice_package = PackageTemplate::build_package(htlc_txid, 0, PackageSolvingData::RevokedOutput(revk_outp), PackageMalleability::Malleable, height + self.counterparty_tx_cache.on_counterparty_tx_csv as u32, true, 0);
1663-
let claimable_outpoints = vec!(OnchainRequest { height_timer: None, height_original: height, content: justice_package });
1662+
let justice_package = PackageTemplate::build_package(htlc_txid, 0, PackageSolvingData::RevokedOutput(revk_outp), PackageMalleability::Malleable, height + self.counterparty_tx_cache.on_counterparty_tx_csv as u32, true, 0, None);
1663+
let claimable_outpoints = vec!(OnchainRequest { height_original: height, content: justice_package });
16641664
let outputs = vec![(0, tx.output[0].clone())];
16651665
(claimable_outpoints, Some((htlc_txid, outputs)))
16661666
}
@@ -1684,8 +1684,8 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
16841684
continue;
16851685
}
16861686
} else { None }, htlc.amount_msat);
1687-
let htlc_package = PackageTemplate::build_package(holder_tx.txid, transaction_output_index, PackageSolvingData::HolderHTLCOutput(htlc_output), PackageMalleability::Untractable, height, false, 0);
1688-
claim_requests.push(OnchainRequest { height_timer: None, height_original: height, content: htlc_package });
1687+
let htlc_package = PackageTemplate::build_package(holder_tx.txid, transaction_output_index, PackageSolvingData::HolderHTLCOutput(htlc_output), PackageMalleability::Untractable, height, false, 0, None);
1688+
claim_requests.push(OnchainRequest { height_original: height, content: htlc_package });
16891689
}
16901690
}
16911691

@@ -1893,8 +1893,8 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
18931893
let should_broadcast = self.would_broadcast_at_height(height, &logger);
18941894
if should_broadcast {
18951895
let funding_outp = HolderFundingOutput::build(self.funding_redeemscript.clone());
1896-
let commitment_package = PackageTemplate::build_package(self.funding_info.0.txid.clone(), self.funding_info.0.index as u32, PackageSolvingData::HolderFundingOutput(funding_outp), PackageMalleability::Untractable, height, false, 0);
1897-
claimable_outpoints.push(OnchainRequest { height_timer: None, height_original: height, content: commitment_package });
1896+
let commitment_package = PackageTemplate::build_package(self.funding_info.0.txid.clone(), self.funding_info.0.index as u32, PackageSolvingData::HolderFundingOutput(funding_outp), PackageMalleability::Untractable, height, false, 0, None);
1897+
claimable_outpoints.push(OnchainRequest { height_original: height, content: commitment_package });
18981898
}
18991899
if should_broadcast {
19001900
self.pending_monitor_events.push(MonitorEvent::CommitmentTxBroadcasted(self.funding_info.0));

lightning/src/chain/onchain_utils.rs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,9 @@ pub(crate) struct PackageTemplate {
491491
// Based feerate of previous broadcast. If resources available (either
492492
// output value or utxo bumping).
493493
feerate_previous: u64,
494+
// At every block tick, used to check if pending claiming tx is taking too
495+
// much time for confirmation and we need to bump it.
496+
height_timer: Option<u32>,
494497
}
495498

496499
impl PackageTemplate {
@@ -509,6 +512,15 @@ impl PackageTemplate {
509512
pub(crate) fn load_feerate(&mut self, new_feerate: u64) {
510513
self.feerate_previous = new_feerate;
511514
}
515+
pub(crate) fn get_timer(&self) -> Option<u32> {
516+
if let Some(ref timer) = self.height_timer {
517+
return Some(*timer);
518+
}
519+
None
520+
}
521+
pub(crate) fn load_timer(&mut self, new_timer: Option<u32>) {
522+
self.height_timer = new_timer;
523+
}
512524
pub(crate) fn outpoints(&self) -> Vec<&BitcoinOutPoint> {
513525
let mut outpoints = Vec::with_capacity(self.inputs.len());
514526
for (o, _) in self.inputs.iter() {
@@ -523,6 +535,7 @@ impl PackageTemplate {
523535
let timelock = self.absolute_timelock;
524536
let aggregation = self.aggregation;
525537
let feerate_previous = self.feerate_previous;
538+
let height_timer = self.height_timer;
526539
self.inputs.retain(|outp| {
527540
if *split_outp == outp.0 {
528541
split_package = Some(PackageTemplate {
@@ -531,6 +544,7 @@ impl PackageTemplate {
531544
absolute_timelock: timelock,
532545
aggregation,
533546
feerate_previous,
547+
height_timer,
534548
});
535549
return false;
536550
}
@@ -570,6 +584,7 @@ impl PackageTemplate {
570584
if self.feerate_previous > merge_from.feerate_previous {
571585
self.feerate_previous = merge_from.feerate_previous;
572586
}
587+
self.height_timer = cmp::min(self.height_timer, merge_from.height_timer);
573588
}
574589
pub(crate) fn package_amount(&self) -> u64 {
575590
let mut amounts = 0;
@@ -642,15 +657,16 @@ impl PackageTemplate {
642657
},
643658
}
644659
}
645-
pub (crate) fn build_package(txid: Txid, vout: u32, input_solving_data: PackageSolvingData, malleability: PackageMalleability, absolute_timelock: u32, aggregation: bool, feerate_previous: u64) -> Self {
660+
pub (crate) fn build_package(txid: Txid, vout: u32, input_solving_data: PackageSolvingData, malleability: PackageMalleability, absolute_timelock: u32, aggregation: bool, feerate_previous: u64, height_timer: Option<u32>) -> Self {
646661
let mut inputs = Vec::with_capacity(1);
647662
inputs.push((BitcoinOutPoint { txid, vout }, input_solving_data));
648663
PackageTemplate {
649664
inputs,
650665
malleability,
651666
absolute_timelock,
652667
aggregation,
653-
feerate_previous
668+
feerate_previous,
669+
height_timer,
654670
}
655671
}
656672
}
@@ -666,6 +682,7 @@ impl Writeable for PackageTemplate {
666682
self.absolute_timelock.write(writer)?;
667683
self.aggregation.write(writer)?;
668684
self.feerate_previous.write(writer)?;
685+
self.height_timer.write(writer)?;
669686
Ok(())
670687
}
671688
}
@@ -683,12 +700,14 @@ impl Readable for PackageTemplate {
683700
let absolute_timelock = Readable::read(reader)?;
684701
let aggregation = Readable::read(reader)?;
685702
let feerate_previous = Readable::read(reader)?;
703+
let height_timer = Readable::read(reader)?;
686704
Ok(PackageTemplate {
687705
inputs,
688706
malleability,
689707
absolute_timelock,
690708
aggregation,
691-
feerate_previous
709+
feerate_previous,
710+
height_timer,
692711
})
693712
}
694713
}
@@ -712,9 +731,6 @@ impl Readable for PackageTemplate {
712731
/// Content embeds transactions elements to generate transaction. See PackageTemplate.
713732
#[derive(PartialEq, Clone)]
714733
pub struct OnchainRequest {
715-
// At every block tick, used to check if pending claiming tx is taking too
716-
// much time for confirmation and we need to bump it.
717-
pub(crate) height_timer: Option<u32>,
718734
// Tracked in case of reorg to wipe out now-superflous request.
719735
pub(crate) height_original: u32,
720736
// Content of request.
@@ -730,7 +746,6 @@ impl OnchainRequest {
730746

731747
impl Writeable for OnchainRequest {
732748
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), ::std::io::Error> {
733-
self.height_timer.write(writer)?;
734749
self.height_original.write(writer)?;
735750
self.content.write(writer)?;
736751

@@ -740,12 +755,10 @@ impl Writeable for OnchainRequest {
740755

741756
impl Readable for OnchainRequest {
742757
fn read<R: ::std::io::Read>(reader: &mut R) -> Result<Self, DecodeError> {
743-
let height_timer = Readable::read(reader)?;
744758
let height_original = Readable::read(reader)?;
745759
let content = Readable::read(reader)?;
746760

747761
Ok(OnchainRequest {
748-
height_timer,
749762
height_original,
750763
content
751764
})

lightning/src/chain/onchaintx.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ impl<ChannelSigner: Sign> OnchainTxHandler<ChannelSigner> {
393393
// height timer expiration (i.e in how many blocks we're going to take action).
394394
for mut req in preprocessed_requests {
395395
if let Some((new_timer, new_feerate, tx)) = self.generate_claim_tx(height, &req, &*fee_estimator, &*logger) {
396-
req.height_timer = new_timer;
396+
req.content.load_timer(new_timer);
397397
req.content.load_feerate(new_feerate);
398398
let txid = tx.txid();
399399
for k in req.content.outpoints() {
@@ -509,7 +509,7 @@ impl<ChannelSigner: Sign> OnchainTxHandler<ChannelSigner> {
509509

510510
// Check if any pending claim request must be rescheduled
511511
for (first_claim_txid, ref request) in self.pending_claim_requests.iter() {
512-
if let Some(h) = request.height_timer {
512+
if let Some(h) = request.content.get_timer() {
513513
if h == height {
514514
bump_candidates.insert(*first_claim_txid, (*request).clone());
515515
}
@@ -523,7 +523,7 @@ impl<ChannelSigner: Sign> OnchainTxHandler<ChannelSigner> {
523523
log_trace!(logger, "Broadcast onchain {}", log_tx!(bump_tx));
524524
broadcaster.broadcast_transaction(&bump_tx);
525525
if let Some(request) = self.pending_claim_requests.get_mut(first_claim_txid) {
526-
request.height_timer = new_timer;
526+
request.content.load_timer(new_timer);
527527
request.content.load_feerate(new_feerate);
528528
}
529529
}
@@ -557,7 +557,7 @@ impl<ChannelSigner: Sign> OnchainTxHandler<ChannelSigner> {
557557
}
558558
for (_, request) in bump_candidates.iter_mut() {
559559
if let Some((new_timer, new_feerate, bump_tx)) = self.generate_claim_tx(height, &request, &&*fee_estimator, &&*logger) {
560-
request.height_timer = new_timer;
560+
request.content.load_timer(new_timer);
561561
request.content.load_feerate(new_feerate);
562562
broadcaster.broadcast_transaction(&bump_tx);
563563
}

0 commit comments

Comments
 (0)