@@ -785,19 +785,24 @@ def test_verify_vote_count(max_casper_votes, sample_slashable_vote_data_params,
785
785
assert verify_vote_count (votes , max_casper_votes )
786
786
787
787
788
- def _get_indices_and_signatures (num_validators , message , privkeys ):
788
+ def _get_indices_and_signatures (num_validators , message , privkeys , fork_data , slot ):
789
789
num_indices = 5
790
790
assert num_validators >= num_indices
791
791
indices = random .sample (range (num_validators ), num_indices )
792
792
privkeys = [privkeys [i ] for i in indices ]
793
- domain = SignatureDomain .DOMAIN_ATTESTATION
793
+ domain_type = SignatureDomain .DOMAIN_ATTESTATION
794
+ domain = get_domain (
795
+ fork_data = fork_data ,
796
+ slot = slot ,
797
+ domain_type = domain_type ,
798
+ )
794
799
signatures = tuple (
795
800
map (lambda key : bls .sign (message , key , domain ), privkeys )
796
801
)
797
802
return (indices , signatures )
798
803
799
804
800
- def _correct_slashable_vote_data_params (params , validators , messages , privkeys ):
805
+ def _correct_slashable_vote_data_params (params , validators , messages , privkeys , fork_data ):
801
806
valid_params = copy .deepcopy (params )
802
807
803
808
num_validators = len (validators )
@@ -807,6 +812,8 @@ def _correct_slashable_vote_data_params(params, validators, messages, privkeys):
807
812
num_validators ,
808
813
messages [0 ],
809
814
privkeys ,
815
+ fork_data ,
816
+ params ["data" ].slot ,
810
817
)
811
818
valid_params [key ] = poc_0_indices
812
819
@@ -816,6 +823,8 @@ def _correct_slashable_vote_data_params(params, validators, messages, privkeys):
816
823
num_validators ,
817
824
messages [1 ],
818
825
privkeys ,
826
+ fork_data ,
827
+ params ["data" ].slot ,
819
828
)
820
829
valid_params [key ] = poc_1_indices
821
830
@@ -827,10 +836,15 @@ def _correct_slashable_vote_data_params(params, validators, messages, privkeys):
827
836
return valid_params
828
837
829
838
830
- def _corrupt_signature (params ):
839
+ def _corrupt_signature (params , fork_data ):
831
840
message = bytes .fromhex ("deadbeefcafe" )
832
841
privkey = 42
833
- domain = SignatureDomain .DOMAIN_ATTESTATION
842
+ domain_type = SignatureDomain .DOMAIN_ATTESTATION
843
+ domain = get_domain (
844
+ fork_data = fork_data ,
845
+ slot = params ["data" ].slot ,
846
+ domain_type = domain_type ,
847
+ )
834
848
corrupt_signature = bls .sign (message , privkey , domain )
835
849
836
850
return cytoolz .assoc (params , "aggregate_signature" , corrupt_signature )
@@ -860,24 +874,27 @@ def _create_slashable_vote_data_messages(params):
860
874
def test_verify_slashable_vote_data_signature (privkeys ,
861
875
sample_beacon_state_params ,
862
876
genesis_validators ,
863
- sample_slashable_vote_data_params ):
877
+ sample_slashable_vote_data_params ,
878
+ sample_fork_data_params ):
864
879
sample_beacon_state_params ["validator_registry" ] = genesis_validators
865
880
state = BeaconState (** sample_beacon_state_params )
866
881
867
882
# NOTE: we can do this before "correcting" the params as they
868
883
# touch disjoint subsets of the provided params
869
884
messages = _create_slashable_vote_data_messages (sample_slashable_vote_data_params )
870
885
886
+ fork_data = ForkData (** sample_fork_data_params )
871
887
valid_params = _correct_slashable_vote_data_params (
872
888
sample_slashable_vote_data_params ,
873
889
genesis_validators ,
874
890
messages ,
875
891
privkeys ,
892
+ fork_data ,
876
893
)
877
894
valid_votes = SlashableVoteData (** valid_params )
878
895
assert verify_slashable_vote_data_signature (state , valid_votes )
879
896
880
- invalid_params = _corrupt_signature (valid_params )
897
+ invalid_params = _corrupt_signature (valid_params , fork_data )
881
898
invalid_votes = SlashableVoteData (** invalid_params )
882
899
assert not verify_slashable_vote_data_signature (state , invalid_votes )
883
900
@@ -893,22 +910,27 @@ def _run_verify_slashable_vote(params, state, max_casper_votes, should_succeed):
893
910
894
911
@pytest .mark .parametrize (
895
912
(
896
- 'param_mapper,'
897
- 'should_succeed'
913
+ 'param_mapper' ,
914
+ 'should_succeed' ,
915
+ 'needs_fork_data' ,
898
916
),
899
917
[
900
- (lambda params : params , True ),
901
- (lambda params : _corrupt_vote_count (params ), False ),
902
- (lambda params : _corrupt_signature (params ), False ),
903
- (lambda params : _corrupt_vote_count (_corrupt_signature (params )), False ),
918
+ (lambda params : params , True , False ),
919
+ (_corrupt_vote_count , False , False ),
920
+ (_corrupt_signature , False , True ),
921
+ (lambda params , fork_data : _corrupt_vote_count (
922
+ _corrupt_signature (params , fork_data )
923
+ ), False , True ),
904
924
],
905
925
)
906
926
def test_verify_slashable_vote_data (param_mapper ,
907
927
should_succeed ,
928
+ needs_fork_data ,
908
929
privkeys ,
909
930
sample_beacon_state_params ,
910
931
genesis_validators ,
911
932
sample_slashable_vote_data_params ,
933
+ sample_fork_data_params ,
912
934
max_casper_votes ):
913
935
sample_beacon_state_params ["validator_registry" ] = genesis_validators
914
936
state = BeaconState (** sample_beacon_state_params )
@@ -917,13 +939,18 @@ def test_verify_slashable_vote_data(param_mapper,
917
939
# touch disjoint subsets of the provided params
918
940
messages = _create_slashable_vote_data_messages (sample_slashable_vote_data_params )
919
941
942
+ fork_data = ForkData (** sample_fork_data_params )
920
943
params = _correct_slashable_vote_data_params (
921
944
sample_slashable_vote_data_params ,
922
945
genesis_validators ,
923
946
messages ,
924
947
privkeys ,
948
+ fork_data ,
925
949
)
926
- params = param_mapper (params )
950
+ if needs_fork_data :
951
+ params = param_mapper (params , fork_data )
952
+ else :
953
+ params = param_mapper (params )
927
954
_run_verify_slashable_vote (params , state , max_casper_votes , should_succeed )
928
955
929
956
0 commit comments