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 }