@@ -755,14 +755,16 @@ impl PackageTemplate {
755
755
} ) . is_some ( )
756
756
}
757
757
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 ) } ,
766
768
} ;
767
769
let mut inputs = Vec :: with_capacity ( 1 ) ;
768
770
inputs. push ( ( BitcoinOutPoint { txid, vout } , input_solving_data) ) ;
@@ -934,11 +936,11 @@ mod tests {
934
936
use bitcoin:: secp256k1:: Secp256k1 ;
935
937
936
938
macro_rules! dumb_revk_output {
937
- ( $secp_ctx: expr) => {
939
+ ( $secp_ctx: expr, $opt_anchors : expr , $is_counterparty_balance : expr ) => {
938
940
{
939
941
let dumb_scalar = SecretKey :: from_slice( & hex:: decode( "0101010101010101010101010101010101010101010101010101010101010101" ) . unwrap( ) [ ..] ) . unwrap( ) ;
940
942
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 ) )
942
944
}
943
945
}
944
946
}
@@ -982,10 +984,10 @@ mod tests {
982
984
fn test_package_differing_heights ( ) {
983
985
let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
984
986
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 ) ;
986
988
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 ) ;
989
991
package_one_hundred. merge_package ( package_two_hundred) ;
990
992
}
991
993
@@ -994,11 +996,11 @@ mod tests {
994
996
fn test_package_untractable_merge_to ( ) {
995
997
let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
996
998
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 ) ;
998
1000
let htlc_outp = dumb_htlc_output ! ( ) ;
999
1001
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 ) ;
1002
1004
untractable_package. merge_package ( malleable_package) ;
1003
1005
}
1004
1006
@@ -1008,10 +1010,10 @@ mod tests {
1008
1010
let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
1009
1011
let secp_ctx = Secp256k1 :: new ( ) ;
1010
1012
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 ) ;
1012
1014
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 ) ;
1015
1017
malleable_package. merge_package ( untractable_package) ;
1016
1018
}
1017
1019
@@ -1020,10 +1022,11 @@ mod tests {
1020
1022
fn test_package_noaggregation_to ( ) {
1021
1023
let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
1022
1024
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 ) ;
1024
1027
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 ) ;
1027
1030
noaggregation_package. merge_package ( aggregation_package) ;
1028
1031
}
1029
1032
@@ -1032,10 +1035,11 @@ mod tests {
1032
1035
fn test_package_noaggregation_from ( ) {
1033
1036
let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
1034
1037
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 ) ;
1036
1040
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 ) ;
1039
1043
aggregation_package. merge_package ( noaggregation_package) ;
1040
1044
}
1041
1045
@@ -1044,11 +1048,11 @@ mod tests {
1044
1048
fn test_package_empty ( ) {
1045
1049
let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
1046
1050
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 ) ;
1048
1052
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 ) ;
1050
1054
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 ) ;
1052
1056
empty_package. merge_package ( package) ;
1053
1057
}
1054
1058
@@ -1057,25 +1061,25 @@ mod tests {
1057
1061
fn test_package_differing_categories ( ) {
1058
1062
let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
1059
1063
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 ) ;
1061
1065
let counterparty_outp = dumb_counterparty_output ! ( secp_ctx, 0 , false ) ;
1062
1066
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 ) ;
1065
1069
revoked_package. merge_package ( counterparty_package) ;
1066
1070
}
1067
1071
1068
1072
#[ test]
1069
1073
fn test_package_split_malleable ( ) {
1070
1074
let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
1071
1075
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 ) ;
1075
1079
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 ) ;
1079
1083
1080
1084
package_one. merge_package ( package_two) ;
1081
1085
package_one. merge_package ( package_three) ;
@@ -1098,7 +1102,7 @@ mod tests {
1098
1102
let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
1099
1103
let htlc_outp_one = dumb_htlc_output ! ( ) ;
1100
1104
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 ) ;
1102
1106
let ret_split = package_one. split_package ( & BitcoinOutPoint { txid, vout : 0 } ) ;
1103
1107
assert ! ( ret_split. is_none( ) ) ;
1104
1108
}
@@ -1107,9 +1111,9 @@ mod tests {
1107
1111
fn test_package_timer ( ) {
1108
1112
let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
1109
1113
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 ) ;
1111
1115
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 ) ;
1113
1117
let timer_none = package. timer ( ) ;
1114
1118
assert ! ( timer_none. is_none( ) ) ;
1115
1119
package. set_timer ( Some ( 100 ) ) ;
@@ -1124,7 +1128,7 @@ mod tests {
1124
1128
let secp_ctx = Secp256k1 :: new ( ) ;
1125
1129
let counterparty_outp = dumb_counterparty_output ! ( secp_ctx, 1_000_000 , false ) ;
1126
1130
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 ) ;
1128
1132
assert_eq ! ( package. package_amount( ) , 1000 ) ;
1129
1133
}
1130
1134
@@ -1137,23 +1141,23 @@ mod tests {
1137
1141
let weight_sans_output = ( 4 + 4 + 1 + 36 + 4 + 1 + 1 + 8 + 1 ) * WITNESS_SCALE_FACTOR + 2 ;
1138
1142
1139
1143
{
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 ) ;
1142
1146
assert_eq ! ( package. package_weight( & Script :: new( ) ) , weight_sans_output + WEIGHT_REVOKED_OUTPUT as usize ) ;
1143
1147
}
1144
1148
1145
1149
{
1146
1150
for & opt_anchors in [ false , true ] . iter ( ) {
1147
1151
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 ) ;
1149
1153
assert_eq ! ( package. package_weight( & Script :: new( ) ) , weight_sans_output + weight_received_htlc( opt_anchors) as usize ) ;
1150
1154
}
1151
1155
}
1152
1156
1153
1157
{
1154
1158
for & opt_anchors in [ false , true ] . iter ( ) {
1155
1159
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 ) ;
1157
1161
assert_eq ! ( package. package_weight( & Script :: new( ) ) , weight_sans_output + weight_offered_htlc( opt_anchors) as usize ) ;
1158
1162
}
1159
1163
}
0 commit comments