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  }