github.com/MetalBlockchain/metalgo@v1.11.9/vms/example/xsvm/cmd/issue/transfer/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 transfer 5 6 import ( 7 "github.com/spf13/pflag" 8 9 "github.com/MetalBlockchain/metalgo/genesis" 10 "github.com/MetalBlockchain/metalgo/ids" 11 "github.com/MetalBlockchain/metalgo/utils/crypto/secp256k1" 12 "github.com/MetalBlockchain/metalgo/utils/units" 13 "github.com/MetalBlockchain/metalgo/wallet/subnet/primary" 14 ) 15 16 const ( 17 URIKey = "uri" 18 ChainIDKey = "chain-id" 19 MaxFeeKey = "max-fee" 20 AssetIDKey = "asset-id" 21 AmountKey = "amount" 22 ToKey = "to" 23 PrivateKeyKey = "private-key" 24 ) 25 26 func AddFlags(flags *pflag.FlagSet) { 27 flags.String(URIKey, primary.LocalAPIURI, "API URI to use during issuance") 28 flags.String(ChainIDKey, "", "Chain to issue the transaction on") 29 flags.Uint64(MaxFeeKey, 0, "Maximum fee to spend") 30 flags.String(AssetIDKey, "[chain-id]", "Asset to send") 31 flags.Uint64(AmountKey, units.Schmeckle, "Amount to send") 32 flags.String(ToKey, genesis.EWOQKey.Address().String(), "Destination address") 33 flags.String(PrivateKeyKey, genesis.EWOQKeyFormattedStr, "Private key to sign the transaction") 34 } 35 36 type Config struct { 37 URI string 38 ChainID ids.ID 39 MaxFee uint64 40 AssetID ids.ID 41 Amount uint64 42 To ids.ShortID 43 PrivateKey *secp256k1.PrivateKey 44 } 45 46 func ParseFlags(flags *pflag.FlagSet, args []string) (*Config, error) { 47 if err := flags.Parse(args); err != nil { 48 return nil, err 49 } 50 51 uri, err := flags.GetString(URIKey) 52 if err != nil { 53 return nil, err 54 } 55 56 chainIDStr, err := flags.GetString(ChainIDKey) 57 if err != nil { 58 return nil, err 59 } 60 61 chainID, err := ids.FromString(chainIDStr) 62 if err != nil { 63 return nil, err 64 } 65 66 maxFee, err := flags.GetUint64(MaxFeeKey) 67 if err != nil { 68 return nil, err 69 } 70 71 assetID := chainID 72 if flags.Changed(AssetIDKey) { 73 assetIDStr, err := flags.GetString(AssetIDKey) 74 if err != nil { 75 return nil, err 76 } 77 78 assetID, err = ids.FromString(assetIDStr) 79 if err != nil { 80 return nil, err 81 } 82 } 83 84 amount, err := flags.GetUint64(AmountKey) 85 if err != nil { 86 return nil, err 87 } 88 89 toStr, err := flags.GetString(ToKey) 90 if err != nil { 91 return nil, err 92 } 93 94 to, err := ids.ShortFromString(toStr) 95 if err != nil { 96 return nil, err 97 } 98 99 skStr, err := flags.GetString(PrivateKeyKey) 100 if err != nil { 101 return nil, err 102 } 103 104 var sk secp256k1.PrivateKey 105 err = sk.UnmarshalText([]byte(`"` + skStr + `"`)) 106 if err != nil { 107 return nil, err 108 } 109 110 return &Config{ 111 URI: uri, 112 ChainID: chainID, 113 MaxFee: maxFee, 114 AssetID: assetID, 115 Amount: amount, 116 To: to, 117 PrivateKey: &sk, 118 }, nil 119 }