mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 23:48:06 -05:00
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:
@@ -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()
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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, ðpb.Checkpoint{Root: make([]byte, 32)}))
|
require.NoError(t, service.verifyAttTargetEpoch(ctx, 0, nowTime, ðpb.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, ðpb.Checkpoint{Epoch: 1}))
|
require.NoError(t, service.verifyAttTargetEpoch(ctx, 0, nowTime, ðpb.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, ðpb.Checkpoint{Root: make([]byte, 32)})
|
err = service.verifyAttTargetEpoch(ctx, 0, nowTime, ðpb.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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|
||||||
|
|||||||
@@ -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 = ðpb.Checkpoint{Root: lastJustifiedRoot[:]}
|
service.justifiedCheckpt = ðpb.Checkpoint{Root: lastJustifiedRoot[:]}
|
||||||
update, err = service.shouldUpdateCurrentJustified(ctx, ðpb.Checkpoint{Root: newJustifiedRoot[:]})
|
update, err = service.shouldUpdateCurrentJustified(ctx, ðpb.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 = ðpb.Checkpoint{Root: lastJustifiedRoot[:]}
|
service.justifiedCheckpt = ðpb.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 = ðpb.Checkpoint{Root: gRoot[:]}
|
service.finalizedCheckpt = ðpb.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(ðpb.Eth1Data{DepositCount: 10}))
|
assert.NoError(t, gs.SetEth1Data(ðpb.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, ðpb.Deposit{Data: ðpb.Deposit_Data{
|
depositCache.InsertDeposit(ctx, ðpb.Deposit{Data: ðpb.Deposit_Data{
|
||||||
PublicKey: bytesutil.FromBytes48([48]byte{}),
|
PublicKey: bytesutil.FromBytes48([48]byte{}),
|
||||||
|
|||||||
@@ -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(), ðpb.Attestation{Data: ðpb.AttestationData{Target: ðpb.Checkpoint{Epoch: e}}})
|
_, err := chainService.AttestationPreState(context.Background(), ðpb.Attestation{Data: ðpb.AttestationData{Target: ðpb.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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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 = ðpb.Checkpoint{}
|
s.finalizedCheckpt = ðpb.Checkpoint{}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
1
beacon-chain/cache/BUILD.bazel
vendored
1
beacon-chain/cache/BUILD.bazel
vendored
@@ -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",
|
||||||
|
|||||||
4
beacon-chain/cache/checkpoint_state_test.go
vendored
4
beacon-chain/cache/checkpoint_state_test.go
vendored
@@ -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(ðpb.Checkpoint{Epoch: types.Epoch(i), Root: make([]byte, 32)}, st))
|
require.NoError(t, c.AddCheckpointState(ðpb.Checkpoint{Epoch: types.Epoch(i), Root: make([]byte, 32)}, st))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
9
beacon-chain/cache/committee.go
vendored
9
beacon-chain/cache/committee.go
vendored
@@ -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 {
|
||||||
|
|||||||
4
beacon-chain/cache/committee_disabled.go
vendored
4
beacon-chain/cache/committee_disabled.go
vendored
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
beacon-chain/cache/common.go
vendored
2
beacon-chain/cache/common.go
vendored
@@ -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.
|
||||||
|
|||||||
13
beacon-chain/cache/subnet_ids.go
vendored
13
beacon-chain/cache/subnet_ids.go
vendored
@@ -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()
|
||||||
|
|
||||||
|
|||||||
3
beacon-chain/cache/subnet_ids_test.go
vendored
3
beacon-chain/cache/subnet_ids_test.go
vendored
@@ -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")
|
||||||
|
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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(ðpb.IndexedAttestation{
|
att1 := testutil.HydrateIndexedAttestation(ðpb.IndexedAttestation{
|
||||||
|
|||||||
@@ -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 := ð.SignedVoluntaryExit{}
|
ve := ð.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)
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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: ðpb.Eth1Data{
|
data: ðpb.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: ðpb.Eth1Data{
|
data: ðpb.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: ðpb.Eth1Data{
|
data: ðpb.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)
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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: ðpb.SignedBeaconBlockHeader{
|
Header_1: ðpb.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: ðpb.SignedBeaconBlockHeader{
|
Header_1: ðpb.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: ðpb.SignedBeaconBlockHeader{
|
Header_1: ðpb.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)
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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: ðpb.AttestationData{
|
Data: ðpb.AttestationData{
|
||||||
Target: ðpb.Checkpoint{Root: make([]byte, 32)},
|
Target: ðpb.Checkpoint{Root: make([]byte, 32)},
|
||||||
Source: ðpb.Checkpoint{Root: make([]byte, 32)},
|
Source: ðpb.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] = ðpb.Validator{
|
validators[i] = ðpb.Validator{
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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{
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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] = ðpb.Validator{
|
validators[i] = ðpb.Validator{
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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(ðpb.Checkpoint{Epoch: 6}, genesis))
|
assert.Equal(t, true, helpers.VerifyCheckpointEpoch(ðpb.Checkpoint{Epoch: 6}, genesis))
|
||||||
assert.Equal(t, true, helpers.VerifyCheckpointEpoch(ðpb.Checkpoint{Epoch: 5}, genesis))
|
assert.Equal(t, true, helpers.VerifyCheckpointEpoch(ðpb.Checkpoint{Epoch: 5}, genesis))
|
||||||
assert.Equal(t, false, helpers.VerifyCheckpointEpoch(ðpb.Checkpoint{Epoch: 4}, genesis))
|
assert.Equal(t, false, helpers.VerifyCheckpointEpoch(ðpb.Checkpoint{Epoch: 4}, genesis))
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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] = ðpb.Validator{
|
validators[i] = ðpb.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)
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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, ðpb.Eth1Data{})
|
s, err := state.GenesisBeaconState(nil, 0, ðpb.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()))
|
||||||
|
|||||||
@@ -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())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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++ {
|
||||||
|
|||||||
@@ -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: ðpb.AttestationData{Target: ðpb.Checkpoint{Root: make([]byte, 32)}}, InclusionDelay: 1}}
|
atts := []*pb.PendingAttestation{{Data: ðpb.AttestationData{Target: ðpb.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())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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",
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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
Reference in New Issue
Block a user