mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-05-02 03:02:54 -04:00
Release State Field Trie (#6340)
* remove flag and references * fix flag * Merge refs/heads/master into releaseStateFieldTrie * Merge refs/heads/master into releaseStateFieldTrie
This commit is contained in:
@@ -12,7 +12,6 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/state/stateutil"
|
||||
pbp2p "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
|
||||
"github.com/prysmaticlabs/prysm/shared/bytesutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/featureconfig"
|
||||
"github.com/prysmaticlabs/prysm/shared/hashutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/htrutils"
|
||||
"github.com/prysmaticlabs/prysm/shared/params"
|
||||
@@ -246,111 +245,90 @@ func (b *BeaconState) rootSelector(field fieldIndex) ([32]byte, error) {
|
||||
case latestBlockHeader:
|
||||
return stateutil.BlockHeaderRoot(b.state.LatestBlockHeader)
|
||||
case blockRoots:
|
||||
if featureconfig.Get().EnableFieldTrie {
|
||||
if b.rebuildTrie[field] {
|
||||
err := b.resetFieldTrie(field, b.state.BlockRoots, params.BeaconConfig().SlotsPerHistoricalRoot)
|
||||
if err != nil {
|
||||
return [32]byte{}, err
|
||||
}
|
||||
b.dirtyIndices[field] = []uint64{}
|
||||
delete(b.rebuildTrie, field)
|
||||
return b.stateFieldLeaves[field].TrieRoot()
|
||||
if b.rebuildTrie[field] {
|
||||
err := b.resetFieldTrie(field, b.state.BlockRoots, params.BeaconConfig().SlotsPerHistoricalRoot)
|
||||
if err != nil {
|
||||
return [32]byte{}, err
|
||||
}
|
||||
return b.recomputeFieldTrie(blockRoots, b.state.BlockRoots)
|
||||
b.dirtyIndices[field] = []uint64{}
|
||||
delete(b.rebuildTrie, field)
|
||||
return b.stateFieldLeaves[field].TrieRoot()
|
||||
}
|
||||
return stateutil.RootsArrayHashTreeRoot(b.state.BlockRoots, params.BeaconConfig().SlotsPerHistoricalRoot, "BlockRoots")
|
||||
return b.recomputeFieldTrie(blockRoots, b.state.BlockRoots)
|
||||
case stateRoots:
|
||||
if featureconfig.Get().EnableFieldTrie {
|
||||
if b.rebuildTrie[field] {
|
||||
err := b.resetFieldTrie(field, b.state.StateRoots, params.BeaconConfig().SlotsPerHistoricalRoot)
|
||||
if err != nil {
|
||||
return [32]byte{}, err
|
||||
}
|
||||
b.dirtyIndices[field] = []uint64{}
|
||||
delete(b.rebuildTrie, field)
|
||||
return b.stateFieldLeaves[field].TrieRoot()
|
||||
if b.rebuildTrie[field] {
|
||||
err := b.resetFieldTrie(field, b.state.StateRoots, params.BeaconConfig().SlotsPerHistoricalRoot)
|
||||
if err != nil {
|
||||
return [32]byte{}, err
|
||||
}
|
||||
return b.recomputeFieldTrie(stateRoots, b.state.StateRoots)
|
||||
b.dirtyIndices[field] = []uint64{}
|
||||
delete(b.rebuildTrie, field)
|
||||
return b.stateFieldLeaves[field].TrieRoot()
|
||||
}
|
||||
return stateutil.RootsArrayHashTreeRoot(b.state.StateRoots, params.BeaconConfig().SlotsPerHistoricalRoot, "StateRoots")
|
||||
return b.recomputeFieldTrie(stateRoots, b.state.StateRoots)
|
||||
case historicalRoots:
|
||||
return htrutils.HistoricalRootsRoot(b.state.HistoricalRoots)
|
||||
case eth1Data:
|
||||
return stateutil.Eth1Root(hasher, b.state.Eth1Data)
|
||||
case eth1DataVotes:
|
||||
if featureconfig.Get().EnableFieldTrie {
|
||||
if b.rebuildTrie[field] {
|
||||
err := b.resetFieldTrie(field, b.state.Eth1DataVotes, params.BeaconConfig().EpochsPerEth1VotingPeriod*params.BeaconConfig().SlotsPerEpoch)
|
||||
if err != nil {
|
||||
return [32]byte{}, err
|
||||
}
|
||||
b.dirtyIndices[field] = []uint64{}
|
||||
delete(b.rebuildTrie, field)
|
||||
return b.stateFieldLeaves[field].TrieRoot()
|
||||
if b.rebuildTrie[field] {
|
||||
err := b.resetFieldTrie(field, b.state.Eth1DataVotes, params.BeaconConfig().EpochsPerEth1VotingPeriod*params.BeaconConfig().SlotsPerEpoch)
|
||||
if err != nil {
|
||||
return [32]byte{}, err
|
||||
}
|
||||
return b.recomputeFieldTrie(field, b.state.Eth1DataVotes)
|
||||
b.dirtyIndices[field] = []uint64{}
|
||||
delete(b.rebuildTrie, field)
|
||||
return b.stateFieldLeaves[field].TrieRoot()
|
||||
}
|
||||
return stateutil.Eth1DataVotesRoot(b.state.Eth1DataVotes)
|
||||
return b.recomputeFieldTrie(field, b.state.Eth1DataVotes)
|
||||
case validators:
|
||||
if featureconfig.Get().EnableFieldTrie {
|
||||
if b.rebuildTrie[field] {
|
||||
err := b.resetFieldTrie(field, b.state.Validators, params.BeaconConfig().ValidatorRegistryLimit)
|
||||
if err != nil {
|
||||
return [32]byte{}, err
|
||||
}
|
||||
b.dirtyIndices[validators] = []uint64{}
|
||||
delete(b.rebuildTrie, validators)
|
||||
return b.stateFieldLeaves[field].TrieRoot()
|
||||
if b.rebuildTrie[field] {
|
||||
err := b.resetFieldTrie(field, b.state.Validators, params.BeaconConfig().ValidatorRegistryLimit)
|
||||
if err != nil {
|
||||
return [32]byte{}, err
|
||||
}
|
||||
return b.recomputeFieldTrie(validators, b.state.Validators)
|
||||
b.dirtyIndices[validators] = []uint64{}
|
||||
delete(b.rebuildTrie, validators)
|
||||
return b.stateFieldLeaves[field].TrieRoot()
|
||||
}
|
||||
return stateutil.ValidatorRegistryRoot(b.state.Validators)
|
||||
return b.recomputeFieldTrie(validators, b.state.Validators)
|
||||
case balances:
|
||||
return stateutil.ValidatorBalancesRoot(b.state.Balances)
|
||||
case randaoMixes:
|
||||
if featureconfig.Get().EnableFieldTrie {
|
||||
if b.rebuildTrie[field] {
|
||||
err := b.resetFieldTrie(field, b.state.RandaoMixes, params.BeaconConfig().EpochsPerHistoricalVector)
|
||||
if err != nil {
|
||||
return [32]byte{}, err
|
||||
}
|
||||
b.dirtyIndices[field] = []uint64{}
|
||||
delete(b.rebuildTrie, field)
|
||||
return b.stateFieldLeaves[field].TrieRoot()
|
||||
if b.rebuildTrie[field] {
|
||||
err := b.resetFieldTrie(field, b.state.RandaoMixes, params.BeaconConfig().EpochsPerHistoricalVector)
|
||||
if err != nil {
|
||||
return [32]byte{}, err
|
||||
}
|
||||
return b.recomputeFieldTrie(randaoMixes, b.state.RandaoMixes)
|
||||
b.dirtyIndices[field] = []uint64{}
|
||||
delete(b.rebuildTrie, field)
|
||||
return b.stateFieldLeaves[field].TrieRoot()
|
||||
}
|
||||
return stateutil.RootsArrayHashTreeRoot(b.state.RandaoMixes, params.BeaconConfig().EpochsPerHistoricalVector, "RandaoMixes")
|
||||
return b.recomputeFieldTrie(randaoMixes, b.state.RandaoMixes)
|
||||
case slashings:
|
||||
return htrutils.SlashingsRoot(b.state.Slashings)
|
||||
case previousEpochAttestations:
|
||||
if featureconfig.Get().EnableFieldTrie {
|
||||
if b.rebuildTrie[field] {
|
||||
err := b.resetFieldTrie(field, b.state.PreviousEpochAttestations, params.BeaconConfig().MaxAttestations*params.BeaconConfig().SlotsPerEpoch)
|
||||
if err != nil {
|
||||
return [32]byte{}, err
|
||||
}
|
||||
b.dirtyIndices[field] = []uint64{}
|
||||
delete(b.rebuildTrie, field)
|
||||
return b.stateFieldLeaves[field].TrieRoot()
|
||||
if b.rebuildTrie[field] {
|
||||
err := b.resetFieldTrie(field, b.state.PreviousEpochAttestations, params.BeaconConfig().MaxAttestations*params.BeaconConfig().SlotsPerEpoch)
|
||||
if err != nil {
|
||||
return [32]byte{}, err
|
||||
}
|
||||
return b.recomputeFieldTrie(field, b.state.PreviousEpochAttestations)
|
||||
b.dirtyIndices[field] = []uint64{}
|
||||
delete(b.rebuildTrie, field)
|
||||
return b.stateFieldLeaves[field].TrieRoot()
|
||||
}
|
||||
return stateutil.EpochAttestationsRoot(b.state.PreviousEpochAttestations)
|
||||
return b.recomputeFieldTrie(field, b.state.PreviousEpochAttestations)
|
||||
case currentEpochAttestations:
|
||||
if featureconfig.Get().EnableFieldTrie {
|
||||
if b.rebuildTrie[field] {
|
||||
err := b.resetFieldTrie(field, b.state.CurrentEpochAttestations, params.BeaconConfig().MaxAttestations*params.BeaconConfig().SlotsPerEpoch)
|
||||
if err != nil {
|
||||
return [32]byte{}, err
|
||||
}
|
||||
b.dirtyIndices[field] = []uint64{}
|
||||
delete(b.rebuildTrie, field)
|
||||
return b.stateFieldLeaves[field].TrieRoot()
|
||||
if b.rebuildTrie[field] {
|
||||
err := b.resetFieldTrie(field, b.state.CurrentEpochAttestations, params.BeaconConfig().MaxAttestations*params.BeaconConfig().SlotsPerEpoch)
|
||||
if err != nil {
|
||||
return [32]byte{}, err
|
||||
}
|
||||
return b.recomputeFieldTrie(field, b.state.CurrentEpochAttestations)
|
||||
b.dirtyIndices[field] = []uint64{}
|
||||
delete(b.rebuildTrie, field)
|
||||
return b.stateFieldLeaves[field].TrieRoot()
|
||||
}
|
||||
return stateutil.EpochAttestationsRoot(b.state.CurrentEpochAttestations)
|
||||
return b.recomputeFieldTrie(field, b.state.CurrentEpochAttestations)
|
||||
case justificationBits:
|
||||
return bytesutil.ToBytes32(b.state.JustificationBits), nil
|
||||
case previousJustifiedCheckpoint:
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"github.com/prysmaticlabs/go-ssz"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/state"
|
||||
pbp2p "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
|
||||
"github.com/prysmaticlabs/prysm/shared/featureconfig"
|
||||
"github.com/prysmaticlabs/prysm/shared/params"
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil"
|
||||
)
|
||||
@@ -178,10 +177,7 @@ func TestBeaconState_HashTreeRoot(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestBeaconState_HashTreeRoot_EnableFieldTrie(t *testing.T) {
|
||||
resetCfg := featureconfig.InitWithReset(&featureconfig.Flags{EnableFieldTrie: true})
|
||||
defer resetCfg()
|
||||
|
||||
func TestBeaconState_HashTreeRoot_FieldTrie(t *testing.T) {
|
||||
testState, _ := testutil.DeterministicGenesisState(t, 64)
|
||||
|
||||
type test struct {
|
||||
|
||||
@@ -54,7 +54,6 @@ type Flags struct {
|
||||
EnableNoise bool // EnableNoise enables the beacon node to use NOISE instead of SECIO when performing a handshake with another peer.
|
||||
DontPruneStateStartUp bool // DontPruneStateStartUp disables pruning state upon beacon node start up.
|
||||
NewStateMgmt bool // NewStateMgmt enables the new state mgmt service.
|
||||
EnableFieldTrie bool // EnableFieldTrie enables the state from using field specific tries when computing the root.
|
||||
NoInitSyncBatchSaveBlocks bool // NoInitSyncBatchSaveBlocks disables batch save blocks mode during initial syncing.
|
||||
EnableStateRefCopy bool // EnableStateRefCopy copies the references to objects instead of the objects themselves when copying state fields.
|
||||
WaitForSynced bool // WaitForSynced uses WaitForSynced in validator startup to ensure it can communicate with the beacon node as soon as possible.
|
||||
@@ -196,11 +195,6 @@ func ConfigureBeaconChain(ctx *cli.Context) {
|
||||
log.Warn("Disabling new state management service")
|
||||
cfg.NewStateMgmt = false
|
||||
}
|
||||
cfg.EnableFieldTrie = true
|
||||
if ctx.Bool(disableFieldTrie.Name) {
|
||||
log.Warn("Disabling state field trie")
|
||||
cfg.EnableFieldTrie = false
|
||||
}
|
||||
if ctx.Bool(disableInitSyncBatchSaveBlocks.Name) {
|
||||
log.Warn("Disabling init sync batch save blocks mode")
|
||||
cfg.NoInitSyncBatchSaveBlocks = true
|
||||
|
||||
@@ -124,11 +124,6 @@ var (
|
||||
Name: "disable-new-state-mgmt",
|
||||
Usage: "This disables the usage of state mgmt service across Prysm",
|
||||
}
|
||||
disableFieldTrie = &cli.BoolFlag{
|
||||
Name: "disable-state-field-trie",
|
||||
Usage: "Disables the usage of state field tries to compute the state root",
|
||||
}
|
||||
|
||||
disableInitSyncBatchSaveBlocks = &cli.BoolFlag{
|
||||
Name: "disable-init-sync-batch-save-blocks",
|
||||
Usage: "Instead of saving batch blocks to the DB during initial syncing, this disables batch saving of blocks",
|
||||
@@ -430,6 +425,11 @@ var (
|
||||
Usage: deprecatedUsage,
|
||||
Hidden: true,
|
||||
}
|
||||
deprecatedDisableFieldTrie = &cli.BoolFlag{
|
||||
Name: "disable-state-field-trie",
|
||||
Usage: deprecatedUsage,
|
||||
Hidden: true,
|
||||
}
|
||||
)
|
||||
|
||||
var deprecatedFlags = []cli.Flag{
|
||||
@@ -482,6 +482,7 @@ var deprecatedFlags = []cli.Flag{
|
||||
deprecatedSchlesiTestnetFlag,
|
||||
deprecateReduceAttesterStateCopies,
|
||||
deprecatedEnableInitSyncWeightedRoundRobin,
|
||||
deprecatedDisableFieldTrie,
|
||||
}
|
||||
|
||||
// ValidatorFlags contains a list of all the feature flags that apply to the validator client.
|
||||
@@ -538,7 +539,6 @@ var BeaconChainFlags = append(deprecatedFlags, []cli.Flag{
|
||||
waitForSyncedFlag,
|
||||
skipRegenHistoricalStates,
|
||||
disableInitSyncWeightedRoundRobin,
|
||||
disableFieldTrie,
|
||||
disableStateRefCopy,
|
||||
disableNewStateMgmt,
|
||||
enableKadDht,
|
||||
|
||||
Reference in New Issue
Block a user