github.com/ChainSafe/chainbridge-core@v1.4.2/chains/evm/cli/bridge/set-burn.go (about) 1 package bridge 2 3 import ( 4 "fmt" 5 6 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/contracts/bridge" 7 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/evmtransaction" 8 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/transactor" 9 "github.com/ChainSafe/chainbridge-core/chains/evm/cli/flags" 10 "github.com/ChainSafe/chainbridge-core/chains/evm/cli/initialize" 11 "github.com/ChainSafe/chainbridge-core/chains/evm/cli/logger" 12 "github.com/ChainSafe/chainbridge-core/util" 13 "github.com/ethereum/go-ethereum/common" 14 "github.com/rs/zerolog/log" 15 "github.com/spf13/cobra" 16 ) 17 18 var setBurnCmd = &cobra.Command{ 19 Use: "set-burn", 20 Short: "Set a token contract as mintable/burnable", 21 Long: "The set-burn subcommand sets a token contract as mintable/burnable in a handler", 22 PreRun: func(cmd *cobra.Command, args []string) { 23 logger.LoggerMetadata(cmd.Name(), cmd.Flags()) 24 }, 25 PersistentPreRunE: func(cmd *cobra.Command, args []string) error { 26 return util.CallPersistentPreRun(cmd, args) 27 }, 28 RunE: func(cmd *cobra.Command, args []string) error { 29 c, err := initialize.InitializeClient(url, senderKeyPair) 30 if err != nil { 31 return err 32 } 33 t, err := initialize.InitializeTransactor(gasPrice, evmtransaction.NewTransaction, c, prepare) 34 if err != nil { 35 return err 36 } 37 return SetBurnCmd(cmd, args, bridge.NewBridgeContract(c, BridgeAddr, t)) 38 }, 39 Args: func(cmd *cobra.Command, args []string) error { 40 err := ValidateSetBurnFlags(cmd, args) 41 if err != nil { 42 return err 43 } 44 45 ProcessSetBurnFlags(cmd, args) 46 return nil 47 }, 48 } 49 50 func BindSetBurnFlags(cmd *cobra.Command) { 51 cmd.Flags().StringVar(&Handler, "handler", "", "ERC20 handler contract address") 52 cmd.Flags().StringVar(&Bridge, "bridge", "", "Bridge contract address") 53 cmd.Flags().StringVar(&TokenContract, "token-contract", "", "Token contract to be registered") 54 flags.MarkFlagsAsRequired(cmd, "handler", "bridge", "token-contract") 55 } 56 57 func init() { 58 BindSetBurnFlags(setBurnCmd) 59 } 60 func ValidateSetBurnFlags(cmd *cobra.Command, args []string) error { 61 if !common.IsHexAddress(Handler) { 62 return fmt.Errorf("invalid handler address %s", Handler) 63 } 64 if !common.IsHexAddress(TokenContract) { 65 return fmt.Errorf("invalid token contract address %s", TokenContract) 66 } 67 if !common.IsHexAddress(Bridge) { 68 return fmt.Errorf("invalid bridge address %s", Bridge) 69 } 70 return nil 71 } 72 73 func ProcessSetBurnFlags(cmd *cobra.Command, args []string) { 74 HandlerAddr = common.HexToAddress(Handler) 75 BridgeAddr = common.HexToAddress(Bridge) 76 TokenContractAddr = common.HexToAddress(TokenContract) 77 } 78 func SetBurnCmd(cmd *cobra.Command, args []string, contract *bridge.BridgeContract) error { 79 log.Info().Msgf( 80 "Setting contract %s as burnable on handler %s", 81 TokenContractAddr.String(), HandlerAddr.String(), 82 ) 83 _, err := contract.SetBurnableInput( 84 HandlerAddr, TokenContractAddr, transactor.TransactOptions{GasLimit: gasLimit}, 85 ) 86 if err != nil { 87 log.Error().Err(err) 88 return err 89 } 90 log.Info().Msg("Burnable set") 91 return nil 92 }