github.com/MetalBlockchain/metalgo@v1.11.9/vms/example/xsvm/cmd/issue/export/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 export 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 SourceChainIDKey = "source-chain-id" 19 DestinationChainIDKey = "destination-chain-id" 20 MaxFeeKey = "max-fee" 21 IsReturnKey = "is-return" 22 AmountKey = "amount" 23 ToKey = "to" 24 PrivateKeyKey = "private-key" 25 ) 26 27 func AddFlags(flags *pflag.FlagSet) { 28 flags.String(URIKey, primary.LocalAPIURI, "API URI to use during issuance") 29 flags.String(SourceChainIDKey, "", "Chain to issue the transaction on") 30 flags.String(DestinationChainIDKey, "", "Chain to send the asset to") 31 flags.Uint64(MaxFeeKey, 0, "Maximum fee to spend") 32 flags.Bool(IsReturnKey, false, "Mark this transaction as returning funds") 33 flags.Uint64(AmountKey, units.Schmeckle, "Amount to send") 34 flags.String(ToKey, genesis.EWOQKey.Address().String(), "Destination address") 35 flags.String(PrivateKeyKey, genesis.EWOQKeyFormattedStr, "Private key to sign the transaction") 36 } 37 38 type Config struct { 39 URI string 40 SourceChainID ids.ID 41 DestinationChainID ids.ID 42 MaxFee uint64 43 IsReturn bool 44 Amount uint64 45 To ids.ShortID 46 PrivateKey *secp256k1.PrivateKey 47 } 48 49 func ParseFlags(flags *pflag.FlagSet, args []string) (*Config, error) { 50 if err := flags.Parse(args); err != nil { 51 return nil, err 52 } 53 54 uri, err := flags.GetString(URIKey) 55 if err != nil { 56 return nil, err 57 } 58 59 sourceChainIDStr, err := flags.GetString(SourceChainIDKey) 60 if err != nil { 61 return nil, err 62 } 63 64 sourceChainID, err := ids.FromString(sourceChainIDStr) 65 if err != nil { 66 return nil, err 67 } 68 69 destinationChainIDStr, err := flags.GetString(DestinationChainIDKey) 70 if err != nil { 71 return nil, err 72 } 73 74 destinationChainID, err := ids.FromString(destinationChainIDStr) 75 if err != nil { 76 return nil, err 77 } 78 79 maxFee, err := flags.GetUint64(MaxFeeKey) 80 if err != nil { 81 return nil, err 82 } 83 84 isReturn, err := flags.GetBool(IsReturnKey) 85 if err != nil { 86 return nil, err 87 } 88 89 amount, err := flags.GetUint64(AmountKey) 90 if err != nil { 91 return nil, err 92 } 93 94 toStr, err := flags.GetString(ToKey) 95 if err != nil { 96 return nil, err 97 } 98 99 to, err := ids.ShortFromString(toStr) 100 if err != nil { 101 return nil, err 102 } 103 104 skStr, err := flags.GetString(PrivateKeyKey) 105 if err != nil { 106 return nil, err 107 } 108 109 var sk secp256k1.PrivateKey 110 err = sk.UnmarshalText([]byte(`"` + skStr + `"`)) 111 if err != nil { 112 return nil, err 113 } 114 115 return &Config{ 116 URI: uri, 117 SourceChainID: sourceChainID, 118 DestinationChainID: destinationChainID, 119 MaxFee: maxFee, 120 IsReturn: isReturn, 121 Amount: amount, 122 To: to, 123 PrivateKey: &sk, 124 }, nil 125 }