From ca554b054ff54c570df44df7595a7c47e62500d0 Mon Sep 17 00:00:00 2001 From: Bruce Riley Date: Fri, 26 Apr 2024 16:07:54 -0500 Subject: [PATCH] Node: Default devnet evm chains --- devnet/node.yaml | 52 ------- node/cmd/guardiand/node.go | 283 +++++++++---------------------------- 2 files changed, 63 insertions(+), 272 deletions(-) diff --git a/devnet/node.yaml b/devnet/node.yaml index a19d33a1b..083916242 100644 --- a/devnet/node.yaml +++ b/devnet/node.yaml @@ -82,58 +82,6 @@ spec: - node # - --ethRPC # - ws://eth-devnet:8545 - # - --bscRPC - # - ws://eth-devnet2:8545 - - --polygonRPC - - ws://eth-devnet:8545 - - --avalancheRPC - - ws://eth-devnet:8545 - - --auroraRPC - - ws://eth-devnet:8545 - - --fantomRPC - - ws://eth-devnet:8545 - - --oasisRPC - - ws://eth-devnet:8545 - - --karuraRPC - - ws://eth-devnet:8545 - - --acalaRPC - - ws://eth-devnet:8545 - - --klaytnRPC - - ws://eth-devnet:8545 - - --celoRPC - - ws://eth-devnet:8545 - - --moonbeamRPC - - ws://eth-devnet:8545 - - --arbitrumRPC - - ws://eth-devnet:8545 - - --optimismRPC - - ws://eth-devnet:8545 - - --baseRPC - - ws://eth-devnet:8545 - - --scrollRPC - - ws://eth-devnet:8545 - - --mantleRPC - - ws://eth-devnet:8545 - - --blastRPC - - ws://eth-devnet:8545 - - --xlayerRPC - - ws://eth-devnet:8545 - - --lineaRPC - - ws://eth-devnet:8545 - - --berachainRPC - - ws://eth-devnet:8545 - - --sepoliaRPC - - ws://eth-devnet:8545 - - --holeskyRPC - - ws://eth-devnet:8545 - - --arbitrumSepoliaRPC - - ws://eth-devnet:8545 - - --baseSepoliaRPC - - ws://eth-devnet:8545 - - --optimismSepoliaRPC - - ws://eth-devnet:8545 - - --polygonSepoliaRPC - - ws://eth-devnet:8545 # - --wormchainURL # - wormchain:9090 # - --accountantKeyPath diff --git a/node/cmd/guardiand/node.go b/node/cmd/guardiand/node.go index 371823bfd..f07c57f59 100644 --- a/node/cmd/guardiand/node.go +++ b/node/cmd/guardiand/node.go @@ -74,9 +74,6 @@ var ( polygonRPC *string polygonContract *string - auroraRPC *string - auroraContract *string - fantomRPC *string fantomContract *string @@ -281,9 +278,6 @@ func init() { oasisRPC = node.RegisterFlagWithValidationOrFail(NodeCmd, "oasisRPC", "Oasis RPC URL", "ws://eth-devnet:8545", []string{"ws", "wss"}) oasisContract = NodeCmd.Flags().String("oasisContract", "", "Oasis contract address") - auroraRPC = node.RegisterFlagWithValidationOrFail(NodeCmd, "auroraRPC", "Aurora Websocket RPC URL", "ws://eth-devnet:8545", []string{"ws", "wss"}) - auroraContract = NodeCmd.Flags().String("auroraContract", "", "Aurora contract address") - fantomRPC = node.RegisterFlagWithValidationOrFail(NodeCmd, "fantomRPC", "Fantom Websocket RPC URL", "ws://eth-devnet:8545", []string{"ws", "wss"}) fantomContract = NodeCmd.Flags().String("fantomContract", "", "Fantom contract address") @@ -580,35 +574,6 @@ func runNode(cmd *cobra.Command, args []string) { if *p2pNetworkID == "" { *p2pNetworkID = p2p.GetNetworkId(env) } - - // Deterministic ganache ETH devnet address. - *ethContract = unsafeDevModeEvmContractAddress(*ethContract) - *bscContract = unsafeDevModeEvmContractAddress(*bscContract) - *polygonContract = unsafeDevModeEvmContractAddress(*polygonContract) - *avalancheContract = unsafeDevModeEvmContractAddress(*avalancheContract) - *oasisContract = unsafeDevModeEvmContractAddress(*oasisContract) - *auroraContract = unsafeDevModeEvmContractAddress(*auroraContract) - *fantomContract = unsafeDevModeEvmContractAddress(*fantomContract) - *karuraContract = unsafeDevModeEvmContractAddress(*karuraContract) - *acalaContract = unsafeDevModeEvmContractAddress(*acalaContract) - *klaytnContract = unsafeDevModeEvmContractAddress(*klaytnContract) - *celoContract = unsafeDevModeEvmContractAddress(*celoContract) - *moonbeamContract = unsafeDevModeEvmContractAddress(*moonbeamContract) - *arbitrumContract = unsafeDevModeEvmContractAddress(*arbitrumContract) - *optimismContract = unsafeDevModeEvmContractAddress(*optimismContract) - *baseContract = unsafeDevModeEvmContractAddress(*baseContract) - *sepoliaContract = unsafeDevModeEvmContractAddress(*sepoliaContract) - *holeskyContract = unsafeDevModeEvmContractAddress(*holeskyContract) - *scrollContract = unsafeDevModeEvmContractAddress(*scrollContract) - *mantleContract = unsafeDevModeEvmContractAddress(*mantleContract) - *blastContract = unsafeDevModeEvmContractAddress(*blastContract) - *xlayerContract = unsafeDevModeEvmContractAddress(*xlayerContract) - *lineaContract = unsafeDevModeEvmContractAddress(*lineaContract) - *berachainContract = unsafeDevModeEvmContractAddress(*berachainContract) - *arbitrumSepoliaContract = unsafeDevModeEvmContractAddress(*arbitrumSepoliaContract) - *baseSepoliaContract = unsafeDevModeEvmContractAddress(*baseSepoliaContract) - *optimismSepoliaContract = unsafeDevModeEvmContractAddress(*optimismSepoliaContract) - *polygonSepoliaContract = unsafeDevModeEvmContractAddress(*polygonSepoliaContract) } else { // Mainnet or Testnet. // If the network parameters are not specified, use the defaults. Log a warning if they are specified since we want to discourage this. // Note that we don't want to prevent it, to allow for network upgrade testing. @@ -655,66 +620,46 @@ func runNode(cmd *cobra.Command, args []string) { if *dataDir == "" { logger.Fatal("Please specify --dataDir") } + + // Ethereum is required since we use it to get the guardian set. if *ethRPC == "" { logger.Fatal("Please specify --ethRPC") } - if *ethContract == "" { - logger.Fatal("Please specify --ethContract") - } - if *bscRPC == "" { - logger.Fatal("Please specify --bscRPC") - } - if *bscContract == "" { - logger.Fatal("Please specify --bscContract") - } - if *polygonRPC == "" { - logger.Fatal("Please specify --polygonRPC") - } - if *polygonContract == "" { - logger.Fatal("Please specify --polygonContract") - } - if *avalancheRPC == "" { - logger.Fatal("Please specify --avalancheRPC") - } - if *oasisRPC == "" { - logger.Fatal("Please specify --oasisRPC") - } - if *fantomRPC == "" { - logger.Fatal("Please specify --fantomRPC") - } - if *fantomContract == "" && !*unsafeDevMode { - logger.Fatal("Please specify --fantomContract") - } - if *auroraRPC == "" { - logger.Fatal("Please specify --auroraRPC") - } - if *auroraContract == "" && !*unsafeDevMode { - logger.Fatal("Please specify --auroraContract") - } - if *karuraRPC == "" { - logger.Fatal("Please specify --karuraRPC") - } - if *karuraContract == "" && !*unsafeDevMode { - logger.Fatal("Please specify --karuraContract") - } - if *acalaRPC == "" { - logger.Fatal("Please specify --acalaRPC") - } - if *acalaContract == "" && !*unsafeDevMode { - logger.Fatal("Please specify --acalaContract") - } - if *klaytnRPC == "" { - logger.Fatal("Please specify --klaytnRPC") - } - if *klaytnContract == "" && !*unsafeDevMode { - logger.Fatal("Please specify --klaytnContract") - } - if *celoRPC == "" { - logger.Fatal("Please specify --celoRPC") - } - if *celoContract == "" && !*unsafeDevMode { - logger.Fatal("Please specify --celoContract") + + *ethContract = checkEvmArgs(logger, *ethRPC, *ethContract, "eth", true) + *bscContract = checkEvmArgs(logger, *bscRPC, *bscContract, "bsc", true) + *polygonContract = checkEvmArgs(logger, *polygonRPC, *polygonContract, "polygon", true) + *avalancheContract = checkEvmArgs(logger, *avalancheRPC, *avalancheContract, "avalanche", true) + *oasisContract = checkEvmArgs(logger, *oasisRPC, *oasisContract, "oasis", true) + *fantomContract = checkEvmArgs(logger, *fantomRPC, *fantomContract, "fantom", true) + *karuraContract = checkEvmArgs(logger, *karuraRPC, *karuraContract, "karura", true) + *acalaContract = checkEvmArgs(logger, *acalaRPC, *acalaContract, "acala", true) + *klaytnContract = checkEvmArgs(logger, *klaytnRPC, *klaytnContract, "klaytn", true) + *celoContract = checkEvmArgs(logger, *celoRPC, *celoContract, "celo", true) + *moonbeamContract = checkEvmArgs(logger, *moonbeamRPC, *moonbeamContract, "moonbeam", true) + *arbitrumContract = checkEvmArgs(logger, *arbitrumRPC, *arbitrumContract, "arbitrum", true) + *optimismContract = checkEvmArgs(logger, *optimismRPC, *optimismContract, "optimism", true) + *baseContract = checkEvmArgs(logger, *baseRPC, *baseContract, "base", true) + *scrollContract = checkEvmArgs(logger, *scrollRPC, *scrollContract, "scroll", true) + *mantleContract = checkEvmArgs(logger, *mantleRPC, *mantleContract, "mantle", false) + *blastContract = checkEvmArgs(logger, *blastRPC, *blastContract, "blast", false) + *xlayerContract = checkEvmArgs(logger, *xlayerRPC, *xlayerContract, "xlayer", false) + *berachainContract = checkEvmArgs(logger, *berachainRPC, *berachainContract, "berachain", false) + + // These chains will only ever be testnet / mainnet. + *sepoliaContract = checkEvmArgs(logger, *sepoliaRPC, *sepoliaContract, "sepolia", false) + *arbitrumSepoliaContract = checkEvmArgs(logger, *arbitrumSepoliaRPC, *arbitrumSepoliaContract, "arbitrumSepolia", false) + *baseSepoliaContract = checkEvmArgs(logger, *baseSepoliaRPC, *baseSepoliaContract, "baseSepolia", false) + *optimismSepoliaContract = checkEvmArgs(logger, *optimismSepoliaRPC, *optimismSepoliaContract, "optimismSepolia", false) + *holeskyContract = checkEvmArgs(logger, *holeskyRPC, *holeskyContract, "holesky", false) + *polygonSepoliaContract = checkEvmArgs(logger, *polygonSepoliaRPC, *polygonSepoliaContract, "polygonSepolia", false) + + // Linea requires a couple of additional parameters. + *lineaContract = checkEvmArgs(logger, *lineaRPC, *lineaContract, "linea", false) + if (*lineaRPC != "") && (*lineaRollUpUrl == "" || *lineaRollUpContract == "") && !*unsafeDevMode { + logger.Fatal("If --lineaRPC is specified, --lineaRollUpUrl and --lineaRollUpContract must also be specified") } + if *nearRPC != "" { if *nearContract == "" { logger.Fatal("If --nearRPC is specified, then --nearContract must be specified") @@ -722,18 +667,6 @@ func runNode(cmd *cobra.Command, args []string) { } else if *nearContract != "" { logger.Fatal("If --nearRPC is not specified, then --nearContract must not be specified") } - if *moonbeamRPC == "" { - logger.Fatal("Please specify --moonbeamRPC") - } - if *moonbeamContract == "" { - logger.Fatal("Please specify --moonbeamContract") - } - if *arbitrumRPC == "" { - logger.Fatal("Please specify --arbitrumRPC") - } - if *arbitrumContract == "" { - logger.Fatal("Please specify --arbitrumContract") - } if *xplaWS != "" { if *xplaLCD == "" || *xplaContract == "" { logger.Fatal("If --xplaWS is specified, then --xplaLCD and --xplaContract must be specified") @@ -757,58 +690,6 @@ func runNode(cmd *cobra.Command, args []string) { logger.Fatal("If --suiRPC is specified, then --suiMoveEventType must be specified") } } - - if (*optimismRPC == "") != (*optimismContract == "") { - logger.Fatal("Both --optimismContract and --optimismRPC must be set together or both unset") - } - - if (*baseRPC == "") != (*baseContract == "") { - logger.Fatal("Both --baseContract and --baseRPC must be set together or both unset") - } - - if (*scrollRPC == "") != (*scrollContract == "") { - logger.Fatal("Both --scrollContract and --scrollRPC must be set together or both unset") - } - - if *mantleRPC != "" && !*testnetMode && !*unsafeDevMode { - logger.Fatal("mantle is currently only supported in devnet and testnet") - } - - if (*mantleRPC == "") != (*mantleContract == "") { - logger.Fatal("Both --mantleContract and --mantleRPC must be set together or both unset") - } - - if (*blastRPC == "") != (*blastContract == "") { - logger.Fatal("Both --blastContract and --blastRPC must be set together or both unset") - } - - if *xlayerRPC != "" && !*testnetMode && !*unsafeDevMode { - logger.Fatal("xlayer is currently only supported in devnet and testnet") - } - - if (*xlayerRPC == "") != (*xlayerContract == "") { - logger.Fatal("Both --xlayerContract and --xlayerRPC must be set together or both unset") - } - - if *lineaRPC != "" && !*testnetMode && !*unsafeDevMode { - logger.Fatal("linea is currently only supported in devnet and testnet") - } - - if (*lineaRPC == "") != (*lineaContract == "") { - logger.Fatal("Both --lineaContract and --lineaRPC must be set together or both unset") - } - if (*lineaRPC != "") && (*lineaRollUpUrl == "" || *lineaRollUpContract == "") && !*unsafeDevMode { - logger.Fatal("If --lineaRPC is specified, --lineaRollUpUrl and --lineaRollUpContract must also be specified") - } - - if *berachainRPC != "" && !*testnetMode && !*unsafeDevMode { - logger.Fatal("berachain is currently only supported in devnet and testnet") - } - - if (*berachainRPC == "") != (*berachainContract == "") { - logger.Fatal("Both --berachainContract and --berachainRPC must be set together or both unset") - } - if *gatewayWS != "" { if *gatewayLCD == "" || *gatewayContract == "" { logger.Fatal("If --gatewayWS is specified, then --gatewayLCD and --gatewayContract must be specified") @@ -817,47 +698,6 @@ func runNode(cmd *cobra.Command, args []string) { logger.Fatal("If --gatewayWS is not specified, then --gatewayLCD and --gatewayContract must not be specified") } - // These chains are only allowed in devnet and testnet. - if *testnetMode || *unsafeDevMode { - if (*sepoliaRPC == "") != (*sepoliaContract == "") { - logger.Fatal("Both --sepoliaRPC and --sepoliaContract must be set together or both unset") - } - if (*holeskyRPC == "") != (*holeskyContract == "") { - logger.Fatal("Both --holeskyRPC and --holeskyContract must be set together or both unset") - } - if (*arbitrumSepoliaRPC == "") != (*arbitrumSepoliaContract == "") { - logger.Fatal("Both --arbitrumSepoliaRPC and --arbitrumSepoliaContract must be set together or both unset") - } - if (*baseSepoliaRPC == "") != (*baseSepoliaContract == "") { - logger.Fatal("Both --baseSepoliaRPC and --baseSepoliaContract must be set together or both unset") - } - if (*optimismSepoliaRPC == "") != (*optimismSepoliaContract == "") { - logger.Fatal("Both --optimismSepoliaRPC and --optimismSepoliaContract must be set together or both unset") - } - if (*polygonSepoliaRPC == "") != (*polygonSepoliaContract == "") { - logger.Fatal("Both --polygonSepoliaRPC and --polygonSepoliaContract must be set together or both unset") - } - } else { - if *sepoliaRPC != "" || *sepoliaContract != "" { - logger.Fatal("Please do not specify --sepoliaRPC or --sepoliaContract") - } - if *holeskyRPC != "" || *holeskyContract != "" { - logger.Fatal("Please do not specify --holeskyRPC or --holeskyContract") - } - if *arbitrumSepoliaRPC != "" || *arbitrumSepoliaContract != "" { - logger.Fatal("Please do not specify --arbitrumSepoliaRPC or --arbitrumSepoliaContract") - } - if *baseSepoliaRPC != "" || *baseSepoliaContract != "" { - logger.Fatal("Please do not specify --baseSepoliaRPC or --baseSepoliaContract") - } - if *optimismSepoliaRPC != "" || *optimismSepoliaContract != "" { - logger.Fatal("Please do not specify --optimismSepoliaRPC or --optimismSepoliaContract") - } - if *polygonSepoliaRPC != "" || *polygonSepoliaContract != "" { - logger.Fatal("Please do not specify --polygonSepoliaRPC or --polygonSepoliaContract") - } - } - var publicRpcLogDetail common.GrpcLogDetail switch *publicRpcLogDetailStr { case "none": @@ -876,14 +716,12 @@ func runNode(cmd *cobra.Command, args []string) { // Solana, Terra Classic, Terra 2, and Algorand are optional in devnet if !*unsafeDevMode { - if *solanaContract == "" { logger.Fatal("Please specify --solanaContract") } if *solanaRPC == "" { logger.Fatal("Please specify --solanaRPC") } - if *terraWS == "" { logger.Fatal("Please specify --terraWS") } @@ -893,7 +731,6 @@ func runNode(cmd *cobra.Command, args []string) { if *terraContract == "" { logger.Fatal("Please specify --terraContract") } - if *terra2WS == "" { logger.Fatal("Please specify --terra2WS") } @@ -903,7 +740,6 @@ func runNode(cmd *cobra.Command, args []string) { if *terra2Contract == "" { logger.Fatal("Please specify --terra2Contract") } - if *algorandIndexerRPC == "" { logger.Fatal("Please specify --algorandIndexerRPC") } @@ -916,7 +752,6 @@ func runNode(cmd *cobra.Command, args []string) { if *algorandAppID == 0 { logger.Fatal("Please specify --algorandAppID") } - if *pythnetContract == "" { logger.Fatal("Please specify --pythnetContract") } @@ -926,7 +761,6 @@ func runNode(cmd *cobra.Command, args []string) { if *pythnetWS == "" { logger.Fatal("Please specify --pythnetWS") } - if *injectiveWS == "" { logger.Fatal("Please specify --injectiveWS") } @@ -1027,7 +861,6 @@ func runNode(cmd *cobra.Command, args []string) { rpcMap["algorandAlgodRPC"] = *algorandAlgodRPC rpcMap["aptosRPC"] = *aptosRPC rpcMap["arbitrumRPC"] = *arbitrumRPC - rpcMap["auroraRPC"] = *auroraRPC rpcMap["avalancheRPC"] = *avalancheRPC rpcMap["baseRPC"] = *baseRPC rpcMap["berachainRPC"] = *berachainRPC @@ -1347,18 +1180,6 @@ func runNode(cmd *cobra.Command, args []string) { watcherConfigs = append(watcherConfigs, wc) } - if shouldStart(auroraRPC) { - wc := &evm.WatcherConfig{ - NetworkID: "aurora", - ChainID: vaa.ChainIDAurora, - Rpc: *auroraRPC, - Contract: *auroraContract, - CcqBackfillCache: *ccqBackfillCache, - } - - watcherConfigs = append(watcherConfigs, wc) - } - if shouldStart(fantomRPC) { wc := &evm.WatcherConfig{ NetworkID: "fantom", @@ -1818,10 +1639,32 @@ func shouldStart(rpc *string) bool { return *rpc != "" && *rpc != "none" } -func unsafeDevModeEvmContractAddress(contractAddr string) string { - if contractAddr != "" { - return contractAddr +// checkEvmArgs verifies that the RPC and contract address parameters for an EVM make sense, given the environment. +// If we are in devnet mode and the contract address is not specified, it fills in the one for tilt. +func checkEvmArgs(logger *zap.Logger, rpc string, contractAddr, chainLabel string, mainnetSupported bool) string { + if !*unsafeDevMode { + // In mainnet / testnet, if either parameter is specified, they must both be specified. + if (rpc == "") != (contractAddr == "") { + logger.Fatal(fmt.Sprintf("Both --%sContract and --%sRPC must be set together or both unset", chainLabel, chainLabel)) + } + } else { + // In devnet, if RPC is set but contract is not set, use the standard development environment address. + if rpc == "" { + if contractAddr != "" { + logger.Fatal(fmt.Sprintf("If --%sRPC is not set, --%sContract must not be set", chainLabel, chainLabel)) + } + } else { + if contractAddr == "" { + contractAddr = devnet.GanacheWormholeContractAddress.Hex() + } + } } - - return devnet.GanacheWormholeContractAddress.Hex() + if contractAddr != "" && !mainnetSupported && mainnetMode() { + logger.Fatal(fmt.Sprintf("Chain %s not supported in mainnet", chainLabel)) + } + return contractAddr +} + +func mainnetMode() bool { + return (!*unsafeDevMode && !*testnetMode) }