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:
Nishant Das
2020-06-22 23:25:55 +08:00
committed by GitHub
parent 97315c8837
commit 3b2dc8346d
4 changed files with 63 additions and 95 deletions

View File

@@ -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:

View File

@@ -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 {

View File

@@ -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

View File

@@ -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,