From b2b48c2a4d03b463bc799782e40d4a53674fcb31 Mon Sep 17 00:00:00 2001 From: Preston Van Loon Date: Wed, 30 Oct 2019 19:05:37 -0400 Subject: [PATCH] Extract state from db (#3889) --- beacon-chain/core/state/interop/BUILD.bazel | 5 +- beacon-chain/db/filters/BUILD.bazel | 5 +- tools/extractor/BUILD.bazel | 20 ++++++++ tools/extractor/main.go | 51 +++++++++++++++++++++ 4 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 tools/extractor/BUILD.bazel create mode 100644 tools/extractor/main.go diff --git a/beacon-chain/core/state/interop/BUILD.bazel b/beacon-chain/core/state/interop/BUILD.bazel index a403ff9e90..189fb9ed65 100644 --- a/beacon-chain/core/state/interop/BUILD.bazel +++ b/beacon-chain/core/state/interop/BUILD.bazel @@ -8,7 +8,10 @@ go_library( "write_state_to_disk.go", ], importpath = "github.com/prysmaticlabs/prysm/beacon-chain/core/state/interop", - visibility = ["//beacon-chain:__subpackages__"], + visibility = [ + "//beacon-chain:__subpackages__", + "//tools:__subpackages__", + ], deps = [ "//proto/beacon/p2p/v1:go_default_library", "//proto/eth/v1alpha1:go_default_library", diff --git a/beacon-chain/db/filters/BUILD.bazel b/beacon-chain/db/filters/BUILD.bazel index 5d9c824206..d638212d9b 100644 --- a/beacon-chain/db/filters/BUILD.bazel +++ b/beacon-chain/db/filters/BUILD.bazel @@ -4,7 +4,10 @@ go_library( name = "go_default_library", srcs = ["filter.go"], importpath = "github.com/prysmaticlabs/prysm/beacon-chain/db/filters", - visibility = ["//beacon-chain:__subpackages__"], + visibility = [ + "//beacon-chain:__subpackages__", + "//tools:__subpackages__", + ], ) go_test( diff --git a/tools/extractor/BUILD.bazel b/tools/extractor/BUILD.bazel new file mode 100644 index 0000000000..0a838619bb --- /dev/null +++ b/tools/extractor/BUILD.bazel @@ -0,0 +1,20 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") + +go_library( + name = "go_default_library", + srcs = ["main.go"], + importpath = "github.com/prysmaticlabs/prysm/tools/extractor", + visibility = ["//visibility:public"], + deps = [ + "//beacon-chain/core/state/interop:go_default_library", + "//beacon-chain/db:go_default_library", + "//beacon-chain/db/filters:go_default_library", + "//shared/featureconfig:go_default_library", + ], +) + +go_binary( + name = "extractor", + embed = [":go_default_library"], + visibility = ["//visibility:public"], +) diff --git a/tools/extractor/main.go b/tools/extractor/main.go new file mode 100644 index 0000000000..8dcec7a64c --- /dev/null +++ b/tools/extractor/main.go @@ -0,0 +1,51 @@ +package main + +import ( + "context" + "flag" + "fmt" + + "github.com/prysmaticlabs/prysm/beacon-chain/core/state/interop" + "github.com/prysmaticlabs/prysm/beacon-chain/db" + "github.com/prysmaticlabs/prysm/beacon-chain/db/filters" + "github.com/prysmaticlabs/prysm/shared/featureconfig" +) + +var ( + // Required fields + datadir = flag.String("datadir", "", "Path to data directory.") + + state = flag.Uint("state", 0, "Extract state at this slot.") + +) + +func init() { + fc := featureconfig.Get() + fc.WriteSSZStateTransitions = true + featureconfig.Init(fc) +} + +func main() { + flag.Parse() + fmt.Println("Starting process...") + d, err := db.NewDB(*datadir) + if err != nil { + panic(err) + } + ctx := context.Background() + slot := uint64(*state) + roots, err := d.BlockRoots(ctx, filters.NewFilter().SetStartSlot(slot).SetEndSlot(slot)) + if err != nil { + panic(err) + } + if len(roots) != 1 { + fmt.Printf("Expected 1 block root for slot %d, got %d roots", *state, len(roots)) + } + s, err := d.State(ctx, roots[0]) + if err != nil { + panic(err) + } + + interop.WriteStateToDisk(s) + fmt.Println("done") +}