github.com/ChainSafe/chainbridge-core@v1.4.2/chains/evm/cli/admin/add-relayer.go (about) 1 package admin 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/util" 10 11 "github.com/ChainSafe/chainbridge-core/chains/evm/cli/flags" 12 "github.com/ChainSafe/chainbridge-core/chains/evm/cli/initialize" 13 "github.com/ChainSafe/chainbridge-core/chains/evm/cli/logger" 14 "github.com/ethereum/go-ethereum/common" 15 "github.com/rs/zerolog/log" 16 "github.com/spf13/cobra" 17 ) 18 19 var addRelayerCmd = &cobra.Command{ 20 Use: "add-relayer", 21 Short: "Add a new relayer", 22 Long: "The add-relayer subcommand sets an address as a bridge relayer", 23 PreRun: func(cmd *cobra.Command, args []string) { 24 logger.LoggerMetadata(cmd.Name(), cmd.Flags()) 25 }, 26 PersistentPreRunE: func(cmd *cobra.Command, args []string) error { 27 return util.CallPersistentPreRun(cmd, args) 28 }, 29 RunE: func(cmd *cobra.Command, args []string) error { 30 c, err := initialize.InitializeClient(url, senderKeyPair) 31 if err != nil { 32 return err 33 } 34 t, err := initialize.InitializeTransactor(gasPrice, evmtransaction.NewTransaction, c, prepare) 35 if err != nil { 36 return err 37 } 38 return AddRelayerEVMCMD(cmd, args, bridge.NewBridgeContract(c, BridgeAddr, t)) 39 }, 40 Args: func(cmd *cobra.Command, args []string) error { 41 err := ValidateAddRelayerFlags(cmd, args) 42 if err != nil { 43 return err 44 } 45 46 ProcessAddRelayerFlags(cmd, args) 47 return nil 48 }, 49 } 50 51 func BindAddRelayerFlags(cmd *cobra.Command) { 52 cmd.Flags().StringVar(&Relayer, "relayer", "", "Address to add") 53 cmd.Flags().StringVar(&Bridge, "bridge", "", "Bridge contract address") 54 flags.MarkFlagsAsRequired(cmd, "relayer", "bridge") 55 } 56 57 func init() { 58 BindAddRelayerFlags(addRelayerCmd) 59 } 60 61 func ValidateAddRelayerFlags(cmd *cobra.Command, args []string) error { 62 if !common.IsHexAddress(Relayer) { 63 return fmt.Errorf("invalid relayer address %s", Relayer) 64 } 65 if !common.IsHexAddress(Bridge) { 66 return fmt.Errorf("invalid bridge address %s", Bridge) 67 } 68 return nil 69 } 70 71 func ProcessAddRelayerFlags(cmd *cobra.Command, args []string) { 72 RelayerAddr = common.HexToAddress(Relayer) 73 BridgeAddr = common.HexToAddress(Bridge) 74 } 75 76 func AddRelayerEVMCMD(cmd *cobra.Command, args []string, contract *bridge.BridgeContract) error { 77 log.Debug().Msgf(` 78 Adding relayer 79 Relayer address: %s 80 Bridge address: %s`, Relayer, Bridge) 81 _, err := contract.AddRelayer(RelayerAddr, transactor.TransactOptions{GasLimit: gasLimit}) 82 return err 83 }