github.com/ChainSafe/chainbridge-core@v1.4.2/chains/evm/cli/erc20/deposit.go (about) 1 package erc20 2 3 import ( 4 "fmt" 5 "math/big" 6 7 callsUtil "github.com/ChainSafe/chainbridge-core/chains/evm/calls" 8 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/contracts/bridge" 9 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/evmtransaction" 10 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/transactor" 11 "github.com/ChainSafe/chainbridge-core/chains/evm/cli/initialize" 12 "github.com/ChainSafe/chainbridge-core/util" 13 14 "github.com/ChainSafe/chainbridge-core/chains/evm/cli/flags" 15 "github.com/ChainSafe/chainbridge-core/chains/evm/cli/logger" 16 "github.com/ethereum/go-ethereum/common" 17 "github.com/rs/zerolog/log" 18 "github.com/spf13/cobra" 19 ) 20 21 var depositCmd = &cobra.Command{ 22 Use: "deposit", 23 Short: "Deposit an ERC20 token", 24 Long: "The deposit subcommand creates a new ERC20 token deposit on the bridge contract", 25 PreRun: func(cmd *cobra.Command, args []string) { 26 logger.LoggerMetadata(cmd.Name(), cmd.Flags()) 27 }, 28 PersistentPreRunE: func(cmd *cobra.Command, args []string) error { 29 return util.CallPersistentPreRun(cmd, args) 30 }, 31 RunE: func(cmd *cobra.Command, args []string) error { 32 c, err := initialize.InitializeClient(url, senderKeyPair) 33 if err != nil { 34 return err 35 } 36 t, err := initialize.InitializeTransactor(gasPrice, evmtransaction.NewTransaction, c, prepare) 37 if err != nil { 38 return err 39 } 40 return DepositCmd(cmd, args, bridge.NewBridgeContract(c, BridgeAddr, t)) 41 }, 42 Args: func(cmd *cobra.Command, args []string) error { 43 err := ValidateDepositFlags(cmd, args) 44 if err != nil { 45 return err 46 } 47 48 err = ProcessDepositFlags(cmd, args) 49 if err != nil { 50 return err 51 } 52 return nil 53 }, 54 } 55 56 func init() { 57 BindDepositFlags(depositCmd) 58 } 59 60 func BindDepositFlags(cmd *cobra.Command) { 61 cmd.Flags().StringVar(&Recipient, "recipient", "", "Address of recipient") 62 cmd.Flags().StringVar(&Bridge, "bridge", "", "Address of bridge contract") 63 cmd.Flags().StringVar(&Amount, "amount", "", "Amount to deposit") 64 cmd.Flags().Uint8Var(&DomainID, "domain", 0, "Destination domain ID") 65 cmd.Flags().StringVar(&ResourceID, "resource", "", "Resource ID for transfer") 66 cmd.Flags().Uint64Var(&Decimals, "decimals", 0, "ERC20 token decimals") 67 cmd.Flags().StringVar(&Priority, "priority", "none", "Transaction priority speed") 68 flags.MarkFlagsAsRequired(cmd, "recipient", "bridge", "amount", "domain", "resource", "decimals") 69 } 70 71 func ValidateDepositFlags(cmd *cobra.Command, args []string) error { 72 if !common.IsHexAddress(Recipient) { 73 return fmt.Errorf("invalid recipient address %s", Recipient) 74 } 75 if !common.IsHexAddress(Bridge) { 76 return fmt.Errorf("invalid bridge address %s", Bridge) 77 } 78 switch Priority { 79 case "none", "slow", "medium", "fast": 80 return nil 81 default: 82 return fmt.Errorf("invalid priority value %s, supported priorities: \"slow|medium|fast\"", Priority) 83 } 84 } 85 86 func ProcessDepositFlags(cmd *cobra.Command, args []string) error { 87 var err error 88 89 RecipientAddress = common.HexToAddress(Recipient) 90 decimals := big.NewInt(int64(Decimals)) 91 BridgeAddr = common.HexToAddress(Bridge) 92 RealAmount, err = callsUtil.UserAmountToWei(Amount, decimals) 93 if err != nil { 94 return err 95 } 96 ResourceIdBytesArr, err = flags.ProcessResourceID(ResourceID) 97 return err 98 } 99 100 func DepositCmd(cmd *cobra.Command, args []string, contract *bridge.BridgeContract) error { 101 hash, err := contract.Erc20Deposit( 102 RecipientAddress, RealAmount, ResourceIdBytesArr, 103 uint8(DomainID), transactor.TransactOptions{GasLimit: gasLimit, Priority: transactor.TxPriorities[Priority]}, 104 ) 105 if err != nil { 106 log.Error().Err(fmt.Errorf("erc20 deposit error: %v", err)) 107 return err 108 } 109 110 log.Info().Msgf( 111 "%s tokens were transferred to %s from %s with hash %s", 112 Amount, RecipientAddress.Hex(), senderKeyPair.CommonAddress().String(), hash.Hex(), 113 ) 114 return nil 115 }