Skip to content

Commit 8930b46

Browse files
committed
initialize genesis data asap at node start
1 parent b1ac820 commit 8930b46

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+793
-337
lines changed

beacon-chain/db/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ go_library(
1313
visibility = [
1414
"//beacon-chain:__subpackages__",
1515
"//cmd/beacon-chain:__subpackages__",
16+
"//genesis:__subpackages__",
1617
"//testing/slasher/simulator:__pkg__",
1718
"//tools:__subpackages__",
1819
],

beacon-chain/db/kv/BUILD.bazel

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ go_library(
3838
"//beacon-chain/db/filters:go_default_library",
3939
"//beacon-chain/db/iface:go_default_library",
4040
"//beacon-chain/state:go_default_library",
41-
"//beacon-chain/state/genesis:go_default_library",
4241
"//beacon-chain/state/state-native:go_default_library",
4342
"//config/features:go_default_library",
4443
"//config/fieldparams:go_default_library",
@@ -50,6 +49,7 @@ go_library(
5049
"//container/slice:go_default_library",
5150
"//encoding/bytesutil:go_default_library",
5251
"//encoding/ssz/detect:go_default_library",
52+
"//genesis:go_default_library",
5353
"//io/file:go_default_library",
5454
"//monitoring/progress:go_default_library",
5555
"//monitoring/tracing:go_default_library",
@@ -106,7 +106,6 @@ go_test(
106106
"//beacon-chain/db/filters:go_default_library",
107107
"//beacon-chain/db/iface:go_default_library",
108108
"//beacon-chain/state:go_default_library",
109-
"//beacon-chain/state/genesis:go_default_library",
110109
"//beacon-chain/state/state-native:go_default_library",
111110
"//config/features:go_default_library",
112111
"//config/fieldparams:go_default_library",
@@ -116,6 +115,7 @@ go_test(
116115
"//consensus-types/light-client:go_default_library",
117116
"//consensus-types/primitives:go_default_library",
118117
"//encoding/bytesutil:go_default_library",
118+
"//genesis/embedded:go_default_library",
119119
"//proto/dbval:go_default_library",
120120
"//proto/engine/v1:go_default_library",
121121
"//proto/prysm/v1alpha1:go_default_library",

beacon-chain/db/kv/genesis.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
dbIface "github.com/OffchainLabs/prysm/v6/beacon-chain/db/iface"
99
"github.com/OffchainLabs/prysm/v6/beacon-chain/state"
1010
"github.com/OffchainLabs/prysm/v6/encoding/ssz/detect"
11+
"github.com/OffchainLabs/prysm/v6/genesis"
1112
ethpb "github.com/OffchainLabs/prysm/v6/proto/prysm/v1alpha1"
1213
"github.com/pkg/errors"
1314
)
@@ -97,8 +98,22 @@ func (s *Store) EnsureEmbeddedGenesis(ctx context.Context) error {
9798
if err != nil {
9899
return err
99100
}
100-
if gs != nil && !gs.IsNil() {
101+
if !state.IsNil(gs) {
101102
return s.SaveGenesisData(ctx, gs)
102103
}
103104
return nil
104105
}
106+
107+
type LegacyGenesisProvider struct {
108+
store *Store
109+
}
110+
111+
func NewLegacyGenesisProvider(store *Store) *LegacyGenesisProvider {
112+
return &LegacyGenesisProvider{store: store}
113+
}
114+
115+
var _ genesis.Provider = &LegacyGenesisProvider{}
116+
117+
func (p *LegacyGenesisProvider) Genesis(ctx context.Context) (state.BeaconState, error) {
118+
return p.store.LegacyGenesisState(ctx)
119+
}

beacon-chain/db/kv/state.go

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@ import (
66
"fmt"
77

88
"github.com/OffchainLabs/prysm/v6/beacon-chain/state"
9-
"github.com/OffchainLabs/prysm/v6/beacon-chain/state/genesis"
109
statenative "github.com/OffchainLabs/prysm/v6/beacon-chain/state/state-native"
1110
"github.com/OffchainLabs/prysm/v6/config/features"
12-
"github.com/OffchainLabs/prysm/v6/config/params"
1311
"github.com/OffchainLabs/prysm/v6/consensus-types/blocks"
1412
"github.com/OffchainLabs/prysm/v6/consensus-types/primitives"
1513
"github.com/OffchainLabs/prysm/v6/encoding/bytesutil"
16-
"github.com/OffchainLabs/prysm/v6/monitoring/tracing"
14+
"github.com/OffchainLabs/prysm/v6/genesis"
1715
"github.com/OffchainLabs/prysm/v6/monitoring/tracing/trace"
1816
ethpb "github.com/OffchainLabs/prysm/v6/proto/prysm/v1alpha1"
1917
"github.com/OffchainLabs/prysm/v6/runtime/version"
@@ -65,21 +63,16 @@ func (s *Store) StateOrError(ctx context.Context, blockRoot [32]byte) (state.Bea
6563
return st, nil
6664
}
6765

68-
// GenesisState returns the genesis state in beacon chain.
6966
func (s *Store) GenesisState(ctx context.Context) (state.BeaconState, error) {
70-
ctx, span := trace.StartSpan(ctx, "BeaconDB.GenesisState")
71-
defer span.End()
67+
return genesis.State()
68+
}
7269

73-
cached, err := genesis.State(params.BeaconConfig().ConfigName)
74-
if err != nil {
75-
tracing.AnnotateError(span, err)
76-
return nil, err
77-
}
78-
span.SetAttributes(trace.BoolAttribute("cache_hit", cached != nil))
79-
if cached != nil {
80-
return cached, nil
81-
}
70+
// GenesisState returns the genesis state in beacon chain.
71+
func (s *Store) LegacyGenesisState(ctx context.Context) (state.BeaconState, error) {
72+
ctx, span := trace.StartSpan(ctx, "BeaconDB.LegacyGenesisState")
73+
defer span.End()
8274

75+
var err error
8376
var st state.BeaconState
8477
err = s.db.View(func(tx *bolt.Tx) error {
8578
// Retrieve genesis block's signing root from blocks bucket,

beacon-chain/db/kv/wss_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package kv
33
import (
44
"testing"
55

6-
"github.com/OffchainLabs/prysm/v6/beacon-chain/state/genesis"
76
"github.com/OffchainLabs/prysm/v6/config/params"
87
"github.com/OffchainLabs/prysm/v6/consensus-types/blocks"
8+
"github.com/OffchainLabs/prysm/v6/genesis/embedded"
99
"github.com/OffchainLabs/prysm/v6/testing/require"
1010
"github.com/OffchainLabs/prysm/v6/testing/util"
1111
)
@@ -18,7 +18,7 @@ func TestSaveOrigin(t *testing.T) {
1818
ctx := t.Context()
1919
db := setupDB(t)
2020

21-
st, err := genesis.State(params.MainnetName)
21+
st, err := embedded.ByName(params.MainnetName)
2222
require.NoError(t, err)
2323

2424
sb, err := st.MarshalSSZ()

beacon-chain/node/BUILD.bazel

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ load("@prysm//tools/go:def.bzl", "go_library", "go_test")
33
go_library(
44
name = "go_default_library",
55
srcs = [
6+
"clear_db.go",
67
"config.go",
78
"log.go",
89
"node.go",
@@ -50,7 +51,6 @@ go_library(
5051
"//beacon-chain/sync/backfill:go_default_library",
5152
"//beacon-chain/sync/backfill/coverage:go_default_library",
5253
"//beacon-chain/sync/checkpoint:go_default_library",
53-
"//beacon-chain/sync/genesis:go_default_library",
5454
"//beacon-chain/sync/initial-sync:go_default_library",
5555
"//beacon-chain/verification:go_default_library",
5656
"//cmd:go_default_library",
@@ -60,6 +60,7 @@ go_library(
6060
"//consensus-types/primitives:go_default_library",
6161
"//container/slice:go_default_library",
6262
"//encoding/bytesutil:go_default_library",
63+
"//genesis:go_default_library",
6364
"//monitoring/prometheus:go_default_library",
6465
"//monitoring/tracing:go_default_library",
6566
"//runtime:go_default_library",

beacon-chain/node/clear_db.go

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package node
2+
3+
import (
4+
"context"
5+
6+
"github.com/OffchainLabs/prysm/v6/beacon-chain/db/filesystem"
7+
"github.com/OffchainLabs/prysm/v6/beacon-chain/db/kv"
8+
"github.com/OffchainLabs/prysm/v6/beacon-chain/db/slasherkv"
9+
"github.com/OffchainLabs/prysm/v6/cmd"
10+
"github.com/pkg/errors"
11+
"github.com/urfave/cli/v2"
12+
)
13+
14+
type dbClearer struct {
15+
shouldClear bool
16+
force bool
17+
confirmed bool
18+
}
19+
20+
const (
21+
clearConfirmation = "This will delete your beacon chain database stored in your data directory. " +
22+
"Your database backups will not be removed - do you want to proceed? (Y/N)"
23+
24+
clearDeclined = "Database will not be deleted. No changes have been made."
25+
)
26+
27+
func (c *dbClearer) clearKV(ctx context.Context, db *kv.Store) (*kv.Store, error) {
28+
if !c.shouldProceed() {
29+
return db, nil
30+
}
31+
32+
log.Warning("Removing database")
33+
if err := db.ClearDB(); err != nil {
34+
return nil, errors.Wrap(err, "could not clear database")
35+
}
36+
return kv.NewKVStore(ctx, db.DatabasePath())
37+
}
38+
39+
func (c *dbClearer) clearBlobs(bs *filesystem.BlobStorage) error {
40+
if !c.shouldProceed() {
41+
return nil
42+
}
43+
44+
log.Warning("Removing blob storage")
45+
if err := bs.Clear(); err != nil {
46+
return errors.Wrap(err, "could not clear blob storage")
47+
}
48+
49+
return nil
50+
}
51+
52+
func (c *dbClearer) clearColumns(cs *filesystem.DataColumnStorage) error {
53+
if !c.shouldProceed() {
54+
return nil
55+
}
56+
57+
log.Warning("Removing data columns storage")
58+
if err := cs.Clear(); err != nil {
59+
return errors.Wrap(err, "could not clear data columns storage")
60+
}
61+
62+
return nil
63+
}
64+
65+
func (c *dbClearer) clearSlasher(ctx context.Context, db *slasherkv.Store) (*slasherkv.Store, error) {
66+
if !c.shouldProceed() {
67+
return db, nil
68+
}
69+
70+
log.Warning("Removing slasher database")
71+
if err := db.ClearDB(); err != nil {
72+
return nil, errors.Wrap(err, "could not clear slasher database")
73+
}
74+
return slasherkv.NewKVStore(ctx, db.DatabasePath())
75+
}
76+
77+
func (c *dbClearer) shouldProceed() bool {
78+
if !c.shouldClear {
79+
return false
80+
}
81+
if c.force {
82+
return true
83+
}
84+
if !c.confirmed {
85+
confirmed, err := cmd.ConfirmAction(clearConfirmation, clearDeclined)
86+
if err != nil {
87+
log.WithError(err).Error("Not clearing db due to confirmation error")
88+
return false
89+
}
90+
c.confirmed = confirmed
91+
}
92+
return c.confirmed
93+
}
94+
95+
func newDbClearer(cliCtx *cli.Context) *dbClearer {
96+
force := cliCtx.Bool(cmd.ForceClearDB.Name)
97+
return &dbClearer{
98+
shouldClear: cliCtx.Bool(cmd.ClearDB.Name) || force,
99+
force: force,
100+
}
101+
}

0 commit comments

Comments
 (0)