github.com/prysmaticlabs/prysm@v1.4.4/tools/interop/export-genesis/main.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"os"
     7  
     8  	"github.com/prysmaticlabs/prysm/beacon-chain/db"
     9  	"github.com/prysmaticlabs/prysm/beacon-chain/db/kv"
    10  	"github.com/prysmaticlabs/prysm/shared/fileutil"
    11  )
    12  
    13  // A basic tool to extract genesis.ssz from existing beaconchain.db.
    14  // ex:
    15  //   bazel run //tools/interop/export-genesis:export-genesis -- /tmp/data/beaconchaindata /tmp/genesis.ssz
    16  func main() {
    17  	if len(os.Args) < 3 {
    18  		fmt.Println("Usage: ./main /path/to/datadir /path/to/output/genesis.ssz")
    19  		os.Exit(1)
    20  	}
    21  
    22  	fmt.Printf("Reading db at %s and writing ssz output to %s.\n", os.Args[1], os.Args[2])
    23  
    24  	d, err := db.NewDB(context.Background(), os.Args[1], &kv.Config{})
    25  	if err != nil {
    26  		panic(err)
    27  	}
    28  	defer func() {
    29  		if err := d.Close(); err != nil {
    30  			panic(err)
    31  		}
    32  	}()
    33  	gs, err := d.GenesisState(context.Background())
    34  	if err != nil {
    35  		panic(err)
    36  	}
    37  	if gs == nil || gs.IsNil() {
    38  		panic("nil genesis state")
    39  	}
    40  	b, err := gs.MarshalSSZ()
    41  	if err != nil {
    42  		panic(err)
    43  	}
    44  	if err := fileutil.WriteFile(os.Args[2], b); err != nil {
    45  		panic(err)
    46  	}
    47  	fmt.Println("done")
    48  }