Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure New State Type Tests Pass in Prysm #4646

Merged
merged 171 commits into from Jan 31, 2020
Merged
Show file tree
Hide file tree
Changes from 170 commits
Commits
Show all changes
171 commits
Select commit Hold shift + click to select a range
d4cd5af
begin state service
rauljordan Jan 20, 2020
845a409
begin on the state trie idea
rauljordan Jan 20, 2020
8eae092
created beacon state structure
rauljordan Jan 20, 2020
33d7693
add in the full clone getter
rauljordan Jan 20, 2020
eb5b91f
return by value instead
rauljordan Jan 20, 2020
45980b8
add all setters
rauljordan Jan 20, 2020
5fa1e0a
new state setters are being completed
rauljordan Jan 20, 2020
7a994c5
arrays roots exposed
rauljordan Jan 20, 2020
aeff2e4
close to finishing all these headerssss
rauljordan Jan 21, 2020
a9f4e2a
functionality complete
rauljordan Jan 21, 2020
a8b6fe9
added in proto benchmark test
rauljordan Jan 21, 2020
babd076
test for compatibility
rauljordan Jan 21, 2020
cff2276
add test for compat
rauljordan Jan 21, 2020
5cf40d9
comments fixed
rauljordan Jan 21, 2020
1f62238
Merge branch 'master' into state-service
rauljordan Jan 21, 2020
b7c681f
add clone
nisdas Jan 21, 2020
60bf43a
add clone
nisdas Jan 21, 2020
aafed8f
remove underlying copies
nisdas Jan 21, 2020
86bd353
make it immutable
nisdas Jan 21, 2020
d03429a
integrate it into chainservice
nisdas Jan 21, 2020
0af8955
revert
rauljordan Jan 21, 2020
17a7cfc
wrap up comments for package
rauljordan Jan 21, 2020
372af74
address all comments and godocs
rauljordan Jan 21, 2020
37fdc89
address all comments
rauljordan Jan 21, 2020
9f8c528
Merge branch 'master' into state-service
rauljordan Jan 21, 2020
e23672c
clone the pending attestation properly
rauljordan Jan 21, 2020
0856c04
Merge branch 'state-service' of github.com:prysmaticlabs/prysm into s…
rauljordan Jan 21, 2020
dabe5fb
properly clone remaining items
rauljordan Jan 21, 2020
ae24d8d
tests pass fixed bug
rauljordan Jan 21, 2020
33de1ec
begin using it instead of head state
rauljordan Jan 21, 2020
dd68b33
prevent nil pointer exceptions
rauljordan Jan 21, 2020
8cb1817
Merge branch 'state-service' into use-state-in-runtime
rauljordan Jan 21, 2020
037931d
begin using new struct in db
rauljordan Jan 21, 2020
3a2e2f3
integrated new type into db package
rauljordan Jan 21, 2020
87bec3a
add proper nil checks
rauljordan Jan 21, 2020
8218a42
using new state in archiver
rauljordan Jan 21, 2020
7730c96
refactored much of core
rauljordan Jan 21, 2020
c1aab15
editing all the precompute functions
rauljordan Jan 21, 2020
6c77de0
done with most core refactor
rauljordan Jan 21, 2020
354ed4e
fixed up some bugs in the clone comparisons
rauljordan Jan 21, 2020
ecce2bf
Merge branch 'state-service' into use-state-in-runtime
rauljordan Jan 21, 2020
08570d3
append current epoch atts
rauljordan Jan 21, 2020
b4c8db3
merged master
rauljordan Jan 22, 2020
650aa7d
add missing setters
nisdas Jan 22, 2020
e156575
add new setters
nisdas Jan 22, 2020
c9470c4
fix other core methods
nisdas Jan 22, 2020
cd2c511
fix up transition
nisdas Jan 22, 2020
4c3f233
main service and forkchoice
nisdas Jan 22, 2020
ac84640
fix rpc
nisdas Jan 22, 2020
0e7ade9
integrated to powchain
nisdas Jan 22, 2020
8013ada
some more changes
nisdas Jan 22, 2020
368511c
fix build
nisdas Jan 22, 2020
7f3cbc4
improve processing of deposits
nisdas Jan 22, 2020
7367d14
fix error
nisdas Jan 22, 2020
0b83ab7
prevent panic
rauljordan Jan 22, 2020
d823666
comment
rauljordan Jan 22, 2020
f88012a
fix process att
rauljordan Jan 22, 2020
73d357d
gaz
rauljordan Jan 22, 2020
d7eef1e
fix up att process
rauljordan Jan 22, 2020
46097f0
resolve existing review comments
rauljordan Jan 22, 2020
9a910ff
Merge branch 'master' into use-state-in-runtime
rauljordan Jan 22, 2020
b16aa95
resolve another batch of gh comments
rauljordan Jan 22, 2020
529bbe4
resolve broken cpt state
rauljordan Jan 22, 2020
6ded991
revise testutil to use the new state
rauljordan Jan 22, 2020
5ab917a
begin updating the state transition func to pass in more compartmenta…
rauljordan Jan 22, 2020
4f14d6f
finish editing transition function to return errors
rauljordan Jan 22, 2020
21f9ede
block operations pretty much done with refactor
rauljordan Jan 22, 2020
54d9fda
state transition fully refactored
rauljordan Jan 22, 2020
95f95f8
got epoch processing completed
rauljordan Jan 23, 2020
043933c
fix build in fork choice
rauljordan Jan 23, 2020
c7ffb40
fixing more of the build
rauljordan Jan 23, 2020
a6508e0
fix up broken sync package
rauljordan Jan 23, 2020
56a8fa8
it builds nowww it buildssss
rauljordan Jan 23, 2020
07c58dc
revert registry changes
nisdas Jan 23, 2020
9a117ea
Recompute on Read (#4627)
nisdas Jan 23, 2020
41defe8
include master
rauljordan Jan 24, 2020
a549f0e
More Optimizations for New State (#4641)
nisdas Jan 24, 2020
fea0f6c
archiver tests pass
rauljordan Jan 24, 2020
e9b1a0f
fixing cache tests
rauljordan Jan 24, 2020
558c383
cache tests passing
rauljordan Jan 24, 2020
bfd0d72
edited validator tests
rauljordan Jan 24, 2020
11fd206
powchain tests passing
rauljordan Jan 24, 2020
bcd2dac
halfway thru sync tests
rauljordan Jan 24, 2020
412d15a
more sync test fixes
rauljordan Jan 24, 2020
09618e6
add in tests for state/
rauljordan Jan 24, 2020
59ace74
working through rpc tests
rauljordan Jan 24, 2020
37e515e
assignments tests passed
rauljordan Jan 24, 2020
c312cda
almost done with rpc/beacon tests
rauljordan Jan 24, 2020
2f1e3ad
resolved painful validator test
rauljordan Jan 24, 2020
6d4af94
fixed up even more tests
rauljordan Jan 24, 2020
119ec5b
resolve tests
rauljordan Jan 24, 2020
6644e4e
fix build
rauljordan Jan 24, 2020
4587c5c
reduce a randao mixes copy
prestonvanloon Jan 24, 2020
434e288
fixes under //beacon-chain/blockchain/...
prestonvanloon Jan 27, 2020
ce95d25
build //beacon-chain/core/...
prestonvanloon Jan 28, 2020
e48b85f
fixes
prestonvanloon Jan 28, 2020
c65bfcc
Runtime Optimizations (#4648)
nisdas Jan 28, 2020
58fa28f
Merge branch 'use-state-in-runtime' of https://github.com/prysmaticla…
nisdas Jan 28, 2020
444a80c
fix visibility
nisdas Jan 28, 2020
1c9e594
build works for all
nisdas Jan 28, 2020
705ce3c
fix blockchain test
nisdas Jan 28, 2020
2e9132d
fix a few tests
nisdas Jan 28, 2020
73d7a4d
fix more tests
nisdas Jan 28, 2020
47d34c4
resolve conf
rauljordan Jan 28, 2020
170e0c1
sync
rauljordan Jan 28, 2020
d39ed67
update validator in slashing
prestonvanloon Jan 28, 2020
c4d3ad8
Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into r…
prestonvanloon Jan 28, 2020
9458329
archiver passing
rauljordan Jan 28, 2020
8a20f77
Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into r…
rauljordan Jan 28, 2020
f395230
fixed rpc/validator
rauljordan Jan 28, 2020
e2f5c98
progress on core tests
prestonvanloon Jan 28, 2020
1f1ed50
Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into r…
prestonvanloon Jan 28, 2020
2e1f205
resolve broken rpc tests
rauljordan Jan 28, 2020
4be269d
Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into r…
rauljordan Jan 28, 2020
d442538
blockchain tests passed
rauljordan Jan 28, 2020
28eae0b
fix up some tests in core
rauljordan Jan 28, 2020
e7a2859
Merge branch 'master' of github.com:prysmaticlabs/prysm into resolve-…
prestonvanloon Jan 28, 2020
eec0837
fix message diff
prestonvanloon Jan 29, 2020
35b3860
remove unnecessary save
prestonvanloon Jan 29, 2020
8e47cb5
Merge branch 'master' of github.com:prysmaticlabs/prysm into resolve-…
prestonvanloon Jan 29, 2020
2ff3df7
Save validator after slashing
prestonvanloon Jan 29, 2020
67bb567
Update validators one by one
prestonvanloon Jan 29, 2020
aa57a0b
another update
prestonvanloon Jan 29, 2020
1b2b3b2
fix everything
nisdas Jan 29, 2020
b4a56c5
Merge branch 'resolve-tests' of https://github.com/prysmaticlabs/geth…
nisdas Jan 29, 2020
312743f
fix more precompute tests
nisdas Jan 29, 2020
8eca98c
fix blocks tests
shayzluf Jan 29, 2020
7f27a25
Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into r…
shayzluf Jan 29, 2020
afb0a1f
more elegant fix
shayzluf Jan 29, 2020
c2d25da
more helper fixes
nisdas Jan 29, 2020
5223e83
Merge branch 'resolve-tests' of https://github.com/prysmaticlabs/geth…
nisdas Jan 29, 2020
8080538
change back ?
nisdas Jan 29, 2020
de3a877
fix test
nisdas Jan 29, 2020
a5d2cb5
fix skip slot
nisdas Jan 29, 2020
0da0d7a
fix test
nisdas Jan 29, 2020
41c4818
reset caches
nisdas Jan 29, 2020
44bbe14
fix testutil
rauljordan Jan 29, 2020
03c111f
raceoff fixed
rauljordan Jan 29, 2020
ca81d5a
passing
rauljordan Jan 29, 2020
3269b75
Retrieve cached state in the beginning
terencechain Jan 29, 2020
367505e
lint
rauljordan Jan 29, 2020
a79d43d
Merge branch 'master' of github.com:prysmaticlabs/prysm into resolve-…
prestonvanloon Jan 29, 2020
b5ca3a4
Fixed tests part 1
terencechain Jan 29, 2020
2739894
Fixed rest of the tests
terencechain Jan 29, 2020
fecb0d4
Merge branch 'master' into optimize-process-att
terencechain Jan 29, 2020
0d58a46
Minor changes to avoid copying, small refactor to reduce deplicated code
prestonvanloon Jan 29, 2020
2cba055
Merge branch 'master' into resolve-tests
rauljordan Jan 29, 2020
cdbcb88
Handle att req for slot 0
terencechain Jan 29, 2020
6be3059
New beacon state: Only populate merkle layers as needed, copy merkle …
prestonvanloon Jan 29, 2020
46b56ae
Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into r…
rauljordan Jan 29, 2020
69e236f
Merge branch 'master' into resolve-tests
prestonvanloon Jan 29, 2020
f9b3bef
Target root can't be 0x00
terencechain Jan 30, 2020
2aa7e19
Merge refs/heads/master into resolve-tests
prylabs-bulldozer[bot] Jan 30, 2020
edf562f
Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into r…
rauljordan Jan 30, 2020
98ff9c2
Don't use cache for current slot (may not be the right fix)
terencechain Jan 30, 2020
e3222f1
Merge branch 'resolve-tests' of git+ssh://github.com/prysmaticlabs/pr…
terencechain Jan 30, 2020
9338b3a
Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into r…
rauljordan Jan 30, 2020
7fa3f83
fixed up tests
rauljordan Jan 30, 2020
53219f3
Remove some copy for init sync. Not sure if it is safe enough for run…
prestonvanloon Jan 30, 2020
625a831
Align with prev logic for process slots cachedState.Slot() < slot
terencechain Jan 30, 2020
e6f0059
Fix Initial Sync Flag (#4692)
nisdas Jan 30, 2020
8e6400f
Conflict
terencechain Jan 30, 2020
af7dddf
Conflict
terencechain Jan 30, 2020
48931b2
resolve confs
rauljordan Jan 30, 2020
8d96033
resolving further conflicts
rauljordan Jan 30, 2020
e909164
Better skip slot cache (#4694)
prestonvanloon Jan 30, 2020
d2bcb02
Fix pruning
terencechain Jan 30, 2020
e730806
Merge refs/heads/master into resolve-tests
prylabs-bulldozer[bot] Jan 30, 2020
13971d4
Merge refs/heads/master into resolve-tests
prylabs-bulldozer[bot] Jan 31, 2020
546f816
fix confs
rauljordan Jan 31, 2020
67e1cd7
fix up issues with broken tests
rauljordan Jan 31, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions beacon-chain/archiver/BUILD.bazel
Expand Up @@ -12,6 +12,7 @@ go_library(
"//beacon-chain/core/helpers:go_default_library",
"//beacon-chain/core/validators:go_default_library",
"//beacon-chain/db:go_default_library",
"//beacon-chain/state:go_default_library",
"//proto/beacon/p2p/v1:go_default_library",
"//shared/params:go_default_library",
"@com_github_pkg_errors//:go_default_library",
Expand All @@ -32,6 +33,7 @@ go_test(
"//beacon-chain/core/helpers:go_default_library",
"//beacon-chain/db:go_default_library",
"//beacon-chain/db/testing:go_default_library",
"//beacon-chain/state:go_default_library",
"//proto/beacon/p2p/v1:go_default_library",
"//shared/params:go_default_library",
"//shared/testutil:go_default_library",
Expand Down
24 changes: 13 additions & 11 deletions beacon-chain/archiver/service.go
Expand Up @@ -12,6 +12,7 @@ import (
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
"github.com/prysmaticlabs/prysm/beacon-chain/core/validators"
"github.com/prysmaticlabs/prysm/beacon-chain/db"
"github.com/prysmaticlabs/prysm/beacon-chain/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/params"
"github.com/sirupsen/logrus"
Expand Down Expand Up @@ -70,7 +71,7 @@ func (s *Service) Status() error {
}

// We archive committee information pertaining to the head state's epoch.
func (s *Service) archiveCommitteeInfo(ctx context.Context, headState *pb.BeaconState, epoch uint64) error {
func (s *Service) archiveCommitteeInfo(ctx context.Context, headState *state.BeaconState, epoch uint64) error {
proposerSeed, err := helpers.Seed(headState, epoch, params.BeaconConfig().DomainBeaconProposer)
if err != nil {
return errors.Wrap(err, "could not generate seed")
Expand All @@ -91,15 +92,16 @@ func (s *Service) archiveCommitteeInfo(ctx context.Context, headState *pb.Beacon
}

// We archive active validator set changes that happened during the previous epoch.
func (s *Service) archiveActiveSetChanges(ctx context.Context, headState *pb.BeaconState, epoch uint64) error {
func (s *Service) archiveActiveSetChanges(ctx context.Context, headState *state.BeaconState, epoch uint64) error {
prevEpoch := epoch - 1
activations := validators.ActivatedValidatorIndices(prevEpoch, headState.Validators)
slashings := validators.SlashedValidatorIndices(prevEpoch, headState.Validators)
vals := headState.Validators()
activations := validators.ActivatedValidatorIndices(prevEpoch, vals)
slashings := validators.SlashedValidatorIndices(prevEpoch, vals)
activeValidatorCount, err := helpers.ActiveValidatorCount(headState, prevEpoch)
if err != nil {
return errors.Wrap(err, "could not get active validator count")
}
exited, err := validators.ExitedValidatorIndices(prevEpoch, headState.Validators, activeValidatorCount)
exited, err := validators.ExitedValidatorIndices(prevEpoch, vals, activeValidatorCount)
if err != nil {
return errors.Wrap(err, "could not determine exited validator indices")
}
Expand Down Expand Up @@ -130,8 +132,7 @@ func (s *Service) archiveParticipation(ctx context.Context, epoch uint64) error
}

// We archive validator balances and active indices.
func (s *Service) archiveBalances(ctx context.Context, headState *pb.BeaconState, epoch uint64) error {
balances := headState.Balances
func (s *Service) archiveBalances(ctx context.Context, balances []uint64, epoch uint64) error {
if err := s.beaconDB.SaveArchivedBalances(ctx, epoch, balances); err != nil {
return errors.Wrap(err, "could not archive balances")
}
Expand All @@ -153,12 +154,13 @@ func (s *Service) run(ctx context.Context) {
log.WithError(err).Error("Head state is not available")
continue
}
currentEpoch := helpers.CurrentEpoch(headState)
if !helpers.IsEpochEnd(headState.Slot) && currentEpoch <= s.lastArchivedEpoch {
slot := headState.Slot()
currentEpoch := helpers.SlotToEpoch(slot)
if !helpers.IsEpochEnd(slot) && currentEpoch <= s.lastArchivedEpoch {
continue
}
epochToArchive := currentEpoch
if !helpers.IsEpochEnd(headState.Slot) {
if !helpers.IsEpochEnd(slot) {
epochToArchive--
}
if err := s.archiveCommitteeInfo(ctx, headState, epochToArchive); err != nil {
Expand All @@ -173,7 +175,7 @@ func (s *Service) run(ctx context.Context) {
log.WithError(err).Error("Could not archive validator participation")
continue
}
if err := s.archiveBalances(ctx, headState, epochToArchive); err != nil {
if err := s.archiveBalances(ctx, headState.Balances(), epochToArchive); err != nil {
log.WithError(err).Error("Could not archive validator balances and active indices")
continue
}
Expand Down
116 changes: 93 additions & 23 deletions beacon-chain/archiver/service_test.go
Expand Up @@ -17,6 +17,7 @@ import (
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
"github.com/prysmaticlabs/prysm/beacon-chain/db"
dbutil "github.com/prysmaticlabs/prysm/beacon-chain/db/testing"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/params"
"github.com/prysmaticlabs/prysm/shared/testutil"
Expand All @@ -27,15 +28,20 @@ import (
func init() {
logrus.SetLevel(logrus.DebugLevel)
logrus.SetOutput(ioutil.Discard)
params.OverrideBeaconConfig(params.MinimalSpecConfig())
}

func TestArchiverService_ReceivesBlockProcessedEvent(t *testing.T) {
hook := logTest.NewGlobal()
svc, beaconDB := setupService(t)
defer dbutil.TeardownDB(t, beaconDB)
st, err := stateTrie.InitializeFromProto(&pb.BeaconState{
Slot: 1,
})
if err != nil {
t.Fatal(err)
}
svc.headFetcher = &mock.ChainService{
State: &pb.BeaconState{Slot: 1},
State: st,
}

event := &feed.Event{
Expand All @@ -55,8 +61,14 @@ func TestArchiverService_OnlyArchiveAtEpochEnd(t *testing.T) {
svc, beaconDB := setupService(t)
defer dbutil.TeardownDB(t, beaconDB)
// The head state is NOT an epoch end.
st, err := stateTrie.InitializeFromProto(&pb.BeaconState{
Slot: params.BeaconConfig().SlotsPerEpoch - 2,
})
if err != nil {
t.Fatal(err)
}
svc.headFetcher = &mock.ChainService{
State: &pb.BeaconState{Slot: params.BeaconConfig().SlotsPerEpoch - 2},
State: st,
}
event := &feed.Event{
Type: statefeed.BlockProcessed,
Expand All @@ -81,7 +93,10 @@ func TestArchiverService_ArchivesEvenThroughSkipSlot(t *testing.T) {
hook := logTest.NewGlobal()
svc, beaconDB := setupService(t)
validatorCount := uint64(100)
headState := setupState(validatorCount)
headState, err := setupState(validatorCount)
if err != nil {
t.Fatal(err)
}
defer dbutil.TeardownDB(t, beaconDB)
event := &feed.Event{
Type: statefeed.BlockProcessed,
Expand All @@ -99,7 +114,9 @@ func TestArchiverService_ArchivesEvenThroughSkipSlot(t *testing.T) {

// Send out an event every slot, skipping the end slot of the epoch.
for i := uint64(0); i < params.BeaconConfig().SlotsPerEpoch+1; i++ {
headState.Slot = i
if err := headState.SetSlot(i); err != nil {
t.Fatal(err)
}
svc.headFetcher = &mock.ChainService{
State: headState,
}
Expand Down Expand Up @@ -130,7 +147,10 @@ func TestArchiverService_ArchivesEvenThroughSkipSlot(t *testing.T) {
func TestArchiverService_ComputesAndSavesParticipation(t *testing.T) {
hook := logTest.NewGlobal()
validatorCount := uint64(100)
headState := setupState(validatorCount)
headState, err := setupState(validatorCount)
if err != nil {
t.Fatal(err)
}
svc, beaconDB := setupService(t)
defer dbutil.TeardownDB(t, beaconDB)
svc.headFetcher = &mock.ChainService{
Expand Down Expand Up @@ -168,7 +188,10 @@ func TestArchiverService_ComputesAndSavesParticipation(t *testing.T) {
func TestArchiverService_SavesIndicesAndBalances(t *testing.T) {
hook := logTest.NewGlobal()
validatorCount := uint64(100)
headState := setupState(validatorCount)
headState, err := setupState(validatorCount)
if err != nil {
t.Fatal(err)
}
svc, beaconDB := setupService(t)
defer dbutil.TeardownDB(t, beaconDB)
svc.headFetcher = &mock.ChainService{
Expand All @@ -187,11 +210,11 @@ func TestArchiverService_SavesIndicesAndBalances(t *testing.T) {
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(headState.Balances, retrieved) {
if !reflect.DeepEqual(headState.Balances(), retrieved) {
t.Errorf(
"Wanted balances for epoch %d %v, retrieved %v",
helpers.CurrentEpoch(headState),
headState.Balances,
headState.Balances(),
retrieved,
)
}
Expand All @@ -201,7 +224,10 @@ func TestArchiverService_SavesIndicesAndBalances(t *testing.T) {
func TestArchiverService_SavesCommitteeInfo(t *testing.T) {
hook := logTest.NewGlobal()
validatorCount := uint64(100)
headState := setupState(validatorCount)
headState, err := setupState(validatorCount)
if err != nil {
t.Fatal(err)
}
svc, beaconDB := setupService(t)
defer dbutil.TeardownDB(t, beaconDB)
svc.headFetcher = &mock.ChainService{
Expand Down Expand Up @@ -248,16 +274,33 @@ func TestArchiverService_SavesCommitteeInfo(t *testing.T) {
func TestArchiverService_SavesActivatedValidatorChanges(t *testing.T) {
hook := logTest.NewGlobal()
validatorCount := uint64(100)
headState := setupState(validatorCount)
headState, err := setupState(validatorCount)
if err != nil {
t.Fatal(err)
}
svc, beaconDB := setupService(t)
defer dbutil.TeardownDB(t, beaconDB)
svc.headFetcher = &mock.ChainService{
State: headState,
}
prevEpoch := helpers.PrevEpoch(headState)
delayedActEpoch := helpers.DelayedActivationExitEpoch(prevEpoch)
headState.Validators[4].ActivationEpoch = delayedActEpoch
headState.Validators[5].ActivationEpoch = delayedActEpoch
val1, err := headState.ValidatorAtIndex(4)
if err != nil {
t.Fatal(err)
}
val1.ActivationEpoch = delayedActEpoch
val2, err := headState.ValidatorAtIndex(5)
if err != nil {
t.Fatal(err)
}
val2.ActivationEpoch = delayedActEpoch
if err := headState.UpdateValidatorAtIndex(4, val1); err != nil {
t.Fatal(err)
}
if err := headState.UpdateValidatorAtIndex(5, val1); err != nil {
t.Fatal(err)
}
event := &feed.Event{
Type: statefeed.BlockProcessed,
Data: &statefeed.BlockProcessedData{
Expand All @@ -283,15 +326,32 @@ func TestArchiverService_SavesActivatedValidatorChanges(t *testing.T) {
func TestArchiverService_SavesSlashedValidatorChanges(t *testing.T) {
hook := logTest.NewGlobal()
validatorCount := uint64(100)
headState := setupState(validatorCount)
headState, err := setupState(validatorCount)
if err != nil {
t.Fatal(err)
}
svc, beaconDB := setupService(t)
defer dbutil.TeardownDB(t, beaconDB)
svc.headFetcher = &mock.ChainService{
State: headState,
}
prevEpoch := helpers.PrevEpoch(headState)
headState.Validators[95].Slashed = true
headState.Validators[96].Slashed = true
val1, err := headState.ValidatorAtIndex(95)
if err != nil {
t.Fatal(err)
}
val1.Slashed = true
val2, err := headState.ValidatorAtIndex(96)
if err != nil {
t.Fatal(err)
}
val2.Slashed = true
if err := headState.UpdateValidatorAtIndex(95, val1); err != nil {
t.Fatal(err)
}
if err := headState.UpdateValidatorAtIndex(96, val1); err != nil {
t.Fatal(err)
}
event := &feed.Event{
Type: statefeed.BlockProcessed,
Data: &statefeed.BlockProcessedData{
Expand All @@ -317,15 +377,25 @@ func TestArchiverService_SavesSlashedValidatorChanges(t *testing.T) {
func TestArchiverService_SavesExitedValidatorChanges(t *testing.T) {
hook := logTest.NewGlobal()
validatorCount := uint64(100)
headState := setupState(validatorCount)
headState, err := setupState(validatorCount)
if err != nil {
t.Fatal(err)
}
svc, beaconDB := setupService(t)
defer dbutil.TeardownDB(t, beaconDB)
svc.headFetcher = &mock.ChainService{
State: headState,
}
prevEpoch := helpers.PrevEpoch(headState)
headState.Validators[95].ExitEpoch = prevEpoch
headState.Validators[95].WithdrawableEpoch = prevEpoch + params.BeaconConfig().MinValidatorWithdrawabilityDelay
val, err := headState.ValidatorAtIndex(95)
if err != nil {
t.Fatal(err)
}
val.ExitEpoch = prevEpoch
val.WithdrawableEpoch = prevEpoch + params.BeaconConfig().MinValidatorWithdrawabilityDelay
if err := headState.UpdateValidatorAtIndex(95, val); err != nil {
t.Fatal(err)
}
event := &feed.Event{
Type: statefeed.BlockProcessed,
Data: &statefeed.BlockProcessedData{
Expand All @@ -347,7 +417,7 @@ func TestArchiverService_SavesExitedValidatorChanges(t *testing.T) {
}
}

func setupState(validatorCount uint64) *pb.BeaconState {
func setupState(validatorCount uint64) (*stateTrie.BeaconState, error) {
validators := make([]*ethpb.Validator, validatorCount)
balances := make([]uint64, validatorCount)
for i := 0; i < len(validators); i++ {
Expand All @@ -363,18 +433,18 @@ func setupState(validatorCount uint64) *pb.BeaconState {

// We initialize a head state that has attestations from participated
// validators in a simulated fashion.
return &pb.BeaconState{
return stateTrie.InitializeFromProto(&pb.BeaconState{
Slot: (2 * params.BeaconConfig().SlotsPerEpoch) - 1,
Validators: validators,
Balances: balances,
BlockRoots: make([][]byte, 128),
BlockRoots: make([][]byte, params.BeaconConfig().SlotsPerHistoricalRoot),
Slashings: []uint64{0, 1e9, 1e9},
RandaoMixes: make([][]byte, params.BeaconConfig().EpochsPerHistoricalVector),
CurrentEpochAttestations: atts,
FinalizedCheckpoint: &ethpb.Checkpoint{},
JustificationBits: bitfield.Bitvector4{0x00},
CurrentJustifiedCheckpoint: &ethpb.Checkpoint{},
}
})
}

func setupService(t *testing.T) (*Service, db.Database) {
Expand Down
2 changes: 1 addition & 1 deletion beacon-chain/blockchain/BUILD.bazel
Expand Up @@ -35,13 +35,13 @@ go_library(
"//beacon-chain/operations/voluntaryexits:go_default_library",
"//beacon-chain/p2p:go_default_library",
"//beacon-chain/powchain:go_default_library",
"//beacon-chain/state:go_default_library",
"//proto/beacon/p2p/v1:go_default_library",
"//shared/attestationutil:go_default_library",
"//shared/bytesutil:go_default_library",
"//shared/featureconfig:go_default_library",
"//shared/params:go_default_library",
"//shared/slotutil:go_default_library",
"//shared/stateutil:go_default_library",
"//shared/traceutil:go_default_library",
"@com_github_emicklei_dot//:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
Expand Down