github.com/MetalBlockchain/metalgo@v1.11.9/vms/example/xsvm/cmd/chain/genesis/cmd.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package genesis 5 6 import ( 7 "errors" 8 "fmt" 9 "os" 10 11 "github.com/spf13/cobra" 12 13 "github.com/MetalBlockchain/metalgo/utils/formatting" 14 "github.com/MetalBlockchain/metalgo/vms/example/xsvm/genesis" 15 ) 16 17 var errUnknownEncoding = errors.New("unknown encoding") 18 19 func Command() *cobra.Command { 20 c := &cobra.Command{ 21 Use: "genesis", 22 Short: "Creates a chain's genesis and prints it to stdout", 23 RunE: genesisFunc, 24 } 25 flags := c.Flags() 26 AddFlags(flags) 27 return c 28 } 29 30 func genesisFunc(c *cobra.Command, args []string) error { 31 flags := c.Flags() 32 config, err := ParseFlags(flags, args) 33 if err != nil { 34 return err 35 } 36 37 genesisBytes, err := genesis.Codec.Marshal(genesis.CodecVersion, config.Genesis) 38 if err != nil { 39 return err 40 } 41 42 switch config.Encoding { 43 case binaryEncoding: 44 _, err = os.Stdout.Write(genesisBytes) 45 return err 46 case hexEncoding: 47 encoded, err := formatting.Encode(formatting.Hex, genesisBytes) 48 if err != nil { 49 return err 50 } 51 _, err = fmt.Println(encoded) 52 return err 53 default: 54 return fmt.Errorf("%w: %q", errUnknownEncoding, config.Encoding) 55 } 56 }