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