@@ -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