Skip to content

Commit 679ba56

Browse files
author
Antoine Riard
committed
Remove aggregable flag from PackageTemplate constructor
1 parent aef76eb commit 679ba56

File tree

2 files changed

+47
-47
lines changed

2 files changed

+47
-47
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: 40 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,7 @@ 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 {
758+
pub (crate) fn build_package(txid: Txid, vout: u32, input_solving_data: PackageSolvingData, soonest_conf_deadline: u32, height_original: u32) -> Self {
759759
let (malleability, aggregable) = Self::map_output_type_flags(&input_solving_data);
760760
let mut inputs = Vec::with_capacity(1);
761761
inputs.push((BitcoinOutPoint { txid, vout }, input_solving_data));
@@ -932,11 +932,11 @@ mod tests {
932932
use bitcoin::secp256k1::Secp256k1;
933933

934934
macro_rules! dumb_revk_output {
935-
($secp_ctx: expr) => {
935+
($secp_ctx: expr, $opt_anchors: expr, $is_counterparty_balance: expr) => {
936936
{
937937
let dumb_scalar = SecretKey::from_slice(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap()[..]).unwrap();
938938
let dumb_point = PublicKey::from_secret_key(&$secp_ctx, &dumb_scalar);
939-
PackageSolvingData::RevokedOutput(RevokedOutput::build(dumb_point, dumb_point, dumb_point, dumb_scalar, 0, 0, false, false))
939+
PackageSolvingData::RevokedOutput(RevokedOutput::build(dumb_point, dumb_point, dumb_point, dumb_scalar, 0, 0, $opt_anchors, $is_counterparty_balance))
940940
}
941941
}
942942
}
@@ -980,10 +980,10 @@ mod tests {
980980
fn test_package_differing_heights() {
981981
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
982982
let secp_ctx = Secp256k1::new();
983-
let revk_outp = dumb_revk_output!(secp_ctx);
983+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
984984

985-
let mut package_one_hundred = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, true, 100);
986-
let package_two_hundred = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, true, 200);
985+
let mut package_one_hundred = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, 100);
986+
let package_two_hundred = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, 200);
987987
package_one_hundred.merge_package(package_two_hundred);
988988
}
989989

@@ -992,11 +992,11 @@ mod tests {
992992
fn test_package_untractable_merge_to() {
993993
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
994994
let secp_ctx = Secp256k1::new();
995-
let revk_outp = dumb_revk_output!(secp_ctx);
995+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
996996
let htlc_outp = dumb_htlc_output!();
997997

998-
let mut untractable_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, true, 100);
999-
let malleable_package = PackageTemplate::build_package(txid, 1, htlc_outp.clone(), 1000, true, 100);
998+
let mut untractable_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, 100);
999+
let malleable_package = PackageTemplate::build_package(txid, 1, htlc_outp.clone(), 1000, 100);
10001000
untractable_package.merge_package(malleable_package);
10011001
}
10021002

@@ -1006,10 +1006,10 @@ mod tests {
10061006
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
10071007
let secp_ctx = Secp256k1::new();
10081008
let htlc_outp = dumb_htlc_output!();
1009-
let revk_outp = dumb_revk_output!(secp_ctx);
1009+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
10101010

1011-
let mut malleable_package = PackageTemplate::build_package(txid, 0, htlc_outp.clone(), 1000, true, 100);
1012-
let untractable_package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, true, 100);
1011+
let mut malleable_package = PackageTemplate::build_package(txid, 0, htlc_outp.clone(), 1000, 100);
1012+
let untractable_package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, 100);
10131013
malleable_package.merge_package(untractable_package);
10141014
}
10151015

@@ -1018,10 +1018,11 @@ mod tests {
10181018
fn test_package_noaggregation_to() {
10191019
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
10201020
let secp_ctx = Secp256k1::new();
1021-
let revk_outp = dumb_revk_output!(secp_ctx);
1021+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
1022+
let revk_outp_counterparty_balance = dumb_revk_output!(secp_ctx, true, true);
10221023

1023-
let mut noaggregation_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, false, 100);
1024-
let aggregation_package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, true, 100);
1024+
let mut noaggregation_package = PackageTemplate::build_package(txid, 0, revk_outp_counterparty_balance.clone(), 1000, 100);
1025+
let aggregation_package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, 100);
10251026
noaggregation_package.merge_package(aggregation_package);
10261027
}
10271028

@@ -1030,10 +1031,11 @@ mod tests {
10301031
fn test_package_noaggregation_from() {
10311032
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
10321033
let secp_ctx = Secp256k1::new();
1033-
let revk_outp = dumb_revk_output!(secp_ctx);
1034+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
1035+
let revk_outp_counterparty_balance = dumb_revk_output!(secp_ctx, true, true);
10341036

1035-
let mut aggregation_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, true, 100);
1036-
let noaggregation_package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, false, 100);
1037+
let mut aggregation_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, 100);
1038+
let noaggregation_package = PackageTemplate::build_package(txid, 1, revk_outp_counterparty_balance.clone(), 1000, 100);
10371039
aggregation_package.merge_package(noaggregation_package);
10381040
}
10391041

@@ -1042,11 +1044,11 @@ mod tests {
10421044
fn test_package_empty() {
10431045
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
10441046
let secp_ctx = Secp256k1::new();
1045-
let revk_outp = dumb_revk_output!(secp_ctx);
1047+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
10461048

1047-
let mut empty_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, true, 100);
1049+
let mut empty_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), 1000, 100);
10481050
empty_package.inputs = vec![];
1049-
let package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, true, 100);
1051+
let package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), 1000, 100);
10501052
empty_package.merge_package(package);
10511053
}
10521054

