Remove unused feature flags (#3002)

* remove a few feature flags that are no longer needed

* remove other unused flags

* forgot a few more
This commit is contained in:
Preston Van Loon
2019-07-19 21:27:35 -04:00
committed by GitHub
parent e744d1a07e
commit dfc64121c6
28 changed files with 44 additions and 180 deletions

View File

@@ -6,3 +6,5 @@ test --build_tests_only
# Fix for rules_docker. See: https://github.com/bazelbuild/rules_docker/issues/842
build --host_force_python=PY2
test --host_force_python=PY2
run --host_force_python=PY2

View File

@@ -22,7 +22,6 @@ go_library(
"//proto/beacon/p2p/v1:go_default_library",
"//shared/bytesutil:go_default_library",
"//shared/event:go_default_library",
"//shared/featureconfig:go_default_library",
"//shared/p2p:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
"@com_github_prometheus_client_golang//prometheus:go_default_library",
@@ -57,7 +56,6 @@ go_test(
"//shared/bls:go_default_library",
"//shared/bytesutil:go_default_library",
"//shared/event:go_default_library",
"//shared/featureconfig:go_default_library",
"//shared/hashutil:go_default_library",
"//shared/p2p:go_default_library",
"//shared/params:go_default_library",

View File

@@ -14,7 +14,6 @@ import (
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/bytesutil"
"github.com/prysmaticlabs/prysm/shared/event"
"github.com/prysmaticlabs/prysm/shared/featureconfig"
"github.com/sirupsen/logrus"
"go.opencensus.io/trace"
)
@@ -111,14 +110,12 @@ func (c *ChainService) ReceiveBlock(ctx context.Context, block *pb.BeaconBlock)
}).Info("State transition complete")
// Check state root
if featureconfig.FeatureConfig().EnableCheckBlockStateRoot {
stateRoot, err := ssz.HashTreeRoot(beaconState)
if err != nil {
return nil, fmt.Errorf("could not hash beacon state: %v", err)
}
if !bytes.Equal(block.StateRoot, stateRoot[:]) {
return nil, fmt.Errorf("beacon state root is not equal to block state root: %#x != %#x", stateRoot, block.StateRoot)
}
stateRoot, err := ssz.HashTreeRoot(beaconState)
if err != nil {
return nil, fmt.Errorf("could not hash beacon state: %v", err)
}
if !bytes.Equal(block.StateRoot, stateRoot[:]) {
return nil, fmt.Errorf("beacon state root is not equal to block state root: %#x != %#x", stateRoot, block.StateRoot)
}
// We process the block's contained deposits, attestations, and other operations

View File

@@ -18,7 +18,6 @@ import (
"github.com/prysmaticlabs/prysm/beacon-chain/internal"
pb "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/params"
"github.com/prysmaticlabs/prysm/shared/testutil"
@@ -108,9 +107,6 @@ func TestReceiveBlock_FaultyPOWChain(t *testing.T) {
}
func TestReceiveBlock_ProcessCorrectly(t *testing.T) {
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
EnableCheckBlockStateRoot: false,
})
hook := logTest.NewGlobal()
db := internal.SetupDB(t)
defer internal.TeardownDB(t, db)
@@ -150,15 +146,15 @@ func TestReceiveBlock_ProcessCorrectly(t *testing.T) {
t.Fatal(err)
}
beaconState.Slot++
epoch := helpers.CurrentEpoch(beaconState)
slot := beaconState.Slot + 1
epoch := helpers.SlotToEpoch(slot)
randaoReveal, err := helpers.CreateRandaoReveal(beaconState, epoch, privKeys)
if err != nil {
t.Fatal(err)
}
block := &pb.BeaconBlock{
Slot: beaconState.Slot,
Slot: slot,
ParentRoot: parentRoot[:],
Body: &pb.BeaconBlockBody{
Eth1Data: &pb.Eth1Data{
@@ -171,6 +167,16 @@ func TestReceiveBlock_ProcessCorrectly(t *testing.T) {
},
}
s, err := chainService.AdvanceState(ctx, beaconState, block)
if err != nil {
t.Fatal(err)
}
stateRoot, err := ssz.HashTreeRoot(s)
if err != nil {
t.Fatal(err)
}
block.StateRoot = stateRoot[:]
if err := chainService.beaconDB.SaveJustifiedBlock(block); err != nil {
t.Fatal(err)
}
@@ -187,9 +193,6 @@ func TestReceiveBlock_ProcessCorrectly(t *testing.T) {
}
func TestReceiveBlock_UsesParentBlockState(t *testing.T) {
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
EnableCheckBlockStateRoot: false,
})
hook := logTest.NewGlobal()
db := internal.SetupDB(t)
defer internal.TeardownDB(t, db)
@@ -225,9 +228,11 @@ func TestReceiveBlock_UsesParentBlockState(t *testing.T) {
if err != nil {
t.Fatal(err)
}
// We ensure the block uses the right state parent if its ancestor is not block.Slot-1.
beaconState, err = state.ProcessSlots(ctx, beaconState, beaconState.Slot+3)
block := &pb.BeaconBlock{
Slot: beaconState.Slot + 4,
Slot: beaconState.Slot + 1,
StateRoot: []byte{},
ParentRoot: parentRoot[:],
Body: &pb.BeaconBlockBody{
@@ -239,6 +244,17 @@ func TestReceiveBlock_UsesParentBlockState(t *testing.T) {
Attestations: nil,
},
}
s, err := chainService.AdvanceState(ctx, beaconState, block)
if err != nil {
t.Fatal(err)
}
stateRoot, err := ssz.HashTreeRoot(s)
if err != nil {
t.Fatal(err)
}
block.StateRoot = stateRoot[:]
if err := chainService.beaconDB.SaveBlock(block); err != nil {
t.Fatal(err)
}
@@ -249,9 +265,6 @@ func TestReceiveBlock_UsesParentBlockState(t *testing.T) {
}
func TestReceiveBlock_DeletesBadBlock(t *testing.T) {
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
EnableCheckBlockStateRoot: false,
})
db := internal.SetupDB(t)
defer internal.TeardownDB(t, db)
ctx := context.Background()
@@ -333,9 +346,6 @@ func TestReceiveBlock_DeletesBadBlock(t *testing.T) {
if !db.IsEvilBlockHash(blockRoot) {
t.Error("Expected block root to have been blacklisted")
}
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
EnableCheckBlockStateRoot: true,
})
}
func TestReceiveBlock_CheckBlockStateRoot_GoodState(t *testing.T) {

View File

@@ -20,7 +20,6 @@ import (
"github.com/prysmaticlabs/prysm/beacon-chain/powchain"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/event"
"github.com/prysmaticlabs/prysm/shared/featureconfig"
"github.com/prysmaticlabs/prysm/shared/p2p"
"github.com/prysmaticlabs/prysm/shared/params"
"github.com/prysmaticlabs/prysm/shared/testutil"
@@ -34,10 +33,6 @@ var _ = ChainFeeds(&ChainService{})
func init() {
logrus.SetLevel(logrus.DebugLevel)
logrus.SetOutput(ioutil.Discard)
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
EnableCrosslinks: true,
EnableCheckBlockStateRoot: true,
})
}
type mockOperationService struct{}

View File

@@ -46,7 +46,6 @@ go_test(
"//beacon-chain/core/state/stateutils:go_default_library",
"//proto/beacon/p2p/v1:go_default_library",
"//shared/bls:go_default_library",
"//shared/featureconfig:go_default_library",
"//shared/hashutil:go_default_library",
"//shared/params:go_default_library",
"//shared/testutil:go_default_library",

View File

@@ -19,7 +19,6 @@ import (
"github.com/prysmaticlabs/prysm/beacon-chain/core/state/stateutils"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/bls"
"github.com/prysmaticlabs/prysm/shared/featureconfig"
"github.com/prysmaticlabs/prysm/shared/hashutil"
"github.com/prysmaticlabs/prysm/shared/params"
"github.com/prysmaticlabs/prysm/shared/testutil"
@@ -29,9 +28,6 @@ import (
)
func init() {
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
CacheTreeHash: false,
})
logrus.SetOutput(ioutil.Discard) // Ignore "validator activated" logs
}

View File

@@ -24,7 +24,6 @@ go_test(
deps = [
"//beacon-chain/core/helpers:go_default_library",
"//proto/beacon/p2p/v1:go_default_library",
"//shared/featureconfig:go_default_library",
"//shared/params:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
"@com_github_prysmaticlabs_go_bitfield//:go_default_library",

View File

@@ -11,14 +11,10 @@ import (
"github.com/prysmaticlabs/go-bitfield"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/featureconfig"
"github.com/prysmaticlabs/prysm/shared/params"
)
func init() {
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
EnableCrosslinks: true,
})
helpers.ClearShuffledValidatorCache()
// TODO(2312): remove this and use the mainnet count.

View File

@@ -35,7 +35,6 @@ go_test(
"//beacon-chain/core/helpers:go_default_library",
"//proto/beacon/p2p/v1:go_default_library",
"//shared/bls:go_default_library",
"//shared/featureconfig:go_default_library",
"//shared/hashutil:go_default_library",
"//shared/params:go_default_library",
"//shared/testutil:go_default_library",

View File

@@ -9,17 +9,12 @@ import (
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
"github.com/prysmaticlabs/prysm/beacon-chain/core/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/featureconfig"
"github.com/prysmaticlabs/prysm/shared/hashutil"
"github.com/prysmaticlabs/prysm/shared/params"
"github.com/prysmaticlabs/prysm/shared/testutil"
)
func init() {
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
CacheTreeHash: false,
})
// TODO(2312): remove this and use the mainnet count.
c := params.BeaconConfig()
c.MinGenesisActiveValidatorCount = 16384

View File

@@ -16,7 +16,6 @@ import (
"github.com/prysmaticlabs/prysm/beacon-chain/core/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/bls"
"github.com/prysmaticlabs/prysm/shared/featureconfig"
"github.com/prysmaticlabs/prysm/shared/hashutil"
"github.com/prysmaticlabs/prysm/shared/params"
"github.com/prysmaticlabs/prysm/shared/testutil"
@@ -24,12 +23,6 @@ import (
"github.com/sirupsen/logrus"
)
func init() {
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
EnableCrosslinks: true,
})
}
func TestExecuteStateTransition_IncorrectSlot(t *testing.T) {
beaconState := &pb.BeaconState{
Slot: 5,

View File

@@ -9,17 +9,10 @@ import (
"github.com/gogo/protobuf/proto"
"github.com/prysmaticlabs/go-ssz"
pb "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"
)
func init() {
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
CacheTreeHash: false,
})
}
func TestNilDB_OK(t *testing.T) {
db := setupDB(t)
defer teardownDB(t, db)

View File

@@ -54,7 +54,6 @@ go_test(
"//shared/bls:go_default_library",
"//shared/bytesutil:go_default_library",
"//shared/event:go_default_library",
"//shared/featureconfig:go_default_library",
"//shared/hashutil:go_default_library",
"//shared/params:go_default_library",
"//shared/testutil:go_default_library",

View File

@@ -13,7 +13,6 @@ import (
"github.com/prysmaticlabs/prysm/beacon-chain/db"
contracts "github.com/prysmaticlabs/prysm/contracts/deposit-contract"
pb "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"
"github.com/sirupsen/logrus"
@@ -21,10 +20,6 @@ import (
)
func init() {
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
CacheTreeHash: false,
})
logrus.SetLevel(logrus.DebugLevel)
logrus.SetOutput(ioutil.Discard)
}

View File

@@ -18,7 +18,6 @@ import (
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/bytesutil"
"github.com/prysmaticlabs/prysm/shared/event"
"github.com/prysmaticlabs/prysm/shared/featureconfig"
"github.com/prysmaticlabs/prysm/shared/hashutil"
"github.com/prysmaticlabs/prysm/shared/p2p"
"github.com/prysmaticlabs/prysm/shared/params"
@@ -30,9 +29,6 @@ import (
func init() {
logrus.SetLevel(logrus.DebugLevel)
logrus.SetOutput(ioutil.Discard)
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
CacheTreeHash: false,
})
}
type mockP2P struct {

View File

@@ -25,13 +25,9 @@ var log = logrus.WithField("prefix", "flags")
// FeatureFlagConfig is a struct to represent what features the client will perform on runtime.
type FeatureFlagConfig struct {
VerifyAttestationSigs bool // VerifyAttestationSigs declares if the client will verify attestations.
EnableCrosslinks bool // EnableCrosslinks in epoch processing.
EnableCheckBlockStateRoot bool // EnableCheckBlockStateRoot in block processing.
DisableHistoricalStatePruning bool // DisableHistoricalStatePruning when updating finalized states.
DisableGossipSub bool // DisableGossipSub in p2p messaging.
EnableCommitteesCache bool // EnableCommitteesCache for state transition.
CacheTreeHash bool // CacheTreeHash determent whether tree hashes will be cached.
EnableExcessDeposits bool // EnableExcessDeposits in validator balances.
NoGenesisDelay bool // NoGenesisDelay when processing a chain start genesis event.
}
@@ -55,22 +51,6 @@ func InitFeatureConfig(c *FeatureFlagConfig) {
// on what flags are enabled for the beacon-chain client.
func ConfigureBeaconFeatures(ctx *cli.Context) {
cfg := &FeatureFlagConfig{}
if ctx.GlobalBool(VerifyAttestationSigsFlag.Name) {
log.Info("Verifying signatures for attestations")
cfg.VerifyAttestationSigs = true
}
if ctx.GlobalBool(EnableCrosslinksFlag.Name) {
log.Info("Enabled crosslink computations")
cfg.EnableCrosslinks = true
}
if ctx.GlobalBool(EnableCheckBlockStateRootFlag.Name) {
log.Info("Enabled check block state root")
cfg.EnableCheckBlockStateRoot = true
}
if ctx.GlobalBool(CacheTreeHashFlag.Name) {
log.Info("Cache tree hashes for ssz")
cfg.CacheTreeHash = true
}
if ctx.GlobalBool(DisableHistoricalStatePruningFlag.Name) {
log.Info("Enabled historical state pruning")
cfg.DisableHistoricalStatePruning = true
@@ -90,14 +70,5 @@ func ConfigureBeaconFeatures(ctx *cli.Context) {
// on what flags are enabled for the validator client.
func ConfigureValidatorFeatures(ctx *cli.Context) {
cfg := &FeatureFlagConfig{}
if ctx.GlobalBool(VerifyAttestationSigsFlag.Name) {
log.Info("Verifying signatures for attestations")
cfg.VerifyAttestationSigs = true
}
if ctx.GlobalBool(CacheTreeHashFlag.Name) {
log.Info("Cache tree hashes for ssz")
cfg.CacheTreeHash = true
}
InitFeatureConfig(cfg)
}

View File

@@ -9,32 +9,21 @@ import (
func TestInitFeatureConfig(t *testing.T) {
cfg := &FeatureFlagConfig{
VerifyAttestationSigs: true,
NoGenesisDelay: true,
}
InitFeatureConfig(cfg)
if c := FeatureConfig(); !c.VerifyAttestationSigs {
t.Errorf("VerifyAttestationSigs in FeatureFlags incorrect. Wanted true, got false")
if c := FeatureConfig(); !c.NoGenesisDelay {
t.Errorf("NoGenesisDelay in FeatureFlags incorrect. Wanted true, got false")
}
}
func TestConfigureBeaconConfig(t *testing.T) {
app := cli.NewApp()
set := flag.NewFlagSet("test", 0)
set.Bool(VerifyAttestationSigsFlag.Name, true, "enable attestation verification")
set.Bool(NoGenesisDelayFlag.Name, true, "enable attestation verification")
context := cli.NewContext(app, set, nil)
ConfigureBeaconFeatures(context)
if c := FeatureConfig(); !c.VerifyAttestationSigs {
t.Errorf("VerifyAttestationSigs in FeatureFlags incorrect. Wanted true, got false")
}
}
func TestConfigureValidatorConfig(t *testing.T) {
app := cli.NewApp()
set := flag.NewFlagSet("test", 0)
set.Bool(VerifyAttestationSigsFlag.Name, true, "enable attestation verification")
context := cli.NewContext(app, set, nil)
ConfigureValidatorFeatures(context)
if c := FeatureConfig(); !c.VerifyAttestationSigs {
t.Errorf("VerifyAttestationSigs in FeatureFlags incorrect. Wanted true, got false")
if c := FeatureConfig(); !c.NoGenesisDelay {
t.Errorf("NoGenesisDelay in FeatureFlags incorrect. Wanted true, got false")
}
}

View File

@@ -5,26 +5,6 @@ import (
)
var (
// CacheTreeHashFlag determines whether to cache tree hashes for ssz.
CacheTreeHashFlag = cli.BoolFlag{
Name: "enable-cache-tree-hash",
Usage: "Cache tree hashes for ssz",
}
// VerifyAttestationSigsFlag determines whether to verify signatures for attestations.
VerifyAttestationSigsFlag = cli.BoolFlag{
Name: "enable-attestation-signature-verification",
Usage: "Verify signatures for attestations.",
}
// EnableCrosslinksFlag enables the processing of crosslinks in epoch processing. It is disabled by default.
EnableCrosslinksFlag = cli.BoolFlag{
Name: "enable-crosslinks",
Usage: "Enable crosslinks in epoch processing, default is disabled.",
}
// EnableCheckBlockStateRootFlag check block state root in block processing. It is disabled by default.
EnableCheckBlockStateRootFlag = cli.BoolFlag{
Name: "enable-check-block-state-root",
Usage: "Enable check block state root in block processing, default is disabled.",
}
// EnableCanonicalAttestationFilter filters and sends canonical attestation to RPC requests.
EnableCanonicalAttestationFilter = cli.BoolFlag{
Name: "enable-canonical-attestation-filter",
@@ -54,18 +34,13 @@ var (
)
// ValidatorFlags contains a list of all the feature flags that apply to the validator client.
var ValidatorFlags = []cli.Flag{
CacheTreeHashFlag,
}
var ValidatorFlags = []cli.Flag{}
// BeaconChainFlags contains a list of all the feature flags that apply to the beacon-chain client.
var BeaconChainFlags = []cli.Flag{
EnableCrosslinksFlag,
EnableCheckBlockStateRootFlag,
EnableCanonicalAttestationFilter,
DisableHistoricalStatePruningFlag,
DisableGossipSubFlag,
CacheTreeHashFlag,
EnableExcessDepositsFlag,
NoGenesisDelayFlag,
}

View File

@@ -114,6 +114,7 @@ go_test(
"service_norace_test.go",
],
embed = [":go_default_library"],
flaky = True,
race = "off", # TODO(#377): fix issues with race detection testing.
tags = ["requires-network"],
deps = [

View File

@@ -19,8 +19,5 @@ go_test(
"slice_test.go",
],
embed = [":go_default_library"],
deps = [
"//shared/featureconfig:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
],
deps = ["@com_github_prysmaticlabs_go_ssz//:go_default_library"],
)

View File

@@ -5,15 +5,8 @@ import (
"testing"
"github.com/prysmaticlabs/go-ssz"
"github.com/prysmaticlabs/prysm/shared/featureconfig"
)
func init() {
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
CacheTreeHash: false,
})
}
func TestGenericIntersection(t *testing.T) {
testCases := []struct {
setA []uint64

View File

@@ -19,7 +19,6 @@ go_test(
srcs = ["account_test.go"],
embed = [":go_default_library"],
deps = [
"//shared/featureconfig:go_default_library",
"//shared/keystore:go_default_library",
"//shared/params:go_default_library",
"//shared/testutil:go_default_library",

View File

@@ -6,18 +6,11 @@ import (
"os"
"testing"
"github.com/prysmaticlabs/prysm/shared/featureconfig"
"github.com/prysmaticlabs/prysm/shared/keystore"
"github.com/prysmaticlabs/prysm/shared/params"
"github.com/prysmaticlabs/prysm/shared/testutil"
)
func init() {
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
CacheTreeHash: false,
})
}
func TestNewValidatorAccount_AccountExists(t *testing.T) {
directory := testutil.TempDir() + "/testkeystore"
defer os.RemoveAll(directory)

View File

@@ -49,7 +49,6 @@ go_test(
"//proto/beacon/p2p/v1:go_default_library",
"//proto/beacon/rpc/v1:go_default_library",
"//shared:go_default_library",
"//shared/featureconfig:go_default_library",
"//shared/keystore:go_default_library",
"//shared/params:go_default_library",
"//shared/testutil:go_default_library",

View File

@@ -10,7 +10,6 @@ import (
"time"
"github.com/prysmaticlabs/prysm/shared"
"github.com/prysmaticlabs/prysm/shared/featureconfig"
"github.com/prysmaticlabs/prysm/shared/keystore"
"github.com/prysmaticlabs/prysm/shared/testutil"
"github.com/prysmaticlabs/prysm/validator/accounts"
@@ -35,12 +34,6 @@ func keySetup() {
}
}
func init() {
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
CacheTreeHash: false,
})
}
func TestMain(m *testing.M) {
dir := testutil.TempDir() + "/keystore1"
defer os.RemoveAll(dir)

View File

@@ -6,7 +6,6 @@ go_test(
srcs = ["node_test.go"],
embed = [":go_default_library"],
deps = [
"//shared/featureconfig:go_default_library",
"//shared/testutil:go_default_library",
"//validator/accounts:go_default_library",
"@com_github_urfave_cli//:go_default_library",

View File

@@ -5,18 +5,11 @@ import (
"os"
"testing"
"github.com/prysmaticlabs/prysm/shared/featureconfig"
"github.com/prysmaticlabs/prysm/shared/testutil"
"github.com/prysmaticlabs/prysm/validator/accounts"
"github.com/urfave/cli"
)
func init() {
featureconfig.InitFeatureConfig(&featureconfig.FeatureFlagConfig{
CacheTreeHash: false,
})
}
// Test that the sharding node can build with default flag values.
func TestNode_Builds(t *testing.T) {
app := cli.NewApp()