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 }