@@ -1055,25 +1057,25 @@ mod tests {
10551057
fn test_package_differing_categories() {
10561058
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
10571059
let secp_ctx = Secp256k1::new();
1058-
let revk_outp = dumb_revk_output!(secp_ctx);
1060+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
10591061
let counterparty_outp = dumb_counterparty_output!(secp_ctx, 0, false);
10601062

1061-
let mut revoked_package = PackageTemplate::build_package(txid, 0, revk_outp, 1000, true, 100);
1062-
let counterparty_package = PackageTemplate::build_package(txid, 1, counterparty_outp, 1000, true, 100);
1063+
let mut revoked_package = PackageTemplate::build_package(txid, 0, revk_outp, 1000, 100);
1064+
let counterparty_package = PackageTemplate::build_package(txid, 1, counterparty_outp, 1000, 100);
10631065
revoked_package.merge_package(counterparty_package);
10641066
}
10651067

10661068
#[test]
10671069
fn test_package_split_malleable() {
10681070
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
10691071
let secp_ctx = Secp256k1::new();
1070-
let revk_outp_one = dumb_revk_output!(secp_ctx);
1071-
let revk_outp_two = dumb_revk_output!(secp_ctx);
1072-
let revk_outp_three = dumb_revk_output!(secp_ctx);
1072+
let revk_outp_one = dumb_revk_output!(secp_ctx, false, false);
1073+
let revk_outp_two = dumb_revk_output!(secp_ctx, false, false);
1074+
let revk_outp_three = dumb_revk_output!(secp_ctx, false, false);
10731075

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

10781080
package_one.merge_package(package_two);
10791081
package_one.merge_package(package_three);
@@ -1096,7 +1098,7 @@ mod tests {
10961098
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
10971099
let htlc_outp_one = dumb_htlc_output!();
10981100

1099-
let mut package_one = PackageTemplate::build_package(txid, 0, htlc_outp_one, 1000, true, 100);
1101+
let mut package_one = PackageTemplate::build_package(txid, 0, htlc_outp_one, 1000, 100);
11001102
let ret_split = package_one.split_package(&BitcoinOutPoint { txid, vout: 0});
11011103
assert!(ret_split.is_none());
11021104
}
@@ -1105,9 +1107,9 @@ mod tests {
11051107
fn test_package_timer() {
11061108
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
11071109
let secp_ctx = Secp256k1::new();
1108-
let revk_outp = dumb_revk_output!(secp_ctx);
1110+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
11091111

1110-
let mut package = PackageTemplate::build_package(txid, 0, revk_outp, 1000, true, 100);
1112+
let mut package = PackageTemplate::build_package(txid, 0, revk_outp, 1000, 100);
11111113
let timer_none = package.timer();
11121114
assert!(timer_none.is_none());
11131115
package.set_timer(Some(100));
@@ -1122,7 +1124,7 @@ mod tests {
11221124
let secp_ctx = Secp256k1::new();
11231125
let counterparty_outp = dumb_counterparty_output!(secp_ctx, 1_000_000, false);
11241126

1125-
let package = PackageTemplate::build_package(txid, 0, counterparty_outp, 1000, true, 100);
1127+
let package = PackageTemplate::build_package(txid, 0, counterparty_outp, 1000, 100);
11261128
assert_eq!(package.package_amount(), 1000);
11271129
}
11281130

@@ -1135,23 +1137,23 @@ mod tests {
11351137
let weight_sans_output = (4 + 4 + 1 + 36 + 4 + 1 + 1 + 8 + 1) * WITNESS_SCALE_FACTOR + 2;
11361138

11371139
{
1138-
let revk_outp = dumb_revk_output!(secp_ctx);
1139-
let package = PackageTemplate::build_package(txid, 0, revk_outp, 0, true, 100);
1140+
let revk_outp = dumb_revk_output!(secp_ctx, false, false);
1141+
let package = PackageTemplate::build_package(txid, 0, revk_outp, 0, 100);
11401142
assert_eq!(package.package_weight(&Script::new()), weight_sans_output + WEIGHT_REVOKED_OUTPUT as usize);
11411143
}
11421144

11431145
{
11441146
for &opt_anchors in [false, true].iter() {
11451147
let counterparty_outp = dumb_counterparty_output!(secp_ctx, 1_000_000, opt_anchors);
1146-
let package = PackageTemplate::build_package(txid, 0, counterparty_outp, 1000, true, 100);
1148+
let package = PackageTemplate::build_package(txid, 0, counterparty_outp, 1000, 100);
11471149
assert_eq!(package.package_weight(&Script::new()), weight_sans_output + weight_received_htlc(opt_anchors) as usize);
11481150
}
11491151
}
11501152

11511153
{
11521154
for &opt_anchors in [false, true].iter() {
11531155
let counterparty_outp = dumb_counterparty_offered_output!(secp_ctx, 1_000_000, opt_anchors);
1154-
let package = PackageTemplate::build_package(txid, 0, counterparty_outp, 1000, true, 100);
1156+
let package = PackageTemplate::build_package(txid, 0, counterparty_outp, 1000, 100);
11551157
assert_eq!(package.package_weight(&Script::new()), weight_sans_output + weight_offered_htlc(opt_anchors) as usize);
11561158
}
11571159
}

0 commit comments

Comments
 (0)