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