ETH2 Types: Slot (#8408)

* update shared/params

* update eth2-types deps

* update protobufs

* update shared/*

* fix testutil/state

* update beacon-chain/state

* update beacon-chain/db

* update tests

* fix test

* update beacon-chain/core

* update beacon-chain/blockchain

* update beacon-chain/cache

* beacon-chain/forkchoice

* update beacon-chain/operations

* update beacon-chain/p2p

* update beacon-chain/rpc

* update sync/initial-sync

* update deps

* update deps

* go fmt

* update beacon-chain/sync

* update endtoend/

* bazel build //beacon-chain - works w/o issues

* update slasher code

* udpate tools/

* update validator/

* update fastssz

* fix build

* fix test building

* update tests

* update ethereumapis deps

* fix tests

* update state/stategen

* fix build

* fix test

* add FarFutureSlot

* go imports

* Radek's suggestions

* Ivan's suggestions

* type conversions

* Nishant's suggestions

* add more tests to rpc_send_request

* fix test

* clean up

* fix conflicts

Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com>
Co-authored-by: nisdas <nishdas93@gmail.com>
This commit is contained in:
Victor Farazdagi
2021-02-16 10:45:34 +03:00
committed by GitHub
parent aef5a7b428
commit a069738c20
294 changed files with 3071 additions and 2449 deletions

View File

@@ -4,7 +4,7 @@ import (
"context" "context"
"time" "time"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
"github.com/prysmaticlabs/prysm/beacon-chain/forkchoice/protoarray" "github.com/prysmaticlabs/prysm/beacon-chain/forkchoice/protoarray"
@@ -27,7 +27,7 @@ type ChainInfoFetcher interface {
// TimeFetcher retrieves the Eth2 data that's related to time. // TimeFetcher retrieves the Eth2 data that's related to time.
type TimeFetcher interface { type TimeFetcher interface {
GenesisTime() time.Time GenesisTime() time.Time
CurrentSlot() uint64 CurrentSlot() types.Slot
} }
// GenesisFetcher retrieves the eth2 data related to its genesis. // GenesisFetcher retrieves the eth2 data related to its genesis.
@@ -38,7 +38,7 @@ type GenesisFetcher interface {
// HeadFetcher defines a common interface for methods in blockchain service which // HeadFetcher defines a common interface for methods in blockchain service which
// directly retrieves head related data. // directly retrieves head related data.
type HeadFetcher interface { type HeadFetcher interface {
HeadSlot() uint64 HeadSlot() types.Slot
HeadRoot(ctx context.Context) ([]byte, error) HeadRoot(ctx context.Context) ([]byte, error)
HeadBlock(ctx context.Context) (*ethpb.SignedBeaconBlock, error) HeadBlock(ctx context.Context) (*ethpb.SignedBeaconBlock, error)
HeadState(ctx context.Context) (*state.BeaconState, error) HeadState(ctx context.Context) (*state.BeaconState, error)
@@ -96,7 +96,7 @@ func (s *Service) PreviousJustifiedCheckpt() *ethpb.Checkpoint {
} }
// HeadSlot returns the slot of the head of the chain. // HeadSlot returns the slot of the head of the chain.
func (s *Service) HeadSlot() uint64 { func (s *Service) HeadSlot() types.Slot {
s.headLock.RLock() s.headLock.RLock()
defer s.headLock.RUnlock() defer s.headLock.RUnlock()

View File

@@ -6,6 +6,7 @@ import (
"time" "time"
"github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/proto"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
testDB "github.com/prysmaticlabs/prysm/beacon-chain/db/testing" testDB "github.com/prysmaticlabs/prysm/beacon-chain/db/testing"
@@ -106,7 +107,7 @@ func TestHeadSlot_CanRetrieve(t *testing.T) {
s, err := state.InitializeFromProto(&pb.BeaconState{}) s, err := state.InitializeFromProto(&pb.BeaconState{})
require.NoError(t, err) require.NoError(t, err)
c.head = &head{slot: 100, state: s} c.head = &head{slot: 100, state: s}
assert.Equal(t, uint64(100), c.HeadSlot()) assert.Equal(t, types.Slot(100), c.HeadSlot())
} }
func TestHeadRoot_CanRetrieve(t *testing.T) { func TestHeadRoot_CanRetrieve(t *testing.T) {

View File

@@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"github.com/pkg/errors" "github.com/pkg/errors"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/feed" "github.com/prysmaticlabs/prysm/beacon-chain/core/feed"
statefeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/state" statefeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/state"
@@ -20,7 +21,7 @@ import (
// This defines the current chain service's view of head. // This defines the current chain service's view of head.
type head struct { type head struct {
slot uint64 // current head slot. slot types.Slot // current head slot.
root [32]byte // current head root. root [32]byte // current head root.
block *ethpb.SignedBeaconBlock // current head block. block *ethpb.SignedBeaconBlock // current head block.
state *stateTrie.BeaconState // current head state. state *stateTrie.BeaconState // current head state.
@@ -195,7 +196,7 @@ func (s *Service) setHeadInitialSync(root [32]byte, block *ethpb.SignedBeaconBlo
// This returns the head slot. // This returns the head slot.
// This is a lock free version. // This is a lock free version.
func (s *Service) headSlot() uint64 { func (s *Service) headSlot() types.Slot {
return s.head.slot return s.head.slot
} }

View File

@@ -5,6 +5,7 @@ import (
"context" "context"
"testing" "testing"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
testDB "github.com/prysmaticlabs/prysm/beacon-chain/db/testing" testDB "github.com/prysmaticlabs/prysm/beacon-chain/db/testing"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
@@ -22,7 +23,7 @@ func TestSaveHead_Same(t *testing.T) {
service.head = &head{slot: 0, root: r} service.head = &head{slot: 0, root: r}
require.NoError(t, service.saveHead(context.Background(), r)) require.NoError(t, service.saveHead(context.Background(), r))
assert.Equal(t, uint64(0), service.headSlot(), "Head did not stay the same") assert.Equal(t, types.Slot(0), service.headSlot(), "Head did not stay the same")
assert.Equal(t, r, service.headRoot(), "Head did not stay the same") assert.Equal(t, r, service.headRoot(), "Head did not stay the same")
} }
@@ -48,7 +49,7 @@ func TestSaveHead_Different(t *testing.T) {
require.NoError(t, service.beaconDB.SaveState(context.Background(), headState, newRoot)) require.NoError(t, service.beaconDB.SaveState(context.Background(), headState, newRoot))
require.NoError(t, service.saveHead(context.Background(), newRoot)) require.NoError(t, service.saveHead(context.Background(), newRoot))
assert.Equal(t, uint64(1), service.HeadSlot(), "Head did not change") assert.Equal(t, types.Slot(1), service.HeadSlot(), "Head did not change")
cachedRoot, err := service.HeadRoot(context.Background()) cachedRoot, err := service.HeadRoot(context.Background())
require.NoError(t, err) require.NoError(t, err)
@@ -82,7 +83,7 @@ func TestSaveHead_Different_Reorg(t *testing.T) {
require.NoError(t, service.beaconDB.SaveState(context.Background(), headState, newRoot)) require.NoError(t, service.beaconDB.SaveState(context.Background(), headState, newRoot))
require.NoError(t, service.saveHead(context.Background(), newRoot)) require.NoError(t, service.saveHead(context.Background(), newRoot))
assert.Equal(t, uint64(1), service.HeadSlot(), "Head did not change") assert.Equal(t, types.Slot(1), service.HeadSlot(), "Head did not change")
cachedRoot, err := service.HeadRoot(context.Background()) cachedRoot, err := service.HeadRoot(context.Background())
require.NoError(t, err) require.NoError(t, err)

View File

@@ -5,7 +5,7 @@ import (
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto" "github.com/prometheus/client_golang/prometheus/promauto"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/epoch/precompute" "github.com/prysmaticlabs/prysm/beacon-chain/core/epoch/precompute"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
@@ -109,7 +109,7 @@ var (
) )
// reportSlotMetrics reports slot related metrics. // reportSlotMetrics reports slot related metrics.
func reportSlotMetrics(stateSlot, headSlot, clockSlot uint64, finalizedCheckpoint *ethpb.Checkpoint) { func reportSlotMetrics(stateSlot, headSlot, clockSlot types.Slot, finalizedCheckpoint *ethpb.Checkpoint) {
clockTimeSlot.Set(float64(clockSlot)) clockTimeSlot.Set(float64(clockSlot))
beaconSlot.Set(float64(stateSlot)) beaconSlot.Set(float64(stateSlot))
beaconHeadSlot.Set(float64(headSlot)) beaconHeadSlot.Set(float64(headSlot))

View File

@@ -6,7 +6,7 @@ import (
"strconv" "strconv"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
"github.com/prysmaticlabs/prysm/beacon-chain/core/state" "github.com/prysmaticlabs/prysm/beacon-chain/core/state"
@@ -77,7 +77,7 @@ func (s *Service) getAttPreState(ctx context.Context, c *ethpb.Checkpoint) (*sta
// verifyAttTargetEpoch validates attestation is from the current or previous epoch. // verifyAttTargetEpoch validates attestation is from the current or previous epoch.
func (s *Service) verifyAttTargetEpoch(_ context.Context, genesisTime, nowTime uint64, c *ethpb.Checkpoint) error { func (s *Service) verifyAttTargetEpoch(_ context.Context, genesisTime, nowTime uint64, c *ethpb.Checkpoint) error {
currentSlot := (nowTime - genesisTime) / params.BeaconConfig().SecondsPerSlot currentSlot := types.Slot((nowTime - genesisTime) / params.BeaconConfig().SecondsPerSlot)
currentEpoch := helpers.SlotToEpoch(currentSlot) currentEpoch := helpers.SlotToEpoch(currentSlot)
var prevEpoch types.Epoch var prevEpoch types.Epoch
// Prevents previous epoch under flow // Prevents previous epoch under flow

View File

@@ -5,7 +5,7 @@ import (
"testing" "testing"
"github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/proto"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
"github.com/prysmaticlabs/prysm/beacon-chain/core/state" "github.com/prysmaticlabs/prysm/beacon-chain/core/state"
@@ -241,7 +241,7 @@ func TestStore_UpdateCheckpointState(t *testing.T) {
require.NoError(t, service.beaconDB.SaveState(ctx, baseState, bytesutil.ToBytes32(checkpoint.Root))) require.NoError(t, service.beaconDB.SaveState(ctx, baseState, bytesutil.ToBytes32(checkpoint.Root)))
returned, err := service.getAttPreState(ctx, checkpoint) returned, err := service.getAttPreState(ctx, checkpoint)
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, uint64(checkpoint.Epoch.Mul(params.BeaconConfig().SlotsPerEpoch)), returned.Slot(), "Incorrectly returned base state") assert.Equal(t, params.BeaconConfig().SlotsPerEpoch.Mul(uint64(checkpoint.Epoch)), returned.Slot(), "Incorrectly returned base state")
cached, err := service.checkpointStateCache.StateByCheckpoint(checkpoint) cached, err := service.checkpointStateCache.StateByCheckpoint(checkpoint)
require.NoError(t, err) require.NoError(t, err)
@@ -273,7 +273,7 @@ func TestAttEpoch_MatchPrevEpoch(t *testing.T) {
service, err := NewService(ctx, cfg) service, err := NewService(ctx, cfg)
require.NoError(t, err) require.NoError(t, err)
nowTime := params.BeaconConfig().SlotsPerEpoch * params.BeaconConfig().SecondsPerSlot nowTime := uint64(params.BeaconConfig().SlotsPerEpoch) * params.BeaconConfig().SecondsPerSlot
require.NoError(t, service.verifyAttTargetEpoch(ctx, 0, nowTime, &ethpb.Checkpoint{Root: make([]byte, 32)})) require.NoError(t, service.verifyAttTargetEpoch(ctx, 0, nowTime, &ethpb.Checkpoint{Root: make([]byte, 32)}))
} }
@@ -285,7 +285,7 @@ func TestAttEpoch_MatchCurrentEpoch(t *testing.T) {
service, err := NewService(ctx, cfg) service, err := NewService(ctx, cfg)
require.NoError(t, err) require.NoError(t, err)
nowTime := params.BeaconConfig().SlotsPerEpoch * params.BeaconConfig().SecondsPerSlot nowTime := uint64(params.BeaconConfig().SlotsPerEpoch) * params.BeaconConfig().SecondsPerSlot
require.NoError(t, service.verifyAttTargetEpoch(ctx, 0, nowTime, &ethpb.Checkpoint{Epoch: 1})) require.NoError(t, service.verifyAttTargetEpoch(ctx, 0, nowTime, &ethpb.Checkpoint{Epoch: 1}))
} }
@@ -297,7 +297,7 @@ func TestAttEpoch_NotMatch(t *testing.T) {
service, err := NewService(ctx, cfg) service, err := NewService(ctx, cfg)
require.NoError(t, err) require.NoError(t, err)
nowTime := 2 * params.BeaconConfig().SlotsPerEpoch * params.BeaconConfig().SecondsPerSlot nowTime := 2 * uint64(params.BeaconConfig().SlotsPerEpoch) * params.BeaconConfig().SecondsPerSlot
err = service.verifyAttTargetEpoch(ctx, 0, nowTime, &ethpb.Checkpoint{Root: make([]byte, 32)}) err = service.verifyAttTargetEpoch(ctx, 0, nowTime, &ethpb.Checkpoint{Root: make([]byte, 32)})
assert.ErrorContains(t, "target epoch 0 does not match current epoch 2 or prev epoch 1", err) assert.ErrorContains(t, "target epoch 0 does not match current epoch 2 or prev epoch 1", err)
} }

View File

@@ -28,7 +28,7 @@ const slotDeadline = 5 * time.Second
const depositDeadline = 20 * time.Second const depositDeadline = 20 * time.Second
// This defines size of the upper bound for initial sync block cache. // This defines size of the upper bound for initial sync block cache.
var initialSyncBlockCacheSize = 2 * params.BeaconConfig().SlotsPerEpoch var initialSyncBlockCacheSize = uint64(2 * params.BeaconConfig().SlotsPerEpoch)
// onBlock is called when a gossip block is received. It runs regular state transition on the block. // onBlock is called when a gossip block is received. It runs regular state transition on the block.
// The block's signing root should be computed before calling this method to avoid redundant // The block's signing root should be computed before calling this method to avoid redundant

View File

@@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"github.com/pkg/errors" "github.com/pkg/errors"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
@@ -18,7 +19,7 @@ import (
) )
// CurrentSlot returns the current slot based on time. // CurrentSlot returns the current slot based on time.
func (s *Service) CurrentSlot() uint64 { func (s *Service) CurrentSlot() types.Slot {
return helpers.CurrentSlot(uint64(s.genesisTime.Unix())) return helpers.CurrentSlot(uint64(s.genesisTime.Unix()))
} }
@@ -256,7 +257,7 @@ func (s *Service) updateFinalized(ctx context.Context, cp *ethpb.Checkpoint) err
// else: // else:
// # root is older than queried slot, thus a skip slot. Return most recent root prior to slot // # root is older than queried slot, thus a skip slot. Return most recent root prior to slot
// return root // return root
func (s *Service) ancestor(ctx context.Context, root []byte, slot uint64) ([]byte, error) { func (s *Service) ancestor(ctx context.Context, root []byte, slot types.Slot) ([]byte, error) {
ctx, span := trace.StartSpan(ctx, "blockChain.ancestor") ctx, span := trace.StartSpan(ctx, "blockChain.ancestor")
defer span.End() defer span.End()
@@ -277,7 +278,7 @@ func (s *Service) ancestor(ctx context.Context, root []byte, slot uint64) ([]byt
} }
// This retrieves an ancestor root using fork choice store. The look up is looping through the a flat array structure. // This retrieves an ancestor root using fork choice store. The look up is looping through the a flat array structure.
func (s *Service) ancestorByForkChoiceStore(ctx context.Context, r [32]byte, slot uint64) ([]byte, error) { func (s *Service) ancestorByForkChoiceStore(ctx context.Context, r [32]byte, slot types.Slot) ([]byte, error) {
ctx, span := trace.StartSpan(ctx, "blockChain.ancestorByForkChoiceStore") ctx, span := trace.StartSpan(ctx, "blockChain.ancestorByForkChoiceStore")
defer span.End() defer span.End()
@@ -288,7 +289,7 @@ func (s *Service) ancestorByForkChoiceStore(ctx context.Context, r [32]byte, slo
} }
// This retrieves an ancestor root using DB. The look up is recursively looking up DB. Slower than `ancestorByForkChoiceStore`. // This retrieves an ancestor root using DB. The look up is recursively looking up DB. Slower than `ancestorByForkChoiceStore`.
func (s *Service) ancestorByDB(ctx context.Context, r [32]byte, slot uint64) ([]byte, error) { func (s *Service) ancestorByDB(ctx context.Context, r [32]byte, slot types.Slot) ([]byte, error) {
ctx, span := trace.StartSpan(ctx, "blockChain.ancestorByDB") ctx, span := trace.StartSpan(ctx, "blockChain.ancestorByDB")
defer span.End() defer span.End()

View File

@@ -81,7 +81,7 @@ func TestStore_OnBlock(t *testing.T) {
blk: func() *ethpb.SignedBeaconBlock { blk: func() *ethpb.SignedBeaconBlock {
b := testutil.NewBeaconBlock() b := testutil.NewBeaconBlock()
b.Block.ParentRoot = randomParentRoot2 b.Block.ParentRoot = randomParentRoot2
b.Block.Slot = uint64(params.BeaconConfig().FarFutureEpoch) b.Block.Slot = params.BeaconConfig().FarFutureSlot
return b return b
}(), }(),
s: st.Copy(), s: st.Copy(),
@@ -156,7 +156,7 @@ func TestStore_OnBlockBatch(t *testing.T) {
var blkRoots [][32]byte var blkRoots [][32]byte
var firstState *stateTrie.BeaconState var firstState *stateTrie.BeaconState
for i := 1; i < 10; i++ { for i := 1; i < 10; i++ {
b, err := testutil.GenerateFullBlock(bState, keys, testutil.DefaultBlockGenConfig(), uint64(i)) b, err := testutil.GenerateFullBlock(bState, keys, testutil.DefaultBlockGenConfig(), types.Slot(i))
require.NoError(t, err) require.NoError(t, err)
bState, err = state.ExecuteStateTransition(ctx, bState, b) bState, err = state.ExecuteStateTransition(ctx, bState, b)
require.NoError(t, err) require.NoError(t, err)
@@ -203,7 +203,7 @@ func TestRemoveStateSinceLastFinalized_EmptyStartSlot(t *testing.T) {
require.NoError(t, service.beaconDB.SaveBlock(ctx, newJustifiedBlk)) require.NoError(t, service.beaconDB.SaveBlock(ctx, newJustifiedBlk))
require.NoError(t, service.beaconDB.SaveBlock(ctx, lastJustifiedBlk)) require.NoError(t, service.beaconDB.SaveBlock(ctx, lastJustifiedBlk))
diff := (params.BeaconConfig().SlotsPerEpoch - 1) * params.BeaconConfig().SecondsPerSlot diff := params.BeaconConfig().SlotsPerEpoch.Sub(1).Mul(params.BeaconConfig().SecondsPerSlot)
service.genesisTime = time.Unix(time.Now().Unix()-int64(diff), 0) service.genesisTime = time.Unix(time.Now().Unix()-int64(diff), 0)
service.justifiedCheckpt = &ethpb.Checkpoint{Root: lastJustifiedRoot[:]} service.justifiedCheckpt = &ethpb.Checkpoint{Root: lastJustifiedRoot[:]}
update, err = service.shouldUpdateCurrentJustified(ctx, &ethpb.Checkpoint{Root: newJustifiedRoot[:]}) update, err = service.shouldUpdateCurrentJustified(ctx, &ethpb.Checkpoint{Root: newJustifiedRoot[:]})
@@ -231,7 +231,7 @@ func TestShouldUpdateJustified_ReturnFalse(t *testing.T) {
require.NoError(t, service.beaconDB.SaveBlock(ctx, newJustifiedBlk)) require.NoError(t, service.beaconDB.SaveBlock(ctx, newJustifiedBlk))
require.NoError(t, service.beaconDB.SaveBlock(ctx, lastJustifiedBlk)) require.NoError(t, service.beaconDB.SaveBlock(ctx, lastJustifiedBlk))
diff := (params.BeaconConfig().SlotsPerEpoch - 1) * params.BeaconConfig().SecondsPerSlot diff := params.BeaconConfig().SlotsPerEpoch.Sub(1).Mul(params.BeaconConfig().SecondsPerSlot)
service.genesisTime = time.Unix(time.Now().Unix()-int64(diff), 0) service.genesisTime = time.Unix(time.Now().Unix()-int64(diff), 0)
service.justifiedCheckpt = &ethpb.Checkpoint{Root: lastJustifiedRoot[:]} service.justifiedCheckpt = &ethpb.Checkpoint{Root: lastJustifiedRoot[:]}
@@ -565,7 +565,7 @@ func TestCurrentSlot_HandlesOverflow(t *testing.T) {
svc := Service{genesisTime: timeutils.Now().Add(1 * time.Hour)} svc := Service{genesisTime: timeutils.Now().Add(1 * time.Hour)}
slot := svc.CurrentSlot() slot := svc.CurrentSlot()
require.Equal(t, uint64(0), slot, "Unexpected slot") require.Equal(t, types.Slot(0), slot, "Unexpected slot")
} }
func TestAncestorByDB_CtxErr(t *testing.T) { func TestAncestorByDB_CtxErr(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
@@ -939,7 +939,7 @@ func TestOnBlock_CanFinalize(t *testing.T) {
service.finalizedCheckpt = &ethpb.Checkpoint{Root: gRoot[:]} service.finalizedCheckpt = &ethpb.Checkpoint{Root: gRoot[:]}
testState := gs.Copy() testState := gs.Copy()
for i := uint64(1); i <= 4*params.BeaconConfig().SlotsPerEpoch; i++ { for i := types.Slot(1); i <= 4*params.BeaconConfig().SlotsPerEpoch; i++ {
blk, err := testutil.GenerateFullBlock(testState, keys, testutil.DefaultBlockGenConfig(), i) blk, err := testutil.GenerateFullBlock(testState, keys, testutil.DefaultBlockGenConfig(), i)
require.NoError(t, err) require.NoError(t, err)
r, err := blk.Block.HashTreeRoot() r, err := blk.Block.HashTreeRoot()
@@ -982,7 +982,7 @@ func TestInsertFinalizedDeposits(t *testing.T) {
assert.NoError(t, gs.SetEth1Data(&ethpb.Eth1Data{DepositCount: 10})) assert.NoError(t, gs.SetEth1Data(&ethpb.Eth1Data{DepositCount: 10}))
assert.NoError(t, service.stateGen.SaveState(ctx, [32]byte{'m', 'o', 'c', 'k'}, gs)) assert.NoError(t, service.stateGen.SaveState(ctx, [32]byte{'m', 'o', 'c', 'k'}, gs))
zeroSig := [96]byte{} zeroSig := [96]byte{}
for i := uint64(0); i < 4*params.BeaconConfig().SlotsPerEpoch; i++ { for i := uint64(0); i < uint64(4*params.BeaconConfig().SlotsPerEpoch); i++ {
root := []byte(strconv.Itoa(int(i))) root := []byte(strconv.Itoa(int(i)))
depositCache.InsertDeposit(ctx, &ethpb.Deposit{Data: &ethpb.Deposit_Data{ depositCache.InsertDeposit(ctx, &ethpb.Deposit{Data: &ethpb.Deposit_Data{
PublicKey: bytesutil.FromBytes48([48]byte{}), PublicKey: bytesutil.FromBytes48([48]byte{}),

View File

@@ -5,7 +5,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
"github.com/prysmaticlabs/prysm/beacon-chain/core/state" "github.com/prysmaticlabs/prysm/beacon-chain/core/state"
@@ -28,7 +28,7 @@ func TestAttestationCheckPtState_FarFutureSlot(t *testing.T) {
chainService := setupBeaconChain(t, beaconDB) chainService := setupBeaconChain(t, beaconDB)
chainService.genesisTime = time.Now() chainService.genesisTime = time.Now()
e := types.Epoch(helpers.MaxSlotBuffer/params.BeaconConfig().SlotsPerEpoch + 1) e := types.Epoch(helpers.MaxSlotBuffer/uint64(params.BeaconConfig().SlotsPerEpoch) + 1)
_, err := chainService.AttestationPreState(context.Background(), &ethpb.Attestation{Data: &ethpb.AttestationData{Target: &ethpb.Checkpoint{Epoch: e}}}) _, err := chainService.AttestationPreState(context.Background(), &ethpb.Attestation{Data: &ethpb.AttestationData{Target: &ethpb.Checkpoint{Epoch: e}}})
require.ErrorContains(t, "exceeds max allowed value relative to the local clock", err) require.ErrorContains(t, "exceeds max allowed value relative to the local clock", err)
} }

View File

@@ -4,7 +4,7 @@ import (
"context" "context"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/feed" "github.com/prysmaticlabs/prysm/beacon-chain/core/feed"
statefeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/state" statefeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/state"

View File

@@ -6,6 +6,7 @@ import (
"testing" "testing"
"time" "time"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
blockchainTesting "github.com/prysmaticlabs/prysm/beacon-chain/blockchain/testing" blockchainTesting "github.com/prysmaticlabs/prysm/beacon-chain/blockchain/testing"
testDB "github.com/prysmaticlabs/prysm/beacon-chain/db/testing" testDB "github.com/prysmaticlabs/prysm/beacon-chain/db/testing"
@@ -25,7 +26,7 @@ func TestService_ReceiveBlock(t *testing.T) {
ctx := context.Background() ctx := context.Background()
genesis, keys := testutil.DeterministicGenesisState(t, 64) genesis, keys := testutil.DeterministicGenesisState(t, 64)
genFullBlock := func(t *testing.T, conf *testutil.BlockGenConfig, slot uint64) *ethpb.SignedBeaconBlock { genFullBlock := func(t *testing.T, conf *testutil.BlockGenConfig, slot types.Slot) *ethpb.SignedBeaconBlock {
blk, err := testutil.GenerateFullBlock(genesis, keys, conf, slot) blk, err := testutil.GenerateFullBlock(genesis, keys, conf, slot)
assert.NoError(t, err) assert.NoError(t, err)
return blk return blk
@@ -202,7 +203,7 @@ func TestService_ReceiveBlockInitialSync(t *testing.T) {
ctx := context.Background() ctx := context.Background()
genesis, keys := testutil.DeterministicGenesisState(t, 64) genesis, keys := testutil.DeterministicGenesisState(t, 64)
genFullBlock := func(t *testing.T, conf *testutil.BlockGenConfig, slot uint64) *ethpb.SignedBeaconBlock { genFullBlock := func(t *testing.T, conf *testutil.BlockGenConfig, slot types.Slot) *ethpb.SignedBeaconBlock {
blk, err := testutil.GenerateFullBlock(genesis, keys, conf, slot) blk, err := testutil.GenerateFullBlock(genesis, keys, conf, slot)
assert.NoError(t, err) assert.NoError(t, err)
return blk return blk
@@ -223,8 +224,8 @@ func TestService_ReceiveBlockInitialSync(t *testing.T) {
block: genFullBlock(t, testutil.DefaultBlockGenConfig(), 2 /*slot*/), block: genFullBlock(t, testutil.DefaultBlockGenConfig(), 2 /*slot*/),
}, },
check: func(t *testing.T, s *Service) { check: func(t *testing.T, s *Service) {
assert.Equal(t, uint64(2), s.head.state.Slot(), "Incorrect head state slot") assert.Equal(t, types.Slot(2), s.head.state.Slot(), "Incorrect head state slot")
assert.Equal(t, uint64(2), s.head.block.Block.Slot, "Incorrect head block slot") assert.Equal(t, types.Slot(2), s.head.block.Block.Slot, "Incorrect head block slot")
}, },
}, },
{ {
@@ -283,7 +284,7 @@ func TestService_ReceiveBlockBatch(t *testing.T) {
ctx := context.Background() ctx := context.Background()
genesis, keys := testutil.DeterministicGenesisState(t, 64) genesis, keys := testutil.DeterministicGenesisState(t, 64)
genFullBlock := func(t *testing.T, conf *testutil.BlockGenConfig, slot uint64) *ethpb.SignedBeaconBlock { genFullBlock := func(t *testing.T, conf *testutil.BlockGenConfig, slot types.Slot) *ethpb.SignedBeaconBlock {
blk, err := testutil.GenerateFullBlock(genesis, keys, conf, slot) blk, err := testutil.GenerateFullBlock(genesis, keys, conf, slot)
assert.NoError(t, err) assert.NoError(t, err)
return blk return blk
@@ -304,8 +305,8 @@ func TestService_ReceiveBlockBatch(t *testing.T) {
block: genFullBlock(t, testutil.DefaultBlockGenConfig(), 2 /*slot*/), block: genFullBlock(t, testutil.DefaultBlockGenConfig(), 2 /*slot*/),
}, },
check: func(t *testing.T, s *Service) { check: func(t *testing.T, s *Service) {
assert.Equal(t, uint64(2), s.head.state.Slot(), "Incorrect head state slot") assert.Equal(t, types.Slot(2), s.head.state.Slot(), "Incorrect head state slot")
assert.Equal(t, uint64(2), s.head.block.Block.Slot, "Incorrect head block slot") assert.Equal(t, types.Slot(2), s.head.block.Block.Slot, "Incorrect head block slot")
}, },
}, },
{ {
@@ -379,7 +380,7 @@ func TestCheckSaveHotStateDB_Enabling(t *testing.T) {
hook := logTest.NewGlobal() hook := logTest.NewGlobal()
s, err := NewService(context.Background(), &Config{StateGen: stategen.New(beaconDB)}) s, err := NewService(context.Background(), &Config{StateGen: stategen.New(beaconDB)})
require.NoError(t, err) require.NoError(t, err)
st := params.BeaconConfig().SlotsPerEpoch * uint64(epochsSinceFinalitySaveHotStateDB) st := params.BeaconConfig().SlotsPerEpoch.Mul(uint64(epochsSinceFinalitySaveHotStateDB))
s.genesisTime = time.Now().Add(time.Duration(-1*int64(st)*int64(params.BeaconConfig().SecondsPerSlot)) * time.Second) s.genesisTime = time.Now().Add(time.Duration(-1*int64(st)*int64(params.BeaconConfig().SecondsPerSlot)) * time.Second)
s.finalizedCheckpt = &ethpb.Checkpoint{} s.finalizedCheckpt = &ethpb.Checkpoint{}

View File

@@ -11,7 +11,7 @@ import (
"time" "time"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/cache" "github.com/prysmaticlabs/prysm/beacon-chain/cache"
"github.com/prysmaticlabs/prysm/beacon-chain/cache/depositcache" "github.com/prysmaticlabs/prysm/beacon-chain/cache/depositcache"
@@ -67,7 +67,7 @@ type Service struct {
bestJustifiedCheckpt *ethpb.Checkpoint bestJustifiedCheckpt *ethpb.Checkpoint
finalizedCheckpt *ethpb.Checkpoint finalizedCheckpt *ethpb.Checkpoint
prevFinalizedCheckpt *ethpb.Checkpoint prevFinalizedCheckpt *ethpb.Checkpoint
nextEpochBoundarySlot uint64 nextEpochBoundarySlot types.Slot
boundaryRoots [][32]byte boundaryRoots [][32]byte
checkpointStateCache *cache.CheckpointStateCache checkpointStateCache *cache.CheckpointStateCache
stateGen *stategen.State stateGen *stategen.State

View File

@@ -9,7 +9,7 @@ import (
"time" "time"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/epoch/precompute" "github.com/prysmaticlabs/prysm/beacon-chain/core/epoch/precompute"
"github.com/prysmaticlabs/prysm/beacon-chain/core/feed" "github.com/prysmaticlabs/prysm/beacon-chain/core/feed"
@@ -48,7 +48,7 @@ type ChainService struct {
ValidAttestation bool ValidAttestation bool
ForkChoiceStore *protoarray.Store ForkChoiceStore *protoarray.Store
VerifyBlkDescendantErr error VerifyBlkDescendantErr error
Slot *uint64 // Pointer because 0 is a useful value, so checking against it can be incorrect. Slot *types.Slot // Pointer because 0 is a useful value, so checking against it can be incorrect.
} }
// StateNotifier mocks the same method in the chain service. // StateNotifier mocks the same method in the chain service.
@@ -230,7 +230,7 @@ func (s *ChainService) ReceiveBlock(ctx context.Context, block *ethpb.SignedBeac
} }
// HeadSlot mocks HeadSlot method in chain service. // HeadSlot mocks HeadSlot method in chain service.
func (s *ChainService) HeadSlot() uint64 { func (s *ChainService) HeadSlot() types.Slot {
if s.State == nil { if s.State == nil {
return 0 return 0
} }
@@ -324,11 +324,11 @@ func (s *ChainService) GenesisValidatorRoot() [32]byte {
} }
// CurrentSlot mocks the same method in the chain service. // CurrentSlot mocks the same method in the chain service.
func (s *ChainService) CurrentSlot() uint64 { func (s *ChainService) CurrentSlot() types.Slot {
if s.Slot != nil { if s.Slot != nil {
return *s.Slot return *s.Slot
} }
return uint64(time.Now().Unix()-s.Genesis.Unix()) / params.BeaconConfig().SecondsPerSlot return types.Slot(uint64(time.Now().Unix()-s.Genesis.Unix()) / params.BeaconConfig().SecondsPerSlot)
} }
// Participation mocks the same method in the chain service. // Participation mocks the same method in the chain service.

View File

@@ -4,7 +4,7 @@ import (
"context" "context"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
testDB "github.com/prysmaticlabs/prysm/beacon-chain/db/testing" testDB "github.com/prysmaticlabs/prysm/beacon-chain/db/testing"
"github.com/prysmaticlabs/prysm/shared/testutil" "github.com/prysmaticlabs/prysm/shared/testutil"

View File

@@ -41,6 +41,7 @@ go_library(
"@com_github_patrickmn_go_cache//:go_default_library", "@com_github_patrickmn_go_cache//:go_default_library",
"@com_github_prometheus_client_golang//prometheus:go_default_library", "@com_github_prometheus_client_golang//prometheus:go_default_library",
"@com_github_prometheus_client_golang//prometheus/promauto:go_default_library", "@com_github_prometheus_client_golang//prometheus/promauto:go_default_library",
"@com_github_prysmaticlabs_eth2_types//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library", "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@io_k8s_client_go//tools/cache:go_default_library", "@io_k8s_client_go//tools/cache:go_default_library",
"@io_opencensus_go//trace:go_default_library", "@io_opencensus_go//trace:go_default_library",

View File

@@ -4,7 +4,7 @@ import (
"testing" "testing"
"github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/proto"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
@@ -61,7 +61,7 @@ func TestCheckpointStateCache_MaxSize(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
for i := uint64(0); i < uint64(maxCheckpointStateSize+100); i++ { for i := uint64(0); i < uint64(maxCheckpointStateSize+100); i++ {
require.NoError(t, st.SetSlot(i)) require.NoError(t, st.SetSlot(types.Slot(i)))
require.NoError(t, c.AddCheckpointState(&ethpb.Checkpoint{Epoch: types.Epoch(i), Root: make([]byte, 32)}, st)) require.NoError(t, c.AddCheckpointState(&ethpb.Checkpoint{Epoch: types.Epoch(i), Root: make([]byte, 32)}, st))
} }

View File

@@ -8,6 +8,7 @@ import (
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto" "github.com/prometheus/client_golang/prometheus/promauto"
types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/shared/params" "github.com/prysmaticlabs/prysm/shared/params"
"github.com/prysmaticlabs/prysm/shared/sliceutil" "github.com/prysmaticlabs/prysm/shared/sliceutil"
"k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/cache"
@@ -55,7 +56,7 @@ func NewCommitteesCache() *CommitteeCache {
// Committee fetches the shuffled indices by slot and committee index. Every list of indices // Committee fetches the shuffled indices by slot and committee index. Every list of indices
// represent one committee. Returns true if the list exists with slot and committee index. Otherwise returns false, nil. // represent one committee. Returns true if the list exists with slot and committee index. Otherwise returns false, nil.
func (c *CommitteeCache) Committee(slot uint64, seed [32]byte, index uint64) ([]uint64, error) { func (c *CommitteeCache) Committee(slot types.Slot, seed [32]byte, index uint64) ([]uint64, error) {
c.lock.RLock() c.lock.RLock()
defer c.lock.RUnlock() defer c.lock.RUnlock()
@@ -77,11 +78,11 @@ func (c *CommitteeCache) Committee(slot uint64, seed [32]byte, index uint64) ([]
} }
committeeCountPerSlot := uint64(1) committeeCountPerSlot := uint64(1)
if item.CommitteeCount/params.BeaconConfig().SlotsPerEpoch > 1 { if item.CommitteeCount/uint64(params.BeaconConfig().SlotsPerEpoch) > 1 {
committeeCountPerSlot = item.CommitteeCount / params.BeaconConfig().SlotsPerEpoch committeeCountPerSlot = item.CommitteeCount / uint64(params.BeaconConfig().SlotsPerEpoch)
} }
indexOffSet := index + (slot%params.BeaconConfig().SlotsPerEpoch)*committeeCountPerSlot indexOffSet := index + uint64(slot.ModSlot(params.BeaconConfig().SlotsPerEpoch).Mul(committeeCountPerSlot))
start, end := startEndIndices(item, indexOffSet) start, end := startEndIndices(item, indexOffSet)
if end > uint64(len(item.ShuffledIndices)) || end < start { if end > uint64(len(item.ShuffledIndices)) || end < start {

View File

@@ -3,6 +3,8 @@
// This file is used in fuzzer builds to bypass global committee caches. // This file is used in fuzzer builds to bypass global committee caches.
package cache package cache
import types "github.com/prysmaticlabs/eth2-types"
// FakeCommitteeCache is a struct with 1 queue for looking up shuffled indices list by seed. // FakeCommitteeCache is a struct with 1 queue for looking up shuffled indices list by seed.
type FakeCommitteeCache struct { type FakeCommitteeCache struct {
} }
@@ -14,7 +16,7 @@ func NewCommitteesCache() *FakeCommitteeCache {
// Committee fetches the shuffled indices by slot and committee index. Every list of indices // Committee fetches the shuffled indices by slot and committee index. Every list of indices
// represent one committee. Returns true if the list exists with slot and committee index. Otherwise returns false, nil. // represent one committee. Returns true if the list exists with slot and committee index. Otherwise returns false, nil.
func (c *FakeCommitteeCache) Committee(slot uint64, seed [32]byte, index uint64) ([]uint64, error) { func (c *FakeCommitteeCache) Committee(slot types.Slot, seed [32]byte, index uint64) ([]uint64, error) {
return nil, nil return nil, nil
} }

View File

@@ -8,7 +8,7 @@ import (
var ( var (
// maxCacheSize is 4x of the epoch length for additional cache padding. // maxCacheSize is 4x of the epoch length for additional cache padding.
// Requests should be only accessing committees within defined epoch length. // Requests should be only accessing committees within defined epoch length.
maxCacheSize = 4 * params.BeaconConfig().SlotsPerEpoch maxCacheSize = uint64(4 * params.BeaconConfig().SlotsPerEpoch)
) )
// trim the FIFO queue to the maxSize. // trim the FIFO queue to the maxSize.

View File

@@ -6,6 +6,7 @@ import (
lru "github.com/hashicorp/golang-lru" lru "github.com/hashicorp/golang-lru"
"github.com/patrickmn/go-cache" "github.com/patrickmn/go-cache"
types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/shared/params" "github.com/prysmaticlabs/prysm/shared/params"
"github.com/prysmaticlabs/prysm/shared/sliceutil" "github.com/prysmaticlabs/prysm/shared/sliceutil"
) )
@@ -25,7 +26,7 @@ var SubnetIDs = newSubnetIDs()
func newSubnetIDs() *subnetIDs { func newSubnetIDs() *subnetIDs {
// Given a node can calculate committee assignments of current epoch and next epoch. // Given a node can calculate committee assignments of current epoch and next epoch.
// Max size is set to 2 epoch length. // Max size is set to 2 epoch length.
cacheSize := int(params.BeaconConfig().MaxCommitteesPerSlot * params.BeaconConfig().SlotsPerEpoch * 2) cacheSize := int(params.BeaconConfig().SlotsPerEpoch.Mul(params.BeaconConfig().MaxCommitteesPerSlot * 2))
attesterCache, err := lru.New(cacheSize) attesterCache, err := lru.New(cacheSize)
if err != nil { if err != nil {
panic(err) panic(err)
@@ -34,14 +35,14 @@ func newSubnetIDs() *subnetIDs {
if err != nil { if err != nil {
panic(err) panic(err)
} }
epochDuration := time.Duration(params.BeaconConfig().SlotsPerEpoch * params.BeaconConfig().SecondsPerSlot) epochDuration := time.Duration(params.BeaconConfig().SlotsPerEpoch.Mul(params.BeaconConfig().SecondsPerSlot))
subLength := epochDuration * time.Duration(params.BeaconConfig().EpochsPerRandomSubnetSubscription) subLength := epochDuration * time.Duration(params.BeaconConfig().EpochsPerRandomSubnetSubscription)
persistentCache := cache.New(subLength*time.Second, epochDuration*time.Second) persistentCache := cache.New(subLength*time.Second, epochDuration*time.Second)
return &subnetIDs{attester: attesterCache, aggregator: aggregatorCache, persistentSubnets: persistentCache} return &subnetIDs{attester: attesterCache, aggregator: aggregatorCache, persistentSubnets: persistentCache}
} }
// AddAttesterSubnetID adds the subnet index for subscribing subnet for the attester of a given slot. // AddAttesterSubnetID adds the subnet index for subscribing subnet for the attester of a given slot.
func (s *subnetIDs) AddAttesterSubnetID(slot, subnetID uint64) { func (s *subnetIDs) AddAttesterSubnetID(slot types.Slot, subnetID uint64) {
s.attesterLock.Lock() s.attesterLock.Lock()
defer s.attesterLock.Unlock() defer s.attesterLock.Unlock()
@@ -54,7 +55,7 @@ func (s *subnetIDs) AddAttesterSubnetID(slot, subnetID uint64) {
} }
// GetAttesterSubnetIDs gets the subnet IDs for subscribed subnets for attesters of the slot. // GetAttesterSubnetIDs gets the subnet IDs for subscribed subnets for attesters of the slot.
func (s *subnetIDs) GetAttesterSubnetIDs(slot uint64) []uint64 { func (s *subnetIDs) GetAttesterSubnetIDs(slot types.Slot) []uint64 {
s.attesterLock.RLock() s.attesterLock.RLock()
defer s.attesterLock.RUnlock() defer s.attesterLock.RUnlock()
@@ -69,7 +70,7 @@ func (s *subnetIDs) GetAttesterSubnetIDs(slot uint64) []uint64 {
} }
// AddAggregatorSubnetID adds the subnet ID for subscribing subnet for the aggregator of a given slot. // AddAggregatorSubnetID adds the subnet ID for subscribing subnet for the aggregator of a given slot.
func (s *subnetIDs) AddAggregatorSubnetID(slot, subnetID uint64) { func (s *subnetIDs) AddAggregatorSubnetID(slot types.Slot, subnetID uint64) {
s.aggregatorLock.Lock() s.aggregatorLock.Lock()
defer s.aggregatorLock.Unlock() defer s.aggregatorLock.Unlock()
@@ -82,7 +83,7 @@ func (s *subnetIDs) AddAggregatorSubnetID(slot, subnetID uint64) {
} }
// GetAggregatorSubnetIDs gets the subnet IDs for subscribing subnet for aggregator of the slot. // GetAggregatorSubnetIDs gets the subnet IDs for subscribing subnet for aggregator of the slot.
func (s *subnetIDs) GetAggregatorSubnetIDs(slot uint64) []uint64 { func (s *subnetIDs) GetAggregatorSubnetIDs(slot types.Slot) []uint64 {
s.aggregatorLock.RLock() s.aggregatorLock.RLock()
defer s.aggregatorLock.RUnlock() defer s.aggregatorLock.RUnlock()

View File

@@ -3,13 +3,14 @@ package cache
import ( import (
"testing" "testing"
types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/shared/testutil/assert" "github.com/prysmaticlabs/prysm/shared/testutil/assert"
"github.com/prysmaticlabs/prysm/shared/testutil/require" "github.com/prysmaticlabs/prysm/shared/testutil/require"
) )
func TestSubnetIDsCache_RoundTrip(t *testing.T) { func TestSubnetIDsCache_RoundTrip(t *testing.T) {
c := newSubnetIDs() c := newSubnetIDs()
slot := uint64(100) slot := types.Slot(100)
committeeIDs := c.GetAggregatorSubnetIDs(slot) committeeIDs := c.GetAggregatorSubnetIDs(slot)
assert.Equal(t, 0, len(committeeIDs), "Empty cache returned an object") assert.Equal(t, 0, len(committeeIDs), "Empty cache returned an object")

View File

@@ -40,6 +40,7 @@ go_library(
"//shared/trieutil:go_default_library", "//shared/trieutil:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library", "@com_github_gogo_protobuf//proto:go_default_library",
"@com_github_pkg_errors//:go_default_library", "@com_github_pkg_errors//:go_default_library",
"@com_github_prysmaticlabs_eth2_types//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library", "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library", "@com_github_sirupsen_logrus//:go_default_library",
"@io_opencensus_go//trace:go_default_library", "@io_opencensus_go//trace:go_default_library",

View File

@@ -5,7 +5,7 @@ import (
"fmt" "fmt"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/go-bitfield" "github.com/prysmaticlabs/go-bitfield"
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks" "github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
@@ -482,7 +482,7 @@ func TestConvertToIndexed_OK(t *testing.T) {
} }
func TestVerifyIndexedAttestation_OK(t *testing.T) { func TestVerifyIndexedAttestation_OK(t *testing.T) {
numOfValidators := 4 * params.BeaconConfig().SlotsPerEpoch numOfValidators := uint64(params.BeaconConfig().SlotsPerEpoch.Mul(4))
validators := make([]*ethpb.Validator, numOfValidators) validators := make([]*ethpb.Validator, numOfValidators)
_, keys, err := testutil.DeterministicDepositsAndKeys(numOfValidators) _, keys, err := testutil.DeterministicDepositsAndKeys(numOfValidators)
require.NoError(t, err) require.NoError(t, err)
@@ -629,7 +629,7 @@ func TestValidateIndexedAttestation_BadAttestationsSignatureSet(t *testing.T) {
func TestVerifyAttestations_HandlesPlannedFork(t *testing.T) { func TestVerifyAttestations_HandlesPlannedFork(t *testing.T) {
// In this test, att1 is from the prior fork and att2 is from the new fork. // In this test, att1 is from the prior fork and att2 is from the new fork.
numOfValidators := 4 * params.BeaconConfig().SlotsPerEpoch numOfValidators := uint64(params.BeaconConfig().SlotsPerEpoch.Mul(4))
validators := make([]*ethpb.Validator, numOfValidators) validators := make([]*ethpb.Validator, numOfValidators)
_, keys, err := testutil.DeterministicDepositsAndKeys(numOfValidators) _, keys, err := testutil.DeterministicDepositsAndKeys(numOfValidators)
require.NoError(t, err) require.NoError(t, err)
@@ -693,7 +693,7 @@ func TestVerifyAttestations_HandlesPlannedFork(t *testing.T) {
func TestRetrieveAttestationSignatureSet_VerifiesMultipleAttestations(t *testing.T) { func TestRetrieveAttestationSignatureSet_VerifiesMultipleAttestations(t *testing.T) {
ctx := context.Background() ctx := context.Background()
numOfValidators := 4 * params.BeaconConfig().SlotsPerEpoch numOfValidators := uint64(params.BeaconConfig().SlotsPerEpoch.Mul(4))
validators := make([]*ethpb.Validator, numOfValidators) validators := make([]*ethpb.Validator, numOfValidators)
_, keys, err := testutil.DeterministicDepositsAndKeys(numOfValidators) _, keys, err := testutil.DeterministicDepositsAndKeys(numOfValidators)
require.NoError(t, err) require.NoError(t, err)

View File

@@ -4,7 +4,7 @@ import (
"context" "context"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks" "github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
@@ -44,7 +44,7 @@ func TestProcessAttesterSlashings_DataNotSlashable(t *testing.T) {
})}} })}}
var registry []*ethpb.Validator var registry []*ethpb.Validator
currentSlot := uint64(0) currentSlot := types.Slot(0)
beaconState, err := stateTrie.InitializeFromProto(&pb.BeaconState{ beaconState, err := stateTrie.InitializeFromProto(&pb.BeaconState{
Validators: registry, Validators: registry,
@@ -63,7 +63,7 @@ func TestProcessAttesterSlashings_DataNotSlashable(t *testing.T) {
func TestProcessAttesterSlashings_IndexedAttestationFailedToVerify(t *testing.T) { func TestProcessAttesterSlashings_IndexedAttestationFailedToVerify(t *testing.T) {
var registry []*ethpb.Validator var registry []*ethpb.Validator
currentSlot := uint64(0) currentSlot := types.Slot(0)
beaconState, err := stateTrie.InitializeFromProto(&pb.BeaconState{ beaconState, err := stateTrie.InitializeFromProto(&pb.BeaconState{
Validators: registry, Validators: registry,
@@ -99,7 +99,7 @@ func TestProcessAttesterSlashings_IndexedAttestationFailedToVerify(t *testing.T)
func TestProcessAttesterSlashings_AppliesCorrectStatus(t *testing.T) { func TestProcessAttesterSlashings_AppliesCorrectStatus(t *testing.T) {
beaconState, privKeys := testutil.DeterministicGenesisState(t, 100) beaconState, privKeys := testutil.DeterministicGenesisState(t, 100)
for _, vv := range beaconState.Validators() { for _, vv := range beaconState.Validators() {
vv.WithdrawableEpoch = types.Epoch(1 * params.BeaconConfig().SlotsPerEpoch) vv.WithdrawableEpoch = types.Epoch(params.BeaconConfig().SlotsPerEpoch)
} }
att1 := testutil.HydrateIndexedAttestation(&ethpb.IndexedAttestation{ att1 := testutil.HydrateIndexedAttestation(&ethpb.IndexedAttestation{

View File

@@ -5,6 +5,7 @@ import (
"testing" "testing"
fuzz "github.com/google/gofuzz" fuzz "github.com/google/gofuzz"
types "github.com/prysmaticlabs/eth2-types"
eth "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" eth "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
@@ -431,7 +432,7 @@ func TestFuzzVerifyExit_10000(t *testing.T) {
ve := &eth.SignedVoluntaryExit{} ve := &eth.SignedVoluntaryExit{}
val := stateTrie.ReadOnlyValidator{} val := stateTrie.ReadOnlyValidator{}
fork := &pb.Fork{} fork := &pb.Fork{}
var slot uint64 var slot types.Slot
for i := 0; i < 10000; i++ { for i := 0; i < 10000; i++ {
fuzzer.Fuzz(ve) fuzzer.Fuzz(ve)

View File

@@ -4,7 +4,7 @@ import (
"context" "context"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks" "github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
@@ -19,7 +19,7 @@ func TestProcessAttesterSlashings_RegressionSlashableIndices(t *testing.T) {
testutil.ResetCache() testutil.ResetCache()
beaconState, privKeys := testutil.DeterministicGenesisState(t, 5500) beaconState, privKeys := testutil.DeterministicGenesisState(t, 5500)
for _, vv := range beaconState.Validators() { for _, vv := range beaconState.Validators() {
vv.WithdrawableEpoch = types.Epoch(1 * params.BeaconConfig().SlotsPerEpoch) vv.WithdrawableEpoch = types.Epoch(params.BeaconConfig().SlotsPerEpoch)
} }
// This set of indices is very similar to the one from our sapphire testnet // This set of indices is very similar to the one from our sapphire testnet
// when close to 100 validators were incorrectly slashed. The set is from 0 -5500, // when close to 100 validators were incorrectly slashed. The set is from 0 -5500,

View File

@@ -4,7 +4,7 @@ import (
"context" "context"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks" "github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"

View File

@@ -71,6 +71,6 @@ func Eth1DataHasEnoughSupport(beaconState *stateTrie.BeaconState, data *ethpb.Et
// If 50+% majority converged on the same eth1data, then it has enough support to update the // If 50+% majority converged on the same eth1data, then it has enough support to update the
// state. // state.
support := params.BeaconConfig().EpochsPerEth1VotingPeriod.Mul(params.BeaconConfig().SlotsPerEpoch) support := params.BeaconConfig().SlotsPerEpoch.Mul(uint64(params.BeaconConfig().EpochsPerEth1VotingPeriod))
return voteCount*2 > uint64(support), nil return voteCount*2 > uint64(support), nil
} }

View File

@@ -6,7 +6,7 @@ import (
"testing" "testing"
"github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/proto"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks" "github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state" beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state"
@@ -37,7 +37,7 @@ func TestEth1DataHasEnoughSupport(t *testing.T) {
votingPeriodLength types.Epoch votingPeriodLength types.Epoch
}{ }{
{ {
stateVotes: FakeDeposits(4 * params.BeaconConfig().SlotsPerEpoch), stateVotes: FakeDeposits(uint64(params.BeaconConfig().SlotsPerEpoch.Mul(4))),
data: &ethpb.Eth1Data{ data: &ethpb.Eth1Data{
DepositCount: 1, DepositCount: 1,
DepositRoot: bytesutil.PadTo([]byte("root"), 32), DepositRoot: bytesutil.PadTo([]byte("root"), 32),
@@ -45,7 +45,7 @@ func TestEth1DataHasEnoughSupport(t *testing.T) {
hasSupport: true, hasSupport: true,
votingPeriodLength: 7, votingPeriodLength: 7,
}, { }, {
stateVotes: FakeDeposits(4 * params.BeaconConfig().SlotsPerEpoch), stateVotes: FakeDeposits(uint64(params.BeaconConfig().SlotsPerEpoch.Mul(4))),
data: &ethpb.Eth1Data{ data: &ethpb.Eth1Data{
DepositCount: 1, DepositCount: 1,
DepositRoot: bytesutil.PadTo([]byte("root"), 32), DepositRoot: bytesutil.PadTo([]byte("root"), 32),
@@ -53,7 +53,7 @@ func TestEth1DataHasEnoughSupport(t *testing.T) {
hasSupport: false, hasSupport: false,
votingPeriodLength: 8, votingPeriodLength: 8,
}, { }, {
stateVotes: FakeDeposits(4 * params.BeaconConfig().SlotsPerEpoch), stateVotes: FakeDeposits(uint64(params.BeaconConfig().SlotsPerEpoch.Mul(4))),
data: &ethpb.Eth1Data{ data: &ethpb.Eth1Data{
DepositCount: 1, DepositCount: 1,
DepositRoot: bytesutil.PadTo([]byte("root"), 32), DepositRoot: bytesutil.PadTo([]byte("root"), 32),
@@ -175,7 +175,7 @@ func TestProcessEth1Data_SetsCorrectly(t *testing.T) {
}, },
} }
period := uint64(params.BeaconConfig().EpochsPerEth1VotingPeriod.Mul(params.BeaconConfig().SlotsPerEpoch)) period := uint64(params.BeaconConfig().SlotsPerEpoch.Mul(uint64(params.BeaconConfig().EpochsPerEth1VotingPeriod)))
for i := uint64(0); i < period; i++ { for i := uint64(0); i < period; i++ {
beaconState, err = blocks.ProcessEth1DataInBlock(context.Background(), beaconState, b) beaconState, err = blocks.ProcessEth1DataInBlock(context.Background(), beaconState, b)
require.NoError(t, err) require.NoError(t, err)

View File

@@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"github.com/pkg/errors" "github.com/pkg/errors"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
v "github.com/prysmaticlabs/prysm/beacon-chain/core/validators" v "github.com/prysmaticlabs/prysm/beacon-chain/core/validators"
@@ -92,7 +93,7 @@ func ProcessVoluntaryExits(
// # Verify signature // # Verify signature
// domain = get_domain(state, DOMAIN_VOLUNTARY_EXIT, exit.epoch) // domain = get_domain(state, DOMAIN_VOLUNTARY_EXIT, exit.epoch)
// assert bls_verify(validator.pubkey, signing_root(exit), exit.signature, domain) // assert bls_verify(validator.pubkey, signing_root(exit), exit.signature, domain)
func VerifyExitAndSignature(validator stateTrie.ReadOnlyValidator, currentSlot uint64, fork *pb.Fork, signed *ethpb.SignedVoluntaryExit, genesisRoot []byte) error { func VerifyExitAndSignature(validator stateTrie.ReadOnlyValidator, currentSlot types.Slot, fork *pb.Fork, signed *ethpb.SignedVoluntaryExit, genesisRoot []byte) error {
if signed == nil || signed.Exit == nil { if signed == nil || signed.Exit == nil {
return errors.New("nil exit") return errors.New("nil exit")
} }
@@ -128,7 +129,7 @@ func VerifyExitAndSignature(validator stateTrie.ReadOnlyValidator, currentSlot u
// assert get_current_epoch(state) >= exit.epoch // assert get_current_epoch(state) >= exit.epoch
// # Verify the validator has been active long enough // # Verify the validator has been active long enough
// assert get_current_epoch(state) >= validator.activation_epoch + SHARD_COMMITTEE_PERIOD // assert get_current_epoch(state) >= validator.activation_epoch + SHARD_COMMITTEE_PERIOD
func verifyExitConditions(validator stateTrie.ReadOnlyValidator, currentSlot uint64, exit *ethpb.VoluntaryExit) error { func verifyExitConditions(validator stateTrie.ReadOnlyValidator, currentSlot types.Slot, exit *ethpb.VoluntaryExit) error {
currentEpoch := helpers.SlotToEpoch(currentSlot) currentEpoch := helpers.SlotToEpoch(currentSlot)
// Verify the validator is active. // Verify the validator is active.
if !helpers.IsActiveValidatorUsingTrie(validator, currentEpoch) { if !helpers.IsActiveValidatorUsingTrie(validator, currentEpoch) {

View File

@@ -4,7 +4,7 @@ import (
"context" "context"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks" "github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
@@ -102,7 +102,7 @@ func TestProcessVoluntaryExits_AppliesCorrectStatus(t *testing.T) {
Slot: params.BeaconConfig().SlotsPerEpoch * 5, Slot: params.BeaconConfig().SlotsPerEpoch * 5,
}) })
require.NoError(t, err) require.NoError(t, err)
err = state.SetSlot(state.Slot() + uint64(params.BeaconConfig().ShardCommitteePeriod.Mul(params.BeaconConfig().SlotsPerEpoch))) err = state.SetSlot(state.Slot() + params.BeaconConfig().SlotsPerEpoch.Mul(uint64(params.BeaconConfig().ShardCommitteePeriod)))
require.NoError(t, err) require.NoError(t, err)
priv, err := bls.RandKey() priv, err := bls.RandKey()

View File

@@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"testing" "testing"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks" "github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
@@ -21,7 +22,7 @@ import (
func TestProcessProposerSlashings_UnmatchedHeaderSlots(t *testing.T) { func TestProcessProposerSlashings_UnmatchedHeaderSlots(t *testing.T) {
testutil.ResetCache() testutil.ResetCache()
beaconState, _ := testutil.DeterministicGenesisState(t, 20) beaconState, _ := testutil.DeterministicGenesisState(t, 20)
currentSlot := uint64(0) currentSlot := types.Slot(0)
slashings := []*ethpb.ProposerSlashing{ slashings := []*ethpb.ProposerSlashing{
{ {
Header_1: &ethpb.SignedBeaconBlockHeader{ Header_1: &ethpb.SignedBeaconBlockHeader{
@@ -54,7 +55,7 @@ func TestProcessProposerSlashings_UnmatchedHeaderSlots(t *testing.T) {
func TestProcessProposerSlashings_SameHeaders(t *testing.T) { func TestProcessProposerSlashings_SameHeaders(t *testing.T) {
testutil.ResetCache() testutil.ResetCache()
beaconState, _ := testutil.DeterministicGenesisState(t, 2) beaconState, _ := testutil.DeterministicGenesisState(t, 2)
currentSlot := uint64(0) currentSlot := types.Slot(0)
slashings := []*ethpb.ProposerSlashing{ slashings := []*ethpb.ProposerSlashing{
{ {
Header_1: &ethpb.SignedBeaconBlockHeader{ Header_1: &ethpb.SignedBeaconBlockHeader{
@@ -93,7 +94,7 @@ func TestProcessProposerSlashings_ValidatorNotSlashable(t *testing.T) {
WithdrawableEpoch: 0, WithdrawableEpoch: 0,
}, },
} }
currentSlot := uint64(0) currentSlot := types.Slot(0)
slashings := []*ethpb.ProposerSlashing{ slashings := []*ethpb.ProposerSlashing{
{ {
Header_1: &ethpb.SignedBeaconBlockHeader{ Header_1: &ethpb.SignedBeaconBlockHeader{
@@ -186,7 +187,7 @@ func TestVerifyProposerSlashing(t *testing.T) {
} }
beaconState, sks := testutil.DeterministicGenesisState(t, 2) beaconState, sks := testutil.DeterministicGenesisState(t, 2)
currentSlot := uint64(0) currentSlot := types.Slot(0)
require.NoError(t, beaconState.SetSlot(currentSlot)) require.NoError(t, beaconState.SetSlot(currentSlot))
rand1, err := bls.RandKey() rand1, err := bls.RandKey()
require.NoError(t, err) require.NoError(t, err)

View File

@@ -5,7 +5,7 @@ import (
"encoding/binary" "encoding/binary"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks" "github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"

View File

@@ -306,8 +306,8 @@ func ProcessFinalUpdates(state *stateTrie.BeaconState) (*stateTrie.BeaconState,
} }
// Set historical root accumulator. // Set historical root accumulator.
epochsPerHistoricalRoot := params.BeaconConfig().SlotsPerHistoricalRoot / params.BeaconConfig().SlotsPerEpoch epochsPerHistoricalRoot := params.BeaconConfig().SlotsPerHistoricalRoot.DivSlot(params.BeaconConfig().SlotsPerEpoch)
if nextEpoch.Mod(epochsPerHistoricalRoot) == 0 { if nextEpoch.Mod(uint64(epochsPerHistoricalRoot)) == 0 {
historicalBatch := &pb.HistoricalBatch{ historicalBatch := &pb.HistoricalBatch{
BlockRoots: state.BlockRoots(), BlockRoots: state.BlockRoots(),
StateRoots: state.StateRoots(), StateRoots: state.StateRoots(),

View File

@@ -5,7 +5,7 @@ import (
"testing" "testing"
"github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/proto"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/go-bitfield" "github.com/prysmaticlabs/go-bitfield"
"github.com/prysmaticlabs/prysm/beacon-chain/core/epoch" "github.com/prysmaticlabs/prysm/beacon-chain/core/epoch"
@@ -110,7 +110,7 @@ func TestAttestingBalance_CorrectBalance(t *testing.T) {
Data: &ethpb.AttestationData{ Data: &ethpb.AttestationData{
Target: &ethpb.Checkpoint{Root: make([]byte, 32)}, Target: &ethpb.Checkpoint{Root: make([]byte, 32)},
Source: &ethpb.Checkpoint{Root: make([]byte, 32)}, Source: &ethpb.Checkpoint{Root: make([]byte, 32)},
Slot: uint64(i), Slot: types.Slot(i),
}, },
AggregationBits: bitfield.Bitlist{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, AggregationBits: bitfield.Bitlist{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01}, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01},
@@ -263,7 +263,7 @@ func TestProcessSlashings_SlashedLess(t *testing.T) {
} }
func TestProcessFinalUpdates_CanProcess(t *testing.T) { func TestProcessFinalUpdates_CanProcess(t *testing.T) {
s := buildState(t, params.BeaconConfig().SlotsPerHistoricalRoot-1, params.BeaconConfig().SlotsPerEpoch) s := buildState(t, params.BeaconConfig().SlotsPerHistoricalRoot-1, uint64(params.BeaconConfig().SlotsPerEpoch))
ce := helpers.CurrentEpoch(s) ce := helpers.CurrentEpoch(s)
ne := ce + 1 ne := ce + 1
require.NoError(t, s.SetEth1DataVotes([]*ethpb.Eth1Data{})) require.NoError(t, s.SetEth1DataVotes([]*ethpb.Eth1Data{}))
@@ -401,7 +401,7 @@ func TestProcessRegistryUpdates_CanExits(t *testing.T) {
exitEpoch := helpers.ActivationExitEpoch(e) exitEpoch := helpers.ActivationExitEpoch(e)
minWithdrawalDelay := params.BeaconConfig().MinValidatorWithdrawabilityDelay minWithdrawalDelay := params.BeaconConfig().MinValidatorWithdrawabilityDelay
base := &pb.BeaconState{ base := &pb.BeaconState{
Slot: uint64(e) * params.BeaconConfig().SlotsPerEpoch, Slot: params.BeaconConfig().SlotsPerEpoch.Mul(uint64(e)),
Validators: []*ethpb.Validator{ Validators: []*ethpb.Validator{
{ {
ExitEpoch: exitEpoch, ExitEpoch: exitEpoch,
@@ -421,7 +421,7 @@ func TestProcessRegistryUpdates_CanExits(t *testing.T) {
} }
} }
func buildState(t testing.TB, slot, validatorCount uint64) *state.BeaconState { func buildState(t testing.TB, slot types.Slot, validatorCount uint64) *state.BeaconState {
validators := make([]*ethpb.Validator, validatorCount) validators := make([]*ethpb.Validator, validatorCount)
for i := 0; i < len(validators); i++ { for i := 0; i < len(validators); i++ {
validators[i] = &ethpb.Validator{ validators[i] = &ethpb.Validator{

View File

@@ -5,7 +5,7 @@ import (
"context" "context"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
@@ -131,7 +131,7 @@ func SameHead(state *stateTrie.BeaconState, a *pb.PendingAttestation) (bool, err
} }
// UpdateValidator updates pre computed validator store. // UpdateValidator updates pre computed validator store.
func UpdateValidator(vp []*Validator, record *Validator, indices []uint64, a *pb.PendingAttestation, aSlot uint64) []*Validator { func UpdateValidator(vp []*Validator, record *Validator, indices []uint64, a *pb.PendingAttestation, aSlot types.Slot) []*Validator {
inclusionSlot := aSlot + a.InclusionDelay inclusionSlot := aSlot + a.InclusionDelay
for _, i := range indices { for _, i := range indices {

View File

@@ -17,7 +17,7 @@ import (
) )
func TestUpdateValidator_Works(t *testing.T) { func TestUpdateValidator_Works(t *testing.T) {
e := uint64(params.BeaconConfig().FarFutureEpoch) e := params.BeaconConfig().FarFutureSlot
vp := []*precompute.Validator{{}, {InclusionSlot: e}, {}, {InclusionSlot: e}, {}, {InclusionSlot: e}} vp := []*precompute.Validator{{}, {InclusionSlot: e}, {}, {InclusionSlot: e}, {}, {InclusionSlot: e}}
record := &precompute.Validator{IsCurrentEpochAttester: true, IsCurrentEpochTargetAttester: true, record := &precompute.Validator{IsCurrentEpochAttester: true, IsCurrentEpochTargetAttester: true,
IsPrevEpochAttester: true, IsPrevEpochTargetAttester: true, IsPrevEpochHeadAttester: true} IsPrevEpochAttester: true, IsPrevEpochTargetAttester: true, IsPrevEpochHeadAttester: true}
@@ -34,7 +34,7 @@ func TestUpdateValidator_Works(t *testing.T) {
} }
func TestUpdateValidator_InclusionOnlyCountsPrevEpoch(t *testing.T) { func TestUpdateValidator_InclusionOnlyCountsPrevEpoch(t *testing.T) {
e := uint64(params.BeaconConfig().FarFutureEpoch) e := params.BeaconConfig().FarFutureSlot
vp := []*precompute.Validator{{InclusionSlot: e}} vp := []*precompute.Validator{{InclusionSlot: e}}
record := &precompute.Validator{IsCurrentEpochAttester: true, IsCurrentEpochTargetAttester: true} record := &precompute.Validator{IsCurrentEpochAttester: true, IsCurrentEpochTargetAttester: true}
a := &pb.PendingAttestation{InclusionDelay: 1, ProposerIndex: 2} a := &pb.PendingAttestation{InclusionDelay: 1, ProposerIndex: 2}

View File

@@ -3,7 +3,7 @@ package precompute_test
import ( import (
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/go-bitfield" "github.com/prysmaticlabs/go-bitfield"
"github.com/prysmaticlabs/prysm/beacon-chain/core/epoch/precompute" "github.com/prysmaticlabs/prysm/beacon-chain/core/epoch/precompute"

View File

@@ -45,8 +45,8 @@ func New(ctx context.Context, state *stateTrie.BeaconState) ([]*Validator, *Bala
} }
// Set inclusion slot and inclusion distance to be max, they will be compared and replaced // Set inclusion slot and inclusion distance to be max, they will be compared and replaced
// with the lower values // with the lower values
pVal.InclusionSlot = uint64(params.BeaconConfig().FarFutureEpoch) pVal.InclusionSlot = params.BeaconConfig().FarFutureSlot
pVal.InclusionDistance = uint64(params.BeaconConfig().FarFutureEpoch) pVal.InclusionDistance = params.BeaconConfig().FarFutureSlot
pValidators[idx] = pVal pValidators[idx] = pVal
return nil return nil

View File

@@ -29,7 +29,7 @@ func TestNew(t *testing.T) {
}, },
}) })
require.NoError(t, err) require.NoError(t, err)
e := uint64(params.BeaconConfig().FarFutureEpoch) e := params.BeaconConfig().FarFutureSlot
v, b, err := precompute.New(context.Background(), s) v, b, err := precompute.New(context.Background(), s)
require.NoError(t, err) require.NoError(t, err)
assert.DeepEqual(t, &precompute.Validator{ assert.DeepEqual(t, &precompute.Validator{

View File

@@ -2,7 +2,7 @@ package precompute
import ( import (
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
"github.com/prysmaticlabs/prysm/shared/mathutil" "github.com/prysmaticlabs/prysm/shared/mathutil"
@@ -86,7 +86,7 @@ func attestationDelta(pBal *Balance, v *Validator, prevEpoch, finalizedEpoch typ
if v.IsPrevEpochAttester && !v.IsSlashed { if v.IsPrevEpochAttester && !v.IsSlashed {
proposerReward := br / params.BeaconConfig().ProposerRewardQuotient proposerReward := br / params.BeaconConfig().ProposerRewardQuotient
maxAttesterReward := br - proposerReward maxAttesterReward := br - proposerReward
r += maxAttesterReward / v.InclusionDistance r += maxAttesterReward / uint64(v.InclusionDistance)
if isInInactivityLeak(prevEpoch, finalizedEpoch) { if isInInactivityLeak(prevEpoch, finalizedEpoch) {
// Since full base reward will be canceled out by inactivity penalty deltas, // Since full base reward will be canceled out by inactivity penalty deltas,

View File

@@ -4,7 +4,7 @@ import (
"context" "context"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/go-bitfield" "github.com/prysmaticlabs/go-bitfield"
"github.com/prysmaticlabs/prysm/beacon-chain/core/epoch" "github.com/prysmaticlabs/prysm/beacon-chain/core/epoch"
@@ -113,7 +113,7 @@ func TestAttestationDeltaPrecompute(t *testing.T) {
// Base rewards for proposer and attesters working together getting attestation // Base rewards for proposer and attesters working together getting attestation
// on chain in the fatest manner // on chain in the fatest manner
proposerReward := base / params.BeaconConfig().ProposerRewardQuotient proposerReward := base / params.BeaconConfig().ProposerRewardQuotient
wanted += (base-proposerReward)*params.BeaconConfig().MinAttestationInclusionDelay - 1 wanted += (base-proposerReward)*uint64(params.BeaconConfig().MinAttestationInclusionDelay) - 1
assert.Equal(t, wanted, rewards[i], "Unexpected reward balance for validator with index %d", i) assert.Equal(t, wanted, rewards[i], "Unexpected reward balance for validator with index %d", i)
// Since all these validators attested, they shouldn't get penalized. // Since all these validators attested, they shouldn't get penalized.
assert.Equal(t, uint64(0), penalties[i], "Unexpected penalty balance") assert.Equal(t, uint64(0), penalties[i], "Unexpected penalty balance")
@@ -255,7 +255,7 @@ func TestProcessRewardsAndPenaltiesPrecompute_SlashedInactivePenalty(t *testing.
} }
} }
func buildState(slot, validatorCount uint64) *pb.BeaconState { func buildState(slot types.Slot, validatorCount uint64) *pb.BeaconState {
validators := make([]*ethpb.Validator, validatorCount) validators := make([]*ethpb.Validator, validatorCount)
for i := 0; i < len(validators); i++ { for i := 0; i < len(validators); i++ {
validators[i] = &ethpb.Validator{ validators[i] = &ethpb.Validator{

View File

@@ -1,5 +1,7 @@
package precompute package precompute
import types "github.com/prysmaticlabs/eth2-types"
// Validator stores the pre computation of individual validator's attesting records these records // Validator stores the pre computation of individual validator's attesting records these records
// consist of attestation votes, block inclusion record. Pre computing and storing such record // consist of attestation votes, block inclusion record. Pre computing and storing such record
// is essential for process epoch optimizations. // is essential for process epoch optimizations.
@@ -26,9 +28,9 @@ type Validator struct {
// CurrentEpochEffectiveBalance is how much effective balance this validator validator has current epoch. // CurrentEpochEffectiveBalance is how much effective balance this validator validator has current epoch.
CurrentEpochEffectiveBalance uint64 CurrentEpochEffectiveBalance uint64
// InclusionSlot is the slot of when the attestation gets included in the chain. // InclusionSlot is the slot of when the attestation gets included in the chain.
InclusionSlot uint64 InclusionSlot types.Slot
// InclusionDistance is the distance between the assigned slot and this validator's attestation was included in block. // InclusionDistance is the distance between the assigned slot and this validator's attestation was included in block.
InclusionDistance uint64 InclusionDistance types.Slot
// ProposerIndex is the index of proposer at slot where this validator's attestation was included. // ProposerIndex is the index of proposer at slot where this validator's attestation was included.
ProposerIndex uint64 ProposerIndex uint64
// BeforeEpochTransitionBalance is the validator balance prior to epoch transition. // BeforeEpochTransitionBalance is the validator balance prior to epoch transition.

View File

@@ -10,6 +10,7 @@ go_library(
visibility = ["//beacon-chain:__subpackages__"], visibility = ["//beacon-chain:__subpackages__"],
deps = [ deps = [
"//shared/event:go_default_library", "//shared/event:go_default_library",
"@com_github_prysmaticlabs_eth2_types//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library", "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
], ],
) )

View File

@@ -6,6 +6,7 @@ package state
import ( import (
"time" "time"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
) )
@@ -26,7 +27,7 @@ const (
// BlockProcessedData is the data sent with BlockProcessed events. // BlockProcessedData is the data sent with BlockProcessed events.
type BlockProcessedData struct { type BlockProcessedData struct {
// Slot is the slot of the processed block. // Slot is the slot of the processed block.
Slot uint64 Slot types.Slot
// BlockRoot of the processed block. // BlockRoot of the processed block.
BlockRoot [32]byte BlockRoot [32]byte
// SignedBlock is the physical processed block. // SignedBlock is the physical processed block.
@@ -58,7 +59,7 @@ type InitializedData struct {
// ReorgData is the data alongside a reorg event. // ReorgData is the data alongside a reorg event.
type ReorgData struct { type ReorgData struct {
// NewSlot is the slot of new state after the reorg. // NewSlot is the slot of new state after the reorg.
NewSlot uint64 NewSlot types.Slot
// OldSlot is the slot of the head state before the reorg. // OldSlot is the slot of the head state before the reorg.
OldSlot uint64 OldSlot types.Slot
} }

View File

@@ -6,7 +6,7 @@ import (
"fmt" "fmt"
"time" "time"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/shared/bls" "github.com/prysmaticlabs/prysm/shared/bls"
"github.com/prysmaticlabs/prysm/shared/hashutil" "github.com/prysmaticlabs/prysm/shared/hashutil"
@@ -117,10 +117,10 @@ func ComputeSubnetForAttestation(activeValCount uint64, att *ethpb.Attestation)
// slots_since_epoch_start = attestation.data.slot % SLOTS_PER_EPOCH // slots_since_epoch_start = attestation.data.slot % SLOTS_PER_EPOCH
// committees_since_epoch_start = get_committee_count_at_slot(state, attestation.data.slot) * slots_since_epoch_start // committees_since_epoch_start = get_committee_count_at_slot(state, attestation.data.slot) * slots_since_epoch_start
// return (committees_since_epoch_start + attestation.data.index) % ATTESTATION_SUBNET_COUNT // return (committees_since_epoch_start + attestation.data.index) % ATTESTATION_SUBNET_COUNT
func ComputeSubnetFromCommitteeAndSlot(activeValCount, comIdx, attSlot uint64) uint64 { func ComputeSubnetFromCommitteeAndSlot(activeValCount, comIdx uint64, attSlot types.Slot) uint64 {
slotSinceStart := SlotsSinceEpochStarts(attSlot) slotSinceStart := SlotsSinceEpochStarts(attSlot)
comCount := SlotCommitteeCount(activeValCount) comCount := SlotCommitteeCount(activeValCount)
commsSinceStart := comCount * slotSinceStart commsSinceStart := uint64(slotSinceStart.Mul(comCount))
computedSubnet := (commsSinceStart + comIdx) % params.BeaconNetworkConfig().AttestationSubnetCount computedSubnet := (commsSinceStart + comIdx) % params.BeaconNetworkConfig().AttestationSubnetCount
return computedSubnet return computedSubnet
} }
@@ -136,7 +136,7 @@ func ComputeSubnetFromCommitteeAndSlot(activeValCount, comIdx, attSlot uint64) u
// invalid_attestation_slot = 101 // invalid_attestation_slot = 101
// valid_attestation_slot = 98 // valid_attestation_slot = 98
// In the attestation must be within the range of 95 to 100 in the example above. // In the attestation must be within the range of 95 to 100 in the example above.
func ValidateAttestationTime(attSlot uint64, genesisTime time.Time) error { func ValidateAttestationTime(attSlot types.Slot, genesisTime time.Time) error {
if err := ValidateSlotClock(attSlot, uint64(genesisTime.Unix())); err != nil { if err := ValidateSlotClock(attSlot, uint64(genesisTime.Unix())); err != nil {
return err return err
} }
@@ -156,7 +156,7 @@ func ValidateAttestationTime(attSlot uint64, genesisTime time.Time) error {
// An attestation cannot be older than the current slot - attestation propagation slot range // An attestation cannot be older than the current slot - attestation propagation slot range
// with a minor tolerance for peer clock disparity. // with a minor tolerance for peer clock disparity.
lowerBoundsSlot := uint64(0) lowerBoundsSlot := types.Slot(0)
if currentSlot > params.BeaconNetworkConfig().AttestationPropagationSlotRange { if currentSlot > params.BeaconNetworkConfig().AttestationPropagationSlotRange {
lowerBoundsSlot = currentSlot - params.BeaconNetworkConfig().AttestationPropagationSlotRange lowerBoundsSlot = currentSlot - params.BeaconNetworkConfig().AttestationPropagationSlotRange
} }
@@ -183,7 +183,7 @@ func ValidateAttestationTime(attSlot uint64, genesisTime time.Time) error {
func VerifyCheckpointEpoch(c *ethpb.Checkpoint, genesis time.Time) bool { func VerifyCheckpointEpoch(c *ethpb.Checkpoint, genesis time.Time) bool {
now := uint64(timeutils.Now().Unix()) now := uint64(timeutils.Now().Unix())
genesisTime := uint64(genesis.Unix()) genesisTime := uint64(genesis.Unix())
currentSlot := (now - genesisTime) / params.BeaconConfig().SecondsPerSlot currentSlot := types.Slot((now - genesisTime) / params.BeaconConfig().SecondsPerSlot)
currentEpoch := SlotToEpoch(currentSlot) currentEpoch := SlotToEpoch(currentSlot)
var prevEpoch types.Epoch var prevEpoch types.Epoch

View File

@@ -5,6 +5,7 @@ import (
"testing" "testing"
"time" "time"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state" beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state"
@@ -131,7 +132,7 @@ func Test_ValidateAttestationTime(t *testing.T) {
} }
type args struct { type args struct {
attSlot uint64 attSlot types.Slot
genesisTime time.Time genesisTime time.Time
} }
tests := []struct { tests := []struct {
@@ -219,7 +220,8 @@ func Test_ValidateAttestationTime(t *testing.T) {
func TestVerifyCheckpointEpoch_Ok(t *testing.T) { func TestVerifyCheckpointEpoch_Ok(t *testing.T) {
// Genesis was 6 epochs ago exactly. // Genesis was 6 epochs ago exactly.
genesis := time.Now().Add(-1 * time.Second * time.Duration(params.BeaconConfig().SecondsPerSlot*params.BeaconConfig().SlotsPerEpoch*6)) offset := params.BeaconConfig().SlotsPerEpoch.Mul(params.BeaconConfig().SecondsPerSlot * 6)
genesis := time.Now().Add(-1 * time.Second * time.Duration(offset))
assert.Equal(t, true, helpers.VerifyCheckpointEpoch(&ethpb.Checkpoint{Epoch: 6}, genesis)) assert.Equal(t, true, helpers.VerifyCheckpointEpoch(&ethpb.Checkpoint{Epoch: 6}, genesis))
assert.Equal(t, true, helpers.VerifyCheckpointEpoch(&ethpb.Checkpoint{Epoch: 5}, genesis)) assert.Equal(t, true, helpers.VerifyCheckpointEpoch(&ethpb.Checkpoint{Epoch: 5}, genesis))
assert.Equal(t, false, helpers.VerifyCheckpointEpoch(&ethpb.Checkpoint{Epoch: 4}, genesis)) assert.Equal(t, false, helpers.VerifyCheckpointEpoch(&ethpb.Checkpoint{Epoch: 4}, genesis))

View File

@@ -5,7 +5,7 @@ import (
"math" "math"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
"github.com/prysmaticlabs/prysm/shared/params" "github.com/prysmaticlabs/prysm/shared/params"
) )
@@ -36,23 +36,23 @@ func VerifyNilBeaconBlock(b *ethpb.SignedBeaconBlock) error {
// """ // """
// assert slot < state.slot <= slot + SLOTS_PER_HISTORICAL_ROOT // assert slot < state.slot <= slot + SLOTS_PER_HISTORICAL_ROOT
// return state.block_roots[slot % SLOTS_PER_HISTORICAL_ROOT] // return state.block_roots[slot % SLOTS_PER_HISTORICAL_ROOT]
func BlockRootAtSlot(state *stateTrie.BeaconState, slot uint64) ([]byte, error) { func BlockRootAtSlot(state *stateTrie.BeaconState, slot types.Slot) ([]byte, error) {
if math.MaxUint64-slot < params.BeaconConfig().SlotsPerHistoricalRoot { if math.MaxUint64-slot < params.BeaconConfig().SlotsPerHistoricalRoot {
return []byte{}, errors.New("slot overflows uint64") return []byte{}, errors.New("slot overflows uint64")
} }
if slot >= state.Slot() || state.Slot() > slot+params.BeaconConfig().SlotsPerHistoricalRoot { if slot >= state.Slot() || state.Slot() > slot+params.BeaconConfig().SlotsPerHistoricalRoot {
return []byte{}, errors.Errorf("slot %d out of bounds", slot) return []byte{}, errors.Errorf("slot %d out of bounds", slot)
} }
return state.BlockRootAtIndex(slot % params.BeaconConfig().SlotsPerHistoricalRoot) return state.BlockRootAtIndex(uint64(slot % params.BeaconConfig().SlotsPerHistoricalRoot))
} }
// StateRootAtSlot returns the cached state root at that particular slot. If no state // StateRootAtSlot returns the cached state root at that particular slot. If no state
// root has been cached it will return a zero-hash. // root has been cached it will return a zero-hash.
func StateRootAtSlot(state *stateTrie.BeaconState, slot uint64) ([]byte, error) { func StateRootAtSlot(state *stateTrie.BeaconState, slot types.Slot) ([]byte, error) {
if slot >= state.Slot() || state.Slot() > slot+params.BeaconConfig().SlotsPerHistoricalRoot { if slot >= state.Slot() || state.Slot() > slot+params.BeaconConfig().SlotsPerHistoricalRoot {
return []byte{}, errors.Errorf("slot %d out of bounds", slot) return []byte{}, errors.Errorf("slot %d out of bounds", slot)
} }
return state.StateRootAtIndex(slot % params.BeaconConfig().SlotsPerHistoricalRoot) return state.StateRootAtIndex(uint64(slot % params.BeaconConfig().SlotsPerHistoricalRoot))
} }
// BlockRoot returns the block root stored in the BeaconState for epoch start slot. // BlockRoot returns the block root stored in the BeaconState for epoch start slot.

View File

@@ -5,6 +5,7 @@ import (
"math" "math"
"testing" "testing"
types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state" beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
@@ -16,7 +17,7 @@ import (
func TestBlockRootAtSlot_CorrectBlockRoot(t *testing.T) { func TestBlockRootAtSlot_CorrectBlockRoot(t *testing.T) {
var blockRoots [][]byte var blockRoots [][]byte
for i := uint64(0); i < params.BeaconConfig().SlotsPerHistoricalRoot; i++ { for i := uint64(0); i < uint64(params.BeaconConfig().SlotsPerHistoricalRoot); i++ {
blockRoots = append(blockRoots, []byte{byte(i)}) blockRoots = append(blockRoots, []byte{byte(i)})
} }
s := &pb.BeaconState{ s := &pb.BeaconState{
@@ -24,8 +25,8 @@ func TestBlockRootAtSlot_CorrectBlockRoot(t *testing.T) {
} }
tests := []struct { tests := []struct {
slot uint64 slot types.Slot
stateSlot uint64 stateSlot types.Slot
expectedRoot [32]byte expectedRoot [32]byte
}{ }{
{ {
@@ -73,7 +74,7 @@ func TestBlockRootAtSlot_CorrectBlockRoot(t *testing.T) {
func TestBlockRootAtSlot_OutOfBounds(t *testing.T) { func TestBlockRootAtSlot_OutOfBounds(t *testing.T) {
var blockRoots [][]byte var blockRoots [][]byte
for i := uint64(0); i < params.BeaconConfig().SlotsPerHistoricalRoot; i++ { for i := uint64(0); i < uint64(params.BeaconConfig().SlotsPerHistoricalRoot); i++ {
blockRoots = append(blockRoots, []byte{byte(i)}) blockRoots = append(blockRoots, []byte{byte(i)})
} }
state := &pb.BeaconState{ state := &pb.BeaconState{
@@ -81,8 +82,8 @@ func TestBlockRootAtSlot_OutOfBounds(t *testing.T) {
} }
tests := []struct { tests := []struct {
slot uint64 slot types.Slot
stateSlot uint64 stateSlot types.Slot
expectedErr string expectedErr string
}{ }{
{ {

View File

@@ -8,7 +8,7 @@ import (
"sort" "sort"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/go-bitfield" "github.com/prysmaticlabs/go-bitfield"
"github.com/prysmaticlabs/prysm/beacon-chain/cache" "github.com/prysmaticlabs/prysm/beacon-chain/cache"
@@ -39,7 +39,7 @@ var proposerIndicesCache = cache.NewProposerIndicesCache()
// len(get_active_validator_indices(state, epoch)) // SLOTS_PER_EPOCH // TARGET_COMMITTEE_SIZE, // len(get_active_validator_indices(state, epoch)) // SLOTS_PER_EPOCH // TARGET_COMMITTEE_SIZE,
// )) // ))
func SlotCommitteeCount(activeValidatorCount uint64) uint64 { func SlotCommitteeCount(activeValidatorCount uint64) uint64 {
var committeePerSlot = activeValidatorCount / params.BeaconConfig().SlotsPerEpoch / params.BeaconConfig().TargetCommitteeSize var committeePerSlot = activeValidatorCount / uint64(params.BeaconConfig().SlotsPerEpoch) / params.BeaconConfig().TargetCommitteeSize
if committeePerSlot > params.BeaconConfig().MaxCommitteesPerSlot { if committeePerSlot > params.BeaconConfig().MaxCommitteesPerSlot {
return params.BeaconConfig().MaxCommitteesPerSlot return params.BeaconConfig().MaxCommitteesPerSlot
@@ -68,7 +68,7 @@ func SlotCommitteeCount(activeValidatorCount uint64) uint64 {
// index=(slot % SLOTS_PER_EPOCH) * committees_per_slot + index, // index=(slot % SLOTS_PER_EPOCH) * committees_per_slot + index,
// count=committees_per_slot * SLOTS_PER_EPOCH, // count=committees_per_slot * SLOTS_PER_EPOCH,
// ) // )
func BeaconCommitteeFromState(state *stateTrie.BeaconState, slot, committeeIndex uint64) ([]uint64, error) { func BeaconCommitteeFromState(state *stateTrie.BeaconState, slot types.Slot, committeeIndex uint64) ([]uint64, error) {
epoch := SlotToEpoch(slot) epoch := SlotToEpoch(slot)
seed, err := Seed(state, epoch, params.BeaconConfig().DomainBeaconAttester) seed, err := Seed(state, epoch, params.BeaconConfig().DomainBeaconAttester)
if err != nil { if err != nil {
@@ -94,7 +94,7 @@ func BeaconCommitteeFromState(state *stateTrie.BeaconState, slot, committeeIndex
// BeaconCommittee returns the crosslink committee of a given slot and committee index. The // BeaconCommittee returns the crosslink committee of a given slot and committee index. The
// validator indices and seed are provided as an argument rather than a imported implementation // validator indices and seed are provided as an argument rather than a imported implementation
// from the spec definition. Having them as an argument allows for cheaper computation run time. // from the spec definition. Having them as an argument allows for cheaper computation run time.
func BeaconCommittee(validatorIndices []uint64, seed [32]byte, slot, committeeIndex uint64) ([]uint64, error) { func BeaconCommittee(validatorIndices []uint64, seed [32]byte, slot types.Slot, committeeIndex uint64) ([]uint64, error) {
indices, err := committeeCache.Committee(slot, seed, committeeIndex) indices, err := committeeCache.Committee(slot, seed, committeeIndex)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "could not interface with committee cache") return nil, errors.Wrap(err, "could not interface with committee cache")
@@ -105,8 +105,8 @@ func BeaconCommittee(validatorIndices []uint64, seed [32]byte, slot, committeeIn
committeesPerSlot := SlotCommitteeCount(uint64(len(validatorIndices))) committeesPerSlot := SlotCommitteeCount(uint64(len(validatorIndices)))
epochOffset := committeeIndex + (slot%params.BeaconConfig().SlotsPerEpoch)*committeesPerSlot epochOffset := committeeIndex + uint64(slot.ModSlot(params.BeaconConfig().SlotsPerEpoch).Mul(committeesPerSlot))
count := committeesPerSlot * params.BeaconConfig().SlotsPerEpoch count := committeesPerSlot * uint64(params.BeaconConfig().SlotsPerEpoch)
return ComputeCommittee(validatorIndices, seed, epochOffset, count) return ComputeCommittee(validatorIndices, seed, epochOffset, count)
} }
@@ -155,7 +155,7 @@ func ComputeCommittee(
// CommitteeAssignmentContainer represents a committee, index, and attester slot for a given epoch. // CommitteeAssignmentContainer represents a committee, index, and attester slot for a given epoch.
type CommitteeAssignmentContainer struct { type CommitteeAssignmentContainer struct {
Committee []uint64 Committee []uint64
AttesterSlot uint64 AttesterSlot types.Slot
CommitteeIndex uint64 CommitteeIndex uint64
} }
@@ -169,7 +169,7 @@ type CommitteeAssignmentContainer struct {
func CommitteeAssignments( func CommitteeAssignments(
state *stateTrie.BeaconState, state *stateTrie.BeaconState,
epoch types.Epoch, epoch types.Epoch,
) (map[uint64]*CommitteeAssignmentContainer, map[uint64][]uint64, error) { ) (map[uint64]*CommitteeAssignmentContainer, map[uint64][]types.Slot, error) {
nextEpoch := NextEpoch(state) nextEpoch := NextEpoch(state)
if epoch > nextEpoch { if epoch > nextEpoch {
return nil, nil, fmt.Errorf( return nil, nil, fmt.Errorf(
@@ -186,7 +186,7 @@ func CommitteeAssignments(
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
proposerIndexToSlots := make(map[uint64][]uint64, params.BeaconConfig().SlotsPerEpoch) proposerIndexToSlots := make(map[uint64][]types.Slot, params.BeaconConfig().SlotsPerEpoch)
// Proposal epochs do not have a look ahead, so we skip them over here. // Proposal epochs do not have a look ahead, so we skip them over here.
validProposalEpoch := epoch < nextEpoch validProposalEpoch := epoch < nextEpoch
for slot := startSlot; slot < startSlot+params.BeaconConfig().SlotsPerEpoch && validProposalEpoch; slot++ { for slot := startSlot; slot < startSlot+params.BeaconConfig().SlotsPerEpoch && validProposalEpoch; slot++ {
@@ -211,10 +211,10 @@ func CommitteeAssignments(
// Each slot in an epoch has a different set of committees. This value is derived from the // Each slot in an epoch has a different set of committees. This value is derived from the
// active validator set, which does not change. // active validator set, which does not change.
numCommitteesPerSlot := SlotCommitteeCount(uint64(len(activeValidatorIndices))) numCommitteesPerSlot := SlotCommitteeCount(uint64(len(activeValidatorIndices)))
validatorIndexToCommittee := make(map[uint64]*CommitteeAssignmentContainer, numCommitteesPerSlot*params.BeaconConfig().SlotsPerEpoch) validatorIndexToCommittee := make(map[uint64]*CommitteeAssignmentContainer, params.BeaconConfig().SlotsPerEpoch.Mul(numCommitteesPerSlot))
// Compute all committees for all slots. // Compute all committees for all slots.
for i := uint64(0); i < params.BeaconConfig().SlotsPerEpoch; i++ { for i := types.Slot(0); i < params.BeaconConfig().SlotsPerEpoch; i++ {
// Compute committees. // Compute committees.
for j := uint64(0); j < numCommitteesPerSlot; j++ { for j := uint64(0); j < numCommitteesPerSlot; j++ {
slot := startSlot + i slot := startSlot + i
@@ -319,7 +319,7 @@ func UpdateCommitteeCache(state *stateTrie.BeaconState, epoch types.Epoch) error
if err := committeeCache.AddCommitteeShuffledList(&cache.Committees{ if err := committeeCache.AddCommitteeShuffledList(&cache.Committees{
ShuffledIndices: shuffledIndices, ShuffledIndices: shuffledIndices,
CommitteeCount: count * params.BeaconConfig().SlotsPerEpoch, CommitteeCount: uint64(params.BeaconConfig().SlotsPerEpoch.Mul(count)),
Seed: seed, Seed: seed,
SortedIndices: sortedIndices, SortedIndices: sortedIndices,
}); err != nil { }); err != nil {
@@ -399,8 +399,8 @@ func precomputeProposerIndices(state *stateTrie.BeaconState, activeIndices []uin
if err != nil { if err != nil {
return nil, err return nil, err
} }
for i := uint64(0); i < params.BeaconConfig().SlotsPerEpoch; i++ { for i := uint64(0); i < uint64(params.BeaconConfig().SlotsPerEpoch); i++ {
seedWithSlot := append(seed[:], bytesutil.Bytes8(slot+i)...) seedWithSlot := append(seed[:], bytesutil.Bytes8(uint64(slot)+i)...)
seedWithSlotHash := hashFunc(seedWithSlot) seedWithSlotHash := hashFunc(seedWithSlot)
index, err := ComputeProposerIndex(state, activeIndices, seedWithSlotHash) index, err := ComputeProposerIndex(state, activeIndices, seedWithSlotHash)
if err != nil { if err != nil {

View File

@@ -6,7 +6,7 @@ import (
"strconv" "strconv"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/go-bitfield" "github.com/prysmaticlabs/go-bitfield"
beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state" beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state"
@@ -151,11 +151,11 @@ func TestCommitteeAssignments_CanRetrieve(t *testing.T) {
tests := []struct { tests := []struct {
index uint64 index uint64
slot uint64 slot types.Slot
committee []uint64 committee []uint64
committeeIndex uint64 committeeIndex uint64
isProposer bool isProposer bool
proposerSlot uint64 proposerSlot types.Slot
}{ }{
{ {
index: 0, index: 0,
@@ -254,13 +254,13 @@ func TestCommitteeAssignments_EverySlotHasMin1Proposer(t *testing.T) {
_, proposerIndexToSlots, err := CommitteeAssignments(state, epoch) _, proposerIndexToSlots, err := CommitteeAssignments(state, epoch)
require.NoError(t, err, "Failed to determine CommitteeAssignments") require.NoError(t, err, "Failed to determine CommitteeAssignments")
slotsWithProposers := make(map[uint64]bool) slotsWithProposers := make(map[types.Slot]bool)
for _, proposerSlots := range proposerIndexToSlots { for _, proposerSlots := range proposerIndexToSlots {
for _, slot := range proposerSlots { for _, slot := range proposerSlots {
slotsWithProposers[slot] = true slotsWithProposers[slot] = true
} }
} }
assert.Equal(t, params.BeaconConfig().SlotsPerEpoch, uint64(len(slotsWithProposers)), "Unexpected slots") assert.Equal(t, uint64(params.BeaconConfig().SlotsPerEpoch), uint64(len(slotsWithProposers)), "Unexpected slots")
startSlot, err := StartSlot(epoch) startSlot, err := StartSlot(epoch)
require.NoError(t, err) require.NoError(t, err)
endSlot, err := StartSlot(epoch + 1) endSlot, err := StartSlot(epoch + 1)
@@ -288,7 +288,7 @@ func TestVerifyAttestationBitfieldLengths_OK(t *testing.T) {
tests := []struct { tests := []struct {
attestation *ethpb.Attestation attestation *ethpb.Attestation
stateSlot uint64 stateSlot types.Slot
verificationFailure bool verificationFailure bool
}{ }{
{ {
@@ -423,7 +423,7 @@ func TestUpdateCommitteeCache_CanUpdate(t *testing.T) {
seed, err := Seed(state, epoch, params.BeaconConfig().DomainBeaconAttester) seed, err := Seed(state, epoch, params.BeaconConfig().DomainBeaconAttester)
require.NoError(t, err) require.NoError(t, err)
indices, err = committeeCache.Committee(uint64(epoch.Mul(params.BeaconConfig().SlotsPerEpoch)), seed, idx) indices, err = committeeCache.Committee(params.BeaconConfig().SlotsPerEpoch.Mul(uint64(epoch)), seed, idx)
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, params.BeaconConfig().TargetCommitteeSize, uint64(len(indices)), "Did not save correct indices lengths") assert.Equal(t, params.BeaconConfig().TargetCommitteeSize, uint64(len(indices)), "Did not save correct indices lengths")
} }
@@ -603,7 +603,7 @@ func BenchmarkComputeCommittee4000000_WithOutCache(b *testing.B) {
func TestBeaconCommitteeFromState_UpdateCacheForPreviousEpoch(t *testing.T) { func TestBeaconCommitteeFromState_UpdateCacheForPreviousEpoch(t *testing.T) {
committeeSize := uint64(16) committeeSize := uint64(16)
validators := make([]*ethpb.Validator, committeeSize*params.BeaconConfig().SlotsPerEpoch) validators := make([]*ethpb.Validator, params.BeaconConfig().SlotsPerEpoch.Mul(committeeSize))
for i := 0; i < len(validators); i++ { for i := 0; i < len(validators); i++ {
validators[i] = &ethpb.Validator{ validators[i] = &ethpb.Validator{
ExitEpoch: params.BeaconConfig().FarFutureEpoch, ExitEpoch: params.BeaconConfig().FarFutureEpoch,
@@ -650,7 +650,7 @@ func TestPrecomputeProposerIndices_Ok(t *testing.T) {
var wantedProposerIndices []uint64 var wantedProposerIndices []uint64
seed, err := Seed(state, 0, params.BeaconConfig().DomainBeaconProposer) seed, err := Seed(state, 0, params.BeaconConfig().DomainBeaconProposer)
require.NoError(t, err) require.NoError(t, err)
for i := uint64(0); i < params.BeaconConfig().SlotsPerEpoch; i++ { for i := uint64(0); i < uint64(params.BeaconConfig().SlotsPerEpoch); i++ {
seedWithSlot := append(seed[:], bytesutil.Bytes8(i)...) seedWithSlot := append(seed[:], bytesutil.Bytes8(i)...)
seedWithSlotHash := hashutil.Hash(seedWithSlot) seedWithSlotHash := hashutil.Hash(seedWithSlot)
index, err := ComputeProposerIndex(state, indices, seedWithSlotHash) index, err := ComputeProposerIndex(state, indices, seedWithSlotHash)

View File

@@ -1,7 +1,7 @@
package helpers package helpers
import ( import (
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
"github.com/prysmaticlabs/prysm/shared/bls" "github.com/prysmaticlabs/prysm/shared/bls"
"github.com/prysmaticlabs/prysm/shared/bytesutil" "github.com/prysmaticlabs/prysm/shared/bytesutil"

View File

@@ -4,7 +4,7 @@ import (
"encoding/binary" "encoding/binary"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state" beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/bytesutil" "github.com/prysmaticlabs/prysm/shared/bytesutil"
@@ -40,7 +40,7 @@ func TestRandaoMix_OK(t *testing.T) {
}, },
} }
for _, test := range tests { for _, test := range tests {
require.NoError(t, state.SetSlot(uint64(test.epoch.Add(1).Mul(params.BeaconConfig().SlotsPerEpoch)))) require.NoError(t, state.SetSlot(params.BeaconConfig().SlotsPerEpoch.Mul(uint64(test.epoch+1))))
mix, err := RandaoMix(state, test.epoch) mix, err := RandaoMix(state, test.epoch)
require.NoError(t, err) require.NoError(t, err)
assert.DeepEqual(t, test.randaoMix, mix, "Incorrect randao mix") assert.DeepEqual(t, test.randaoMix, mix, "Incorrect randao mix")
@@ -74,7 +74,7 @@ func TestRandaoMix_CopyOK(t *testing.T) {
}, },
} }
for _, test := range tests { for _, test := range tests {
require.NoError(t, state.SetSlot(uint64((test.epoch + 1).Mul(params.BeaconConfig().SlotsPerEpoch)))) require.NoError(t, state.SetSlot(params.BeaconConfig().SlotsPerEpoch.Mul(uint64(test.epoch+1))))
mix, err := RandaoMix(state, test.epoch) mix, err := RandaoMix(state, test.epoch)
require.NoError(t, err) require.NoError(t, err)
uniqueNumber := uint64(params.BeaconConfig().EpochsPerHistoricalVector.Add(1000)) uniqueNumber := uint64(params.BeaconConfig().EpochsPerHistoricalVector.Add(1000))
@@ -94,7 +94,7 @@ func TestGenerateSeed_OK(t *testing.T) {
binary.LittleEndian.PutUint64(intInBytes, uint64(i)) binary.LittleEndian.PutUint64(intInBytes, uint64(i))
randaoMixes[i] = intInBytes randaoMixes[i] = intInBytes
} }
slot := uint64(params.BeaconConfig().MinSeedLookahead.Mul(10 * params.BeaconConfig().SlotsPerEpoch)) slot := params.BeaconConfig().SlotsPerEpoch.Mul(uint64(params.BeaconConfig().MinSeedLookahead * 10))
state, err := beaconstate.InitializeFromProto(&pb.BeaconState{ state, err := beaconstate.InitializeFromProto(&pb.BeaconState{
RandaoMixes: randaoMixes, RandaoMixes: randaoMixes,
Slot: slot, Slot: slot,

View File

@@ -51,11 +51,11 @@ func TestSplitIndices_OK(t *testing.T) {
for i := uint64(0); i < numValidators; i++ { for i := uint64(0); i < numValidators; i++ {
l = append(l, i) l = append(l, i)
} }
split := SplitIndices(l, params.BeaconConfig().SlotsPerEpoch) split := SplitIndices(l, uint64(params.BeaconConfig().SlotsPerEpoch))
assert.Equal(t, params.BeaconConfig().SlotsPerEpoch, uint64(len(split)), "Split list failed due to incorrect length") assert.Equal(t, uint64(params.BeaconConfig().SlotsPerEpoch), uint64(len(split)), "Split list failed due to incorrect length")
for _, s := range split { for _, s := range split {
assert.Equal(t, numValidators/params.BeaconConfig().SlotsPerEpoch, uint64(len(s)), "Split list failed due to incorrect length") assert.Equal(t, numValidators/uint64(params.BeaconConfig().SlotsPerEpoch), uint64(len(s)), "Split list failed due to incorrect length")
} }
} }

View File

@@ -3,7 +3,7 @@ package helpers
import ( import (
fssz "github.com/ferranbt/fastssz" fssz "github.com/ferranbt/fastssz"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/beacon-chain/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"

View File

@@ -6,7 +6,7 @@ import (
"time" "time"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
"github.com/prysmaticlabs/prysm/shared/mathutil" "github.com/prysmaticlabs/prysm/shared/mathutil"
"github.com/prysmaticlabs/prysm/shared/params" "github.com/prysmaticlabs/prysm/shared/params"
@@ -25,10 +25,8 @@ const MaxSlotBuffer = uint64(1 << 7)
// Return the epoch number of ``slot``. // Return the epoch number of ``slot``.
// """ // """
// return Epoch(slot // SLOTS_PER_EPOCH) // return Epoch(slot // SLOTS_PER_EPOCH)
func SlotToEpoch(slot uint64) types.Epoch { func SlotToEpoch(slot types.Slot) types.Epoch {
// TODO(#8205): Once types.Slot PR is ready, replace with return types.Epoch(slot.DivSlot(params.BeaconConfig().SlotsPerEpoch))
// return types.Epoch(slot.DivSlot(params.BeaconConfig().SlotsPerEpoch))
return types.Epoch(slot / params.BeaconConfig().SlotsPerEpoch)
} }
// CurrentEpoch returns the current epoch number calculated from // CurrentEpoch returns the current epoch number calculated from
@@ -78,8 +76,8 @@ func NextEpoch(state *stateTrie.BeaconState) types.Epoch {
// Return the start slot of ``epoch``. // Return the start slot of ``epoch``.
// """ // """
// return Slot(epoch * SLOTS_PER_EPOCH) // return Slot(epoch * SLOTS_PER_EPOCH)
func StartSlot(epoch types.Epoch) (uint64, error) { func StartSlot(epoch types.Epoch) (types.Slot, error) {
slot, err := mathutil.Mul64(uint64(epoch), params.BeaconConfig().SlotsPerEpoch) slot, err := params.BeaconConfig().SlotsPerEpoch.SafeMul(uint64(epoch))
if err != nil { if err != nil {
return slot, errors.Errorf("start slot calculation overflows: %v", err) return slot, errors.Errorf("start slot calculation overflows: %v", err)
} }
@@ -88,7 +86,7 @@ func StartSlot(epoch types.Epoch) (uint64, error) {
// EndSlot returns the last slot number of the // EndSlot returns the last slot number of the
// current epoch. // current epoch.
func EndSlot(epoch types.Epoch) (uint64, error) { func EndSlot(epoch types.Epoch) (types.Slot, error) {
if epoch == math.MaxUint64 { if epoch == math.MaxUint64 {
return 0, errors.New("start slot calculation overflows") return 0, errors.New("start slot calculation overflows")
} }
@@ -101,23 +99,23 @@ func EndSlot(epoch types.Epoch) (uint64, error) {
// IsEpochStart returns true if the given slot number is an epoch starting slot // IsEpochStart returns true if the given slot number is an epoch starting slot
// number. // number.
func IsEpochStart(slot uint64) bool { func IsEpochStart(slot types.Slot) bool {
return slot%params.BeaconConfig().SlotsPerEpoch == 0 return slot%params.BeaconConfig().SlotsPerEpoch == 0
} }
// IsEpochEnd returns true if the given slot number is an epoch ending slot // IsEpochEnd returns true if the given slot number is an epoch ending slot
// number. // number.
func IsEpochEnd(slot uint64) bool { func IsEpochEnd(slot types.Slot) bool {
return IsEpochStart(slot + 1) return IsEpochStart(slot + 1)
} }
// SlotsSinceEpochStarts returns number of slots since the start of the epoch. // SlotsSinceEpochStarts returns number of slots since the start of the epoch.
func SlotsSinceEpochStarts(slot uint64) uint64 { func SlotsSinceEpochStarts(slot types.Slot) types.Slot {
return slot % params.BeaconConfig().SlotsPerEpoch return slot % params.BeaconConfig().SlotsPerEpoch
} }
// VerifySlotTime validates the input slot is not from the future. // VerifySlotTime validates the input slot is not from the future.
func VerifySlotTime(genesisTime, slot uint64, timeTolerance time.Duration) error { func VerifySlotTime(genesisTime uint64, slot types.Slot, timeTolerance time.Duration) error {
slotTime, err := SlotToTime(genesisTime, slot) slotTime, err := SlotToTime(genesisTime, slot)
if err != nil { if err != nil {
return err return err
@@ -139,12 +137,12 @@ func VerifySlotTime(genesisTime, slot uint64, timeTolerance time.Duration) error
} }
// SlotToTime takes the given slot and genesis time to determine the start time of the slot. // SlotToTime takes the given slot and genesis time to determine the start time of the slot.
func SlotToTime(genesisTimeSec, slot uint64) (time.Time, error) { func SlotToTime(genesisTimeSec uint64, slot types.Slot) (time.Time, error) {
timeSinceGenesis, err := mathutil.Mul64(slot, params.BeaconConfig().SecondsPerSlot) timeSinceGenesis, err := slot.SafeMul(params.BeaconConfig().SecondsPerSlot)
if err != nil { if err != nil {
return time.Unix(0, 0), fmt.Errorf("slot (%d) is in the far distant future: %w", slot, err) return time.Unix(0, 0), fmt.Errorf("slot (%d) is in the far distant future: %w", slot, err)
} }
sTime, err := mathutil.Add64(genesisTimeSec, timeSinceGenesis) sTime, err := timeSinceGenesis.SafeAdd(genesisTimeSec)
if err != nil { if err != nil {
return time.Unix(0, 0), fmt.Errorf("slot (%d) is in the far distant future: %w", slot, err) return time.Unix(0, 0), fmt.Errorf("slot (%d) is in the far distant future: %w", slot, err)
} }
@@ -152,26 +150,26 @@ func SlotToTime(genesisTimeSec, slot uint64) (time.Time, error) {
} }
// SlotsSince computes the number of time slots that have occurred since the given timestamp. // SlotsSince computes the number of time slots that have occurred since the given timestamp.
func SlotsSince(time time.Time) uint64 { func SlotsSince(time time.Time) types.Slot {
return CurrentSlot(uint64(time.Unix())) return CurrentSlot(uint64(time.Unix()))
} }
// CurrentSlot returns the current slot as determined by the local clock and // CurrentSlot returns the current slot as determined by the local clock and
// provided genesis time. // provided genesis time.
func CurrentSlot(genesisTimeSec uint64) uint64 { func CurrentSlot(genesisTimeSec uint64) types.Slot {
now := timeutils.Now().Unix() now := timeutils.Now().Unix()
genesis := int64(genesisTimeSec) genesis := int64(genesisTimeSec)
if now < genesis { if now < genesis {
return 0 return 0
} }
return uint64(now-genesis) / params.BeaconConfig().SecondsPerSlot return types.Slot(uint64(now-genesis) / params.BeaconConfig().SecondsPerSlot)
} }
// ValidateSlotClock validates a provided slot against the local // ValidateSlotClock validates a provided slot against the local
// clock to ensure slots that are unreasonable are returned with // clock to ensure slots that are unreasonable are returned with
// an error. // an error.
func ValidateSlotClock(slot, genesisTimeSec uint64) error { func ValidateSlotClock(slot types.Slot, genesisTimeSec uint64) error {
maxPossibleSlot := CurrentSlot(genesisTimeSec) + MaxSlotBuffer maxPossibleSlot := CurrentSlot(genesisTimeSec).Add(MaxSlotBuffer)
// Defensive check to ensure that we only process slots up to a hard limit // Defensive check to ensure that we only process slots up to a hard limit
// from our local clock. // from our local clock.
if slot > maxPossibleSlot { if slot > maxPossibleSlot {
@@ -181,7 +179,7 @@ func ValidateSlotClock(slot, genesisTimeSec uint64) error {
} }
// RoundUpToNearestEpoch rounds up the provided slot value to the nearest epoch. // RoundUpToNearestEpoch rounds up the provided slot value to the nearest epoch.
func RoundUpToNearestEpoch(slot uint64) uint64 { func RoundUpToNearestEpoch(slot types.Slot) types.Slot {
if slot%params.BeaconConfig().SlotsPerEpoch != 0 { if slot%params.BeaconConfig().SlotsPerEpoch != 0 {
slot -= slot % params.BeaconConfig().SlotsPerEpoch slot -= slot % params.BeaconConfig().SlotsPerEpoch
slot += params.BeaconConfig().SlotsPerEpoch slot += params.BeaconConfig().SlotsPerEpoch
@@ -224,10 +222,8 @@ func WeakSubjectivityCheckptEpoch(valCount uint64) (types.Epoch, error) {
// VotingPeriodStartTime returns the current voting period's start time // VotingPeriodStartTime returns the current voting period's start time
// depending on the provided genesis and current slot. // depending on the provided genesis and current slot.
func VotingPeriodStartTime(genesis, slot uint64) uint64 { func VotingPeriodStartTime(genesis uint64, slot types.Slot) uint64 {
startTime := genesis slots := params.BeaconConfig().SlotsPerEpoch.Mul(uint64(params.BeaconConfig().EpochsPerEth1VotingPeriod))
startTime += startTime := uint64((slot - slot.ModSlot(slots)).Mul(params.BeaconConfig().SecondsPerSlot))
(slot - (slot % (uint64(params.BeaconConfig().EpochsPerEth1VotingPeriod) * params.BeaconConfig().SlotsPerEpoch))) * return genesis + startTime
params.BeaconConfig().SecondsPerSlot
return startTime
} }

View File

@@ -5,7 +5,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state" beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/params" "github.com/prysmaticlabs/prysm/shared/params"
@@ -16,7 +16,7 @@ import (
func TestSlotToEpoch_OK(t *testing.T) { func TestSlotToEpoch_OK(t *testing.T) {
tests := []struct { tests := []struct {
slot uint64 slot types.Slot
epoch types.Epoch epoch types.Epoch
}{ }{
{slot: 0, epoch: 0}, {slot: 0, epoch: 0},
@@ -32,7 +32,7 @@ func TestSlotToEpoch_OK(t *testing.T) {
func TestCurrentEpoch_OK(t *testing.T) { func TestCurrentEpoch_OK(t *testing.T) {
tests := []struct { tests := []struct {
slot uint64 slot types.Slot
epoch types.Epoch epoch types.Epoch
}{ }{
{slot: 0, epoch: 0}, {slot: 0, epoch: 0},
@@ -50,7 +50,7 @@ func TestCurrentEpoch_OK(t *testing.T) {
func TestPrevEpoch_OK(t *testing.T) { func TestPrevEpoch_OK(t *testing.T) {
tests := []struct { tests := []struct {
slot uint64 slot types.Slot
epoch types.Epoch epoch types.Epoch
}{ }{
{slot: 0, epoch: 0}, {slot: 0, epoch: 0},
@@ -66,7 +66,7 @@ func TestPrevEpoch_OK(t *testing.T) {
func TestNextEpoch_OK(t *testing.T) { func TestNextEpoch_OK(t *testing.T) {
tests := []struct { tests := []struct {
slot uint64 slot types.Slot
epoch types.Epoch epoch types.Epoch
}{ }{
{slot: 0, epoch: types.Epoch(0/params.BeaconConfig().SlotsPerEpoch + 1)}, {slot: 0, epoch: types.Epoch(0/params.BeaconConfig().SlotsPerEpoch + 1)},
@@ -85,7 +85,7 @@ func TestNextEpoch_OK(t *testing.T) {
func TestEpochStartSlot_OK(t *testing.T) { func TestEpochStartSlot_OK(t *testing.T) {
tests := []struct { tests := []struct {
epoch types.Epoch epoch types.Epoch
startSlot uint64 startSlot types.Slot
error bool error bool
}{ }{
{epoch: 0, startSlot: 0 * params.BeaconConfig().SlotsPerEpoch, error: false}, {epoch: 0, startSlot: 0 * params.BeaconConfig().SlotsPerEpoch, error: false},
@@ -109,7 +109,7 @@ func TestEpochStartSlot_OK(t *testing.T) {
func TestEpochEndSlot_OK(t *testing.T) { func TestEpochEndSlot_OK(t *testing.T) {
tests := []struct { tests := []struct {
epoch types.Epoch epoch types.Epoch
startSlot uint64 startSlot types.Slot
error bool error bool
}{ }{
{epoch: 0, startSlot: 1*params.BeaconConfig().SlotsPerEpoch - 1, error: false}, {epoch: 0, startSlot: 1*params.BeaconConfig().SlotsPerEpoch - 1, error: false},
@@ -134,7 +134,7 @@ func TestIsEpochStart(t *testing.T) {
epochLength := params.BeaconConfig().SlotsPerEpoch epochLength := params.BeaconConfig().SlotsPerEpoch
tests := []struct { tests := []struct {
slot uint64 slot types.Slot
result bool result bool
}{ }{
{ {
@@ -164,7 +164,7 @@ func TestIsEpochEnd(t *testing.T) {
epochLength := params.BeaconConfig().SlotsPerEpoch epochLength := params.BeaconConfig().SlotsPerEpoch
tests := []struct { tests := []struct {
slot uint64 slot types.Slot
result bool result bool
}{ }{
{ {
@@ -188,8 +188,8 @@ func TestIsEpochEnd(t *testing.T) {
func TestSlotsSinceEpochStarts(t *testing.T) { func TestSlotsSinceEpochStarts(t *testing.T) {
tests := []struct { tests := []struct {
slots uint64 slots types.Slot
wantedSlots uint64 wantedSlots types.Slot
}{ }{
{slots: 0, wantedSlots: 0}, {slots: 0, wantedSlots: 0},
{slots: 1, wantedSlots: 1}, {slots: 1, wantedSlots: 1},
@@ -204,8 +204,8 @@ func TestSlotsSinceEpochStarts(t *testing.T) {
func TestRoundUpToNearestEpoch_OK(t *testing.T) { func TestRoundUpToNearestEpoch_OK(t *testing.T) {
tests := []struct { tests := []struct {
startSlot uint64 startSlot types.Slot
roundedUpSlot uint64 roundedUpSlot types.Slot
}{ }{
{startSlot: 0 * params.BeaconConfig().SlotsPerEpoch, roundedUpSlot: 0}, {startSlot: 0 * params.BeaconConfig().SlotsPerEpoch, roundedUpSlot: 0},
{startSlot: 1*params.BeaconConfig().SlotsPerEpoch - 10, roundedUpSlot: 1 * params.BeaconConfig().SlotsPerEpoch}, {startSlot: 1*params.BeaconConfig().SlotsPerEpoch - 10, roundedUpSlot: 1 * params.BeaconConfig().SlotsPerEpoch},
@@ -219,7 +219,7 @@ func TestRoundUpToNearestEpoch_OK(t *testing.T) {
func TestSlotToTime(t *testing.T) { func TestSlotToTime(t *testing.T) {
type args struct { type args struct {
genesisTimeSec uint64 genesisTimeSec uint64
slot uint64 slot types.Slot
} }
tests := []struct { tests := []struct {
name string name string
@@ -276,7 +276,7 @@ func TestSlotToTime(t *testing.T) {
func TestVerifySlotTime(t *testing.T) { func TestVerifySlotTime(t *testing.T) {
type args struct { type args struct {
genesisTime int64 genesisTime int64
slot uint64 slot types.Slot
timeTolerance time.Duration timeTolerance time.Duration
} }
tests := []struct { tests := []struct {
@@ -310,7 +310,7 @@ func TestVerifySlotTime(t *testing.T) {
name: "max future slot", name: "max future slot",
args: args{ args: args{
genesisTime: timeutils.Now().Add(-1 * 5 * time.Duration(params.BeaconConfig().SecondsPerSlot) * time.Second).Unix(), genesisTime: timeutils.Now().Add(-1 * 5 * time.Duration(params.BeaconConfig().SecondsPerSlot) * time.Second).Unix(),
slot: MaxSlotBuffer + 6, slot: types.Slot(MaxSlotBuffer + 6),
}, },
wantedErr: "exceeds max allowed value relative to the local clock", wantedErr: "exceeds max allowed value relative to the local clock",
}, },
@@ -320,7 +320,7 @@ func TestVerifySlotTime(t *testing.T) {
genesisTime: timeutils.Now().Add(-1 * 24 * time.Duration(params.BeaconConfig().SecondsPerSlot) * time.Second).Unix(), // 24 slots in the past genesisTime: timeutils.Now().Add(-1 * 24 * time.Duration(params.BeaconConfig().SecondsPerSlot) * time.Second).Unix(), // 24 slots in the past
// Gets multiplied with slot duration, and results in an overflow. Wraps around to a valid time. // Gets multiplied with slot duration, and results in an overflow. Wraps around to a valid time.
// Lower than max signed int. And chosen specifically to wrap to a valid slot 24 // Lower than max signed int. And chosen specifically to wrap to a valid slot 24
slot: ((^uint64(0)) / params.BeaconConfig().SecondsPerSlot) + 24, slot: types.Slot((^uint64(0))/params.BeaconConfig().SecondsPerSlot) + 24,
}, },
wantedErr: "is in the far distant future", wantedErr: "is in the far distant future",
}, },
@@ -340,9 +340,9 @@ func TestVerifySlotTime(t *testing.T) {
func TestValidateSlotClock_HandlesBadSlot(t *testing.T) { func TestValidateSlotClock_HandlesBadSlot(t *testing.T) {
genTime := timeutils.Now().Add(-1 * time.Duration(MaxSlotBuffer) * time.Duration(params.BeaconConfig().SecondsPerSlot) * time.Second).Unix() genTime := timeutils.Now().Add(-1 * time.Duration(MaxSlotBuffer) * time.Duration(params.BeaconConfig().SecondsPerSlot) * time.Second).Unix()
assert.NoError(t, ValidateSlotClock(MaxSlotBuffer, uint64(genTime)), "unexpected error validating slot") assert.NoError(t, ValidateSlotClock(types.Slot(MaxSlotBuffer), uint64(genTime)), "unexpected error validating slot")
assert.NoError(t, ValidateSlotClock(2*MaxSlotBuffer, uint64(genTime)), "unexpected error validating slot") assert.NoError(t, ValidateSlotClock(types.Slot(2*MaxSlotBuffer), uint64(genTime)), "unexpected error validating slot")
assert.ErrorContains(t, "which exceeds max allowed value relative to the local clock", ValidateSlotClock(2*MaxSlotBuffer+1, uint64(genTime)), "no error from bad slot") assert.ErrorContains(t, "which exceeds max allowed value relative to the local clock", ValidateSlotClock(types.Slot(2*MaxSlotBuffer+1), uint64(genTime)), "no error from bad slot")
assert.ErrorContains(t, "which exceeds max allowed value relative to the local clock", ValidateSlotClock(1<<63, uint64(genTime)), "no error from bad slot") assert.ErrorContains(t, "which exceeds max allowed value relative to the local clock", ValidateSlotClock(1<<63, uint64(genTime)), "no error from bad slot")
} }

View File

@@ -4,7 +4,7 @@ import (
"bytes" "bytes"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
@@ -215,7 +215,7 @@ func BeaconProposerIndex(state *stateTrie.BeaconState) (uint64, error) {
return 0, errors.Wrap(err, "could not generate seed") return 0, errors.Wrap(err, "could not generate seed")
} }
seedWithSlot := append(seed[:], bytesutil.Bytes8(state.Slot())...) seedWithSlot := append(seed[:], bytesutil.Bytes8(uint64(state.Slot()))...)
seedWithSlotHash := hashutil.Hash(seedWithSlot) seedWithSlotHash := hashutil.Hash(seedWithSlot)
indices, err := ActiveValidatorIndices(state, e) indices, err := ActiveValidatorIndices(state, e)

View File

@@ -4,7 +4,7 @@ import (
"errors" "errors"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/cache" "github.com/prysmaticlabs/prysm/beacon-chain/cache"
beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state" beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state"
@@ -242,7 +242,7 @@ func TestBeaconProposerIndex_OK(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
tests := []struct { tests := []struct {
slot uint64 slot types.Slot
index uint64 index uint64
}{ }{
{ {
@@ -289,7 +289,7 @@ func TestBeaconProposerIndex_BadState(t *testing.T) {
} }
} }
roots := make([][]byte, params.BeaconConfig().SlotsPerHistoricalRoot) roots := make([][]byte, params.BeaconConfig().SlotsPerHistoricalRoot)
for i := uint64(0); i < params.BeaconConfig().SlotsPerHistoricalRoot; i++ { for i := uint64(0); i < uint64(params.BeaconConfig().SlotsPerHistoricalRoot); i++ {
roots[i] = make([]byte, 32) roots[i] = make([]byte, 32)
} }
@@ -329,7 +329,7 @@ func TestComputeProposerIndex_Compatibility(t *testing.T) {
var proposerIndices []uint64 var proposerIndices []uint64
seed, err := Seed(state, 0, params.BeaconConfig().DomainBeaconProposer) seed, err := Seed(state, 0, params.BeaconConfig().DomainBeaconProposer)
require.NoError(t, err) require.NoError(t, err)
for i := uint64(0); i < params.BeaconConfig().SlotsPerEpoch; i++ { for i := uint64(0); i < uint64(params.BeaconConfig().SlotsPerEpoch); i++ {
seedWithSlot := append(seed[:], bytesutil.Bytes8(i)...) seedWithSlot := append(seed[:], bytesutil.Bytes8(i)...)
seedWithSlotHash := hashutil.Hash(seedWithSlot) seedWithSlotHash := hashutil.Hash(seedWithSlot)
index, err := ComputeProposerIndex(state, indices, seedWithSlotHash) index, err := ComputeProposerIndex(state, indices, seedWithSlotHash)
@@ -340,7 +340,7 @@ func TestComputeProposerIndex_Compatibility(t *testing.T) {
var wantedProposerIndices []uint64 var wantedProposerIndices []uint64
seed, err = Seed(state, 0, params.BeaconConfig().DomainBeaconProposer) seed, err = Seed(state, 0, params.BeaconConfig().DomainBeaconProposer)
require.NoError(t, err) require.NoError(t, err)
for i := uint64(0); i < params.BeaconConfig().SlotsPerEpoch; i++ { for i := uint64(0); i < uint64(params.BeaconConfig().SlotsPerEpoch); i++ {
seedWithSlot := append(seed[:], bytesutil.Bytes8(i)...) seedWithSlot := append(seed[:], bytesutil.Bytes8(i)...)
seedWithSlotHash := hashutil.Hash(seedWithSlot) seedWithSlotHash := hashutil.Hash(seedWithSlot)
index, err := computeProposerIndexWithValidators(state.Validators(), indices, seedWithSlotHash) index, err := computeProposerIndexWithValidators(state.Validators(), indices, seedWithSlotHash)

View File

@@ -44,6 +44,7 @@ go_library(
"@com_github_pkg_errors//:go_default_library", "@com_github_pkg_errors//:go_default_library",
"@com_github_prometheus_client_golang//prometheus:go_default_library", "@com_github_prometheus_client_golang//prometheus:go_default_library",
"@com_github_prometheus_client_golang//prometheus/promauto:go_default_library", "@com_github_prometheus_client_golang//prometheus/promauto:go_default_library",
"@com_github_prysmaticlabs_eth2_types//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library", "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library", "@com_github_sirupsen_logrus//:go_default_library",
"@io_opencensus_go//trace:go_default_library", "@io_opencensus_go//trace:go_default_library",

View File

@@ -28,5 +28,5 @@ func cacheKey(ctx context.Context, state *beaconstate.BeaconState) ([32]byte, er
if err != nil { if err != nil {
return [32]byte{}, err return [32]byte{}, err
} }
return hashutil.Hash(append(bytesutil.Bytes32(state.Slot()), r[:]...)), nil return hashutil.Hash(append(bytesutil.Bytes32(uint64(state.Slot())), r[:]...)), nil
} }

View File

@@ -129,7 +129,7 @@ func TestSkipSlotCache_ConcurrentMixup(t *testing.T) {
step := func(i int, setup *beaconstate.BeaconState) { step := func(i int, setup *beaconstate.BeaconState) {
// go at least 1 past problemSlot, to ensure problem slot state root is available // go at least 1 past problemSlot, to ensure problem slot state root is available
outState, err := state.ProcessSlots(context.Background(), setup, problemSlot+1+uint64(i)) // keep increasing, to hit and extend the cache outState, err := state.ProcessSlots(context.Background(), setup, problemSlot.Add(1+uint64(i))) // keep increasing, to hit and extend the cache
require.NoError(t, err, "Could not process state transition") require.NoError(t, err, "Could not process state transition")
roots := outState.StateRoots() roots := outState.StateRoots()
gotRoot := roots[problemSlot] gotRoot := roots[problemSlot]

View File

@@ -43,7 +43,7 @@ func runSlotProcessingTests(t *testing.T, config string) {
require.NoError(t, err) require.NoError(t, err)
postBeaconState := &pb.BeaconState{} postBeaconState := &pb.BeaconState{}
require.NoError(t, postBeaconState.UnmarshalSSZ(postBeaconStateFile), "Failed to unmarshal") require.NoError(t, postBeaconState.UnmarshalSSZ(postBeaconStateFile), "Failed to unmarshal")
postState, err := state.ProcessSlots(context.Background(), beaconState, beaconState.Slot()+uint64(slotsCount)) postState, err := state.ProcessSlots(context.Background(), beaconState, beaconState.Slot().Add(uint64(slotsCount)))
require.NoError(t, err) require.NoError(t, err)
if !proto.Equal(postState.CloneInnerState(), postBeaconState) { if !proto.Equal(postState.CloneInnerState(), postBeaconState) {

View File

@@ -39,7 +39,7 @@ func TestGenesisBeaconState_OK(t *testing.T) {
require.NoError(t, err, "Could not execute GenesisBeaconState") require.NoError(t, err, "Could not execute GenesisBeaconState")
// Misc fields checks. // Misc fields checks.
assert.Equal(t, uint64(0), newState.Slot(), "Slot was not correctly initialized") assert.Equal(t, types.Slot(0), newState.Slot(), "Slot was not correctly initialized")
if !proto.Equal(newState.Fork(), &pb.Fork{ if !proto.Equal(newState.Fork(), &pb.Fork{
PreviousVersion: genesisForkVersion, PreviousVersion: genesisForkVersion,
CurrentVersion: genesisForkVersion, CurrentVersion: genesisForkVersion,
@@ -105,7 +105,7 @@ func TestGenesisState_HashEquality(t *testing.T) {
func TestGenesisState_InitializesLatestBlockHashes(t *testing.T) { func TestGenesisState_InitializesLatestBlockHashes(t *testing.T) {
s, err := state.GenesisBeaconState(nil, 0, &ethpb.Eth1Data{}) s, err := state.GenesisBeaconState(nil, 0, &ethpb.Eth1Data{})
require.NoError(t, err) require.NoError(t, err)
got, want := uint64(len(s.BlockRoots())), params.BeaconConfig().SlotsPerHistoricalRoot got, want := uint64(len(s.BlockRoots())), uint64(params.BeaconConfig().SlotsPerHistoricalRoot)
assert.Equal(t, want, got, "Wrong number of recent block hashes") assert.Equal(t, want, got, "Wrong number of recent block hashes")
got = uint64(cap(s.BlockRoots())) got = uint64(cap(s.BlockRoots()))

View File

@@ -4,6 +4,7 @@ import (
"context" "context"
"testing" "testing"
types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/beacon-chain/core/state" "github.com/prysmaticlabs/prysm/beacon-chain/core/state"
st "github.com/prysmaticlabs/prysm/beacon-chain/state" st "github.com/prysmaticlabs/prysm/beacon-chain/state"
"github.com/prysmaticlabs/prysm/shared/testutil" "github.com/prysmaticlabs/prysm/shared/testutil"
@@ -21,10 +22,10 @@ func TestTrailingSlotState_RoundTrip(t *testing.T) {
require.NoError(t, state.UpdateNextSlotCache(ctx, r, s)) require.NoError(t, state.UpdateNextSlotCache(ctx, r, s))
s, err = state.NextSlotState(ctx, r) s, err = state.NextSlotState(ctx, r)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, uint64(1), s.Slot()) require.Equal(t, types.Slot(1), s.Slot())
require.NoError(t, state.UpdateNextSlotCache(ctx, r, s)) require.NoError(t, state.UpdateNextSlotCache(ctx, r, s))
s, err = state.NextSlotState(ctx, r) s, err = state.NextSlotState(ctx, r)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, uint64(2), s.Slot()) require.Equal(t, types.Slot(2), s.Slot())
} }

View File

@@ -9,6 +9,7 @@ import (
"fmt" "fmt"
"github.com/pkg/errors" "github.com/pkg/errors"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/cache" "github.com/prysmaticlabs/prysm/beacon-chain/cache"
b "github.com/prysmaticlabs/prysm/beacon-chain/core/blocks" b "github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
@@ -238,7 +239,7 @@ func ProcessSlot(ctx context.Context, state *stateTrie.BeaconState) (*stateTrie.
return nil, err return nil, err
} }
if err := state.UpdateStateRootAtIndex( if err := state.UpdateStateRootAtIndex(
state.Slot()%params.BeaconConfig().SlotsPerHistoricalRoot, uint64(state.Slot()%params.BeaconConfig().SlotsPerHistoricalRoot),
prevStateRoot, prevStateRoot,
); err != nil { ); err != nil {
return nil, err return nil, err
@@ -260,7 +261,7 @@ func ProcessSlot(ctx context.Context, state *stateTrie.BeaconState) (*stateTrie.
} }
// Cache the block root. // Cache the block root.
if err := state.UpdateBlockRootAtIndex( if err := state.UpdateBlockRootAtIndex(
state.Slot()%params.BeaconConfig().SlotsPerHistoricalRoot, uint64(state.Slot()%params.BeaconConfig().SlotsPerHistoricalRoot),
prevBlockRoot, prevBlockRoot,
); err != nil { ); err != nil {
return nil, err return nil, err
@@ -273,7 +274,7 @@ func ProcessSlotsUsingNextSlotCache(
ctx context.Context, ctx context.Context,
parentState *stateTrie.BeaconState, parentState *stateTrie.BeaconState,
parentRoot []byte, parentRoot []byte,
slot uint64) (*stateTrie.BeaconState, error) { slot types.Slot) (*stateTrie.BeaconState, error) {
ctx, span := trace.StartSpan(ctx, "core.state.ProcessSlotsUsingNextSlotCache") ctx, span := trace.StartSpan(ctx, "core.state.ProcessSlotsUsingNextSlotCache")
defer span.End() defer span.End()
@@ -311,7 +312,7 @@ func ProcessSlotsUsingNextSlotCache(
// process_epoch(state) // process_epoch(state)
// state.slot += 1 // state.slot += 1
// ] // ]
func ProcessSlots(ctx context.Context, state *stateTrie.BeaconState, slot uint64) (*stateTrie.BeaconState, error) { func ProcessSlots(ctx context.Context, state *stateTrie.BeaconState, slot types.Slot) (*stateTrie.BeaconState, error) {
ctx, span := trace.StartSpan(ctx, "core.state.ProcessSlots") ctx, span := trace.StartSpan(ctx, "core.state.ProcessSlots")
defer span.End() defer span.End()
if state == nil { if state == nil {

View File

@@ -5,6 +5,7 @@ import (
"testing" "testing"
fuzz "github.com/google/gofuzz" fuzz "github.com/google/gofuzz"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
) )
@@ -66,7 +67,7 @@ func TestFuzzProcessSlots_1000(t *testing.T) {
defer SkipSlotCache.Enable() defer SkipSlotCache.Enable()
ctx := context.Background() ctx := context.Background()
state := &stateTrie.BeaconState{} state := &stateTrie.BeaconState{}
slot := uint64(0) slot := types.Slot(0)
fuzzer := fuzz.NewWithSeed(0) fuzzer := fuzz.NewWithSeed(0)
fuzzer.NilChance(0.1) fuzzer.NilChance(0.1)
for i := 0; i < 1000; i++ { for i := 0; i < 1000; i++ {

View File

@@ -6,7 +6,7 @@ import (
"fmt" "fmt"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/go-bitfield" "github.com/prysmaticlabs/go-bitfield"
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks" "github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
@@ -252,7 +252,7 @@ func TestProcessBlock_IncorrectProcessExits(t *testing.T) {
}, },
} }
var blockRoots [][]byte var blockRoots [][]byte
for i := uint64(0); i < params.BeaconConfig().SlotsPerHistoricalRoot; i++ { for i := uint64(0); i < uint64(params.BeaconConfig().SlotsPerHistoricalRoot); i++ {
blockRoots = append(blockRoots, []byte{byte(i)}) blockRoots = append(blockRoots, []byte{byte(i)})
} }
require.NoError(t, beaconState.SetBlockRoots(blockRoots)) require.NoError(t, beaconState.SetBlockRoots(blockRoots))
@@ -322,7 +322,7 @@ func createFullBlockWithOperations(t *testing.T) (*beaconstate.BeaconState,
proposerSlashIdx := uint64(3) proposerSlashIdx := uint64(3)
slotsPerEpoch := params.BeaconConfig().SlotsPerEpoch slotsPerEpoch := params.BeaconConfig().SlotsPerEpoch
err = beaconState.SetSlot(uint64(params.BeaconConfig().ShardCommitteePeriod.Mul(slotsPerEpoch)) + params.BeaconConfig().MinAttestationInclusionDelay) err = beaconState.SetSlot(slotsPerEpoch.Mul(uint64(params.BeaconConfig().ShardCommitteePeriod)) + params.BeaconConfig().MinAttestationInclusionDelay)
require.NoError(t, err) require.NoError(t, err)
currentEpoch := helpers.CurrentEpoch(beaconState) currentEpoch := helpers.CurrentEpoch(beaconState)
@@ -396,7 +396,7 @@ func createFullBlockWithOperations(t *testing.T) (*beaconstate.BeaconState,
} }
var blockRoots [][]byte var blockRoots [][]byte
for i := uint64(0); i < params.BeaconConfig().SlotsPerHistoricalRoot; i++ { for i := uint64(0); i < uint64(params.BeaconConfig().SlotsPerHistoricalRoot); i++ {
blockRoots = append(blockRoots, []byte{byte(i)}) blockRoots = append(blockRoots, []byte{byte(i)})
} }
require.NoError(t, beaconState.SetBlockRoots(blockRoots)) require.NoError(t, beaconState.SetBlockRoots(blockRoots))
@@ -507,7 +507,7 @@ func TestProcessEpochPrecompute_CanProcess(t *testing.T) {
atts := []*pb.PendingAttestation{{Data: &ethpb.AttestationData{Target: &ethpb.Checkpoint{Root: make([]byte, 32)}}, InclusionDelay: 1}} atts := []*pb.PendingAttestation{{Data: &ethpb.AttestationData{Target: &ethpb.Checkpoint{Root: make([]byte, 32)}}, InclusionDelay: 1}}
slashing := make([]uint64, params.BeaconConfig().EpochsPerSlashingsVector) slashing := make([]uint64, params.BeaconConfig().EpochsPerSlashingsVector)
base := &pb.BeaconState{ base := &pb.BeaconState{
Slot: uint64(epoch.Mul(params.BeaconConfig().SlotsPerEpoch)) + 1, Slot: params.BeaconConfig().SlotsPerEpoch.Mul(uint64(epoch)) + 1,
BlockRoots: make([][]byte, 128), BlockRoots: make([][]byte, 128),
Slashings: slashing, Slashings: slashing,
RandaoMixes: make([][]byte, params.BeaconConfig().EpochsPerHistoricalVector), RandaoMixes: make([][]byte, params.BeaconConfig().EpochsPerHistoricalVector),
@@ -696,7 +696,7 @@ func TestProcessBlk_AttsBasedOnValidatorCount(t *testing.T) {
s, privKeys := testutil.DeterministicGenesisState(t, validatorCount) s, privKeys := testutil.DeterministicGenesisState(t, validatorCount)
require.NoError(t, s.SetSlot(params.BeaconConfig().SlotsPerEpoch)) require.NoError(t, s.SetSlot(params.BeaconConfig().SlotsPerEpoch))
bitCount := validatorCount / params.BeaconConfig().SlotsPerEpoch bitCount := validatorCount / uint64(params.BeaconConfig().SlotsPerEpoch)
aggBits := bitfield.NewBitlist(bitCount) aggBits := bitfield.NewBitlist(bitCount)
for i := uint64(1); i < bitCount; i++ { for i := uint64(1); i < bitCount; i++ {
aggBits.SetBitAt(i, true) aggBits.SetBitAt(i, true)
@@ -765,7 +765,7 @@ func TestProcessBlk_AttsBasedOnValidatorCount(t *testing.T) {
func TestCanProcessEpoch_TrueOnEpochs(t *testing.T) { func TestCanProcessEpoch_TrueOnEpochs(t *testing.T) {
tests := []struct { tests := []struct {
slot uint64 slot types.Slot
canProcessEpoch bool canProcessEpoch bool
}{ }{
{ {
@@ -875,7 +875,7 @@ func TestProcessBlock_IncorrectDeposits(t *testing.T) {
} }
func TestProcessSlots_SameSlotAsParentState(t *testing.T) { func TestProcessSlots_SameSlotAsParentState(t *testing.T) {
slot := uint64(2) slot := types.Slot(2)
parentState, err := beaconstate.InitializeFromProto(&pb.BeaconState{Slot: slot}) parentState, err := beaconstate.InitializeFromProto(&pb.BeaconState{Slot: slot})
require.NoError(t, err) require.NoError(t, err)
@@ -884,7 +884,7 @@ func TestProcessSlots_SameSlotAsParentState(t *testing.T) {
} }
func TestProcessSlots_LowerSlotAsParentState(t *testing.T) { func TestProcessSlots_LowerSlotAsParentState(t *testing.T) {
slot := uint64(2) slot := types.Slot(2)
parentState, err := beaconstate.InitializeFromProto(&pb.BeaconState{Slot: slot}) parentState, err := beaconstate.InitializeFromProto(&pb.BeaconState{Slot: slot})
require.NoError(t, err) require.NoError(t, err)
@@ -898,5 +898,5 @@ func TestProcessSlotsUsingNextSlotCache(t *testing.T) {
r := []byte{'a'} r := []byte{'a'}
s, err := state.ProcessSlotsUsingNextSlotCache(ctx, s, r, 5) s, err := state.ProcessSlotsUsingNextSlotCache(ctx, s, r, 5)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, uint64(5), s.Slot()) require.Equal(t, types.Slot(5), s.Slot())
} }

View File

@@ -6,7 +6,7 @@ package validators
import ( import (
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"

View File

@@ -3,7 +3,7 @@ package validators
import ( import (
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state" beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state"
@@ -134,7 +134,7 @@ func TestSlashValidator_OK(t *testing.T) {
assert.Equal(t, helpers.CurrentEpoch(state)+params.BeaconConfig().EpochsPerSlashingsVector, v.WithdrawableEpoch, "Withdrawable epoch not the expected value") assert.Equal(t, helpers.CurrentEpoch(state)+params.BeaconConfig().EpochsPerSlashingsVector, v.WithdrawableEpoch, "Withdrawable epoch not the expected value")
maxBalance := params.BeaconConfig().MaxEffectiveBalance maxBalance := params.BeaconConfig().MaxEffectiveBalance
slashedBalance := state.Slashings()[state.Slot()%uint64(params.BeaconConfig().EpochsPerSlashingsVector)] slashedBalance := state.Slashings()[state.Slot().Mod(uint64(params.BeaconConfig().EpochsPerSlashingsVector))]
assert.Equal(t, maxBalance, slashedBalance, "Slashed balance isnt the expected amount") assert.Equal(t, maxBalance, slashedBalance, "Slashed balance isnt the expected amount")
whistleblowerReward := slashedBalance / params.BeaconConfig().WhistleBlowerRewardQuotient whistleblowerReward := slashedBalance / params.BeaconConfig().WhistleBlowerRewardQuotient

View File

@@ -16,5 +16,8 @@ go_test(
name = "go_default_test", name = "go_default_test",
srcs = ["filter_test.go"], srcs = ["filter_test.go"],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = ["//shared/testutil/assert:go_default_library"], deps = [
"//shared/testutil/assert:go_default_library",
"@com_github_prysmaticlabs_eth2_types//:go_default_library",
],
) )

View File

@@ -14,7 +14,7 @@
// } // }
package filters package filters
import "github.com/prysmaticlabs/eth2-types" import types "github.com/prysmaticlabs/eth2-types"
// FilterType defines an enum which is used as the keys in a map that tracks // FilterType defines an enum which is used as the keys in a map that tracks
// set attribute filters for data as part of the `FilterQuery` struct type. // set attribute filters for data as part of the `FilterQuery` struct type.
@@ -103,13 +103,13 @@ func (q *QueryFilter) SetTargetEpoch(val types.Epoch) *QueryFilter {
} }
// SetStartSlot enables filtering by all the items that begin at a slot (inclusive). // SetStartSlot enables filtering by all the items that begin at a slot (inclusive).
func (q *QueryFilter) SetStartSlot(val uint64) *QueryFilter { func (q *QueryFilter) SetStartSlot(val types.Slot) *QueryFilter {
q.queries[StartSlot] = val q.queries[StartSlot] = val
return q return q
} }
// SetEndSlot enables filtering by all the items that end at a slot (inclusive). // SetEndSlot enables filtering by all the items that end at a slot (inclusive).
func (q *QueryFilter) SetEndSlot(val uint64) *QueryFilter { func (q *QueryFilter) SetEndSlot(val types.Slot) *QueryFilter {
q.queries[EndSlot] = val q.queries[EndSlot] = val
return q return q
} }

View File

@@ -3,6 +3,7 @@ package filters
import ( import (
"testing" "testing"
types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/shared/testutil/assert" "github.com/prysmaticlabs/prysm/shared/testutil/assert"
) )
@@ -17,9 +18,9 @@ func TestQueryFilter_ChainsCorrectly(t *testing.T) {
for k, v := range filterSet { for k, v := range filterSet {
switch k { switch k {
case StartSlot: case StartSlot:
t.Log(v.(uint64)) t.Log(v.(types.Slot))
case EndSlot: case EndSlot:
t.Log(v.(uint64)) t.Log(v.(types.Slot))
case ParentRoot: case ParentRoot:
t.Log(v.([]byte)) t.Log(v.([]byte))
default: default:

View File

@@ -13,6 +13,7 @@ go_library(
"//proto/beacon/p2p/v1:go_default_library", "//proto/beacon/p2p/v1:go_default_library",
"//shared/backuputil:go_default_library", "//shared/backuputil:go_default_library",
"@com_github_ethereum_go_ethereum//common:go_default_library", "@com_github_ethereum_go_ethereum//common:go_default_library",
"@com_github_prysmaticlabs_eth2_types//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library", "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
], ],
) )

View File

@@ -8,6 +8,7 @@ import (
"io" "io"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
types "github.com/prysmaticlabs/eth2-types"
eth "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" eth "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/db/filters" "github.com/prysmaticlabs/prysm/beacon-chain/db/filters"
"github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/beacon-chain/state"
@@ -22,20 +23,20 @@ type ReadOnlyDatabase interface {
Block(ctx context.Context, blockRoot [32]byte) (*eth.SignedBeaconBlock, error) Block(ctx context.Context, blockRoot [32]byte) (*eth.SignedBeaconBlock, error)
Blocks(ctx context.Context, f *filters.QueryFilter) ([]*eth.SignedBeaconBlock, [][32]byte, error) Blocks(ctx context.Context, f *filters.QueryFilter) ([]*eth.SignedBeaconBlock, [][32]byte, error)
BlockRoots(ctx context.Context, f *filters.QueryFilter) ([][32]byte, error) BlockRoots(ctx context.Context, f *filters.QueryFilter) ([][32]byte, error)
BlocksBySlot(ctx context.Context, slot uint64) (bool, []*eth.SignedBeaconBlock, error) BlocksBySlot(ctx context.Context, slot types.Slot) (bool, []*eth.SignedBeaconBlock, error)
BlockRootsBySlot(ctx context.Context, slot uint64) (bool, [][32]byte, error) BlockRootsBySlot(ctx context.Context, slot types.Slot) (bool, [][32]byte, error)
HasBlock(ctx context.Context, blockRoot [32]byte) bool HasBlock(ctx context.Context, blockRoot [32]byte) bool
GenesisBlock(ctx context.Context) (*eth.SignedBeaconBlock, error) GenesisBlock(ctx context.Context) (*eth.SignedBeaconBlock, error)
IsFinalizedBlock(ctx context.Context, blockRoot [32]byte) bool IsFinalizedBlock(ctx context.Context, blockRoot [32]byte) bool
FinalizedChildBlock(ctx context.Context, blockRoot [32]byte) (*eth.SignedBeaconBlock, error) FinalizedChildBlock(ctx context.Context, blockRoot [32]byte) (*eth.SignedBeaconBlock, error)
HighestSlotBlocksBelow(ctx context.Context, slot uint64) ([]*eth.SignedBeaconBlock, error) HighestSlotBlocksBelow(ctx context.Context, slot types.Slot) ([]*eth.SignedBeaconBlock, error)
// State related methods. // State related methods.
State(ctx context.Context, blockRoot [32]byte) (*state.BeaconState, error) State(ctx context.Context, blockRoot [32]byte) (*state.BeaconState, error)
GenesisState(ctx context.Context) (*state.BeaconState, error) GenesisState(ctx context.Context) (*state.BeaconState, error)
HasState(ctx context.Context, blockRoot [32]byte) bool HasState(ctx context.Context, blockRoot [32]byte) bool
StateSummary(ctx context.Context, blockRoot [32]byte) (*ethereum_beacon_p2p_v1.StateSummary, error) StateSummary(ctx context.Context, blockRoot [32]byte) (*ethereum_beacon_p2p_v1.StateSummary, error)
HasStateSummary(ctx context.Context, blockRoot [32]byte) bool HasStateSummary(ctx context.Context, blockRoot [32]byte) bool
HighestSlotStatesBelow(ctx context.Context, slot uint64) ([]*state.BeaconState, error) HighestSlotStatesBelow(ctx context.Context, slot types.Slot) ([]*state.BeaconState, error)
// Slashing operations. // Slashing operations.
ProposerSlashing(ctx context.Context, slashingRoot [32]byte) (*eth.ProposerSlashing, error) ProposerSlashing(ctx context.Context, slashingRoot [32]byte) (*eth.ProposerSlashing, error)
AttesterSlashing(ctx context.Context, slashingRoot [32]byte) (*eth.AttesterSlashing, error) AttesterSlashing(ctx context.Context, slashingRoot [32]byte) (*eth.AttesterSlashing, error)
@@ -47,10 +48,10 @@ type ReadOnlyDatabase interface {
// Checkpoint operations. // Checkpoint operations.
JustifiedCheckpoint(ctx context.Context) (*eth.Checkpoint, error) JustifiedCheckpoint(ctx context.Context) (*eth.Checkpoint, error)
FinalizedCheckpoint(ctx context.Context) (*eth.Checkpoint, error) FinalizedCheckpoint(ctx context.Context) (*eth.Checkpoint, error)
ArchivedPointRoot(ctx context.Context, slot uint64) [32]byte ArchivedPointRoot(ctx context.Context, slot types.Slot) [32]byte
HasArchivedPoint(ctx context.Context, slot uint64) bool HasArchivedPoint(ctx context.Context, slot types.Slot) bool
LastArchivedRoot(ctx context.Context) [32]byte LastArchivedRoot(ctx context.Context) [32]byte
LastArchivedSlot(ctx context.Context) (uint64, error) LastArchivedSlot(ctx context.Context) (types.Slot, error)
// Deposit contract related handlers. // Deposit contract related handlers.
DepositContractAddress(ctx context.Context) ([]byte, error) DepositContractAddress(ctx context.Context) ([]byte, error)
// Powchain operations. // Powchain operations.
@@ -88,7 +89,7 @@ type NoHeadAccessDatabase interface {
// Run any required database migrations. // Run any required database migrations.
RunMigrations(ctx context.Context) error RunMigrations(ctx context.Context) error
CleanUpDirtyStates(ctx context.Context, slotsPerArchivedPoint uint64) error CleanUpDirtyStates(ctx context.Context, slotsPerArchivedPoint types.Slot) error
} }
// HeadAccessDatabase defines a struct with access to reading chain head data. // HeadAccessDatabase defines a struct with access to reading chain head data.

View File

@@ -22,6 +22,7 @@ go_library(
"@com_github_ferranbt_fastssz//:go_default_library", "@com_github_ferranbt_fastssz//:go_default_library",
"@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//jsonpb:go_default_library_gen",
"@com_github_golang_protobuf//proto:go_default_library", "@com_github_golang_protobuf//proto:go_default_library",
"@com_github_prysmaticlabs_eth2_types//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library", "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library", "@com_github_sirupsen_logrus//:go_default_library",
"@in_gopkg_confluentinc_confluent_kafka_go_v1//kafka:go_default_library", "@in_gopkg_confluentinc_confluent_kafka_go_v1//kafka:go_default_library",

View File

@@ -4,6 +4,7 @@ import (
"context" "context"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
types "github.com/prysmaticlabs/eth2-types"
eth "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" eth "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/db/filters" "github.com/prysmaticlabs/prysm/beacon-chain/db/filters"
"github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/beacon-chain/state"
@@ -47,12 +48,12 @@ func (e Exporter) BlockRoots(ctx context.Context, f *filters.QueryFilter) ([][32
} }
// BlocksBySlot -- passthrough. // BlocksBySlot -- passthrough.
func (e Exporter) BlocksBySlot(ctx context.Context, slot uint64) (bool, []*eth.SignedBeaconBlock, error) { func (e Exporter) BlocksBySlot(ctx context.Context, slot types.Slot) (bool, []*eth.SignedBeaconBlock, error) {
return e.db.BlocksBySlot(ctx, slot) return e.db.BlocksBySlot(ctx, slot)
} }
// BlockRootsBySlot -- passthrough. // BlockRootsBySlot -- passthrough.
func (e Exporter) BlockRootsBySlot(ctx context.Context, slot uint64) (bool, [][32]byte, error) { func (e Exporter) BlockRootsBySlot(ctx context.Context, slot types.Slot) (bool, [][32]byte, error) {
return e.db.BlockRootsBySlot(ctx, slot) return e.db.BlockRootsBySlot(ctx, slot)
} }
@@ -227,12 +228,12 @@ func (e Exporter) SavePowchainData(ctx context.Context, data *db.ETH1ChainData)
} }
// ArchivedPointRoot -- passthrough // ArchivedPointRoot -- passthrough
func (e Exporter) ArchivedPointRoot(ctx context.Context, index uint64) [32]byte { func (e Exporter) ArchivedPointRoot(ctx context.Context, index types.Slot) [32]byte {
return e.db.ArchivedPointRoot(ctx, index) return e.db.ArchivedPointRoot(ctx, index)
} }
// HasArchivedPoint -- passthrough // HasArchivedPoint -- passthrough
func (e Exporter) HasArchivedPoint(ctx context.Context, index uint64) bool { func (e Exporter) HasArchivedPoint(ctx context.Context, index types.Slot) bool {
return e.db.HasArchivedPoint(ctx, index) return e.db.HasArchivedPoint(ctx, index)
} }
@@ -242,17 +243,17 @@ func (e Exporter) LastArchivedRoot(ctx context.Context) [32]byte {
} }
// HighestSlotBlocksBelow -- passthrough // HighestSlotBlocksBelow -- passthrough
func (e Exporter) HighestSlotBlocksBelow(ctx context.Context, slot uint64) ([]*eth.SignedBeaconBlock, error) { func (e Exporter) HighestSlotBlocksBelow(ctx context.Context, slot types.Slot) ([]*eth.SignedBeaconBlock, error) {
return e.db.HighestSlotBlocksBelow(ctx, slot) return e.db.HighestSlotBlocksBelow(ctx, slot)
} }
// HighestSlotStatesBelow -- passthrough // HighestSlotStatesBelow -- passthrough
func (e Exporter) HighestSlotStatesBelow(ctx context.Context, slot uint64) ([]*state.BeaconState, error) { func (e Exporter) HighestSlotStatesBelow(ctx context.Context, slot types.Slot) ([]*state.BeaconState, error) {
return e.db.HighestSlotStatesBelow(ctx, slot) return e.db.HighestSlotStatesBelow(ctx, slot)
} }
// LastArchivedSlot -- passthrough // LastArchivedSlot -- passthrough
func (e Exporter) LastArchivedSlot(ctx context.Context) (uint64, error) { func (e Exporter) LastArchivedSlot(ctx context.Context) (types.Slot, error) {
return e.db.LastArchivedSlot(ctx) return e.db.LastArchivedSlot(ctx)
} }
@@ -262,6 +263,6 @@ func (e Exporter) RunMigrations(ctx context.Context) error {
} }
// CleanUpDirtyStates -- passthrough // CleanUpDirtyStates -- passthrough
func (e Exporter) CleanUpDirtyStates(ctx context.Context, slotsPerArchivedPoint uint64) error { func (e Exporter) CleanUpDirtyStates(ctx context.Context, slotsPerArchivedPoint types.Slot) error {
return e.db.RunMigrations(ctx) return e.db.RunMigrations(ctx)
} }

View File

@@ -3,20 +3,21 @@ package kv
import ( import (
"context" "context"
types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/shared/bytesutil" "github.com/prysmaticlabs/prysm/shared/bytesutil"
bolt "go.etcd.io/bbolt" bolt "go.etcd.io/bbolt"
"go.opencensus.io/trace" "go.opencensus.io/trace"
) )
// LastArchivedSlot from the db. // LastArchivedSlot from the db.
func (s *Store) LastArchivedSlot(ctx context.Context) (uint64, error) { func (s *Store) LastArchivedSlot(ctx context.Context) (types.Slot, error) {
ctx, span := trace.StartSpan(ctx, "BeaconDB.LastArchivedSlot") ctx, span := trace.StartSpan(ctx, "BeaconDB.LastArchivedSlot")
defer span.End() defer span.End()
var index uint64 var index types.Slot
err := s.db.View(func(tx *bolt.Tx) error { err := s.db.View(func(tx *bolt.Tx) error {
bkt := tx.Bucket(stateSlotIndicesBucket) bkt := tx.Bucket(stateSlotIndicesBucket)
b, _ := bkt.Cursor().Last() b, _ := bkt.Cursor().Last()
index = bytesutil.BytesToUint64BigEndian(b) index = bytesutil.BytesToSlotBigEndian(b)
return nil return nil
}) })
@@ -42,14 +43,14 @@ func (s *Store) LastArchivedRoot(ctx context.Context) [32]byte {
// ArchivedPointRoot returns the block root of an archived point from the DB. // ArchivedPointRoot returns the block root of an archived point from the DB.
// This is essential for cold state management and to restore a cold state. // This is essential for cold state management and to restore a cold state.
func (s *Store) ArchivedPointRoot(ctx context.Context, slot uint64) [32]byte { func (s *Store) ArchivedPointRoot(ctx context.Context, slot types.Slot) [32]byte {
ctx, span := trace.StartSpan(ctx, "BeaconDB.ArchivedPointRoot") ctx, span := trace.StartSpan(ctx, "BeaconDB.ArchivedPointRoot")
defer span.End() defer span.End()
var blockRoot []byte var blockRoot []byte
if err := s.db.View(func(tx *bolt.Tx) error { if err := s.db.View(func(tx *bolt.Tx) error {
bucket := tx.Bucket(stateSlotIndicesBucket) bucket := tx.Bucket(stateSlotIndicesBucket)
blockRoot = bucket.Get(bytesutil.Uint64ToBytesBigEndian(slot)) blockRoot = bucket.Get(bytesutil.SlotToBytesBigEndian(slot))
return nil return nil
}); err != nil { // This view never returns an error, but we'll handle anyway for sanity. }); err != nil { // This view never returns an error, but we'll handle anyway for sanity.
panic(err) panic(err)
@@ -59,13 +60,13 @@ func (s *Store) ArchivedPointRoot(ctx context.Context, slot uint64) [32]byte {
} }
// HasArchivedPoint returns true if an archived point exists in DB. // HasArchivedPoint returns true if an archived point exists in DB.
func (s *Store) HasArchivedPoint(ctx context.Context, slot uint64) bool { func (s *Store) HasArchivedPoint(ctx context.Context, slot types.Slot) bool {
ctx, span := trace.StartSpan(ctx, "BeaconDB.HasArchivedPoint") ctx, span := trace.StartSpan(ctx, "BeaconDB.HasArchivedPoint")
defer span.End() defer span.End()
var exists bool var exists bool
if err := s.db.View(func(tx *bolt.Tx) error { if err := s.db.View(func(tx *bolt.Tx) error {
iBucket := tx.Bucket(stateSlotIndicesBucket) iBucket := tx.Bucket(stateSlotIndicesBucket)
exists = iBucket.Get(bytesutil.Uint64ToBytesBigEndian(slot)) != nil exists = iBucket.Get(bytesutil.SlotToBytesBigEndian(slot)) != nil
return nil return nil
}); err != nil { // This view never returns an error, but we'll handle anyway for sanity. }); err != nil { // This view never returns an error, but we'll handle anyway for sanity.
panic(err) panic(err)

View File

@@ -4,6 +4,7 @@ import (
"context" "context"
"testing" "testing"
types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/shared/testutil" "github.com/prysmaticlabs/prysm/shared/testutil"
"github.com/prysmaticlabs/prysm/shared/testutil/assert" "github.com/prysmaticlabs/prysm/shared/testutil/assert"
"github.com/prysmaticlabs/prysm/shared/testutil/require" "github.com/prysmaticlabs/prysm/shared/testutil/require"
@@ -12,7 +13,7 @@ import (
func TestArchivedPointIndexRoot_CanSaveRetrieve(t *testing.T) { func TestArchivedPointIndexRoot_CanSaveRetrieve(t *testing.T) {
db := setupDB(t) db := setupDB(t)
ctx := context.Background() ctx := context.Background()
i1 := uint64(100) i1 := types.Slot(100)
r1 := [32]byte{'A'} r1 := [32]byte{'A'}
received := db.ArchivedPointRoot(ctx, i1) received := db.ArchivedPointRoot(ctx, i1)
@@ -30,7 +31,7 @@ func TestLastArchivedPoint_CanRetrieve(t *testing.T) {
ctx := context.Background() ctx := context.Background()
i, err := db.LastArchivedSlot(ctx) i, err := db.LastArchivedSlot(ctx)
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, uint64(0), i, "Did not get correct index") assert.Equal(t, types.Slot(0), i, "Did not get correct index")
st, err := testutil.NewBeaconState() st, err := testutil.NewBeaconState()
require.NoError(t, err) require.NoError(t, err)
@@ -46,5 +47,5 @@ func TestLastArchivedPoint_CanRetrieve(t *testing.T) {
i, err = db.LastArchivedSlot(ctx) i, err = db.LastArchivedSlot(ctx)
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, uint64(3), i, "Did not get correct index") assert.Equal(t, types.Slot(3), i, "Did not get correct index")
} }

View File

@@ -6,7 +6,7 @@ import (
"fmt" "fmt"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
"github.com/prysmaticlabs/prysm/beacon-chain/db/filters" "github.com/prysmaticlabs/prysm/beacon-chain/db/filters"
@@ -136,7 +136,7 @@ func (s *Store) HasBlock(ctx context.Context, blockRoot [32]byte) bool {
} }
// BlocksBySlot retrieves a list of beacon blocks and its respective roots by slot. // BlocksBySlot retrieves a list of beacon blocks and its respective roots by slot.
func (s *Store) BlocksBySlot(ctx context.Context, slot uint64) (bool, []*ethpb.SignedBeaconBlock, error) { func (s *Store) BlocksBySlot(ctx context.Context, slot types.Slot) (bool, []*ethpb.SignedBeaconBlock, error) {
ctx, span := trace.StartSpan(ctx, "BeaconDB.BlocksBySlot") ctx, span := trace.StartSpan(ctx, "BeaconDB.BlocksBySlot")
defer span.End() defer span.End()
blocks := make([]*ethpb.SignedBeaconBlock, 0) blocks := make([]*ethpb.SignedBeaconBlock, 0)
@@ -163,7 +163,7 @@ func (s *Store) BlocksBySlot(ctx context.Context, slot uint64) (bool, []*ethpb.S
} }
// BlockRootsBySlot retrieves a list of beacon block roots by slot // BlockRootsBySlot retrieves a list of beacon block roots by slot
func (s *Store) BlockRootsBySlot(ctx context.Context, slot uint64) (bool, [][32]byte, error) { func (s *Store) BlockRootsBySlot(ctx context.Context, slot types.Slot) (bool, [][32]byte, error) {
ctx, span := trace.StartSpan(ctx, "BeaconDB.BlockRootsBySlot") ctx, span := trace.StartSpan(ctx, "BeaconDB.BlockRootsBySlot")
defer span.End() defer span.End()
blockRoots := make([][32]byte, 0) blockRoots := make([][32]byte, 0)
@@ -330,7 +330,7 @@ func (s *Store) SaveGenesisBlockRoot(ctx context.Context, blockRoot [32]byte) er
} }
// HighestSlotBlocksBelow returns the block with the highest slot below the input slot from the db. // HighestSlotBlocksBelow returns the block with the highest slot below the input slot from the db.
func (s *Store) HighestSlotBlocksBelow(ctx context.Context, slot uint64) ([]*ethpb.SignedBeaconBlock, error) { func (s *Store) HighestSlotBlocksBelow(ctx context.Context, slot types.Slot) ([]*ethpb.SignedBeaconBlock, error) {
ctx, span := trace.StartSpan(ctx, "BeaconDB.HighestSlotBlocksBelow") ctx, span := trace.StartSpan(ctx, "BeaconDB.HighestSlotBlocksBelow")
defer span.End() defer span.End()
@@ -343,7 +343,7 @@ func (s *Store) HighestSlotBlocksBelow(ctx context.Context, slot uint64) ([]*eth
if ctx.Err() != nil { if ctx.Err() != nil {
return ctx.Err() return ctx.Err()
} }
key := bytesutil.BytesToUint64BigEndian(s) key := bytesutil.BytesToSlotBigEndian(s)
if root == nil { if root == nil {
continue continue
} }
@@ -448,12 +448,13 @@ func blockRootsBySlotRange(
return [][]byte{}, nil return [][]byte{}, nil
} }
var startSlot, endSlot, step uint64 var startSlot, endSlot types.Slot
var step uint64
var ok bool var ok bool
if startSlot, ok = startSlotEncoded.(uint64); !ok { if startSlot, ok = startSlotEncoded.(types.Slot); !ok {
startSlot = 0 startSlot = 0
} }
if endSlot, ok = endSlotEncoded.(uint64); !ok { if endSlot, ok = endSlotEncoded.(types.Slot); !ok {
endSlot = 0 endSlot = 0
} }
if step, ok = slotStepEncoded.(uint64); !ok || step == 0 { if step, ok = slotStepEncoded.(uint64); !ok || step == 0 {
@@ -473,8 +474,8 @@ func blockRootsBySlotRange(
} }
endSlot = endSlot + params.BeaconConfig().SlotsPerEpoch - 1 endSlot = endSlot + params.BeaconConfig().SlotsPerEpoch - 1
} }
min := bytesutil.Uint64ToBytesBigEndian(startSlot) min := bytesutil.SlotToBytesBigEndian(startSlot)
max := bytesutil.Uint64ToBytesBigEndian(endSlot) max := bytesutil.SlotToBytesBigEndian(endSlot)
conditional := func(key, max []byte) bool { conditional := func(key, max []byte) bool {
return key != nil && bytes.Compare(key, max) <= 0 return key != nil && bytes.Compare(key, max) <= 0
@@ -482,13 +483,13 @@ func blockRootsBySlotRange(
if endSlot < startSlot { if endSlot < startSlot {
return nil, errInvalidSlotRange return nil, errInvalidSlotRange
} }
rootsRange := (endSlot - startSlot) / step rootsRange := endSlot.SubSlot(startSlot).Div(step)
roots := make([][]byte, 0, rootsRange) roots := make([][]byte, 0, rootsRange)
c := bkt.Cursor() c := bkt.Cursor()
for k, v := c.Seek(min); conditional(k, max); k, v = c.Next() { for k, v := c.Seek(min); conditional(k, max); k, v = c.Next() {
if step > 1 { if step > 1 {
slot := bytesutil.BytesToUint64BigEndian(k) slot := bytesutil.BytesToSlotBigEndian(k)
if (slot-startSlot)%step != 0 { if slot.SubSlot(startSlot).Mod(step) != 0 {
continue continue
} }
} }
@@ -503,13 +504,13 @@ func blockRootsBySlotRange(
} }
// blockRootsBySlot retrieves the block roots by slot // blockRootsBySlot retrieves the block roots by slot
func blockRootsBySlot(ctx context.Context, tx *bolt.Tx, slot uint64) ([][]byte, error) { func blockRootsBySlot(ctx context.Context, tx *bolt.Tx, slot types.Slot) ([][]byte, error) {
ctx, span := trace.StartSpan(ctx, "BeaconDB.blockRootsBySlot") ctx, span := trace.StartSpan(ctx, "BeaconDB.blockRootsBySlot")
defer span.End() defer span.End()
roots := make([][]byte, 0) roots := make([][]byte, 0)
bkt := tx.Bucket(blockSlotIndicesBucket) bkt := tx.Bucket(blockSlotIndicesBucket)
key := bytesutil.Uint64ToBytesBigEndian(slot) key := bytesutil.SlotToBytesBigEndian(slot)
c := bkt.Cursor() c := bkt.Cursor()
k, v := c.Seek(key) k, v := c.Seek(key)
if k != nil && bytes.Equal(k, key) { if k != nil && bytes.Equal(k, key) {
@@ -533,7 +534,7 @@ func createBlockIndicesFromBlock(ctx context.Context, block *ethpb.BeaconBlock)
blockSlotIndicesBucket, blockSlotIndicesBucket,
} }
indices := [][]byte{ indices := [][]byte{
bytesutil.Uint64ToBytesBigEndian(block.Slot), bytesutil.SlotToBytesBigEndian(block.Slot),
} }
if block.ParentRoot != nil && len(block.ParentRoot) > 0 { if block.ParentRoot != nil && len(block.ParentRoot) > 0 {
buckets = append(buckets, blockParentRootIndicesBucket) buckets = append(buckets, blockParentRootIndicesBucket)

View File

@@ -6,6 +6,7 @@ import (
"testing" "testing"
"github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/proto"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/db/filters" "github.com/prysmaticlabs/prysm/beacon-chain/db/filters"
"github.com/prysmaticlabs/prysm/shared/bytesutil" "github.com/prysmaticlabs/prysm/shared/bytesutil"
@@ -18,7 +19,7 @@ import (
func TestStore_SaveBlock_NoDuplicates(t *testing.T) { func TestStore_SaveBlock_NoDuplicates(t *testing.T) {
BlockCacheSize = 1 BlockCacheSize = 1
db := setupDB(t) db := setupDB(t)
slot := uint64(20) slot := types.Slot(20)
ctx := context.Background() ctx := context.Background()
// First we save a previous block to ensure the cache max size is reached. // First we save a previous block to ensure the cache max size is reached.
prevBlock := testutil.NewBeaconBlock() prevBlock := testutil.NewBeaconBlock()
@@ -73,7 +74,7 @@ func TestStore_BlocksBatchDelete(t *testing.T) {
oddBlocks := make([]*ethpb.SignedBeaconBlock, 0) oddBlocks := make([]*ethpb.SignedBeaconBlock, 0)
for i := 0; i < len(totalBlocks); i++ { for i := 0; i < len(totalBlocks); i++ {
b := testutil.NewBeaconBlock() b := testutil.NewBeaconBlock()
b.Block.Slot = uint64(i) b.Block.Slot = types.Slot(i)
b.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32) b.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32)
totalBlocks[i] = b totalBlocks[i] = b
if i%2 == 0 { if i%2 == 0 {
@@ -108,7 +109,7 @@ func TestStore_BlocksHandleZeroCase(t *testing.T) {
totalBlocks := make([]*ethpb.SignedBeaconBlock, numBlocks) totalBlocks := make([]*ethpb.SignedBeaconBlock, numBlocks)
for i := 0; i < len(totalBlocks); i++ { for i := 0; i < len(totalBlocks); i++ {
b := testutil.NewBeaconBlock() b := testutil.NewBeaconBlock()
b.Block.Slot = uint64(i) b.Block.Slot = types.Slot(i)
b.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32) b.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32)
totalBlocks[i] = b totalBlocks[i] = b
_, err := totalBlocks[i].Block.HashTreeRoot() _, err := totalBlocks[i].Block.HashTreeRoot()
@@ -129,7 +130,7 @@ func TestStore_BlocksHandleInvalidEndSlot(t *testing.T) {
// Save blocks from slot 1 onwards. // Save blocks from slot 1 onwards.
for i := 0; i < len(totalBlocks); i++ { for i := 0; i < len(totalBlocks); i++ {
b := testutil.NewBeaconBlock() b := testutil.NewBeaconBlock()
b.Block.Slot = uint64(i) + 1 b.Block.Slot = types.Slot(i) + 1
b.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32) b.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32)
totalBlocks[i] = b totalBlocks[i] = b
_, err := totalBlocks[i].Block.HashTreeRoot() _, err := totalBlocks[i].Block.HashTreeRoot()
@@ -291,7 +292,7 @@ func TestStore_Blocks_Retrieve_SlotRange(t *testing.T) {
totalBlocks := make([]*ethpb.SignedBeaconBlock, 500) totalBlocks := make([]*ethpb.SignedBeaconBlock, 500)
for i := 0; i < 500; i++ { for i := 0; i < 500; i++ {
b := testutil.NewBeaconBlock() b := testutil.NewBeaconBlock()
b.Block.Slot = uint64(i) b.Block.Slot = types.Slot(i)
b.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32) b.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32)
totalBlocks[i] = b totalBlocks[i] = b
} }
@@ -304,9 +305,9 @@ func TestStore_Blocks_Retrieve_SlotRange(t *testing.T) {
func TestStore_Blocks_Retrieve_Epoch(t *testing.T) { func TestStore_Blocks_Retrieve_Epoch(t *testing.T) {
db := setupDB(t) db := setupDB(t)
slots := params.BeaconConfig().SlotsPerEpoch * 7 slots := params.BeaconConfig().SlotsPerEpoch.Mul(7)
totalBlocks := make([]*ethpb.SignedBeaconBlock, slots) totalBlocks := make([]*ethpb.SignedBeaconBlock, slots)
for i := uint64(0); i < slots; i++ { for i := types.Slot(0); i < slots; i++ {
b := testutil.NewBeaconBlock() b := testutil.NewBeaconBlock()
b.Block.Slot = i b.Block.Slot = i
b.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32) b.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32)
@@ -316,12 +317,12 @@ func TestStore_Blocks_Retrieve_Epoch(t *testing.T) {
require.NoError(t, db.SaveBlocks(ctx, totalBlocks)) require.NoError(t, db.SaveBlocks(ctx, totalBlocks))
retrieved, _, err := db.Blocks(ctx, filters.NewFilter().SetStartEpoch(5).SetEndEpoch(6)) retrieved, _, err := db.Blocks(ctx, filters.NewFilter().SetStartEpoch(5).SetEndEpoch(6))
require.NoError(t, err) require.NoError(t, err)
want := params.BeaconConfig().SlotsPerEpoch * 2 want := params.BeaconConfig().SlotsPerEpoch.Mul(2)
assert.Equal(t, want, uint64(len(retrieved))) assert.Equal(t, uint64(want), uint64(len(retrieved)))
retrieved, _, err = db.Blocks(ctx, filters.NewFilter().SetStartEpoch(0).SetEndEpoch(0)) retrieved, _, err = db.Blocks(ctx, filters.NewFilter().SetStartEpoch(0).SetEndEpoch(0))
require.NoError(t, err) require.NoError(t, err)
want = params.BeaconConfig().SlotsPerEpoch want = params.BeaconConfig().SlotsPerEpoch
assert.Equal(t, want, uint64(len(retrieved))) assert.Equal(t, uint64(want), uint64(len(retrieved)))
} }
func TestStore_Blocks_Retrieve_SlotRangeWithStep(t *testing.T) { func TestStore_Blocks_Retrieve_SlotRangeWithStep(t *testing.T) {
@@ -329,7 +330,7 @@ func TestStore_Blocks_Retrieve_SlotRangeWithStep(t *testing.T) {
totalBlocks := make([]*ethpb.SignedBeaconBlock, 500) totalBlocks := make([]*ethpb.SignedBeaconBlock, 500)
for i := 0; i < 500; i++ { for i := 0; i < 500; i++ {
b := testutil.NewBeaconBlock() b := testutil.NewBeaconBlock()
b.Block.Slot = uint64(i) b.Block.Slot = types.Slot(i)
b.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32) b.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32)
totalBlocks[i] = b totalBlocks[i] = b
} }
@@ -340,7 +341,7 @@ func TestStore_Blocks_Retrieve_SlotRangeWithStep(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, 150, len(retrieved)) assert.Equal(t, 150, len(retrieved))
for _, b := range retrieved { for _, b := range retrieved {
assert.Equal(t, uint64(0), (b.Block.Slot-100)%step, "Unexpect block slot %d", b.Block.Slot) assert.Equal(t, types.Slot(0), (b.Block.Slot-100)%step, "Unexpect block slot %d", b.Block.Slot)
} }
} }
@@ -412,7 +413,7 @@ func TestStore_SaveBlocks_HasCachedBlocks(t *testing.T) {
for i := 0; i < 500; i++ { for i := 0; i < 500; i++ {
blk := testutil.NewBeaconBlock() blk := testutil.NewBeaconBlock()
blk.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32) blk.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32)
blk.Block.Slot = uint64(i) blk.Block.Slot = types.Slot(i)
b[i] = blk b[i] = blk
} }
@@ -433,7 +434,7 @@ func TestStore_SaveBlocks_HasRootsMatched(t *testing.T) {
for i := 0; i < 500; i++ { for i := 0; i < 500; i++ {
blk := testutil.NewBeaconBlock() blk := testutil.NewBeaconBlock()
blk.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32) blk.Block.ParentRoot = bytesutil.PadTo([]byte("parent"), 32)
blk.Block.Slot = uint64(i) blk.Block.Slot = types.Slot(i)
b[i] = blk b[i] = blk
} }

View File

@@ -4,6 +4,7 @@ import (
"context" "context"
"testing" "testing"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/shared/bytesutil" "github.com/prysmaticlabs/prysm/shared/bytesutil"
"github.com/prysmaticlabs/prysm/shared/params" "github.com/prysmaticlabs/prysm/shared/params"
@@ -15,7 +16,7 @@ import (
var genesisBlockRoot = bytesutil.ToBytes32([]byte{'G', 'E', 'N', 'E', 'S', 'I', 'S'}) var genesisBlockRoot = bytesutil.ToBytes32([]byte{'G', 'E', 'N', 'E', 'S', 'I', 'S'})
func TestStore_IsFinalizedBlock(t *testing.T) { func TestStore_IsFinalizedBlock(t *testing.T) {
slotsPerEpoch := params.BeaconConfig().SlotsPerEpoch slotsPerEpoch := uint64(params.BeaconConfig().SlotsPerEpoch)
db := setupDB(t) db := setupDB(t)
ctx := context.Background() ctx := context.Background()
@@ -75,7 +76,7 @@ func TestStore_IsFinalizedBlockGenesis(t *testing.T) {
// be c, e, and g. In this scenario, c was a finalized checkpoint root but no block built upon it so // be c, e, and g. In this scenario, c was a finalized checkpoint root but no block built upon it so
// it should not be considered "final and canonical" in the view at slot 6. // it should not be considered "final and canonical" in the view at slot 6.
func TestStore_IsFinalized_ForkEdgeCase(t *testing.T) { func TestStore_IsFinalized_ForkEdgeCase(t *testing.T) {
slotsPerEpoch := params.BeaconConfig().SlotsPerEpoch slotsPerEpoch := uint64(params.BeaconConfig().SlotsPerEpoch)
blocks0 := makeBlocks(t, slotsPerEpoch*0, slotsPerEpoch, genesisBlockRoot) blocks0 := makeBlocks(t, slotsPerEpoch*0, slotsPerEpoch, genesisBlockRoot)
blocks1 := append( blocks1 := append(
makeBlocks(t, slotsPerEpoch*1, 1, bytesutil.ToBytes32(sszRootOrDie(t, blocks0[len(blocks0)-1]))), // No block builds off of the first block in epoch. makeBlocks(t, slotsPerEpoch*1, 1, bytesutil.ToBytes32(sszRootOrDie(t, blocks0[len(blocks0)-1]))), // No block builds off of the first block in epoch.
@@ -131,7 +132,7 @@ func TestStore_IsFinalized_ForkEdgeCase(t *testing.T) {
} }
func TestStore_IsFinalizedChildBlock(t *testing.T) { func TestStore_IsFinalizedChildBlock(t *testing.T) {
slotsPerEpoch := params.BeaconConfig().SlotsPerEpoch slotsPerEpoch := uint64(params.BeaconConfig().SlotsPerEpoch)
db := setupDB(t) db := setupDB(t)
ctx := context.Background() ctx := context.Background()
@@ -179,7 +180,7 @@ func makeBlocks(t *testing.T, i, n uint64, previousRoot [32]byte) []*ethpb.Signe
parentRoot := make([]byte, 32) parentRoot := make([]byte, 32)
copy(parentRoot, previousRoot[:]) copy(parentRoot, previousRoot[:])
blocks[j-i] = testutil.NewBeaconBlock() blocks[j-i] = testutil.NewBeaconBlock()
blocks[j-i].Block.Slot = j + 1 blocks[j-i].Block.Slot = types.Slot(j + 1)
blocks[j-i].Block.ParentRoot = parentRoot blocks[j-i].Block.ParentRoot = parentRoot
var err error var err error
previousRoot, err = blocks[j-i].Block.HashTreeRoot() previousRoot, err = blocks[j-i].Block.HashTreeRoot()

View File

@@ -4,6 +4,7 @@ import (
"bytes" "bytes"
"context" "context"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/shared/bytesutil" "github.com/prysmaticlabs/prysm/shared/bytesutil"
bolt "go.etcd.io/bbolt" bolt "go.etcd.io/bbolt"
@@ -26,7 +27,7 @@ func migrateArchivedIndex(tx *bolt.Tx) error {
return err return err
} }
var highest uint64 var highest types.Slot
c := bkt.Cursor() c := bkt.Cursor()
for k, v := c.First(); k != nil; k, v = c.Next() { for k, v := c.First(); k != nil; k, v = c.Next() {
// Look up actual slot from block // Look up actual slot from block
@@ -39,7 +40,7 @@ func migrateArchivedIndex(tx *bolt.Tx) error {
if err := decode(context.TODO(), b, blk); err != nil { if err := decode(context.TODO(), b, blk); err != nil {
return err return err
} }
if err := tx.Bucket(stateSlotIndicesBucket).Put(bytesutil.Uint64ToBytesBigEndian(blk.Block.Slot), v); err != nil { if err := tx.Bucket(stateSlotIndicesBucket).Put(bytesutil.SlotToBytesBigEndian(blk.Block.Slot), v); err != nil {
return err return err
} }
if blk.Block.Slot > highest { if blk.Block.Slot > highest {

View File

@@ -5,6 +5,7 @@ import (
"context" "context"
"github.com/pkg/errors" "github.com/pkg/errors"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
"github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/beacon-chain/state"
@@ -192,7 +193,7 @@ func (s *Store) stateBytes(ctx context.Context, blockRoot [32]byte) ([]byte, err
} }
// slotByBlockRoot retrieves the corresponding slot of the input block root. // slotByBlockRoot retrieves the corresponding slot of the input block root.
func slotByBlockRoot(ctx context.Context, tx *bolt.Tx, blockRoot []byte) (uint64, error) { func slotByBlockRoot(ctx context.Context, tx *bolt.Tx, blockRoot []byte) (types.Slot, error) {
ctx, span := trace.StartSpan(ctx, "BeaconDB.slotByBlockRoot") ctx, span := trace.StartSpan(ctx, "BeaconDB.slotByBlockRoot")
defer span.End() defer span.End()
@@ -241,7 +242,7 @@ func slotByBlockRoot(ctx context.Context, tx *bolt.Tx, blockRoot []byte) (uint64
// from the db. Ideally there should just be one state per slot, but given validator // from the db. Ideally there should just be one state per slot, but given validator
// can double propose, a single slot could have multiple block roots and // can double propose, a single slot could have multiple block roots and
// results states. This returns a list of states. // results states. This returns a list of states.
func (s *Store) HighestSlotStatesBelow(ctx context.Context, slot uint64) ([]*state.BeaconState, error) { func (s *Store) HighestSlotStatesBelow(ctx context.Context, slot types.Slot) ([]*state.BeaconState, error) {
ctx, span := trace.StartSpan(ctx, "BeaconDB.HighestSlotStatesBelow") ctx, span := trace.StartSpan(ctx, "BeaconDB.HighestSlotStatesBelow")
defer span.End() defer span.End()
@@ -253,7 +254,7 @@ func (s *Store) HighestSlotStatesBelow(ctx context.Context, slot uint64) ([]*sta
if ctx.Err() != nil { if ctx.Err() != nil {
return ctx.Err() return ctx.Err()
} }
key := bytesutil.BytesToUint64BigEndian(s) key := bytesutil.BytesToSlotBigEndian(s)
if root == nil { if root == nil {
continue continue
} }
@@ -288,7 +289,7 @@ func (s *Store) HighestSlotStatesBelow(ctx context.Context, slot uint64) ([]*sta
// createBlockIndicesFromBlock takes in a beacon block and returns // createBlockIndicesFromBlock takes in a beacon block and returns
// a map of bolt DB index buckets corresponding to each particular key for indices for // a map of bolt DB index buckets corresponding to each particular key for indices for
// data, such as (shard indices bucket -> shard 5). // data, such as (shard indices bucket -> shard 5).
func createStateIndicesFromStateSlot(ctx context.Context, slot uint64) map[string][]byte { func createStateIndicesFromStateSlot(ctx context.Context, slot types.Slot) map[string][]byte {
ctx, span := trace.StartSpan(ctx, "BeaconDB.createStateIndicesFromState") ctx, span := trace.StartSpan(ctx, "BeaconDB.createStateIndicesFromState")
defer span.End() defer span.End()
indicesByBucket := make(map[string][]byte) indicesByBucket := make(map[string][]byte)
@@ -299,7 +300,7 @@ func createStateIndicesFromStateSlot(ctx context.Context, slot uint64) map[strin
} }
indices := [][]byte{ indices := [][]byte{
bytesutil.Uint64ToBytesBigEndian(slot), bytesutil.SlotToBytesBigEndian(slot),
} }
for i := 0; i < len(buckets); i++ { for i := 0; i < len(buckets); i++ {
indicesByBucket[string(buckets[i])] = indices[i] indicesByBucket[string(buckets[i])] = indices[i]
@@ -315,7 +316,7 @@ func createStateIndicesFromStateSlot(ctx context.Context, slot uint64) map[strin
// This is to tolerate skip slots. Not every state lays on the boundary. // This is to tolerate skip slots. Not every state lays on the boundary.
// 3.) state with current finalized root // 3.) state with current finalized root
// 4.) unfinalized States // 4.) unfinalized States
func (s *Store) CleanUpDirtyStates(ctx context.Context, slotsPerArchivedPoint uint64) error { func (s *Store) CleanUpDirtyStates(ctx context.Context, slotsPerArchivedPoint types.Slot) error {
ctx, span := trace.StartSpan(ctx, "BeaconDB. CleanUpDirtyStates") ctx, span := trace.StartSpan(ctx, "BeaconDB. CleanUpDirtyStates")
defer span.End() defer span.End()
@@ -337,7 +338,7 @@ func (s *Store) CleanUpDirtyStates(ctx context.Context, slotsPerArchivedPoint ui
} }
finalizedChkpt := bytesutil.ToBytes32(f.Root) == bytesutil.ToBytes32(v) finalizedChkpt := bytesutil.ToBytes32(f.Root) == bytesutil.ToBytes32(v)
slot := bytesutil.BytesToUint64BigEndian(k) slot := bytesutil.BytesToSlotBigEndian(k)
mod := slot % slotsPerArchivedPoint mod := slot % slotsPerArchivedPoint
nonFinalized := slot > finalizedSlot nonFinalized := slot > finalizedSlot

View File

@@ -4,6 +4,7 @@ import (
"context" "context"
"testing" "testing"
types "github.com/prysmaticlabs/eth2-types"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/bytesutil" "github.com/prysmaticlabs/prysm/shared/bytesutil"
"github.com/prysmaticlabs/prysm/shared/testutil/assert" "github.com/prysmaticlabs/prysm/shared/testutil/assert"
@@ -44,7 +45,7 @@ func TestStateSummary_CacheToDB(t *testing.T) {
summaries := make([]*pb.StateSummary, stateSummaryCachePruneCount-1) summaries := make([]*pb.StateSummary, stateSummaryCachePruneCount-1)
for i := range summaries { for i := range summaries {
summaries[i] = &pb.StateSummary{Slot: uint64(i), Root: bytesutil.PadTo(bytesutil.Uint64ToBytesLittleEndian(uint64(i)), 32)} summaries[i] = &pb.StateSummary{Slot: types.Slot(i), Root: bytesutil.PadTo(bytesutil.Uint64ToBytesLittleEndian(uint64(i)), 32)}
} }
require.NoError(t, db.SaveStateSummaries(context.Background(), summaries)) require.NoError(t, db.SaveStateSummaries(context.Background(), summaries))

View File

@@ -6,7 +6,7 @@ import (
"testing" "testing"
"github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/proto"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/beacon-chain/state"
"github.com/prysmaticlabs/prysm/shared/bytesutil" "github.com/prysmaticlabs/prysm/shared/bytesutil"
@@ -70,13 +70,13 @@ func TestStore_StatesBatchDelete(t *testing.T) {
evenBlockRoots := make([][32]byte, 0) evenBlockRoots := make([][32]byte, 0)
for i := 0; i < len(totalBlocks); i++ { for i := 0; i < len(totalBlocks); i++ {
b := testutil.NewBeaconBlock() b := testutil.NewBeaconBlock()
b.Block.Slot = uint64(i) b.Block.Slot = types.Slot(i)
totalBlocks[i] = b totalBlocks[i] = b
r, err := totalBlocks[i].Block.HashTreeRoot() r, err := totalBlocks[i].Block.HashTreeRoot()
require.NoError(t, err) require.NoError(t, err)
st, err := testutil.NewBeaconState() st, err := testutil.NewBeaconState()
require.NoError(t, err) require.NoError(t, err)
require.NoError(t, st.SetSlot(uint64(i))) require.NoError(t, st.SetSlot(types.Slot(i)))
require.NoError(t, db.SaveState(context.Background(), st, r)) require.NoError(t, db.SaveState(context.Background(), st, r))
blockRoots = append(blockRoots, r) blockRoots = append(blockRoots, r)
if i%2 == 0 { if i%2 == 0 {
@@ -93,7 +93,7 @@ func TestStore_StatesBatchDelete(t *testing.T) {
if s == nil { if s == nil {
continue continue
} }
assert.Equal(t, uint64(1), s.Slot()%2, "State with slot %d should have been deleted", s.Slot()) assert.Equal(t, types.Slot(1), s.Slot()%2, "State with slot %d should have been deleted", s.Slot())
} }
} }
@@ -250,9 +250,9 @@ func TestStore_CleanUpDirtyStates_AboveThreshold(t *testing.T) {
require.NoError(t, db.SaveState(context.Background(), genesisState, genesisRoot)) require.NoError(t, db.SaveState(context.Background(), genesisState, genesisRoot))
bRoots := make([][32]byte, 0) bRoots := make([][32]byte, 0)
slotsPerArchivedPoint := uint64(128) slotsPerArchivedPoint := types.Slot(128)
prevRoot := genesisRoot prevRoot := genesisRoot
for i := uint64(1); i <= slotsPerArchivedPoint; i++ { for i := types.Slot(1); i <= slotsPerArchivedPoint; i++ {
b := testutil.NewBeaconBlock() b := testutil.NewBeaconBlock()
b.Block.Slot = i b.Block.Slot = i
b.Block.ParentRoot = prevRoot[:] b.Block.ParentRoot = prevRoot[:]
@@ -275,7 +275,7 @@ func TestStore_CleanUpDirtyStates_AboveThreshold(t *testing.T) {
require.NoError(t, db.CleanUpDirtyStates(context.Background(), slotsPerArchivedPoint)) require.NoError(t, db.CleanUpDirtyStates(context.Background(), slotsPerArchivedPoint))
for i, root := range bRoots { for i, root := range bRoots {
if uint64(i) >= slotsPerArchivedPoint-slotsPerArchivedPoint/3 { if types.Slot(i) >= slotsPerArchivedPoint.SubSlot(slotsPerArchivedPoint.Div(3)) {
require.Equal(t, true, db.HasState(context.Background(), root)) require.Equal(t, true, db.HasState(context.Background(), root))
} else { } else {
require.Equal(t, false, db.HasState(context.Background(), root)) require.Equal(t, false, db.HasState(context.Background(), root))
@@ -292,7 +292,7 @@ func TestStore_CleanUpDirtyStates_Finalized(t *testing.T) {
require.NoError(t, db.SaveGenesisBlockRoot(context.Background(), genesisRoot)) require.NoError(t, db.SaveGenesisBlockRoot(context.Background(), genesisRoot))
require.NoError(t, db.SaveState(context.Background(), genesisState, genesisRoot)) require.NoError(t, db.SaveState(context.Background(), genesisState, genesisRoot))
for i := uint64(1); i <= params.BeaconConfig().SlotsPerEpoch; i++ { for i := types.Slot(1); i <= params.BeaconConfig().SlotsPerEpoch; i++ {
b := testutil.NewBeaconBlock() b := testutil.NewBeaconBlock()
b.Block.Slot = i b.Block.Slot = i
r, err := b.Block.HashTreeRoot() r, err := b.Block.HashTreeRoot()
@@ -320,7 +320,7 @@ func TestStore_CleanUpDirtyStates_DontDeleteNonFinalized(t *testing.T) {
require.NoError(t, db.SaveState(context.Background(), genesisState, genesisRoot)) require.NoError(t, db.SaveState(context.Background(), genesisState, genesisRoot))
var unfinalizedRoots [][32]byte var unfinalizedRoots [][32]byte
for i := uint64(1); i <= params.BeaconConfig().SlotsPerEpoch; i++ { for i := types.Slot(1); i <= params.BeaconConfig().SlotsPerEpoch; i++ {
b := testutil.NewBeaconBlock() b := testutil.NewBeaconBlock()
b.Block.Slot = i b.Block.Slot = i
r, err := b.Block.HashTreeRoot() r, err := b.Block.HashTreeRoot()

View File

@@ -3,7 +3,7 @@ package forkchoice
import ( import (
"context" "context"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/beacon-chain/forkchoice/protoarray" "github.com/prysmaticlabs/prysm/beacon-chain/forkchoice/protoarray"
) )
@@ -23,7 +23,7 @@ type HeadRetriever interface {
// BlockProcessor processes the block that's used for accounting fork choice. // BlockProcessor processes the block that's used for accounting fork choice.
type BlockProcessor interface { type BlockProcessor interface {
ProcessBlock(context.Context, uint64, [32]byte, [32]byte, [32]byte, types.Epoch, types.Epoch) error ProcessBlock(context.Context, types.Slot, [32]byte, [32]byte, [32]byte, types.Epoch, types.Epoch) error
} }
// AttestationProcessor processes the attestation that's used for accounting fork choice. // AttestationProcessor processes the attestation that's used for accounting fork choice.
@@ -43,6 +43,6 @@ type Getter interface {
HasNode([32]byte) bool HasNode([32]byte) bool
Store() *protoarray.Store Store() *protoarray.Store
HasParent(root [32]byte) bool HasParent(root [32]byte) bool
AncestorRoot(ctx context.Context, root [32]byte, slot uint64) ([]byte, error) AncestorRoot(ctx context.Context, root [32]byte, slot types.Slot) ([]byte, error)
IsCanonical(root [32]byte) bool IsCanonical(root [32]byte) bool
} }

View File

@@ -4,7 +4,7 @@ import (
"context" "context"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/shared/params" "github.com/prysmaticlabs/prysm/shared/params"
"github.com/prysmaticlabs/prysm/shared/testutil/assert" "github.com/prysmaticlabs/prysm/shared/testutil/assert"
"github.com/prysmaticlabs/prysm/shared/testutil/require" "github.com/prysmaticlabs/prysm/shared/testutil/require"

View File

@@ -1,9 +1,11 @@
package protoarray package protoarray
import "github.com/prysmaticlabs/eth2-types" import (
types "github.com/prysmaticlabs/eth2-types"
)
// Slot of the fork choice node. // Slot of the fork choice node.
func (n *Node) Slot() uint64 { func (n *Node) Slot() types.Slot {
return n.slot return n.slot
} }

View File

@@ -3,12 +3,12 @@ package protoarray
import ( import (
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/shared/testutil/require" "github.com/prysmaticlabs/prysm/shared/testutil/require"
) )
func TestNode_Getters(t *testing.T) { func TestNode_Getters(t *testing.T) {
slot := uint64(100) slot := types.Slot(100)
root := [32]byte{'a'} root := [32]byte{'a'}
parent := uint64(10) parent := uint64(10)
jEpoch := types.Epoch(20) jEpoch := types.Epoch(20)

View File

@@ -7,7 +7,7 @@ import (
"math" "math"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/shared/params" "github.com/prysmaticlabs/prysm/shared/params"
"go.opencensus.io/trace" "go.opencensus.io/trace"
) )
@@ -95,7 +95,7 @@ func (f *ForkChoice) ProcessAttestation(ctx context.Context, validatorIndices []
} }
// ProcessBlock processes a new block by inserting it to the fork choice store. // ProcessBlock processes a new block by inserting it to the fork choice store.
func (f *ForkChoice) ProcessBlock(ctx context.Context, slot uint64, blockRoot, parentRoot, graffiti [32]byte, justifiedEpoch, finalizedEpoch types.Epoch) error { func (f *ForkChoice) ProcessBlock(ctx context.Context, slot types.Slot, blockRoot, parentRoot, graffiti [32]byte, justifiedEpoch, finalizedEpoch types.Epoch) error {
ctx, span := trace.StartSpan(ctx, "protoArrayForkChoice.ProcessBlock") ctx, span := trace.StartSpan(ctx, "protoArrayForkChoice.ProcessBlock")
defer span.End() defer span.End()
@@ -171,7 +171,7 @@ func (f *ForkChoice) IsCanonical(root [32]byte) bool {
} }
// AncestorRoot returns the ancestor root of input block root at a given slot. // AncestorRoot returns the ancestor root of input block root at a given slot.
func (f *ForkChoice) AncestorRoot(ctx context.Context, root [32]byte, slot uint64) ([]byte, error) { func (f *ForkChoice) AncestorRoot(ctx context.Context, root [32]byte, slot types.Slot) ([]byte, error) {
ctx, span := trace.StartSpan(ctx, "protoArray.AncestorRoot") ctx, span := trace.StartSpan(ctx, "protoArray.AncestorRoot")
defer span.End() defer span.End()
@@ -314,7 +314,7 @@ func (s *Store) updateCanonicalNodes(ctx context.Context, root [32]byte) error {
// insert registers a new block node to the fork choice store's node list. // insert registers a new block node to the fork choice store's node list.
// It then updates the new node's parent with best child and descendant node. // It then updates the new node's parent with best child and descendant node.
func (s *Store) insert(ctx context.Context, func (s *Store) insert(ctx context.Context,
slot uint64, slot types.Slot,
root, parent, graffiti [32]byte, root, parent, graffiti [32]byte,
justifiedEpoch, finalizedEpoch types.Epoch) error { justifiedEpoch, finalizedEpoch types.Epoch) error {
ctx, span := trace.StartSpan(ctx, "protoArrayForkChoice.insert") ctx, span := trace.StartSpan(ctx, "protoArrayForkChoice.insert")

View File

@@ -4,7 +4,7 @@ import (
"context" "context"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/shared/bytesutil" "github.com/prysmaticlabs/prysm/shared/bytesutil"
"github.com/prysmaticlabs/prysm/shared/testutil/assert" "github.com/prysmaticlabs/prysm/shared/testutil/assert"
"github.com/prysmaticlabs/prysm/shared/testutil/require" "github.com/prysmaticlabs/prysm/shared/testutil/require"
@@ -363,7 +363,7 @@ func TestStore_Prune_LessThanThreshold(t *testing.T) {
nodes := make([]*Node, 0) nodes := make([]*Node, 0)
for i := 0; i < numOfNodes; i++ { for i := 0; i < numOfNodes; i++ {
indices[indexToHash(uint64(i))] = uint64(i) indices[indexToHash(uint64(i))] = uint64(i)
nodes = append(nodes, &Node{slot: uint64(i)}) nodes = append(nodes, &Node{slot: types.Slot(i)})
} }
s := &Store{nodes: nodes, nodesIndices: indices, pruneThreshold: 100} s := &Store{nodes: nodes, nodesIndices: indices, pruneThreshold: 100}
@@ -382,7 +382,7 @@ func TestStore_Prune_MoreThanThreshold(t *testing.T) {
nodes := make([]*Node, 0) nodes := make([]*Node, 0)
for i := 0; i < numOfNodes; i++ { for i := 0; i < numOfNodes; i++ {
indices[indexToHash(uint64(i))] = uint64(i) indices[indexToHash(uint64(i))] = uint64(i)
nodes = append(nodes, &Node{slot: uint64(i), root: indexToHash(uint64(i)), nodes = append(nodes, &Node{slot: types.Slot(i), root: indexToHash(uint64(i)),
bestDescendant: NonExistentNode, bestChild: NonExistentNode}) bestDescendant: NonExistentNode, bestChild: NonExistentNode})
} }
@@ -401,7 +401,7 @@ func TestStore_Prune_MoreThanOnce(t *testing.T) {
nodes := make([]*Node, 0) nodes := make([]*Node, 0)
for i := 0; i < numOfNodes; i++ { for i := 0; i < numOfNodes; i++ {
indices[indexToHash(uint64(i))] = uint64(i) indices[indexToHash(uint64(i))] = uint64(i)
nodes = append(nodes, &Node{slot: uint64(i), root: indexToHash(uint64(i)), nodes = append(nodes, &Node{slot: types.Slot(i), root: indexToHash(uint64(i)),
bestDescendant: NonExistentNode, bestChild: NonExistentNode}) bestDescendant: NonExistentNode, bestChild: NonExistentNode})
} }

View File

@@ -3,7 +3,7 @@ package protoarray
import ( import (
"sync" "sync"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
) )
// ForkChoice defines the overall fork choice store which includes all block nodes, validator's latest votes and balances. // ForkChoice defines the overall fork choice store which includes all block nodes, validator's latest votes and balances.
@@ -29,7 +29,7 @@ type Store struct {
// Node defines the individual block which includes its block parent, ancestor and how much weight accounted for it. // Node defines the individual block which includes its block parent, ancestor and how much weight accounted for it.
// This is used as an array based stateful DAG for efficient fork choice look up. // This is used as an array based stateful DAG for efficient fork choice look up.
type Node struct { type Node struct {
slot uint64 // slot of the block converted to the node. slot types.Slot // slot of the block converted to the node.
root [32]byte // root of the block converted to the node. root [32]byte // root of the block converted to the node.
parent uint64 // parent index of this node. parent uint64 // parent index of this node.
justifiedEpoch types.Epoch // justifiedEpoch of this node. justifiedEpoch types.Epoch // justifiedEpoch of this node.

View File

@@ -7,7 +7,7 @@ import (
"strconv" "strconv"
"strings" "strings"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
) )
// Given input string `block_root:epoch_number`, this verifies the input string is valid, and // Given input string `block_root:epoch_number`, this verifies the input string is valid, and

View File

@@ -4,7 +4,7 @@ import (
"reflect" "reflect"
"testing" "testing"
"github.com/prysmaticlabs/eth2-types" types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/shared/testutil/require" "github.com/prysmaticlabs/prysm/shared/testutil/require"
) )

View File

@@ -17,6 +17,7 @@ import (
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/pkg/errors" "github.com/pkg/errors"
types "github.com/prysmaticlabs/eth2-types"
"github.com/prysmaticlabs/prysm/beacon-chain/blockchain" "github.com/prysmaticlabs/prysm/beacon-chain/blockchain"
"github.com/prysmaticlabs/prysm/beacon-chain/cache/depositcache" "github.com/prysmaticlabs/prysm/beacon-chain/cache/depositcache"
"github.com/prysmaticlabs/prysm/beacon-chain/db" "github.com/prysmaticlabs/prysm/beacon-chain/db"
@@ -108,7 +109,7 @@ func New(cliCtx *cli.Context) (*BeaconNode, error) {
params.OverrideBeaconConfig(c) params.OverrideBeaconConfig(c)
cmdConfig := cmd.Get() cmdConfig := cmd.Get()
// Allow up to 4096 attestations at a time to be requested from the beacon nde. // Allow up to 4096 attestations at a time to be requested from the beacon nde.
cmdConfig.MaxRPCPageSize = int(params.BeaconConfig().SlotsPerEpoch * params.BeaconConfig().MaxAttestations) cmdConfig.MaxRPCPageSize = int(params.BeaconConfig().SlotsPerEpoch.Mul(params.BeaconConfig().MaxAttestations))
cmd.Init(cmdConfig) cmd.Init(cmdConfig)
log.Warnf( log.Warnf(
"Setting %d slots per archive point and %d max RPC page size for historical slasher usage. This requires additional storage", "Setting %d slots per archive point and %d max RPC page size for historical slasher usage. This requires additional storage",
@@ -119,7 +120,7 @@ func New(cliCtx *cli.Context) (*BeaconNode, error) {
if cliCtx.IsSet(flags.SlotsPerArchivedPoint.Name) { if cliCtx.IsSet(flags.SlotsPerArchivedPoint.Name) {
c := params.BeaconConfig() c := params.BeaconConfig()
c.SlotsPerArchivedPoint = uint64(cliCtx.Int(flags.SlotsPerArchivedPoint.Name)) c.SlotsPerArchivedPoint = types.Slot(cliCtx.Int(flags.SlotsPerArchivedPoint.Name))
params.OverrideBeaconConfig(c) params.OverrideBeaconConfig(c)
} }

View File

@@ -27,6 +27,7 @@ go_library(
"@com_github_hashicorp_golang_lru//:go_default_library", "@com_github_hashicorp_golang_lru//:go_default_library",
"@com_github_prometheus_client_golang//prometheus:go_default_library", "@com_github_prometheus_client_golang//prometheus:go_default_library",
"@com_github_prometheus_client_golang//prometheus/promauto:go_default_library", "@com_github_prometheus_client_golang//prometheus/promauto:go_default_library",
"@com_github_prysmaticlabs_eth2_types//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library", "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_bitfield//:go_default_library", "@com_github_prysmaticlabs_go_bitfield//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library", "@com_github_sirupsen_logrus//:go_default_library",

View File

@@ -21,6 +21,7 @@ go_library(
"//shared/params:go_default_library", "//shared/params:go_default_library",
"@com_github_patrickmn_go_cache//:go_default_library", "@com_github_patrickmn_go_cache//:go_default_library",
"@com_github_pkg_errors//:go_default_library", "@com_github_pkg_errors//:go_default_library",
"@com_github_prysmaticlabs_eth2_types//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library", "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_bitfield//:go_default_library", "@com_github_prysmaticlabs_go_bitfield//:go_default_library",
], ],
@@ -44,6 +45,7 @@ go_test(
"//shared/testutil/require:go_default_library", "//shared/testutil/require:go_default_library",
"@com_github_ferranbt_fastssz//:go_default_library", "@com_github_ferranbt_fastssz//:go_default_library",
"@com_github_patrickmn_go_cache//:go_default_library", "@com_github_patrickmn_go_cache//:go_default_library",
"@com_github_prysmaticlabs_eth2_types//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library", "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_bitfield//:go_default_library", "@com_github_prysmaticlabs_go_bitfield//:go_default_library",
], ],

Some files were not shown because too many files have changed in this diff Show More