@@ -823,3 +823,129 @@ fn feerate_bump<F: Deref, L: Deref>(predicted_weight: usize, input_amounts: u64,
823
823
} ;
824
824
Some ( ( new_fee, new_fee * 1000 / ( predicted_weight as u64 ) ) )
825
825
}
826
+
827
+ #[ cfg( test) ]
828
+ mod tests {
829
+ use chain:: package:: { CounterpartyReceivedHTLCOutput , PackageTemplate , PackageSolvingData , RevokedOutput } ;
830
+ use chain:: Txid ;
831
+ use ln:: chan_utils:: HTLCOutputInCommitment ;
832
+ use ln:: PaymentHash ;
833
+
834
+ use bitcoin:: hashes:: hex:: FromHex ;
835
+
836
+ use bitcoin:: secp256k1:: key:: { PublicKey , SecretKey } ;
837
+ use bitcoin:: secp256k1:: Secp256k1 ;
838
+
839
+ macro_rules! dumb_revk_output {
840
+ ( $secp_ctx: expr) => {
841
+ {
842
+ let dumb_scalar = SecretKey :: from_slice( & hex:: decode( "0101010101010101010101010101010101010101010101010101010101010101" ) . unwrap( ) [ ..] ) . unwrap( ) ;
843
+ let dumb_point = PublicKey :: from_secret_key( & $secp_ctx, & dumb_scalar) ;
844
+ PackageSolvingData :: RevokedOutput ( RevokedOutput :: build( dumb_point, dumb_point, dumb_point, dumb_scalar, 0 , 0 ) )
845
+ }
846
+ }
847
+ }
848
+
849
+ macro_rules! dumb_counterparty_output {
850
+ ( $secp_ctx: expr) => {
851
+ {
852
+ let dumb_scalar = SecretKey :: from_slice( & hex:: decode( "0101010101010101010101010101010101010101010101010101010101010101" ) . unwrap( ) [ ..] ) . unwrap( ) ;
853
+ let dumb_point = PublicKey :: from_secret_key( & $secp_ctx, & dumb_scalar) ;
854
+ let hash = PaymentHash ( [ 1 ; 32 ] ) ;
855
+ let htlc = HTLCOutputInCommitment { offered: true , amount_msat: 0 , cltv_expiry: 0 , payment_hash: hash, transaction_output_index: None } ;
856
+ PackageSolvingData :: CounterpartyReceivedHTLCOutput ( CounterpartyReceivedHTLCOutput :: build( dumb_point, dumb_point, dumb_point, htlc) )
857
+ }
858
+ }
859
+ }
860
+
861
+ #[ test]
862
+ #[ should_panic]
863
+ fn test_package_differing_heights ( ) {
864
+ let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
865
+ let secp_ctx = Secp256k1 :: new ( ) ;
866
+ let revk_outp = dumb_revk_output ! ( secp_ctx) ;
867
+
868
+ let mut package_one_hundred = PackageTemplate :: build_package ( txid, 0 , revk_outp. clone ( ) , 1000 , true , 100 ) ;
869
+ let package_two_hundred = PackageTemplate :: build_package ( txid, 1 , revk_outp. clone ( ) , 1000 , true , 200 ) ;
870
+ package_one_hundred. merge_package ( package_two_hundred) ;
871
+ }
872
+
873
+ #[ test]
874
+ //TODO: fix
875
+ fn test_package_untractable_merge_to ( ) {
876
+ let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
877
+ let secp_ctx = Secp256k1 :: new ( ) ;
878
+ let revk_outp = dumb_revk_output ! ( secp_ctx) ;
879
+
880
+ let mut untractable_package = PackageTemplate :: build_package ( txid, 0 , revk_outp. clone ( ) , 1000 , true , 100 ) ;
881
+ let malleable_package = PackageTemplate :: build_package ( txid, 1 , revk_outp. clone ( ) , 1000 , true , 100 ) ;
882
+ untractable_package. merge_package ( malleable_package) ;
883
+ }
884
+
885
+ #[ test]
886
+ //TODO: fix
887
+ fn test_package_untractable_merge_from ( ) {
888
+ let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
889
+ let secp_ctx = Secp256k1 :: new ( ) ;
890
+ let revk_outp = dumb_revk_output ! ( secp_ctx) ;
891
+
892
+ let mut malleable_package = PackageTemplate :: build_package ( txid, 0 , revk_outp. clone ( ) , 1000 , true , 100 ) ;
893
+ let untractable_package = PackageTemplate :: build_package ( txid, 1 , revk_outp. clone ( ) , 1000 , true , 100 ) ;
894
+ malleable_package. merge_package ( untractable_package) ;
895
+ }
896
+
897
+ #[ test]
898
+ #[ should_panic]
899
+ fn test_package_noaggregation_to ( ) {
900
+ let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
901
+ let secp_ctx = Secp256k1 :: new ( ) ;
902
+ let revk_outp = dumb_revk_output ! ( secp_ctx) ;
903
+
904
+ let mut noaggregation_package = PackageTemplate :: build_package ( txid, 0 , revk_outp. clone ( ) , 1000 , false , 100 ) ;
905
+ let aggregation_package = PackageTemplate :: build_package ( txid, 1 , revk_outp. clone ( ) , 1000 , true , 100 ) ;
906
+ noaggregation_package. merge_package ( aggregation_package) ;
907
+ }
908
+
909
+ #[ test]
910
+ #[ should_panic]
911
+ fn test_package_noaggregation_from ( ) {
912
+ let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
913
+ let secp_ctx = Secp256k1 :: new ( ) ;
914
+ let revk_outp = dumb_revk_output ! ( secp_ctx) ;
915
+
916
+ let mut aggregation_package = PackageTemplate :: build_package ( txid, 0 , revk_outp. clone ( ) , 1000 , true , 100 ) ;
917
+ let noaggregation_package = PackageTemplate :: build_package ( txid, 1 , revk_outp. clone ( ) , 1000 , false , 100 ) ;
918
+ aggregation_package. merge_package ( noaggregation_package) ;
919
+ }
920
+
921
+ #[ test]
922
+ #[ should_panic]
923
+ fn test_package_empty ( ) {
924
+ let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
925
+ let secp_ctx = Secp256k1 :: new ( ) ;
926
+ let revk_outp = dumb_revk_output ! ( secp_ctx) ;
927
+
928
+ let mut empty_package = PackageTemplate :: build_package ( txid, 0 , revk_outp. clone ( ) , 1000 , true , 100 ) ;
929
+ empty_package. inputs = vec ! [ ] ;
930
+ let package = PackageTemplate :: build_package ( txid, 1 , revk_outp. clone ( ) , 1000 , true , 100 ) ;
931
+ empty_package. merge_package ( package) ;
932
+ }
933
+
934
+ #[ test]
935
+ #[ should_panic]
936
+ fn test_package_differing_categories ( ) {
937
+ let txid = Txid :: from_hex ( "c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e" ) . unwrap ( ) ;
938
+ let secp_ctx = Secp256k1 :: new ( ) ;
939
+ let revk_outp = dumb_revk_output ! ( secp_ctx) ;
940
+ let counterparty_outp = dumb_counterparty_output ! ( secp_ctx) ;
941
+
942
+ let mut revoked_package = PackageTemplate :: build_package ( txid, 0 , revk_outp, 1000 , true , 100 ) ;
943
+ let counterparty_package = PackageTemplate :: build_package ( txid, 1 , counterparty_outp, 1000 , true , 100 ) ;
944
+ revoked_package. merge_package ( counterparty_package) ;
945
+ }
946
+
947
+ //TODO: split_package
948
+ //TODO: package_amounts
949
+ //TODO: package_weights
950
+ //TODO: finalize_package
951
+ }
0 commit comments