Skip to content

Commit 11ddd4f

Browse files
author
Antoine Riard
committed
Remove aggregable flag from PackageTemplate constructor
1 parent 3a208a8 commit 11ddd4f

File tree

2 files changed

+56
-54
lines changed

2 files changed

+56
-54
lines changed

lightning/src/chain/channelmonitor.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2284,7 +2284,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
22842284
let commitment_package = PackageTemplate::build_package(
22852285
self.funding_info.0.txid.clone(), self.funding_info.0.index as u32,
22862286
PackageSolvingData::HolderFundingOutput(funding_output),
2287-
best_block_height, false, best_block_height,
2287+
best_block_height, best_block_height
22882288
);
22892289
self.onchain_tx_handler.update_claims_view(
22902290
&[], vec![commitment_package], best_block_height, best_block_height,
@@ -2438,8 +2438,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
24382438
if outp.script_pubkey == revokeable_p2wsh {
24392439
let revk_outp = RevokedOutput::build(per_commitment_point, self.counterparty_commitment_params.counterparty_delayed_payment_base_key, self.counterparty_commitment_params.counterparty_htlc_base_key, per_commitment_key, outp.value, self.counterparty_commitment_params.on_counterparty_tx_csv, self.onchain_tx_handler.opt_anchors(), true);
24402440
// Post-anchor, aggregation of outputs of different types is unsafe. See https://github.com/lightning/bolts/pull/803.
2441-
let aggregation = if self.onchain_tx_handler.opt_anchors() { false } else { true };
2442-
let justice_package = PackageTemplate::build_package(commitment_txid, idx as u32, PackageSolvingData::RevokedOutput(revk_outp), height + self.counterparty_commitment_params.on_counterparty_tx_csv as u32, aggregation, height);
2441+
let justice_package = PackageTemplate::build_package(commitment_txid, idx as u32, PackageSolvingData::RevokedOutput(revk_outp), height + self.counterparty_commitment_params.on_counterparty_tx_csv as u32, height);
24432442
claimable_outpoints.push(justice_package);
24442443
to_counterparty_output_info =
24452444
Some((idx.try_into().expect("Txn can't have more than 2^32 outputs"), outp.value));
@@ -2457,7 +2456,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
24572456
to_counterparty_output_info);
24582457
}
24592458
let revk_htlc_outp = RevokedHTLCOutput::build(per_commitment_point, self.counterparty_commitment_params.counterparty_delayed_payment_base_key, self.counterparty_commitment_params.counterparty_htlc_base_key, per_commitment_key, htlc.amount_msat / 1000, htlc.clone(), self.onchain_tx_handler.channel_transaction_parameters.opt_anchors.is_some());
2460-
let justice_package = PackageTemplate::build_package(commitment_txid, transaction_output_index, PackageSolvingData::RevokedHTLCOutput(revk_htlc_outp), htlc.cltv_expiry, true, height);
2459+
let justice_package = PackageTemplate::build_package(commitment_txid, transaction_output_index, PackageSolvingData::RevokedHTLCOutput(revk_htlc_outp), htlc.cltv_expiry, height);
24612460
claimable_outpoints.push(justice_package);
24622461
}
24632462
}
@@ -2595,8 +2594,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
25952594
self.counterparty_commitment_params.counterparty_htlc_base_key,
25962595
htlc.clone(), self.onchain_tx_handler.opt_anchors()))
25972596
};
2598-
let aggregation = if !htlc.offered { false } else { true };
2599-
let counterparty_package = PackageTemplate::build_package(commitment_txid, transaction_output_index, counterparty_htlc_outp, htlc.cltv_expiry,aggregation, 0);
2597+
let counterparty_package = PackageTemplate::build_package(commitment_txid, transaction_output_index, counterparty_htlc_outp, htlc.cltv_expiry, 0);
26002598
claimable_outpoints.push(counterparty_package);
26012599
}
26022600
}
@@ -2627,7 +2625,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
26272625

