mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-25 07:17:40 +01:00
Rename HTLC input_idx
fields to commitment_tx_output_idx
Several fields used in tracking on-chain HTLC outputs were named `input_idx` despite referring to the output index in the commitment transaction. Here they are all renamed `commitment_tx_output_idx` for clarity.
This commit is contained in:
parent
75ca50f5c0
commit
e4cc7db63e
1 changed files with 29 additions and 28 deletions
|
@ -360,7 +360,7 @@ enum OnchainEvent {
|
|||
onchain_value_satoshis: Option<u64>,
|
||||
/// None in the second case, above, ie when there is no relevant output in the commitment
|
||||
/// transaction which appeared on chain.
|
||||
input_idx: Option<u32>,
|
||||
commitment_tx_output_idx: Option<u32>,
|
||||
},
|
||||
MaturingOutput {
|
||||
descriptor: SpendableOutputDescriptor,
|
||||
|
@ -381,7 +381,7 @@ enum OnchainEvent {
|
|||
/// * a revoked-state HTLC transaction was broadcasted, which was claimed by the revocation
|
||||
/// signature.
|
||||
HTLCSpendConfirmation {
|
||||
input_idx: u32,
|
||||
commitment_tx_output_idx: u32,
|
||||
/// If the claim was made by either party with a preimage, this is filled in
|
||||
preimage: Option<PaymentPreimage>,
|
||||
/// If the claim was made by us on an inbound HTLC against a local commitment transaction,
|
||||
|
@ -425,7 +425,7 @@ impl_writeable_tlv_based_enum_upgradable!(OnchainEvent,
|
|||
(0, source, required),
|
||||
(1, onchain_value_satoshis, option),
|
||||
(2, payment_hash, required),
|
||||
(3, input_idx, option),
|
||||
(3, commitment_tx_output_idx, option),
|
||||
},
|
||||
(1, MaturingOutput) => {
|
||||
(0, descriptor, required),
|
||||
|
@ -434,7 +434,7 @@ impl_writeable_tlv_based_enum_upgradable!(OnchainEvent,
|
|||
(0, on_local_output_csv, option),
|
||||
},
|
||||
(5, HTLCSpendConfirmation) => {
|
||||
(0, input_idx, required),
|
||||
(0, commitment_tx_output_idx, required),
|
||||
(2, preimage, option),
|
||||
(4, on_to_local_output_csv, option),
|
||||
},
|
||||
|
@ -568,13 +568,13 @@ pub enum Balance {
|
|||
/// An HTLC which has been irrevocably resolved on-chain, and has reached ANTI_REORG_DELAY.
|
||||
#[derive(PartialEq)]
|
||||
struct IrrevocablyResolvedHTLC {
|
||||
input_idx: u32,
|
||||
commitment_tx_output_idx: u32,
|
||||
/// Only set if the HTLC claim was ours using a payment preimage
|
||||
payment_preimage: Option<PaymentPreimage>,
|
||||
}
|
||||
|
||||
impl_writeable_tlv_based!(IrrevocablyResolvedHTLC, {
|
||||
(0, input_idx, required),
|
||||
(0, commitment_tx_output_idx, required),
|
||||
(2, payment_preimage, option),
|
||||
});
|
||||
|
||||
|
@ -1391,10 +1391,10 @@ impl<Signer: Sign> ChannelMonitor<Signer> {
|
|||
macro_rules! walk_htlcs {
|
||||
($holder_commitment: expr, $htlc_iter: expr) => {
|
||||
for htlc in $htlc_iter {
|
||||
if let Some(htlc_input_idx) = htlc.transaction_output_index {
|
||||
if let Some(htlc_commitment_tx_output_idx) = htlc.transaction_output_index {
|
||||
if let Some(conf_thresh) = us.onchain_events_awaiting_threshold_conf.iter().find_map(|event| {
|
||||
if let OnchainEvent::MaturingOutput { descriptor: SpendableOutputDescriptor::DelayedPaymentOutput(descriptor) } = &event.event {
|
||||
if descriptor.outpoint.index as u32 == htlc_input_idx { Some(event.confirmation_threshold()) } else { None }
|
||||
if descriptor.outpoint.index as u32 == htlc_commitment_tx_output_idx { Some(event.confirmation_threshold()) } else { None }
|
||||
} else { None }
|
||||
}) {
|
||||
debug_assert!($holder_commitment);
|
||||
|
@ -1402,7 +1402,7 @@ impl<Signer: Sign> ChannelMonitor<Signer> {
|
|||
claimable_amount_satoshis: htlc.amount_msat / 1000,
|
||||
confirmation_height: conf_thresh,
|
||||
});
|
||||
} else if us.htlcs_resolved_on_chain.iter().any(|v| v.input_idx == htlc_input_idx) {
|
||||
} else if us.htlcs_resolved_on_chain.iter().any(|v| v.commitment_tx_output_idx == htlc_commitment_tx_output_idx) {
|
||||
// Funding transaction spends should be fully confirmed by the time any
|
||||
// HTLC transactions are resolved, unless we're talking about a holder
|
||||
// commitment tx, whose resolution is delayed until the CSV timeout is
|
||||
|
@ -1414,8 +1414,9 @@ impl<Signer: Sign> ChannelMonitor<Signer> {
|
|||
// indicating we have spent this HTLC with a timeout, claiming it back
|
||||
// and awaiting confirmations on it.
|
||||
let htlc_update_pending = us.onchain_events_awaiting_threshold_conf.iter().find_map(|event| {
|
||||
if let OnchainEvent::HTLCUpdate { input_idx: Some(input_idx), .. } = event.event {
|
||||
if input_idx == htlc_input_idx { Some(event.confirmation_threshold()) } else { None }
|
||||
if let OnchainEvent::HTLCUpdate { commitment_tx_output_idx: Some(commitment_tx_output_idx), .. } = event.event {
|
||||
if commitment_tx_output_idx == htlc_commitment_tx_output_idx {
|
||||
Some(event.confirmation_threshold()) } else { None }
|
||||
} else { None }
|
||||
});
|
||||
if let Some(conf_thresh) = htlc_update_pending {
|
||||
|
@ -1436,8 +1437,8 @@ impl<Signer: Sign> ChannelMonitor<Signer> {
|
|||
// preimage, we lost funds to our counterparty! We will then continue
|
||||
// to show it as ContentiousClaimable until ANTI_REORG_DELAY.
|
||||
let htlc_spend_pending = us.onchain_events_awaiting_threshold_conf.iter().find_map(|event| {
|
||||
if let OnchainEvent::HTLCSpendConfirmation { input_idx, preimage, .. } = event.event {
|
||||
if input_idx == htlc_input_idx {
|
||||
if let OnchainEvent::HTLCSpendConfirmation { commitment_tx_output_idx, preimage, .. } = event.event {
|
||||
if commitment_tx_output_idx == htlc_commitment_tx_output_idx {
|
||||
Some((event.confirmation_threshold(), preimage.is_some()))
|
||||
} else { None }
|
||||
} else { None }
|
||||
|
@ -1546,7 +1547,7 @@ impl<Signer: Sign> ChannelMonitor<Signer> {
|
|||
macro_rules! walk_htlcs {
|
||||
($holder_commitment: expr, $htlc_iter: expr) => {
|
||||
for (htlc, source) in $htlc_iter {
|
||||
if us.htlcs_resolved_on_chain.iter().any(|v| Some(v.input_idx) == htlc.transaction_output_index) {
|
||||
if us.htlcs_resolved_on_chain.iter().any(|v| Some(v.commitment_tx_output_idx) == htlc.transaction_output_index) {
|
||||
// We should assert that funding_spend_confirmed is_some() here, but we
|
||||
// have some unit tests which violate HTLC transaction CSVs entirely and
|
||||
// would fail.
|
||||
|
@ -1557,17 +1558,17 @@ impl<Signer: Sign> ChannelMonitor<Signer> {
|
|||
// indicating we have spent this HTLC with a timeout, claiming it back
|
||||
// and awaiting confirmations on it.
|
||||
let htlc_update_confd = us.onchain_events_awaiting_threshold_conf.iter().any(|event| {
|
||||
if let OnchainEvent::HTLCUpdate { input_idx: Some(input_idx), .. } = event.event {
|
||||
if let OnchainEvent::HTLCUpdate { commitment_tx_output_idx: Some(commitment_tx_output_idx), .. } = event.event {
|
||||
// If the HTLC was timed out, we wait for ANTI_REORG_DELAY blocks
|
||||
// before considering it "no longer pending" - this matches when we
|
||||
// provide the ChannelManager an HTLC failure event.
|
||||
Some(input_idx) == htlc.transaction_output_index &&
|
||||
Some(commitment_tx_output_idx) == htlc.transaction_output_index &&
|
||||
us.best_block.height() >= event.height + ANTI_REORG_DELAY - 1
|
||||
} else if let OnchainEvent::HTLCSpendConfirmation { input_idx, .. } = event.event {
|
||||
} else if let OnchainEvent::HTLCSpendConfirmation { commitment_tx_output_idx, .. } = event.event {
|
||||
// If the HTLC was fulfilled with a preimage, we consider the HTLC
|
||||
// immediately non-pending, matching when we provide ChannelManager
|
||||
// the preimage.
|
||||
Some(input_idx) == htlc.transaction_output_index
|
||||
Some(commitment_tx_output_idx) == htlc.transaction_output_index
|
||||
} else { false }
|
||||
});
|
||||
if !htlc_update_confd {
|
||||
|
@ -1689,7 +1690,7 @@ macro_rules! fail_unbroadcast_htlcs {
|
|||
source: (**source).clone(),
|
||||
payment_hash: htlc.payment_hash.clone(),
|
||||
onchain_value_satoshis: Some(htlc.amount_msat / 1000),
|
||||
input_idx: None,
|
||||
commitment_tx_output_idx: None,
|
||||
},
|
||||
};
|
||||
log_trace!($logger, "Failing HTLC with payment_hash {} from {} counterparty commitment tx due to broadcast of {} commitment transaction, waiting for confirmation (at height {})",
|
||||
|
@ -2522,7 +2523,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
|
|||
// Produce actionable events from on-chain events having reached their threshold.
|
||||
for entry in onchain_events_reaching_threshold_conf.drain(..) {
|
||||
match entry.event {
|
||||
OnchainEvent::HTLCUpdate { ref source, payment_hash, onchain_value_satoshis, input_idx } => {
|
||||
OnchainEvent::HTLCUpdate { ref source, payment_hash, onchain_value_satoshis, commitment_tx_output_idx } => {
|
||||
// Check for duplicate HTLC resolutions.
|
||||
#[cfg(debug_assertions)]
|
||||
{
|
||||
|
@ -2546,8 +2547,8 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
|
|||
source: source.clone(),
|
||||
onchain_value_satoshis,
|
||||
}));
|
||||
if let Some(idx) = input_idx {
|
||||
self.htlcs_resolved_on_chain.push(IrrevocablyResolvedHTLC { input_idx: idx, payment_preimage: None });
|
||||
if let Some(idx) = commitment_tx_output_idx {
|
||||
self.htlcs_resolved_on_chain.push(IrrevocablyResolvedHTLC { commitment_tx_output_idx: idx, payment_preimage: None });
|
||||
}
|
||||
},
|
||||
OnchainEvent::MaturingOutput { descriptor } => {
|
||||
|
@ -2556,8 +2557,8 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
|
|||
outputs: vec![descriptor]
|
||||
});
|
||||
},
|
||||
OnchainEvent::HTLCSpendConfirmation { input_idx, preimage, .. } => {
|
||||
self.htlcs_resolved_on_chain.push(IrrevocablyResolvedHTLC { input_idx, payment_preimage: preimage });
|
||||
OnchainEvent::HTLCSpendConfirmation { commitment_tx_output_idx, preimage, .. } => {
|
||||
self.htlcs_resolved_on_chain.push(IrrevocablyResolvedHTLC { commitment_tx_output_idx, payment_preimage: preimage });
|
||||
},
|
||||
OnchainEvent::FundingSpendConfirmation { .. } => {
|
||||
self.funding_spend_confirmed = Some(entry.txid);
|
||||
|
@ -2826,7 +2827,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
|
|||
self.onchain_events_awaiting_threshold_conf.push(OnchainEventEntry {
|
||||
txid: tx.txid(), height,
|
||||
event: OnchainEvent::HTLCSpendConfirmation {
|
||||
input_idx: input.previous_output.vout,
|
||||
commitment_tx_output_idx: input.previous_output.vout,
|
||||
preimage: if accepted_preimage_claim || offered_preimage_claim {
|
||||
Some(payment_preimage) } else { None },
|
||||
// If this is a payment to us (!outbound_htlc, above),
|
||||
|
@ -2877,7 +2878,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
|
|||
txid: tx.txid(),
|
||||
height,
|
||||
event: OnchainEvent::HTLCSpendConfirmation {
|
||||
input_idx: input.previous_output.vout,
|
||||
commitment_tx_output_idx: input.previous_output.vout,
|
||||
preimage: Some(payment_preimage),
|
||||
on_to_local_output_csv: None,
|
||||
},
|
||||
|
@ -2898,7 +2899,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
|
|||
txid: tx.txid(),
|
||||
height,
|
||||
event: OnchainEvent::HTLCSpendConfirmation {
|
||||
input_idx: input.previous_output.vout,
|
||||
commitment_tx_output_idx: input.previous_output.vout,
|
||||
preimage: Some(payment_preimage),
|
||||
on_to_local_output_csv: None,
|
||||
},
|
||||
|
@ -2926,7 +2927,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
|
|||
event: OnchainEvent::HTLCUpdate {
|
||||
source, payment_hash,
|
||||
onchain_value_satoshis: Some(amount_msat / 1000),
|
||||
input_idx: Some(input.previous_output.vout),
|
||||
commitment_tx_output_idx: Some(input.previous_output.vout),
|
||||
},
|
||||
};
|
||||
log_info!(logger, "Failing HTLC with payment_hash {} timeout by a spend tx, waiting for confirmation (at height {})", log_bytes!(payment_hash.0), entry.confirmation_threshold());
|
||||
|
|
Loading…
Add table
Reference in a new issue