Skip to content

Commit ffa60c8

Browse files
TheBlueMatttankyleo
authored andcommitted
Drop RevokedOutput::is_counterparty_balance_on_anchors
When we added anchors support we declined to aggregate claims across different types of outputs for anchor channels, requiring that we track whether a `RevokedOutput` claim came from an anchor channel or not. This was only ever used to decide whether the claim was aggregable or not. In 0fe90c6 we started aggregating by determining whether a claim is pinnable or not, rather than the much-too-coarse aggregable flag, leaving `is_counterparty_balance_on_anchors` unused. Here we remove it entirely (as it would become ambiguous with zero-commitment-fee anchor channels). We always write `Some(())`, marking the claim as an anchor claim and resulting in LDK prior to 0.1 refusing to aggregate the claim (which is the more conservative stance). This breaks downgrade to LDK 0.0.115 and earlier.
1 parent b0c384e commit ffa60c8

File tree

2 files changed

+13
-18
lines changed

2 files changed

+13
-18
lines changed

lightning/src/chain/channelmonitor.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4656,7 +4656,6 @@ impl<Signer: EcdsaChannelSigner> ChannelMonitorImpl<Signer> {
46564656
if outp.script_pubkey == revokeable_p2wsh {
46574657
let revk_outp = RevokedOutput::build(
46584658
per_commitment_point, per_commitment_key, outp.value,
4659-
funding_spent.channel_type_features().supports_anchors_zero_fee_htlc_tx(),
46604659
funding_spent.channel_parameters.clone(), height,
46614660
);
46624661
let justice_package = PackageTemplate::build_package(
@@ -4869,9 +4868,8 @@ impl<Signer: EcdsaChannelSigner> ChannelMonitorImpl<Signer> {
48694868
if input.previous_output.txid == *commitment_txid && input.witness.len() == 5 && tx.output.get(idx).is_some() {
48704869
log_error!(logger, "Got broadcast of revoked counterparty HTLC transaction, spending {}:{}", htlc_txid, idx);
48714870
let revk_outp = RevokedOutput::build(
4872-
per_commitment_point, per_commitment_key, tx.output[idx].value, false,
4873-
funding_spent.channel_parameters.clone(),
4874-
height,
4871+
per_commitment_point, per_commitment_key, tx.output[idx].value,
4872+
self.funding.channel_parameters.clone(), height,
48754873
);
48764874
let justice_package = PackageTemplate::build_package(
48774875
htlc_txid, idx as u32, PackageSolvingData::RevokedOutput(revk_outp),

lightning/src/chain/package.rs

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,6 @@ pub(crate) struct RevokedOutput {
144144
weight: u64,
145145
amount: Amount,
146146
on_counterparty_tx_csv: u16,
147-
is_counterparty_balance_on_anchors: Option<()>,
148147
channel_parameters: Option<ChannelTransactionParameters>,
149148
// Added in LDK 0.1.4/0.2 and always set since.
150149
outpoint_confirmation_height: Option<u32>,
@@ -154,7 +153,7 @@ impl RevokedOutput {
154153
#[rustfmt::skip]
155154
pub(crate) fn build(
156155
per_commitment_point: PublicKey, per_commitment_key: SecretKey, amount: Amount,
157-
is_counterparty_balance_on_anchors: bool, channel_parameters: ChannelTransactionParameters,
156+
channel_parameters: ChannelTransactionParameters,
158157
outpoint_confirmation_height: u32,
159158
) -> Self {
160159
let directed_params = channel_parameters.as_counterparty_broadcastable();
@@ -170,7 +169,6 @@ impl RevokedOutput {
170169
weight: WEIGHT_REVOKED_OUTPUT,
171170
amount,
172171
on_counterparty_tx_csv,
173-
is_counterparty_balance_on_anchors: if is_counterparty_balance_on_anchors { Some(()) } else { None },
174172
channel_parameters: Some(channel_parameters),
175173
outpoint_confirmation_height: Some(outpoint_confirmation_height),
176174
}
@@ -186,7 +184,9 @@ impl_writeable_tlv_based!(RevokedOutput, {
186184
(8, weight, required),
187185
(10, amount, required),
188186
(12, on_counterparty_tx_csv, required),
189-
(14, is_counterparty_balance_on_anchors, option),
187+
// Unused since 0.1, this setting causes downgrades to before 0.1 to refuse to
188+
// aggregate `RevokedOutput` claims, which is the more conservative stance.
189+
(14, is_counterparty_balance_on_anchors, (legacy, (), |_| Some(()))),
190190
(15, channel_parameters, (option: ReadableArgs, None)), // Added in 0.2.
191191
});
192192

@@ -1821,16 +1821,13 @@ mod tests {
18211821

18221822
#[rustfmt::skip]
18231823
macro_rules! dumb_revk_output {
1824-
($is_counterparty_balance_on_anchors: expr) => {
1824+
() => {
18251825
{
18261826
let secp_ctx = Secp256k1::new();
18271827
let dumb_scalar = SecretKey::from_slice(&<Vec<u8>>::from_hex("0101010101010101010101010101010101010101010101010101010101010101").unwrap()[..]).unwrap();
18281828
let dumb_point = PublicKey::from_secret_key(&secp_ctx, &dumb_scalar);
18291829
let channel_parameters = ChannelTransactionParameters::test_dummy(0);
1830-
PackageSolvingData::RevokedOutput(RevokedOutput::build(
1831-
dumb_point, dumb_scalar, Amount::ZERO, $is_counterparty_balance_on_anchors,
1832-
channel_parameters, 0,
1833-
))
1830+
PackageSolvingData::RevokedOutput(RevokedOutput::build(dumb_point, dumb_scalar, Amount::ZERO, channel_parameters, 0))
18341831
}
18351832
}
18361833
}
@@ -2132,9 +2129,9 @@ mod tests {
21322129
#[test]
21332130
#[rustfmt::skip]
21342131
fn test_package_split_malleable() {
2135-
let revk_outp_one = dumb_revk_output!(false);
2136-
let revk_outp_two = dumb_revk_output!(false);
2137-
let revk_outp_three = dumb_revk_output!(false);
2132+
let revk_outp_one = dumb_revk_output!();
2133+
let revk_outp_two = dumb_revk_output!();
2134+
let revk_outp_three = dumb_revk_output!();
21382135

21392136
let mut package_one = PackageTemplate::build_package(fake_txid(1), 0, revk_outp_one, 1100);
21402137
let package_two = PackageTemplate::build_package(fake_txid(1), 1, revk_outp_two, 1100);
@@ -2166,7 +2163,7 @@ mod tests {
21662163

21672164
#[test]
21682165
fn test_package_timer() {
2169-
let revk_outp = dumb_revk_output!(false);
2166+
let revk_outp = dumb_revk_output!();
21702167

21712168
let mut package = PackageTemplate::build_package(fake_txid(1), 0, revk_outp, 1000);
21722169
assert_eq!(package.timer(), 0);
@@ -2190,7 +2187,7 @@ mod tests {
21902187
let weight_sans_output = (4 + 4 + 1 + 36 + 4 + 1 + 1 + 8 + 1) * WITNESS_SCALE_FACTOR as u64 + 2;
21912188

21922189
{
2193-
let revk_outp = dumb_revk_output!(false);
2190+
let revk_outp = dumb_revk_output!();
21942191
let package = PackageTemplate::build_package(fake_txid(1), 0, revk_outp, 0);
21952192
assert_eq!(package.package_weight(&ScriptBuf::new()), weight_sans_output + WEIGHT_REVOKED_OUTPUT);
21962193
}

0 commit comments

Comments
 (0)