26282626
log_error!(logger, "Got broadcast of revoked counterparty HTLC transaction, spending {}:{}", htlc_txid, 0);
26292627
let revk_outp = RevokedOutput::build(per_commitment_point, self.counterparty_commitment_params.counterparty_delayed_payment_base_key, self.counterparty_commitment_params.counterparty_htlc_base_key, per_commitment_key, tx.output[0].value, self.counterparty_commitment_params.on_counterparty_tx_csv, self.onchain_tx_handler.opt_anchors(), false);
2630-
let justice_package = PackageTemplate::build_package(htlc_txid, 0, PackageSolvingData::RevokedOutput(revk_outp), height + self.counterparty_commitment_params.on_counterparty_tx_csv as u32, true, height);
2628+
let justice_package = PackageTemplate::build_package(htlc_txid, 0, PackageSolvingData::RevokedOutput(revk_outp), height + self.counterparty_commitment_params.on_counterparty_tx_csv as u32, height);
26312629
let claimable_outpoints = vec!(justice_package);
26322630
let outputs = vec![(0, tx.output[0].clone())];
26332631
(claimable_outpoints, Some((htlc_txid, outputs)))
@@ -2655,7 +2653,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
26552653
};
26562654
HolderHTLCOutput::build_accepted(payment_preimage, htlc.amount_msat)
26572655
};
2658-
let htlc_package = PackageTemplate::build_package(holder_tx.txid, transaction_output_index, PackageSolvingData::HolderHTLCOutput(htlc_output), htlc.cltv_expiry, false, conf_height);
2656+
let htlc_package = PackageTemplate::build_package(holder_tx.txid, transaction_output_index, PackageSolvingData::HolderHTLCOutput(htlc_output), htlc.cltv_expiry, conf_height);
26592657
claim_requests.push(htlc_package);
26602658
}
26612659
}
@@ -2951,7 +2949,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
29512949
let should_broadcast = self.should_broadcast_holder_commitment_txn(logger);
29522950
if should_broadcast {
29532951
let funding_outp = HolderFundingOutput::build(self.funding_redeemscript.clone(), self.channel_value_satoshis, self.onchain_tx_handler.opt_anchors());
2954-
let commitment_package = PackageTemplate::build_package(self.funding_info.0.txid.clone(), self.funding_info.0.index as u32, PackageSolvingData::HolderFundingOutput(funding_outp), self.best_block.height(), false, self.best_block.height());
2952+
let commitment_package = PackageTemplate::build_package(self.funding_info.0.txid.clone(), self.funding_info.0.index as u32, PackageSolvingData::HolderFundingOutput(funding_outp), self.best_block.height(), self.best_block.height());
29552953
claimable_outpoints.push(commitment_package);
29562954
self.pending_monitor_events.push(MonitorEvent::CommitmentTxConfirmed(self.funding_info.0));
29572955
let commitment_tx = self.onchain_tx_handler.get_fully_signed_holder_tx(&self.funding_redeemscript);

lightning/src/chain/package.rs

Lines changed: 49 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -755,14 +755,16 @@ impl PackageTemplate {
755755
}).is_some()
756756
}
757757

