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  }