@@ -810,19 +810,24 @@ def test_verify_vote_count(max_casper_votes, sample_slashable_vote_data_params,
810
810
assert verify_vote_count (votes , max_casper_votes )
811
811
812
812
813
- def _get_indices_and_signatures (num_validators , message , privkeys ):
813
+ def _get_indices_and_signatures (num_validators , message , privkeys , fork_data , slot ):
814
814
num_indices = 5
815
815
assert num_validators >= num_indices
816
816
indices = random .sample (range (num_validators ), num_indices )
817
817
privkeys = [privkeys [i ] for i in indices ]
818
- domain = SignatureDomain .DOMAIN_ATTESTATION
818
+ domain_type = SignatureDomain .DOMAIN_ATTESTATION
819
+ domain = get_domain (
820
+ fork_data = fork_data ,
821
+ slot = slot ,
822
+ domain_type = domain_type ,
823
+ )
819
824
signatures = tuple (
820
825
map (lambda key : bls .sign (message , key , domain ), privkeys )
821
826
)
822
827
return (indices , signatures )
823
828
824
829
825
- def _correct_slashable_vote_data_params (params , validators , messages , privkeys ):
830
+ def _correct_slashable_vote_data_params (params , validators , messages , privkeys , fork_data ):
826
831
valid_params = copy .deepcopy (params )
827
832
828
833
num_validators = len (validators )
@@ -832,6 +837,8 @@ def _correct_slashable_vote_data_params(params, validators, messages, privkeys):
832
837
num_validators ,
833
838
messages [0 ],
834
839
privkeys ,
840
+ fork_data ,
841
+ params ["data" ].slot ,
835
842
)
836
843
valid_params [key ] = poc_0_indices
837
844
@@ -841,6 +848,8 @@ def _correct_slashable_vote_data_params(params, validators, messages, privkeys):
841
848
num_validators ,
842
849
messages [1 ],
843
850
privkeys ,
851
+ fork_data ,
852
+ params ["data" ].slot ,
844
853
)
845
854
valid_params [key ] = poc_1_indices
846
855
@@ -852,10 +861,15 @@ def _correct_slashable_vote_data_params(params, validators, messages, privkeys):
852
861
return valid_params
853
862
854
863
855
- def _corrupt_signature (params ):
864
+ def _corrupt_signature (params , fork_data ):
856
865
message = bytes .fromhex ("deadbeefcafe" )
857
866
privkey = 42
858
- domain = SignatureDomain .DOMAIN_ATTESTATION
867
+ domain_type = SignatureDomain .DOMAIN_ATTESTATION
868
+ domain = get_domain (
869
+ fork_data = fork_data ,
870
+ slot = params ["data" ].slot ,
871
+ domain_type = domain_type ,
872
+ )
859
873
corrupt_signature = bls .sign (message , privkey , domain )
860
874
861
875
return cytoolz .assoc (params , "aggregate_signature" , corrupt_signature )
@@ -885,24 +899,27 @@ def _create_slashable_vote_data_messages(params):
885
899
def test_verify_slashable_vote_data_signature (privkeys ,
886
900
sample_beacon_state_params ,
887
901
genesis_validators ,
888
- sample_slashable_vote_data_params ):
902
+ sample_slashable_vote_data_params ,
903
+ sample_fork_data_params ):
889
904
sample_beacon_state_params ["validator_registry" ] = genesis_validators
890
905
state = BeaconState (** sample_beacon_state_params )
891
906
892
907
# NOTE: we can do this before "correcting" the params as they
893
908
# touch disjoint subsets of the provided params
894
909
messages = _create_slashable_vote_data_messages (sample_slashable_vote_data_params )
895
910
911
+ fork_data = ForkData (** sample_fork_data_params )
896
912
valid_params = _correct_slashable_vote_data_params (
897
913
sample_slashable_vote_data_params ,
898
914
genesis_validators ,
899
915
messages ,
900
916
privkeys ,
917
+ fork_data ,
901
918
)
902
919
valid_votes = SlashableVoteData (** valid_params )
903
920
assert verify_slashable_vote_data_signature (state , valid_votes )
904
921
905
- invalid_params = _corrupt_signature (valid_params )
922
+ invalid_params = _corrupt_signature (valid_params , fork_data )
906
923
invalid_votes = SlashableVoteData (** invalid_params )
907
924
assert not verify_slashable_vote_data_signature (state , invalid_votes )
908
925
@@ -918,22 +935,27 @@ def _run_verify_slashable_vote(params, state, max_casper_votes, should_succeed):
918
935
919
936
@pytest .mark .parametrize (
920
937
(
921
- 'param_mapper,'
922
- 'should_succeed'
938
+ 'param_mapper' ,
939
+ 'should_succeed' ,
940
+ 'needs_fork_data' ,
923
941
),
924
942
[
925
- (lambda params : params , True ),
926
- (lambda params : _corrupt_vote_count (params ), False ),
927
- (lambda params : _corrupt_signature (params ), False ),
928
- (lambda params : _corrupt_vote_count (_corrupt_signature (params )), False ),
943
+ (lambda params : params , True , False ),
944
+ (_corrupt_vote_count , False , False ),
945
+ (_corrupt_signature , False , True ),
946
+ (lambda params , fork_data : _corrupt_vote_count (
947
+ _corrupt_signature (params , fork_data )
948
+ ), False , True ),
929
949
],
930
950
)
931
951
def test_verify_slashable_vote_data (param_mapper ,
932
952
should_succeed ,
953
+ needs_fork_data ,
933
954
privkeys ,
934
955
sample_beacon_state_params ,
935
956
genesis_validators ,
936
957
sample_slashable_vote_data_params ,
958
+ sample_fork_data_params ,
937
959
max_casper_votes ):
938
960
sample_beacon_state_params ["validator_registry" ] = genesis_validators
939
961
state = BeaconState (** sample_beacon_state_params )
@@ -942,13 +964,18 @@ def test_verify_slashable_vote_data(param_mapper,
942
964
# touch disjoint subsets of the provided params
943
965
messages = _create_slashable_vote_data_messages (sample_slashable_vote_data_params )
944
966
967
+ fork_data = ForkData (** sample_fork_data_params )
945
968
params = _correct_slashable_vote_data_params (
946
969
sample_slashable_vote_data_params ,
947
970
genesis_validators ,
948
971
messages ,
949
972
privkeys ,
973
+ fork_data ,
950
974
)
951
- params = param_mapper (params )
975
+ if needs_fork_data :
976
+ params = param_mapper (params , fork_data )
977
+ else :
978
+ params = param_mapper (params )
952
979
_run_verify_slashable_vote (params , state , max_casper_votes , should_succeed )
953
980
954
981
0 commit comments