758-
pub (crate) fn build_package(txid: Txid, vout: u32, input_solving_data: PackageSolvingData, soonest_conf_deadline: u32, aggregable: bool, height_original: u32) -> Self {
759-
let malleability = match input_solving_data {
760-
PackageSolvingData::RevokedOutput(..) => PackageMalleability::Malleable,
761-
PackageSolvingData::RevokedHTLCOutput(..) => PackageMalleability::Malleable,
762-
PackageSolvingData::CounterpartyOfferedHTLCOutput(..) => PackageMalleability::Malleable,
763-
PackageSolvingData::CounterpartyReceivedHTLCOutput(..) => PackageMalleability::Malleable,
764-
PackageSolvingData::HolderHTLCOutput(..) => PackageMalleability::Untractable,
765-
PackageSolvingData::HolderFundingOutput(..) => PackageMalleability::Untractable,
758+
pub (crate) fn build_package(txid: Txid, vout: u32, input_solving_data: PackageSolvingData, soonest_conf_deadline: u32, height_original: u32) -> Self {
759+
let (malleability, aggregable) = match input_solving_data {
760+
PackageSolvingData::RevokedOutput(RevokedOutput { is_counterparty_balance: None, .. }) => { (PackageMalleability::Malleable, true) },
761+
PackageSolvingData::RevokedOutput(RevokedOutput { opt_anchors: Some(..), .. }) => { (PackageMalleability::Malleable, false) },
762+
PackageSolvingData::RevokedOutput(RevokedOutput { opt_anchors: None, .. }) => { (PackageMalleability::Malleable, true) },
763+
PackageSolvingData::RevokedHTLCOutput(..) => { (PackageMalleability::Malleable, true) },
764+
PackageSolvingData::CounterpartyOfferedHTLCOutput(..) => { (PackageMalleability::Malleable, true) },
765+
PackageSolvingData::CounterpartyReceivedHTLCOutput(..) => { (PackageMalleability::Malleable, false) },
766+
PackageSolvingData::HolderHTLCOutput(..) => { (PackageMalleability::Untractable, false) },
767+
PackageSolvingData::HolderFundingOutput(..) => { (PackageMalleability::Untractable, false) },
766768
};
767769
let mut inputs = Vec::with_capacity(1);
768770
inputs.push((BitcoinOutPoint { txid, vout }, input_solving_data));
@@ -934,11 +936,11 @@ mod tests {
934936
use bitcoin::secp256k1::Secp256k1;
935937

936938
macro_rules! dumb_revk_output {
937-
($secp_ctx: expr) => {
939+
($secp_ctx: expr, $opt_anchors: expr, $is_counterparty_balance: expr) => {
938940
{
939941
let dumb_scalar = SecretKey::from_slice(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap()[..]).unwrap();
940942
let dumb_point = PublicKey::from_secret_key(&$secp_ctx, &dumb_scalar);
941-
PackageSolvingData::RevokedOutput(RevokedOutput::build(dumb_point, dumb_point, dumb_point, dumb_scalar, 0, 0, false, false))
943+
PackageSolvingData::RevokedOutput(RevokedOutput::build(dumb_point, dumb_point, dumb_point, dumb_scalar, 0, 0, $opt_anchors, $is_counterparty_balance))
942944
}
943945
}
944946
}
@@ -982,10 +984,10 @@ mod tests {
982984
fn test_package_differing_heights() {
983985
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
984986
let secp_ctx = Secp256k1::new();
985-
let revk_outp = dumb_revk_output!(secp_ctx);
987+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
986988

987-
let mut package_one_hundred = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, true, 100);
988-
let package_two_hundred = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, true, 200);
989+
let mut package_one_hundred = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, 100);
990+
let package_two_hundred = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, 200);
989991
package_one_hundred.merge_package(package_two_hundred);
990992
}
991993

@@ -994,11 +996,11 @@ mod tests {
994996
fn test_package_untractable_merge_to() {
995997
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
996998
let secp_ctx = Secp256k1::new();
997-
let revk_outp = dumb_revk_output!(secp_ctx);
999+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
9981000
let htlc_outp = dumb_htlc_output!();
9991001

1000-
let mut untractable_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, true, 100);
1001-
let malleable_package = PackageTemplate::build_package(txid, 1, htlc_outp.clone(), 1000, true, 100);
1002+
let mut untractable_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, 100);
1003+
let malleable_package = PackageTemplate::build_package(txid, 1, htlc_outp.clone(), 1000, 100);
10021004
untractable_package.merge_package(malleable_package);
10031005
}
10041006

@@ -1008,10 +1010,10 @@ mod tests {
10081010
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
10091011
let secp_ctx = Secp256k1::new();
10101012
let htlc_outp = dumb_htlc_output!();
1011-
let revk_outp = dumb_revk_output!(secp_ctx);
1013+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
10121014

1013-
let mut malleable_package = PackageTemplate::build_package(txid, 0, htlc_outp.clone(), 1000, true, 100);
1014-
let untractable_package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, true, 100);
1015+
let mut malleable_package = PackageTemplate::build_package(txid, 0, htlc_outp.clone(), 1000, 100);
1016+
let untractable_package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, 100);
10151017
malleable_package.merge_package(untractable_package);
10161018
}
10171019

