github.com/ChainSafe/chainbridge-core@v1.4.2/chains/evm/cli/flags/utils.go (about)

     1  package flags
     2  
     3  import (
     4  	"encoding/hex"
     5  	"fmt"
     6  	"math/big"
     7  
     8  	"github.com/ChainSafe/chainbridge-core/chains/evm/calls"
     9  
    10  	"github.com/ChainSafe/chainbridge-core/keystore"
    11  	"github.com/ChainSafe/chainbridge-core/types"
    12  
    13  	"github.com/ChainSafe/chainbridge-core/crypto/secp256k1"
    14  	"github.com/rs/zerolog/log"
    15  	"github.com/spf13/cobra"
    16  )
    17  
    18  const DefaultGasLimit = 2000000
    19  
    20  func GlobalFlagValues(cmd *cobra.Command) (string, uint64, *big.Int, *secp256k1.Keypair, bool, error) {
    21  	url, err := cmd.Flags().GetString("url")
    22  	if err != nil {
    23  		log.Error().Err(fmt.Errorf("url error: %v", err))
    24  		return "", DefaultGasLimit, nil, nil, false, err
    25  	}
    26  
    27  	gasLimitInt, err := cmd.Flags().GetUint64("gas-limit")
    28  	if err != nil {
    29  		log.Error().Err(fmt.Errorf("gas limit error: %v", err))
    30  		return "", DefaultGasLimit, nil, nil, false, err
    31  	}
    32  
    33  	gasPriceInt, err := cmd.Flags().GetUint64("gas-price")
    34  	if err != nil {
    35  		log.Error().Err(fmt.Errorf("gas price error: %v", err))
    36  		return "", DefaultGasLimit, nil, nil, false, err
    37  	}
    38  	var gasPrice *big.Int = nil
    39  	if gasPriceInt != 0 {
    40  		gasPrice = big.NewInt(0).SetUint64(gasPriceInt)
    41  	}
    42  
    43  	senderKeyPair, err := defineSender(cmd)
    44  	if err != nil {
    45  		log.Error().Err(fmt.Errorf("define sender error: %v", err))
    46  		return "", DefaultGasLimit, nil, nil, false, err
    47  	}
    48  
    49  	prepare, err := cmd.Flags().GetBool("prepare")
    50  	if err != nil {
    51  		log.Error().Err(fmt.Errorf("generate calldata error: %v", err))
    52  		return "", DefaultGasLimit, nil, nil, false, err
    53  	}
    54  	return url, gasLimitInt, gasPrice, senderKeyPair, prepare, nil
    55  }
    56  
    57  func defineSender(cmd *cobra.Command) (*secp256k1.Keypair, error) {
    58  	privateKey, err := cmd.Flags().GetString("private-key")
    59  	if err != nil {
    60  		return nil, err
    61  	}
    62  	if privateKey != "" {
    63  		kp, err := secp256k1.NewKeypairFromString(privateKey)
    64  		if err != nil {
    65  			return nil, err
    66  		}
    67  		return kp, nil
    68  	}
    69  	var AliceKp = keystore.TestKeyRing.EthereumKeys[keystore.AliceKey]
    70  	return AliceKp, nil
    71  }
    72  
    73  func ProcessResourceID(resourceID string) (types.ResourceID, error) {
    74  	if resourceID[0:2] == "0x" {
    75  		resourceID = resourceID[2:]
    76  	}
    77  	resourceIdBytes, err := hex.DecodeString(resourceID)
    78  	if err != nil {
    79  		return [32]byte{}, fmt.Errorf("failed decoding resourceID hex string: %s", err)
    80  	}
    81  	return calls.SliceTo32Bytes(resourceIdBytes), nil
    82  }
    83  
    84  func MarkFlagsAsRequired(cmd *cobra.Command, flags ...string) {
    85  	for _, flag := range flags {
    86  		err := cmd.MarkFlagRequired(flag)
    87  		if err != nil {
    88  			panic(err)
    89  		}
    90  	}
    91  }