github.com/prysmaticlabs/prysm@v1.4.4/tools/extractor/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "flag" 6 "fmt" 7 8 types "github.com/prysmaticlabs/eth2-types" 9 "github.com/prysmaticlabs/prysm/beacon-chain/core/state/interop" 10 "github.com/prysmaticlabs/prysm/beacon-chain/db" 11 "github.com/prysmaticlabs/prysm/beacon-chain/db/kv" 12 "github.com/prysmaticlabs/prysm/shared/featureconfig" 13 ) 14 15 var ( 16 // Required fields 17 datadir = flag.String("datadir", "", "Path to data directory.") 18 19 state = flag.Uint("state", 0, "Extract state at this slot.") 20 ) 21 22 func main() { 23 resetCfg := featureconfig.InitWithReset(&featureconfig.Flags{WriteSSZStateTransitions: true}) 24 defer resetCfg() 25 flag.Parse() 26 fmt.Println("Starting process...") 27 d, err := db.NewDB(context.Background(), *datadir, &kv.Config{}) 28 if err != nil { 29 panic(err) 30 } 31 ctx := context.Background() 32 slot := types.Slot(*state) 33 _, roots, err := d.BlockRootsBySlot(ctx, slot) 34 if err != nil { 35 panic(err) 36 } 37 if len(roots) != 1 { 38 fmt.Printf("Expected 1 block root for slot %d, got %d roots", *state, len(roots)) 39 } 40 s, err := d.State(ctx, roots[0]) 41 if err != nil { 42 panic(err) 43 } 44 45 interop.WriteStateToDisk(s) 46 fmt.Println("done") 47 }