@@ -1020,10 +1022,11 @@ mod tests {
10201022
fn test_package_noaggregation_to() {
10211023
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
10221024
let secp_ctx = Secp256k1::new();
1023-
let revk_outp = dumb_revk_output!(secp_ctx);
1025+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
1026+
let revk_outp_counterparty_balance = dumb_revk_output!(secp_ctx, true, true);
10241027

1025-
let mut noaggregation_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, false, 100);
1026-
let aggregation_package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, true, 100);
1028+
let mut noaggregation_package = PackageTemplate::build_package(txid, 0, revk_outp_counterparty_balance.clone(), 1000, 100);
1029+
let aggregation_package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, 100);
10271030
noaggregation_package.merge_package(aggregation_package);
10281031
}
10291032

@@ -1032,10 +1035,11 @@ mod tests {
10321035
fn test_package_noaggregation_from() {
10331036
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
10341037
let secp_ctx = Secp256k1::new();
1035-
let revk_outp = dumb_revk_output!(secp_ctx);
1038+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
1039+
let revk_outp_counterparty_balance = dumb_revk_output!(secp_ctx, true, true);
10361040

1037-
let mut aggregation_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, true, 100);
1038-
let noaggregation_package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, false, 100);
1041+
let mut aggregation_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, 100);
1042+
let noaggregation_package = PackageTemplate::build_package(txid, 1, revk_outp_counterparty_balance.clone(), 1000, 100);
10391043
aggregation_package.merge_package(noaggregation_package);
10401044
}
10411045

@@ -1044,11 +1048,11 @@ mod tests {
10441048
fn test_package_empty() {
10451049
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
10461050
let secp_ctx = Secp256k1::new();
1047-
let revk_outp = dumb_revk_output!(secp_ctx);
1051+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
10481052

1049-
let mut empty_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, true, 100);
1053+
let mut empty_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, 100);
10501054
empty_package.inputs = vec![];
1051-
let package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, true, 100);
1055+
let package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, 100);
10521056
empty_package.merge_package(package);
10531057
}
10541058

