github.com/MetalBlockchain/metalgo@v1.11.9/vms/example/xsvm/cmd/chain/create/flags.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package create
     5  
     6  import (
     7  	"math"
     8  
     9  	"github.com/spf13/pflag"
    10  
    11  	"github.com/MetalBlockchain/metalgo/genesis"
    12  	"github.com/MetalBlockchain/metalgo/ids"
    13  	"github.com/MetalBlockchain/metalgo/utils/crypto/secp256k1"
    14  	"github.com/MetalBlockchain/metalgo/wallet/subnet/primary"
    15  )
    16  
    17  const (
    18  	URIKey        = "uri"
    19  	SubnetIDKey   = "subnet-id"
    20  	AddressKey    = "address"
    21  	BalanceKey    = "balance"
    22  	NameKey       = "name"
    23  	PrivateKeyKey = "private-key"
    24  )
    25  
    26  func AddFlags(flags *pflag.FlagSet) {
    27  	flags.String(URIKey, primary.LocalAPIURI, "API URI to use to issue the chain creation transaction")
    28  	flags.String(SubnetIDKey, "", "Subnet to create the chain under")
    29  	flags.String(AddressKey, genesis.EWOQKey.Address().String(), "Address to fund in the genesis")
    30  	flags.Uint64(BalanceKey, math.MaxUint64, "Amount to provide the funded address in the genesis")
    31  	flags.String(NameKey, "xs", "Name of the chain to create")
    32  	flags.String(PrivateKeyKey, genesis.EWOQKeyFormattedStr, "Private key to use when creating the new chain")
    33  }
    34  
    35  type Config struct {
    36  	URI        string
    37  	SubnetID   ids.ID
    38  	Address    ids.ShortID
    39  	Balance    uint64
    40  	Name       string
    41  	PrivateKey *secp256k1.PrivateKey
    42  }
    43  
    44  func ParseFlags(flags *pflag.FlagSet, args []string) (*Config, error) {
    45  	if err := flags.Parse(args); err != nil {
    46  		return nil, err
    47  	}
    48  
    49  	if err := flags.Parse(args); err != nil {
    50  		return nil, err
    51  	}
    52  
    53  	uri, err := flags.GetString(URIKey)
    54  	if err != nil {
    55  		return nil, err
    56  	}
    57  
    58  	subnetIDStr, err := flags.GetString(SubnetIDKey)
    59  	if err != nil {
    60  		return nil, err
    61  	}
    62  
    63  	subnetID, err := ids.FromString(subnetIDStr)
    64  	if err != nil {
    65  		return nil, err
    66  	}
    67  
    68  	addrStr, err := flags.GetString(AddressKey)
    69  	if err != nil {
    70  		return nil, err
    71  	}
    72  
    73  	addr, err := ids.ShortFromString(addrStr)
    74  	if err != nil {
    75  		return nil, err
    76  	}
    77  
    78  	balance, err := flags.GetUint64(BalanceKey)
    79  	if err != nil {
    80  		return nil, err
    81  	}
    82  
    83  	name, err := flags.GetString(NameKey)
    84  	if err != nil {
    85  		return nil, err
    86  	}
    87  
    88  	skStr, err := flags.GetString(PrivateKeyKey)
    89  	if err != nil {
    90  		return nil, err
    91  	}
    92  
    93  	var sk secp256k1.PrivateKey
    94  	err = sk.UnmarshalText([]byte(`"` + skStr + `"`))
    95  	if err != nil {
    96  		return nil, err
    97  	}
    98  
    99  	return &Config{
   100  		URI:        uri,
   101  		SubnetID:   subnetID,
   102  		Address:    addr,
   103  		Balance:    balance,
   104  		Name:       name,
   105  		PrivateKey: &sk,
   106  	}, nil
   107  }