mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 21:38:05 -05:00
remove eip6110flag for validator index cache (#14173)
* using fork instead of eip6110flag for validator index cache * updating validator indicies on initialize from poroto unsafe * fixing bad version check * attempting to fix unit test * reverting test changes * changing incorrect initialization * updating comment * radek's comment'
This commit is contained in:
@@ -12,7 +12,6 @@ import (
|
|||||||
statefeed "github.com/prysmaticlabs/prysm/v5/beacon-chain/core/feed/state"
|
statefeed "github.com/prysmaticlabs/prysm/v5/beacon-chain/core/feed/state"
|
||||||
"github.com/prysmaticlabs/prysm/v5/beacon-chain/das"
|
"github.com/prysmaticlabs/prysm/v5/beacon-chain/das"
|
||||||
"github.com/prysmaticlabs/prysm/v5/beacon-chain/operations/voluntaryexits"
|
"github.com/prysmaticlabs/prysm/v5/beacon-chain/operations/voluntaryexits"
|
||||||
"github.com/prysmaticlabs/prysm/v5/config/features"
|
|
||||||
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
|
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
|
||||||
"github.com/prysmaticlabs/prysm/v5/config/params"
|
"github.com/prysmaticlabs/prysm/v5/config/params"
|
||||||
"github.com/prysmaticlabs/prysm/v5/consensus-types/blocks"
|
"github.com/prysmaticlabs/prysm/v5/consensus-types/blocks"
|
||||||
@@ -421,14 +420,9 @@ func Test_sendNewFinalizedEvent(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Test_executePostFinalizationTasks(t *testing.T) {
|
func Test_executePostFinalizationTasks(t *testing.T) {
|
||||||
resetFn := features.InitWithReset(&features.Flags{
|
|
||||||
EIP6110ValidatorIndexCache: true,
|
|
||||||
})
|
|
||||||
defer resetFn()
|
|
||||||
|
|
||||||
logHook := logTest.NewGlobal()
|
logHook := logTest.NewGlobal()
|
||||||
|
|
||||||
headState, err := util.NewBeaconState()
|
headState, err := util.NewBeaconStateElectra()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
finalizedStRoot, err := headState.HashTreeRoot(context.Background())
|
finalizedStRoot, err := headState.HashTreeRoot(context.Background())
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|||||||
@@ -503,16 +503,15 @@ func TestChainService_EverythingOptimistic(t *testing.T) {
|
|||||||
|
|
||||||
func TestStartFromSavedState_ValidatorIndexCacheUpdated(t *testing.T) {
|
func TestStartFromSavedState_ValidatorIndexCacheUpdated(t *testing.T) {
|
||||||
resetFn := features.InitWithReset(&features.Flags{
|
resetFn := features.InitWithReset(&features.Flags{
|
||||||
EnableStartOptimistic: true,
|
EnableStartOptimistic: true,
|
||||||
EIP6110ValidatorIndexCache: true,
|
|
||||||
})
|
})
|
||||||
defer resetFn()
|
defer resetFn()
|
||||||
|
|
||||||
genesis := util.NewBeaconBlock()
|
genesis := util.NewBeaconBlockElectra()
|
||||||
genesisRoot, err := genesis.Block.HashTreeRoot()
|
genesisRoot, err := genesis.Block.HashTreeRoot()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
finalizedSlot := params.BeaconConfig().SlotsPerEpoch*2 + 1
|
finalizedSlot := params.BeaconConfig().SlotsPerEpoch*2 + 1
|
||||||
headBlock := util.NewBeaconBlock()
|
headBlock := util.NewBeaconBlockElectra()
|
||||||
headBlock.Block.Slot = finalizedSlot
|
headBlock.Block.Slot = finalizedSlot
|
||||||
headBlock.Block.ParentRoot = bytesutil.PadTo(genesisRoot[:], 32)
|
headBlock.Block.ParentRoot = bytesutil.PadTo(genesisRoot[:], 32)
|
||||||
headState, err := util.NewBeaconState()
|
headState, err := util.NewBeaconState()
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ func (b *BeaconState) ValidatorIndexByPubkey(key [fieldparams.BLSPubkeyLength]by
|
|||||||
b.lock.RLock()
|
b.lock.RLock()
|
||||||
defer b.lock.RUnlock()
|
defer b.lock.RUnlock()
|
||||||
|
|
||||||
if features.Get().EIP6110ValidatorIndexCache {
|
if b.Version() >= version.Electra {
|
||||||
return b.getValidatorIndex(key)
|
return b.getValidatorIndex(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import (
|
|||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/prysmaticlabs/prysm/v5/beacon-chain/state/state-native/types"
|
"github.com/prysmaticlabs/prysm/v5/beacon-chain/state/state-native/types"
|
||||||
"github.com/prysmaticlabs/prysm/v5/beacon-chain/state/stateutil"
|
"github.com/prysmaticlabs/prysm/v5/beacon-chain/state/stateutil"
|
||||||
"github.com/prysmaticlabs/prysm/v5/config/features"
|
|
||||||
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
|
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
|
||||||
"github.com/prysmaticlabs/prysm/v5/consensus-types/primitives"
|
"github.com/prysmaticlabs/prysm/v5/consensus-types/primitives"
|
||||||
"github.com/prysmaticlabs/prysm/v5/container/slice"
|
"github.com/prysmaticlabs/prysm/v5/container/slice"
|
||||||
@@ -110,7 +109,7 @@ func (b *BeaconState) SetHistoricalRoots(val [][]byte) error {
|
|||||||
|
|
||||||
// SaveValidatorIndices save validator indices of beacon chain to cache
|
// SaveValidatorIndices save validator indices of beacon chain to cache
|
||||||
func (b *BeaconState) SaveValidatorIndices() {
|
func (b *BeaconState) SaveValidatorIndices() {
|
||||||
if !features.Get().EIP6110ValidatorIndexCache {
|
if b.Version() < version.Electra {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -189,11 +189,12 @@ func InitializeFromProtoUnsafePhase0(st *ethpb.BeaconState) (state.BeaconState,
|
|||||||
|
|
||||||
id: types.Enumerator.Inc(),
|
id: types.Enumerator.Inc(),
|
||||||
|
|
||||||
dirtyFields: make(map[types.FieldIndex]bool, fieldCount),
|
dirtyFields: make(map[types.FieldIndex]bool, fieldCount),
|
||||||
dirtyIndices: make(map[types.FieldIndex][]uint64, fieldCount),
|
dirtyIndices: make(map[types.FieldIndex][]uint64, fieldCount),
|
||||||
stateFieldLeaves: make(map[types.FieldIndex]*fieldtrie.FieldTrie, fieldCount),
|
stateFieldLeaves: make(map[types.FieldIndex]*fieldtrie.FieldTrie, fieldCount),
|
||||||
rebuildTrie: make(map[types.FieldIndex]bool, fieldCount),
|
rebuildTrie: make(map[types.FieldIndex]bool, fieldCount),
|
||||||
valMapHandler: stateutil.NewValMapHandler(st.Validators),
|
valMapHandler: stateutil.NewValMapHandler(st.Validators),
|
||||||
|
validatorIndexCache: newFinalizedValidatorIndexCache(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if features.Get().EnableExperimentalState {
|
if features.Get().EnableExperimentalState {
|
||||||
@@ -295,11 +296,12 @@ func InitializeFromProtoUnsafeAltair(st *ethpb.BeaconStateAltair) (state.BeaconS
|
|||||||
|
|
||||||
id: types.Enumerator.Inc(),
|
id: types.Enumerator.Inc(),
|
||||||
|
|
||||||
dirtyFields: make(map[types.FieldIndex]bool, fieldCount),
|
dirtyFields: make(map[types.FieldIndex]bool, fieldCount),
|
||||||
dirtyIndices: make(map[types.FieldIndex][]uint64, fieldCount),
|
dirtyIndices: make(map[types.FieldIndex][]uint64, fieldCount),
|
||||||
stateFieldLeaves: make(map[types.FieldIndex]*fieldtrie.FieldTrie, fieldCount),
|
stateFieldLeaves: make(map[types.FieldIndex]*fieldtrie.FieldTrie, fieldCount),
|
||||||
rebuildTrie: make(map[types.FieldIndex]bool, fieldCount),
|
rebuildTrie: make(map[types.FieldIndex]bool, fieldCount),
|
||||||
valMapHandler: stateutil.NewValMapHandler(st.Validators),
|
valMapHandler: stateutil.NewValMapHandler(st.Validators),
|
||||||
|
validatorIndexCache: newFinalizedValidatorIndexCache(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if features.Get().EnableExperimentalState {
|
if features.Get().EnableExperimentalState {
|
||||||
@@ -405,11 +407,12 @@ func InitializeFromProtoUnsafeBellatrix(st *ethpb.BeaconStateBellatrix) (state.B
|
|||||||
|
|
||||||
id: types.Enumerator.Inc(),
|
id: types.Enumerator.Inc(),
|
||||||
|
|
||||||
dirtyFields: make(map[types.FieldIndex]bool, fieldCount),
|
dirtyFields: make(map[types.FieldIndex]bool, fieldCount),
|
||||||
dirtyIndices: make(map[types.FieldIndex][]uint64, fieldCount),
|
dirtyIndices: make(map[types.FieldIndex][]uint64, fieldCount),
|
||||||
stateFieldLeaves: make(map[types.FieldIndex]*fieldtrie.FieldTrie, fieldCount),
|
stateFieldLeaves: make(map[types.FieldIndex]*fieldtrie.FieldTrie, fieldCount),
|
||||||
rebuildTrie: make(map[types.FieldIndex]bool, fieldCount),
|
rebuildTrie: make(map[types.FieldIndex]bool, fieldCount),
|
||||||
valMapHandler: stateutil.NewValMapHandler(st.Validators),
|
valMapHandler: stateutil.NewValMapHandler(st.Validators),
|
||||||
|
validatorIndexCache: newFinalizedValidatorIndexCache(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if features.Get().EnableExperimentalState {
|
if features.Get().EnableExperimentalState {
|
||||||
@@ -519,11 +522,12 @@ func InitializeFromProtoUnsafeCapella(st *ethpb.BeaconStateCapella) (state.Beaco
|
|||||||
|
|
||||||
id: types.Enumerator.Inc(),
|
id: types.Enumerator.Inc(),
|
||||||
|
|
||||||
dirtyFields: make(map[types.FieldIndex]bool, fieldCount),
|
dirtyFields: make(map[types.FieldIndex]bool, fieldCount),
|
||||||
dirtyIndices: make(map[types.FieldIndex][]uint64, fieldCount),
|
dirtyIndices: make(map[types.FieldIndex][]uint64, fieldCount),
|
||||||
stateFieldLeaves: make(map[types.FieldIndex]*fieldtrie.FieldTrie, fieldCount),
|
stateFieldLeaves: make(map[types.FieldIndex]*fieldtrie.FieldTrie, fieldCount),
|
||||||
rebuildTrie: make(map[types.FieldIndex]bool, fieldCount),
|
rebuildTrie: make(map[types.FieldIndex]bool, fieldCount),
|
||||||
valMapHandler: stateutil.NewValMapHandler(st.Validators),
|
valMapHandler: stateutil.NewValMapHandler(st.Validators),
|
||||||
|
validatorIndexCache: newFinalizedValidatorIndexCache(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if features.Get().EnableExperimentalState {
|
if features.Get().EnableExperimentalState {
|
||||||
@@ -632,11 +636,12 @@ func InitializeFromProtoUnsafeDeneb(st *ethpb.BeaconStateDeneb) (state.BeaconSta
|
|||||||
nextWithdrawalValidatorIndex: st.NextWithdrawalValidatorIndex,
|
nextWithdrawalValidatorIndex: st.NextWithdrawalValidatorIndex,
|
||||||
historicalSummaries: st.HistoricalSummaries,
|
historicalSummaries: st.HistoricalSummaries,
|
||||||
|
|
||||||
dirtyFields: make(map[types.FieldIndex]bool, fieldCount),
|
dirtyFields: make(map[types.FieldIndex]bool, fieldCount),
|
||||||
dirtyIndices: make(map[types.FieldIndex][]uint64, fieldCount),
|
dirtyIndices: make(map[types.FieldIndex][]uint64, fieldCount),
|
||||||
stateFieldLeaves: make(map[types.FieldIndex]*fieldtrie.FieldTrie, fieldCount),
|
stateFieldLeaves: make(map[types.FieldIndex]*fieldtrie.FieldTrie, fieldCount),
|
||||||
rebuildTrie: make(map[types.FieldIndex]bool, fieldCount),
|
rebuildTrie: make(map[types.FieldIndex]bool, fieldCount),
|
||||||
valMapHandler: stateutil.NewValMapHandler(st.Validators),
|
valMapHandler: stateutil.NewValMapHandler(st.Validators),
|
||||||
|
validatorIndexCache: newFinalizedValidatorIndexCache(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if features.Get().EnableExperimentalState {
|
if features.Get().EnableExperimentalState {
|
||||||
@@ -754,11 +759,12 @@ func InitializeFromProtoUnsafeElectra(st *ethpb.BeaconStateElectra) (state.Beaco
|
|||||||
pendingPartialWithdrawals: st.PendingPartialWithdrawals,
|
pendingPartialWithdrawals: st.PendingPartialWithdrawals,
|
||||||
pendingConsolidations: st.PendingConsolidations,
|
pendingConsolidations: st.PendingConsolidations,
|
||||||
|
|
||||||
dirtyFields: make(map[types.FieldIndex]bool, fieldCount),
|
dirtyFields: make(map[types.FieldIndex]bool, fieldCount),
|
||||||
dirtyIndices: make(map[types.FieldIndex][]uint64, fieldCount),
|
dirtyIndices: make(map[types.FieldIndex][]uint64, fieldCount),
|
||||||
stateFieldLeaves: make(map[types.FieldIndex]*fieldtrie.FieldTrie, fieldCount),
|
stateFieldLeaves: make(map[types.FieldIndex]*fieldtrie.FieldTrie, fieldCount),
|
||||||
rebuildTrie: make(map[types.FieldIndex]bool, fieldCount),
|
rebuildTrie: make(map[types.FieldIndex]bool, fieldCount),
|
||||||
valMapHandler: stateutil.NewValMapHandler(st.Validators),
|
valMapHandler: stateutil.NewValMapHandler(st.Validators),
|
||||||
|
validatorIndexCache: newFinalizedValidatorIndexCache(), //only used in post-electra and only populates when finalizing, otherwise it falls back to processing the full validator set
|
||||||
}
|
}
|
||||||
|
|
||||||
if features.Get().EnableExperimentalState {
|
if features.Get().EnableExperimentalState {
|
||||||
|
|||||||
@@ -74,9 +74,8 @@ type Flags struct {
|
|||||||
// BlobSaveFsync requires blob saving to block on fsync to ensure blobs are durably persisted before passing DA.
|
// BlobSaveFsync requires blob saving to block on fsync to ensure blobs are durably persisted before passing DA.
|
||||||
BlobSaveFsync bool
|
BlobSaveFsync bool
|
||||||
|
|
||||||
SaveInvalidBlock bool // SaveInvalidBlock saves invalid block to temp.
|
SaveInvalidBlock bool // SaveInvalidBlock saves invalid block to temp.
|
||||||
SaveInvalidBlob bool // SaveInvalidBlob saves invalid blob to temp.
|
SaveInvalidBlob bool // SaveInvalidBlob saves invalid blob to temp.
|
||||||
EIP6110ValidatorIndexCache bool // EIP6110ValidatorIndexCache specifies whether to use the new validator index cache.
|
|
||||||
|
|
||||||
// KeystoreImportDebounceInterval specifies the time duration the validator waits to reload new keys if they have
|
// KeystoreImportDebounceInterval specifies the time duration the validator waits to reload new keys if they have
|
||||||
// changed on disk. This feature is for advanced use cases only.
|
// changed on disk. This feature is for advanced use cases only.
|
||||||
@@ -256,11 +255,6 @@ func ConfigureBeaconChain(ctx *cli.Context) error {
|
|||||||
cfg.EnableQUIC = true
|
cfg.EnableQUIC = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.IsSet(eip6110ValidatorCache.Name) {
|
|
||||||
logEnabled(eip6110ValidatorCache)
|
|
||||||
cfg.EIP6110ValidatorIndexCache = true
|
|
||||||
}
|
|
||||||
|
|
||||||
cfg.AggregateIntervals = [3]time.Duration{aggregateFirstInterval.Value, aggregateSecondInterval.Value, aggregateThirdInterval.Value}
|
cfg.AggregateIntervals = [3]time.Duration{aggregateFirstInterval.Value, aggregateSecondInterval.Value, aggregateThirdInterval.Value}
|
||||||
Init(cfg)
|
Init(cfg)
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -166,11 +166,6 @@ var (
|
|||||||
Name: "enable-quic",
|
Name: "enable-quic",
|
||||||
Usage: "Enables connection using the QUIC protocol for peers which support it.",
|
Usage: "Enables connection using the QUIC protocol for peers which support it.",
|
||||||
}
|
}
|
||||||
// eip6110ValidatorCache is a flag for enabling the EIP-6110 validator cache.
|
|
||||||
eip6110ValidatorCache = &cli.BoolFlag{
|
|
||||||
Name: "eip6110-validator-cache",
|
|
||||||
Usage: "Enables the EIP-6110 validator cache.",
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// devModeFlags holds list of flags that are set when development mode is on.
|
// devModeFlags holds list of flags that are set when development mode is on.
|
||||||
@@ -228,7 +223,6 @@ var BeaconChainFlags = append(deprecatedBeaconFlags, append(deprecatedFlags, []c
|
|||||||
EnableLightClient,
|
EnableLightClient,
|
||||||
BlobSaveFsync,
|
BlobSaveFsync,
|
||||||
EnableQUIC,
|
EnableQUIC,
|
||||||
eip6110ValidatorCache,
|
|
||||||
}...)...)
|
}...)...)
|
||||||
|
|
||||||
// E2EBeaconChainFlags contains a list of the beacon chain feature flags to be tested in E2E.
|
// E2EBeaconChainFlags contains a list of the beacon chain feature flags to be tested in E2E.
|
||||||
|
|||||||
Reference in New Issue
Block a user