@@ -1057,25 +1061,25 @@ mod tests {
10571061
fn test_package_differing_categories() {
10581062
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
10591063
let secp_ctx = Secp256k1::new();
1060-
let revk_outp = dumb_revk_output!(secp_ctx);
1064+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
10611065
let counterparty_outp = dumb_counterparty_output!(secp_ctx, 0, false);
10621066

1063-
let mut revoked_package = PackageTemplate::build_package(txid, 0, revk_outp, 1000, true, 100);
1064-
let counterparty_package = PackageTemplate::build_package(txid, 1, counterparty_outp, 1000, true, 100);
1067+
let mut revoked_package = PackageTemplate::build_package(txid, 0, revk_outp, 1000, 100);
1068+
let counterparty_package = PackageTemplate::build_package(txid, 1, counterparty_outp, 1000, 100);
10651069
revoked_package.merge_package(counterparty_package);
10661070
}
10671071

10681072
#[test]
10691073
fn test_package_split_malleable() {
10701074
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
10711075
let secp_ctx = Secp256k1::new();
1072-
let revk_outp_one = dumb_revk_output!(secp_ctx);
1073-
let revk_outp_two = dumb_revk_output!(secp_ctx);
1074-
let revk_outp_three = dumb_revk_output!(secp_ctx);
1076+
let revk_outp_one = dumb_revk_output!(secp_ctx, false, false);
1077+
let revk_outp_two = dumb_revk_output!(secp_ctx, false, false);
1078+
let revk_outp_three = dumb_revk_output!(secp_ctx, false, false);
10751079

1076-
let mut package_one = PackageTemplate::build_package(txid, 0, revk_outp_one, 1000, true, 100);
1077-
let package_two = PackageTemplate::build_package(txid, 1, revk_outp_two, 1000, true, 100);
1078-
let package_three = PackageTemplate::build_package(txid, 2, revk_outp_three, 1000, true, 100);
1080+
let mut package_one = PackageTemplate::build_package(txid, 0, revk_outp_one, 1000, 100);
1081+
let package_two = PackageTemplate::build_package(txid, 1, revk_outp_two, 1000, 100);
1082+
let package_three = PackageTemplate::build_package(txid, 2, revk_outp_three, 1000, 100);
10791083

10801084
package_one.merge_package(package_two);
10811085
package_one.merge_package(package_three);
@@ -1098,7 +1102,7 @@ mod tests {
10981102
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
10991103
let htlc_outp_one = dumb_htlc_output!();
11001104

1101-
let mut package_one = PackageTemplate::build_package(txid, 0, htlc_outp_one, 1000, true, 100);
1105+
let mut package_one = PackageTemplate::build_package(txid, 0, htlc_outp_one, 1000, 100);
11021106
let ret_split = package_one.split_package(&BitcoinOutPoint { txid, vout: 0});
11031107
assert!(ret_split.is_none());
11041108
}
@@ -1107,9 +1111,9 @@ mod tests {
11071111
fn test_package_timer() {
11081112
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
11091113
let secp_ctx = Secp256k1::new();
1110-
let revk_outp = dumb_revk_output!(secp_ctx);
1114+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
11111115

1112-
let mut package = PackageTemplate::build_package(txid, 0, revk_outp, 1000, true, 100);
1116+
let mut package = PackageTemplate::build_package(txid, 0, revk_outp, 1000, 100);
11131117
let timer_none = package.timer();
11141118
assert!(timer_none.is_none());
11151119
package.set_timer(Some(100));
@@ -1124,7 +1128,7 @@ mod tests {
11241128
let secp_ctx = Secp256k1::new();
11251129
let counterparty_outp = dumb_counterparty_output!(secp_ctx, 1_000_000, false);
11261130

1127-
let package = PackageTemplate::build_package(txid, 0, counterparty_outp, 1000, true, 100);
1131+
let package = PackageTemplate::build_package(txid, 0, counterparty_outp, 1000, 100);
11281132
assert_eq!(package.package_amount(), 1000);
11291133
}
11301134

@@ -1137,23 +1141,23 @@ mod tests {
11371141
let weight_sans_output = (4 + 4 + 1 + 36 + 4 + 1 + 1 + 8 + 1) * WITNESS_SCALE_FACTOR + 2;
11381142

11391143
{
1140-
let revk_outp = dumb_revk_output!(secp_ctx);
1141-
let package = PackageTemplate::build_package(txid, 0, revk_outp, 0, true, 100);
1144+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
1145+
let package = PackageTemplate::build_package(txid, 0, revk_outp, 0, 100);
11421146
assert_eq!(package.package_weight(&Script::new()), weight_sans_output + WEIGHT_REVOKED_OUTPUT as usize);
11431147
}
11441148

11451149
{
11461150
for &opt_anchors in [false, true].iter() {
11471151
let counterparty_outp = dumb_counterparty_output!(secp_ctx, 1_000_000, opt_anchors);
1148-
let package = PackageTemplate::build_package(txid, 0, counterparty_outp, 1000, true, 100);
1152+
let package = PackageTemplate::build_package(txid, 0, counterparty_outp, 1000, 100);
11491153
assert_eq!(package.package_weight(&Script::new()), weight_sans_output + weight_received_htlc(opt_anchors) as usize);
11501154
}
11511155
}
11521156

11531157
{
11541158
for &opt_anchors in [false, true].iter() {
11551159
let counterparty_outp = dumb_counterparty_offered_output!(secp_ctx, 1_000_000, opt_anchors);
1156-
let package = PackageTemplate::build_package(txid, 0, counterparty_outp, 1000, true, 100);
1160+
let package = PackageTemplate::build_package(txid, 0, counterparty_outp, 1000, 100);
11571161
assert_eq!(package.package_weight(&Script::new()), weight_sans_output + weight_offered_htlc(opt_anchors) as usize);
11581162
}
11591163
}

0 commit comments

Comments
 (0)