@@ -797,184 +797,43 @@ suite "Beacon chain DB" & preset():
797
797
798
798
db.close ()
799
799
800
- test " sanity check phase 0 getState rollback" & preset ():
801
- var
802
- db = makeTestDB (SLOTS_PER_EPOCH )
803
- validatorMonitor = newClone (ValidatorMonitor .init ())
804
- dag = init (ChainDAGRef , defaultRuntimeConfig, db, validatorMonitor, {})
805
- state = (ref ForkedHashedBeaconState )(
806
- kind: ConsensusFork .Phase0 ,
807
- phase0Data: phase0.HashedBeaconState (data: phase0.BeaconState (
808
- slot: 10 .Slot )))
809
- root = Eth2Digest ()
810
-
811
- db.putCorruptState (ConsensusFork .Phase0 , root)
812
-
813
- let restoreAddr = addr dag.headState
814
-
815
- func restore () =
816
- assign (state[], restoreAddr[])
817
-
818
- check:
819
- state[].phase0Data.data.slot == 10 .Slot
820
- not db.getState (root, state[].phase0Data.data, restore)
821
- state[].phase0Data.data.slot != 10 .Slot
822
-
823
- test " sanity check Altair and cross-fork getState rollback" & preset ():
824
- var
825
- db = makeTestDB (SLOTS_PER_EPOCH )
826
- validatorMonitor = newClone (ValidatorMonitor .init ())
827
- dag = init (ChainDAGRef , defaultRuntimeConfig, db, validatorMonitor, {})
828
- state = (ref ForkedHashedBeaconState )(
829
- kind: ConsensusFork .Altair ,
830
- altairData: altair.HashedBeaconState (data: altair.BeaconState (
831
- slot: 10 .Slot )))
832
- root = Eth2Digest ()
833
-
834
- db.putCorruptState (ConsensusFork .Altair , root)
835
-
836
- let restoreAddr = addr dag.headState
837
-
838
- func restore () =
839
- assign (state[], restoreAddr[])
840
-
841
- check:
842
- state[].altairData.data.slot == 10 .Slot
843
- not db.getState (root, state[].altairData.data, restore)
844
-
845
- # assign() has switched the case object fork
846
- state[].kind == ConsensusFork .Phase0
847
- state[].phase0Data.data.slot != 10 .Slot
848
-
849
- test " sanity check Bellatrix and cross-fork getState rollback" & preset ():
850
- var
851
- db = makeTestDB (SLOTS_PER_EPOCH )
852
- validatorMonitor = newClone (ValidatorMonitor .init ())
853
- dag = init (ChainDAGRef , defaultRuntimeConfig, db, validatorMonitor, {})
854
- state = (ref ForkedHashedBeaconState )(
855
- kind: ConsensusFork .Bellatrix ,
856
- bellatrixData: bellatrix.HashedBeaconState (data: bellatrix.BeaconState (
857
- slot: 10 .Slot )))
858
- root = Eth2Digest ()
859
-
860
- db.putCorruptState (ConsensusFork .Bellatrix , root)
861
-
862
- let restoreAddr = addr dag.headState
863
-
864
- func restore () =
865
- assign (state[], restoreAddr[])
866
-
867
- check:
868
- state[].bellatrixData.data.slot == 10 .Slot
869
- not db.getState (root, state[].bellatrixData.data, restore)
870
-
871
- # assign() has switched the case object fork
872
- state[].kind == ConsensusFork .Phase0
873
- state[].phase0Data.data.slot != 10 .Slot
874
-
875
- test " sanity check Capella and cross-fork getState rollback" & preset ():
876
- var
877
- db = makeTestDB (SLOTS_PER_EPOCH )
878
- validatorMonitor = newClone (ValidatorMonitor .init ())
879
- dag = init (ChainDAGRef , defaultRuntimeConfig, db, validatorMonitor, {})
880
- state = (ref ForkedHashedBeaconState )(
881
- kind: ConsensusFork .Capella ,
882
- capellaData: capella.HashedBeaconState (data: capella.BeaconState (
883
- slot: 10 .Slot )))
884
- root = Eth2Digest ()
885
-
886
- db.putCorruptState (ConsensusFork .Capella , root)
887
-
888
- let restoreAddr = addr dag.headState
889
-
890
- func restore () =
891
- assign (state[], restoreAddr[])
892
-
893
- check:
894
- state[].capellaData.data.slot == 10 .Slot
895
- not db.getState (root, state[].capellaData.data, restore)
896
-
897
- # assign() has switched the case object fork
898
- state[].kind == ConsensusFork .Phase0
899
- state[].phase0Data.data.slot != 10 .Slot
900
-
901
- test " sanity check Deneb and cross-fork getState rollback" & preset ():
902
- var
903
- db = makeTestDB (SLOTS_PER_EPOCH )
904
- validatorMonitor = newClone (ValidatorMonitor .init ())
905
- dag = init (ChainDAGRef , defaultRuntimeConfig, db, validatorMonitor, {})
906
- state = (ref ForkedHashedBeaconState )(
907
- kind: ConsensusFork .Deneb ,
908
- denebData: deneb.HashedBeaconState (data: deneb.BeaconState (
909
- slot: 10 .Slot )))
910
- root = Eth2Digest ()
911
-
912
- db.putCorruptState (ConsensusFork .Deneb , root)
913
-
914
- let restoreAddr = addr dag.headState
915
-
916
- func restore () =
917
- assign (state[], restoreAddr[])
918
-
919
- check:
920
- state[].denebData.data.slot == 10 .Slot
921
- not db.getState (root, state[].denebData.data, restore)
922
-
923
- # assign() has switched the case object fork
924
- state[].kind == ConsensusFork .Phase0
925
- state[].phase0Data.data.slot != 10 .Slot
926
-
927
- test " sanity check Electra and cross-fork getState rollback" & preset ():
928
- var
929
- db = makeTestDB (SLOTS_PER_EPOCH )
930
- validatorMonitor = newClone (ValidatorMonitor .init ())
931
- dag = init (ChainDAGRef , defaultRuntimeConfig, db, validatorMonitor, {})
932
- state = (ref ForkedHashedBeaconState )(
933
- kind: ConsensusFork .Electra ,
934
- electraData: electra.HashedBeaconState (data: electra.BeaconState (
935
- slot: 10 .Slot )))
936
- root = Eth2Digest ()
937
-
938
- db.putCorruptState (ConsensusFork .Electra , root)
939
-
940
- let restoreAddr = addr dag.headState
941
-
942
- func restore () =
943
- assign (state[], restoreAddr[])
944
-
945
- check:
946
- state[].electraData.data.slot == 10 .Slot
947
- not db.getState (root, state[].electraData.data, restore)
948
-
949
- # assign() has switched the case object fork
950
- state[].kind == ConsensusFork .Phase0
951
- state[].phase0Data.data.slot != 10 .Slot
952
-
953
- test " sanity check Fulu and cross-fork getState rollback" & preset ():
954
- var
955
- db = makeTestDB (SLOTS_PER_EPOCH )
956
- validatorMonitor = newClone (ValidatorMonitor .init ())
957
- dag = init (ChainDAGRef , defaultRuntimeConfig, db, validatorMonitor, {})
958
- state = (ref ForkedHashedBeaconState )(
959
- kind: ConsensusFork .Fulu ,
960
- fuluData: fulu.HashedBeaconState (data: fulu.BeaconState (
961
- slot: 10 .Slot )))
962
- root = Eth2Digest ()
800
+ template doRollbackTest (consensusFork: static ConsensusFork ): untyped =
801
+ block :
802
+ let cfg = defaultRuntimeConfig
803
+ var
804
+ db = makeTestDB (SLOTS_PER_EPOCH )
805
+ validatorMonitor = newClone (ValidatorMonitor .init ())
806
+ dag = init (ChainDAGRef , cfg, db, validatorMonitor, {})
807
+ state = ForkedHashedBeaconState .new (
808
+ (ref consensusFork.BeaconState )(slot: 10 .Slot )[])
809
+ root = Eth2Digest ()
963
810
964
- db.putCorruptState (ConsensusFork . Fulu , root)
811
+ db.putCorruptState (consensusFork , root)
965
812
966
- let restoreAddr = addr dag.headState
813
+ let restoreAddr = addr dag.headState
967
814
968
- func restore () =
969
- assign (state[], restoreAddr[])
815
+ func restore () =
816
+ assign (state[], restoreAddr[])
970
817
971
- check:
972
- state[].fuluData.data.slot == 10 .Slot
973
- not db.getState (root, state[].fuluData.data, restore)
818
+ withState (state[]):
819
+ check:
820
+ forkyState.data.slot == 10 .Slot
821
+ not db.getState (root, forkyState.data, restore)
974
822
975
823
# assign() has switched the case object fork
976
- state[].kind == ConsensusFork .Phase0
977
- state[].phase0Data.data.slot != 10 .Slot
824
+ check:
825
+ state[].kind == ConsensusFork .Phase0
826
+ state[].phase0Data.data.slot != 10 .Slot
827
+
828
+ withAll (ConsensusFork ):
829
+ var name = " sanity check " & $ consensusFork &
830
+ (if consensusFork > ConsensusFork .Phase0 : " and cross-fork" else : " " ) &
831
+ " getState rollback"
832
+ test name & preset ():
833
+ when consensusFork >= ConsensusFork .Gloas :
834
+ skip ()
835
+ else :
836
+ doRollbackTest (consensusFork)
978
837
979
838
test " find ancestors" & preset ():
980
839
var db = BeaconChainDB .new (" " , inMemory = true )
0 commit comments