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  }