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  }