Explorar o código

Node: Audit chain IDs

Bruce Riley hai 10 meses
pai
achega
fa87dd30c0

+ 18 - 9
node/cmd/guardiand/adminnodes.go

@@ -85,6 +85,7 @@ func runListNodes(cmd *cobra.Command, args []string) {
 		vaa.ChainID
 	}
 
+	// NOTE: Please keep these in numerical order by chain ID.
 	networks := []network{
 		{"Solana", vaa.ChainIDSolana},
 		{"Ethereum", vaa.ChainIDEthereum},
@@ -92,10 +93,8 @@ func runListNodes(cmd *cobra.Command, args []string) {
 		{"BSC", vaa.ChainIDBSC},
 		{"Polygon", vaa.ChainIDPolygon},
 		{"Avalanche", vaa.ChainIDAvalanche},
-		{"Algorand", vaa.ChainIDAlgorand},
-		{"Aptos", vaa.ChainIDAptos},
-		{"Sui", vaa.ChainIDSui},
 		{"Oasis", vaa.ChainIDOasis},
+		{"Algorand", vaa.ChainIDAlgorand},
 		{"Aurora", vaa.ChainIDAurora},
 		{"Fantom", vaa.ChainIDFantom},
 		{"Karura", vaa.ChainIDKarura},
@@ -103,33 +102,43 @@ func runListNodes(cmd *cobra.Command, args []string) {
 		{"Klaytn", vaa.ChainIDKlaytn},
 		{"Celo", vaa.ChainIDCelo},
 		{"Near", vaa.ChainIDNear},
-		{"Terra2", vaa.ChainIDTerra2},
-		{"Pythnet", vaa.ChainIDPythNet},
 		{"Moonbeam", vaa.ChainIDMoonbeam},
+		{"Terra2", vaa.ChainIDTerra2},
+		{"Injective", vaa.ChainIDInjective},
+		// Osmosis is not supported in the guardian.
+		{"Sui", vaa.ChainIDSui},
+		{"Aptos", vaa.ChainIDAptos},
 		{"Arbitrum", vaa.ChainIDArbitrum},
 		{"Optimism", vaa.ChainIDOptimism},
+		// Gnosis is not supported in the guardian.
+		{"Pythnet", vaa.ChainIDPythNet},
 		{"Xpla", vaa.ChainIDXpla},
 		{"Btc", vaa.ChainIDBtc},
-		{"Injective", vaa.ChainIDInjective},
-		{"Ink", vaa.ChainIDInk},
 		{"Base", vaa.ChainIDBase},
+		// Filecoin is not supported in the guardian.
 		{"Sei", vaa.ChainIDSei},
+		// Rootstock is not supported in the guardian.
 		{"Scroll", vaa.ChainIDScroll},
 		{"Mantle", vaa.ChainIDMantle},
-		{"Movement", vaa.ChainIDMovement},
 		{"Blast", vaa.ChainIDBlast},
 		{"XLayer", vaa.ChainIDXLayer},
 		{"Linea", vaa.ChainIDLinea},
 		{"Berachain", vaa.ChainIDBerachain},
+		{"SeiEVM", vaa.ChainIDSeiEVM},
 		{"Snaxchain", vaa.ChainIDSnaxchain},
 		{"Unichain", vaa.ChainIDUnichain},
 		{"Worldchain", vaa.ChainIDWorldchain},
+		{"Ink", vaa.ChainIDInk},
+		{"HyperEVM", vaa.ChainIDHyperEVM},
+		{"Monad", vaa.ChainIDMonad},
+		{"Movement", vaa.ChainIDMovement},
 		{"Wormchain", vaa.ChainIDWormchain},
+		// The IBC chains (4000 range) are not included here.
 		{"Sepolia", vaa.ChainIDSepolia},
-		{"Holesky", vaa.ChainIDHolesky},
 		{"ArbitrumSepolia", vaa.ChainIDArbitrumSepolia},
 		{"BaseSepolia", vaa.ChainIDBaseSepolia},
 		{"OptimismSepolia", vaa.ChainIDOptimismSepolia},
+		{"Holesky", vaa.ChainIDHolesky},
 		{"PolygonSepolia", vaa.ChainIDPolygonSepolia},
 		{"MonadDevnet", vaa.ChainIDMonadDevnet},
 	}

+ 59 - 45
node/cmd/guardiand/node.go

@@ -946,72 +946,86 @@ func runNode(cmd *cobra.Command, args []string) {
 		logger.Fatal("Infura is known to send incorrect blocks - please use your own nodes")
 	}
 
+	// NOTE: Please keep these in numerical order by chain ID.
 	rpcMap := make(map[string]string)
-	rpcMap["acalaRPC"] = *acalaRPC
-	rpcMap["accountantWS"] = *accountantWS
+	rpcMap["solanaRPC"] = *solanaRPC
+	rpcMap["ethRPC"] = *ethRPC
+	rpcMap["terraWS"] = *terraWS
+	rpcMap["terraLCD"] = *terraLCD
+	rpcMap["bscRPC"] = *bscRPC
+	rpcMap["polygonRPC"] = *polygonRPC
+	rpcMap["avalancheRPC"] = *avalancheRPC
+	rpcMap["oasisRPC"] = *oasisRPC
 	rpcMap["algorandIndexerRPC"] = *algorandIndexerRPC
 	rpcMap["algorandAlgodRPC"] = *algorandAlgodRPC
-	rpcMap["aptosRPC"] = *aptosRPC
-	rpcMap["arbitrumRPC"] = *arbitrumRPC
-	rpcMap["avalancheRPC"] = *avalancheRPC
-	rpcMap["baseRPC"] = *baseRPC
-	rpcMap["berachainRPC"] = *berachainRPC
-	rpcMap["blastRPC"] = *blastRPC
-	rpcMap["bscRPC"] = *bscRPC
-	rpcMap["celoRPC"] = *celoRPC
-	rpcMap["ethRPC"] = *ethRPC
+	// ChainIDAurora is not supported in the guardian.
 	rpcMap["fantomRPC"] = *fantomRPC
-	rpcMap["hyperEvmRPC"] = *hyperEvmRPC
-	rpcMap["ibcBlockHeightURL"] = *ibcBlockHeightURL
-	rpcMap["ibcLCD"] = *ibcLCD
-	rpcMap["ibcWS"] = *ibcWS
-	rpcMap["injectiveLCD"] = *injectiveLCD
-	rpcMap["injectiveWS"] = *injectiveWS
-	rpcMap["inkRPC"] = *inkRPC
 	rpcMap["karuraRPC"] = *karuraRPC
+	rpcMap["acalaRPC"] = *acalaRPC
 	rpcMap["klaytnRPC"] = *klaytnRPC
-	rpcMap["lineaRPC"] = *lineaRPC
-	rpcMap["mantleRPC"] = *mantleRPC
-	rpcMap["monadRPC"] = *monadRPC
-	rpcMap["moonbeamRPC"] = *moonbeamRPC
-	rpcMap["movementRPC"] = *movementRPC
+	rpcMap["celoRPC"] = *celoRPC
 	rpcMap["nearRPC"] = *nearRPC
-	rpcMap["oasisRPC"] = *oasisRPC
+	rpcMap["moonbeamRPC"] = *moonbeamRPC
+	rpcMap["terra2WS"] = *terra2WS
+	rpcMap["terra2LCD"] = *terra2LCD
+	rpcMap["injectiveLCD"] = *injectiveLCD
+	rpcMap["injectiveWS"] = *injectiveWS
+	// ChainIDOsmosis is not supported in the guardian.
+	rpcMap["suiRPC"] = *suiRPC
+	rpcMap["aptosRPC"] = *aptosRPC
+	rpcMap["arbitrumRPC"] = *arbitrumRPC
 	rpcMap["optimismRPC"] = *optimismRPC
-	rpcMap["polygonRPC"] = *polygonRPC
+	// ChainIDGnosis is not supported in the guardian.
 	rpcMap["pythnetRPC"] = *pythnetRPC
 	rpcMap["pythnetWS"] = *pythnetWS
-	if env == common.TestNet {
-		rpcMap["sepoliaRPC"] = *sepoliaRPC
-		rpcMap["holeskyRPC"] = *holeskyRPC
-		rpcMap["arbitrumSepoliaRPC"] = *arbitrumSepoliaRPC
-		rpcMap["baseSepoliaRPC"] = *baseSepoliaRPC
-		rpcMap["optimismSepoliaRPC"] = *optimismSepoliaRPC
-		rpcMap["polygonSepoliaRPC"] = *polygonSepoliaRPC
-		rpcMap["monadDevnetRPC"] = *monadDevnetRPC
-	}
+	rpcMap["xplaWS"] = *xplaWS
+	rpcMap["xplaLCD"] = *xplaLCD
+	// ChainIDBtc is not supported in the guardian.
+	rpcMap["baseRPC"] = *baseRPC
+	// ChainIDSei is supported over IBC, so it's not listed here.
+	// ChainIDRootstock is not supported in the guardian.
 	rpcMap["scrollRPC"] = *scrollRPC
+	rpcMap["mantleRPC"] = *mantleRPC
+	rpcMap["blastRPC"] = *blastRPC
+	rpcMap["xlayerRPC"] = *xlayerRPC
+	rpcMap["lineaRPC"] = *lineaRPC
+	rpcMap["berachainRPC"] = *berachainRPC
 	rpcMap["seiEvmRPC"] = *seiEvmRPC
-	rpcMap["solanaRPC"] = *solanaRPC
 	rpcMap["snaxchainRPC"] = *snaxchainRPC
-	rpcMap["suiRPC"] = *suiRPC
-	rpcMap["terraWS"] = *terraWS
-	rpcMap["terraLCD"] = *terraLCD
-	rpcMap["terra2WS"] = *terra2WS
-	rpcMap["terra2LCD"] = *terra2LCD
 	rpcMap["unichainRPC"] = *unichainRPC
 	rpcMap["worldchainRPC"] = *worldchainRPC
-	rpcMap["gatewayWS"] = *gatewayWS
-	rpcMap["gatewayLCD"] = *gatewayLCD
+	rpcMap["inkRPC"] = *inkRPC
+	rpcMap["hyperEvmRPC"] = *hyperEvmRPC
+	rpcMap["monadRPC"] = *monadRPC
+	rpcMap["movementRPC"] = *movementRPC
+
+	// Wormchain is in the 3000 range.
 	rpcMap["wormchainURL"] = *wormchainURL
-	rpcMap["xlayerRPC"] = *xlayerRPC
-	rpcMap["xplaWS"] = *xplaWS
-	rpcMap["xplaLCD"] = *xplaLCD
 
+	// Generate the IBC chains (3000 range).
 	for _, ibcChain := range ibc.Chains {
 		rpcMap[ibcChain.String()] = "IBC"
 	}
 
+	// The testnet only chains (10000 range) go here.
+	if env == common.TestNet {
+		rpcMap["sepoliaRPC"] = *sepoliaRPC
+		rpcMap["arbitrumSepoliaRPC"] = *arbitrumSepoliaRPC
+		rpcMap["baseSepoliaRPC"] = *baseSepoliaRPC
+		rpcMap["optimismSepoliaRPC"] = *optimismSepoliaRPC
+		rpcMap["holeskyRPC"] = *holeskyRPC
+		rpcMap["polygonSepoliaRPC"] = *polygonSepoliaRPC
+		rpcMap["monadDevnetRPC"] = *monadDevnetRPC
+	}
+
+	// Other, non-chain specific parameters go here.
+	rpcMap["accountantWS"] = *accountantWS
+	rpcMap["gatewayWS"] = *gatewayWS
+	rpcMap["gatewayLCD"] = *gatewayLCD
+	rpcMap["ibcBlockHeightURL"] = *ibcBlockHeightURL
+	rpcMap["ibcLCD"] = *ibcLCD
+	rpcMap["ibcWS"] = *ibcWS
+
 	// Handle SIGTERM
 	sigterm := make(chan os.Signal, 1)
 	signal.Notify(sigterm, syscall.SIGTERM)

+ 71 - 44
node/pkg/proto/publicrpc/v1/publicrpc.pb.go

@@ -43,18 +43,20 @@ const (
 	ChainID_CHAIN_ID_NEAR        ChainID = 15
 	ChainID_CHAIN_ID_MOONBEAM    ChainID = 16
 	// OBSOLETE: CHAIN_ID_NEON = 17;
-	ChainID_CHAIN_ID_TERRA2           ChainID = 18
-	ChainID_CHAIN_ID_INJECTIVE        ChainID = 19
-	ChainID_CHAIN_ID_OSMOSIS          ChainID = 20
-	ChainID_CHAIN_ID_SUI              ChainID = 21
-	ChainID_CHAIN_ID_APTOS            ChainID = 22
-	ChainID_CHAIN_ID_ARBITRUM         ChainID = 23
-	ChainID_CHAIN_ID_OPTIMISM         ChainID = 24
-	ChainID_CHAIN_ID_GNOSIS           ChainID = 25
-	ChainID_CHAIN_ID_PYTHNET          ChainID = 26
+	ChainID_CHAIN_ID_TERRA2    ChainID = 18
+	ChainID_CHAIN_ID_INJECTIVE ChainID = 19
+	ChainID_CHAIN_ID_OSMOSIS   ChainID = 20
+	ChainID_CHAIN_ID_SUI       ChainID = 21
+	ChainID_CHAIN_ID_APTOS     ChainID = 22
+	ChainID_CHAIN_ID_ARBITRUM  ChainID = 23
+	ChainID_CHAIN_ID_OPTIMISM  ChainID = 24
+	ChainID_CHAIN_ID_GNOSIS    ChainID = 25
+	ChainID_CHAIN_ID_PYTHNET   ChainID = 26
+	// 27 belongs to a chain that was never deployed.
 	ChainID_CHAIN_ID_XPLA             ChainID = 28
 	ChainID_CHAIN_ID_BTC              ChainID = 29
 	ChainID_CHAIN_ID_BASE             ChainID = 30
+	ChainID_CHAIN_ID_FILECOIN         ChainID = 31
 	ChainID_CHAIN_ID_SEI              ChainID = 32
 	ChainID_CHAIN_ID_ROOTSTOCK        ChainID = 33
 	ChainID_CHAIN_ID_SCROLL           ChainID = 34
@@ -64,10 +66,14 @@ const (
 	ChainID_CHAIN_ID_LINEA            ChainID = 38
 	ChainID_CHAIN_ID_BERACHAIN        ChainID = 39
 	ChainID_CHAIN_ID_SEIEVM           ChainID = 40
+	ChainID_CHAIN_ID_ECLIPSE          ChainID = 41
+	ChainID_CHAIN_ID_BOB              ChainID = 42
 	ChainID_CHAIN_ID_SNAXCHAIN        ChainID = 43
 	ChainID_CHAIN_ID_UNICHAIN         ChainID = 44
 	ChainID_CHAIN_ID_WORLDCHAIN       ChainID = 45
 	ChainID_CHAIN_ID_INK              ChainID = 46
+	ChainID_CHAIN_ID_HYPER_EVM        ChainID = 47
+	ChainID_CHAIN_ID_MONAD            ChainID = 48
 	ChainID_CHAIN_ID_MOVEMENT         ChainID = 49
 	ChainID_CHAIN_ID_WORMCHAIN        ChainID = 3104
 	ChainID_CHAIN_ID_COSMOSHUB        ChainID = 4000
@@ -79,6 +85,7 @@ const (
 	ChainID_CHAIN_ID_SEDA             ChainID = 4006
 	ChainID_CHAIN_ID_DYMENSION        ChainID = 4007
 	ChainID_CHAIN_ID_PROVENANCE       ChainID = 4008
+	ChainID_CHAIN_ID_NOBLE            ChainID = 4009
 	ChainID_CHAIN_ID_SEPOLIA          ChainID = 10002
 	ChainID_CHAIN_ID_ARBITRUM_SEPOLIA ChainID = 10003
 	ChainID_CHAIN_ID_BASE_SEPOLIA     ChainID = 10004
@@ -120,6 +127,7 @@ var (
 		28:    "CHAIN_ID_XPLA",
 		29:    "CHAIN_ID_BTC",
 		30:    "CHAIN_ID_BASE",
+		31:    "CHAIN_ID_FILECOIN",
 		32:    "CHAIN_ID_SEI",
 		33:    "CHAIN_ID_ROOTSTOCK",
 		34:    "CHAIN_ID_SCROLL",
@@ -129,10 +137,14 @@ var (
 		38:    "CHAIN_ID_LINEA",
 		39:    "CHAIN_ID_BERACHAIN",
 		40:    "CHAIN_ID_SEIEVM",
+		41:    "CHAIN_ID_ECLIPSE",
+		42:    "CHAIN_ID_BOB",
 		43:    "CHAIN_ID_SNAXCHAIN",
 		44:    "CHAIN_ID_UNICHAIN",
 		45:    "CHAIN_ID_WORLDCHAIN",
 		46:    "CHAIN_ID_INK",
+		47:    "CHAIN_ID_HYPER_EVM",
+		48:    "CHAIN_ID_MONAD",
 		49:    "CHAIN_ID_MOVEMENT",
 		3104:  "CHAIN_ID_WORMCHAIN",
 		4000:  "CHAIN_ID_COSMOSHUB",
@@ -144,6 +156,7 @@ var (
 		4006:  "CHAIN_ID_SEDA",
 		4007:  "CHAIN_ID_DYMENSION",
 		4008:  "CHAIN_ID_PROVENANCE",
+		4009:  "CHAIN_ID_NOBLE",
 		10002: "CHAIN_ID_SEPOLIA",
 		10003: "CHAIN_ID_ARBITRUM_SEPOLIA",
 		10004: "CHAIN_ID_BASE_SEPOLIA",
@@ -182,6 +195,7 @@ var (
 		"CHAIN_ID_XPLA":             28,
 		"CHAIN_ID_BTC":              29,
 		"CHAIN_ID_BASE":             30,
+		"CHAIN_ID_FILECOIN":         31,
 		"CHAIN_ID_SEI":              32,
 		"CHAIN_ID_ROOTSTOCK":        33,
 		"CHAIN_ID_SCROLL":           34,
@@ -191,10 +205,14 @@ var (
 		"CHAIN_ID_LINEA":            38,
 		"CHAIN_ID_BERACHAIN":        39,
 		"CHAIN_ID_SEIEVM":           40,
+		"CHAIN_ID_ECLIPSE":          41,
+		"CHAIN_ID_BOB":              42,
 		"CHAIN_ID_SNAXCHAIN":        43,
 		"CHAIN_ID_UNICHAIN":         44,
 		"CHAIN_ID_WORLDCHAIN":       45,
 		"CHAIN_ID_INK":              46,
+		"CHAIN_ID_HYPER_EVM":        47,
+		"CHAIN_ID_MONAD":            48,
 		"CHAIN_ID_MOVEMENT":         49,
 		"CHAIN_ID_WORMCHAIN":        3104,
 		"CHAIN_ID_COSMOSHUB":        4000,
@@ -206,6 +224,7 @@ var (
 		"CHAIN_ID_SEDA":             4006,
 		"CHAIN_ID_DYMENSION":        4007,
 		"CHAIN_ID_PROVENANCE":       4008,
+		"CHAIN_ID_NOBLE":            4009,
 		"CHAIN_ID_SEPOLIA":          10002,
 		"CHAIN_ID_ARBITRUM_SEPOLIA": 10003,
 		"CHAIN_ID_BASE_SEPOLIA":     10004,
@@ -1403,7 +1422,7 @@ var file_publicrpc_v1_publicrpc_proto_rawDesc = []byte{
 	0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f,
 	0x72, 0x69, 0x67, 0x69, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05,
 	0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x70, 0x72, 0x69,
-	0x63, 0x65, 0x2a, 0xcc, 0x0a, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x18,
+	0x63, 0x65, 0x2a, 0xcc, 0x0b, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x18,
 	0x0a, 0x14, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
 	0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49,
 	0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x4f, 0x4c, 0x41, 0x4e, 0x41, 0x10, 0x01, 0x12, 0x15, 0x0a,
@@ -1442,40 +1461,48 @@ var file_publicrpc_v1_publicrpc_proto_rawDesc = []byte{
 	0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x58, 0x50, 0x4c, 0x41, 0x10, 0x1c, 0x12, 0x10, 0x0a,
 	0x0c, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x42, 0x54, 0x43, 0x10, 0x1d, 0x12,
 	0x11, 0x0a, 0x0d, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x42, 0x41, 0x53, 0x45,
-	0x10, 0x1e, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53,
-	0x45, 0x49, 0x10, 0x20, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44,
-	0x5f, 0x52, 0x4f, 0x4f, 0x54, 0x53, 0x54, 0x4f, 0x43, 0x4b, 0x10, 0x21, 0x12, 0x13, 0x0a, 0x0f,
-	0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x43, 0x52, 0x4f, 0x4c, 0x4c, 0x10,
-	0x22, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4d, 0x41,
-	0x4e, 0x54, 0x4c, 0x45, 0x10, 0x23, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f,
-	0x49, 0x44, 0x5f, 0x42, 0x4c, 0x41, 0x53, 0x54, 0x10, 0x24, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48,
-	0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x58, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0x25, 0x12,
-	0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4c, 0x49, 0x4e, 0x45,
-	0x41, 0x10, 0x26, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f,
-	0x42, 0x45, 0x52, 0x41, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x27, 0x12, 0x13, 0x0a, 0x0f, 0x43,
-	0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x45, 0x49, 0x45, 0x56, 0x4d, 0x10, 0x28,
-	0x12, 0x16, 0x0a, 0x12, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x4e, 0x41,
-	0x58, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x2b, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49,
-	0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x2c, 0x12,
-	0x17, 0x0a, 0x13, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x57, 0x4f, 0x52, 0x4c,
-	0x44, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x2d, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x48, 0x41, 0x49,
-	0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x4b, 0x10, 0x2e, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x48,
-	0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4d, 0x4f, 0x56, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x10,
-	0x31, 0x12, 0x17, 0x0a, 0x12, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x57, 0x4f,
-	0x52, 0x4d, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0xa0, 0x18, 0x12, 0x17, 0x0a, 0x12, 0x43, 0x48,
-	0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x53, 0x4d, 0x4f, 0x53, 0x48, 0x55, 0x42,
-	0x10, 0xa0, 0x1f, 0x12, 0x13, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f,
-	0x45, 0x56, 0x4d, 0x4f, 0x53, 0x10, 0xa1, 0x1f, 0x12, 0x14, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49,
-	0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4b, 0x55, 0x4a, 0x49, 0x52, 0x41, 0x10, 0xa2, 0x1f, 0x12, 0x15,
-	0x0a, 0x10, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4e, 0x45, 0x55, 0x54, 0x52,
-	0x4f, 0x4e, 0x10, 0xa3, 0x1f, 0x12, 0x16, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49,
-	0x44, 0x5f, 0x43, 0x45, 0x4c, 0x45, 0x53, 0x54, 0x49, 0x41, 0x10, 0xa4, 0x1f, 0x12, 0x16, 0x0a,
-	0x11, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x47, 0x41,
-	0x5a, 0x45, 0x10, 0xa5, 0x1f, 0x12, 0x12, 0x0a, 0x0d, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49,
-	0x44, 0x5f, 0x53, 0x45, 0x44, 0x41, 0x10, 0xa6, 0x1f, 0x12, 0x17, 0x0a, 0x12, 0x43, 0x48, 0x41,
-	0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x44, 0x59, 0x4d, 0x45, 0x4e, 0x53, 0x49, 0x4f, 0x4e, 0x10,
-	0xa7, 0x1f, 0x12, 0x18, 0x0a, 0x13, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x50,
-	0x52, 0x4f, 0x56, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x10, 0xa8, 0x1f, 0x12, 0x15, 0x0a, 0x10,
+	0x10, 0x1e, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x46,
+	0x49, 0x4c, 0x45, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0x1f, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x48, 0x41,
+	0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x45, 0x49, 0x10, 0x20, 0x12, 0x16, 0x0a, 0x12, 0x43,
+	0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x52, 0x4f, 0x4f, 0x54, 0x53, 0x54, 0x4f, 0x43,
+	0x4b, 0x10, 0x21, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f,
+	0x53, 0x43, 0x52, 0x4f, 0x4c, 0x4c, 0x10, 0x22, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49,
+	0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4d, 0x41, 0x4e, 0x54, 0x4c, 0x45, 0x10, 0x23, 0x12, 0x12, 0x0a,
+	0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x42, 0x4c, 0x41, 0x53, 0x54, 0x10,
+	0x24, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x58, 0x4c,
+	0x41, 0x59, 0x45, 0x52, 0x10, 0x25, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f,
+	0x49, 0x44, 0x5f, 0x4c, 0x49, 0x4e, 0x45, 0x41, 0x10, 0x26, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x48,
+	0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x42, 0x45, 0x52, 0x41, 0x43, 0x48, 0x41, 0x49, 0x4e,
+	0x10, 0x27, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53,
+	0x45, 0x49, 0x45, 0x56, 0x4d, 0x10, 0x28, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x48, 0x41, 0x49, 0x4e,
+	0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, 0x4c, 0x49, 0x50, 0x53, 0x45, 0x10, 0x29, 0x12, 0x10, 0x0a,
+	0x0c, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x42, 0x4f, 0x42, 0x10, 0x2a, 0x12,
+	0x16, 0x0a, 0x12, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x4e, 0x41, 0x58,
+	0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x2b, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49, 0x4e,
+	0x5f, 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x2c, 0x12, 0x17,
+	0x0a, 0x13, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x57, 0x4f, 0x52, 0x4c, 0x44,
+	0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x2d, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x48, 0x41, 0x49, 0x4e,
+	0x5f, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x4b, 0x10, 0x2e, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x48, 0x41,
+	0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x48, 0x59, 0x50, 0x45, 0x52, 0x5f, 0x45, 0x56, 0x4d, 0x10,
+	0x2f, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4d, 0x4f,
+	0x4e, 0x41, 0x44, 0x10, 0x30, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49,
+	0x44, 0x5f, 0x4d, 0x4f, 0x56, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x31, 0x12, 0x17, 0x0a, 0x12,
+	0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x57, 0x4f, 0x52, 0x4d, 0x43, 0x48, 0x41,
+	0x49, 0x4e, 0x10, 0xa0, 0x18, 0x12, 0x17, 0x0a, 0x12, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49,
+	0x44, 0x5f, 0x43, 0x4f, 0x53, 0x4d, 0x4f, 0x53, 0x48, 0x55, 0x42, 0x10, 0xa0, 0x1f, 0x12, 0x13,
+	0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x56, 0x4d, 0x4f, 0x53,
+	0x10, 0xa1, 0x1f, 0x12, 0x14, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f,
+	0x4b, 0x55, 0x4a, 0x49, 0x52, 0x41, 0x10, 0xa2, 0x1f, 0x12, 0x15, 0x0a, 0x10, 0x43, 0x48, 0x41,
+	0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4e, 0x45, 0x55, 0x54, 0x52, 0x4f, 0x4e, 0x10, 0xa3, 0x1f,
+	0x12, 0x16, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x45, 0x4c,
+	0x45, 0x53, 0x54, 0x49, 0x41, 0x10, 0xa4, 0x1f, 0x12, 0x16, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49,
+	0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x47, 0x41, 0x5a, 0x45, 0x10, 0xa5, 0x1f,
+	0x12, 0x12, 0x0a, 0x0d, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x45, 0x44,
+	0x41, 0x10, 0xa6, 0x1f, 0x12, 0x17, 0x0a, 0x12, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44,
+	0x5f, 0x44, 0x59, 0x4d, 0x45, 0x4e, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0xa7, 0x1f, 0x12, 0x18, 0x0a,
+	0x13, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x45, 0x4e,
+	0x41, 0x4e, 0x43, 0x45, 0x10, 0xa8, 0x1f, 0x12, 0x13, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e,
+	0x5f, 0x49, 0x44, 0x5f, 0x4e, 0x4f, 0x42, 0x4c, 0x45, 0x10, 0xa9, 0x1f, 0x12, 0x15, 0x0a, 0x10,
 	0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x45, 0x50, 0x4f, 0x4c, 0x49, 0x41,
 	0x10, 0x92, 0x4e, 0x12, 0x1e, 0x0a, 0x19, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f,
 	0x41, 0x52, 0x42, 0x49, 0x54, 0x52, 0x55, 0x4d, 0x5f, 0x53, 0x45, 0x50, 0x4f, 0x4c, 0x49, 0x41,

+ 7 - 0
proto/publicrpc/v1/publicrpc.proto

@@ -35,9 +35,11 @@ enum ChainID {
   CHAIN_ID_OPTIMISM = 24;
   CHAIN_ID_GNOSIS = 25;
   CHAIN_ID_PYTHNET = 26;
+  // 27 belongs to a chain that was never deployed.
   CHAIN_ID_XPLA = 28;
   CHAIN_ID_BTC = 29;
   CHAIN_ID_BASE = 30;
+  CHAIN_ID_FILECOIN = 31;
   CHAIN_ID_SEI = 32;
   CHAIN_ID_ROOTSTOCK = 33;
   CHAIN_ID_SCROLL = 34;
@@ -47,10 +49,14 @@ enum ChainID {
   CHAIN_ID_LINEA = 38;
   CHAIN_ID_BERACHAIN = 39;
   CHAIN_ID_SEIEVM = 40;
+  CHAIN_ID_ECLIPSE = 41;
+  CHAIN_ID_BOB = 42;
   CHAIN_ID_SNAXCHAIN = 43;
   CHAIN_ID_UNICHAIN = 44;
   CHAIN_ID_WORLDCHAIN = 45;
   CHAIN_ID_INK = 46;
+  CHAIN_ID_HYPER_EVM = 47;
+  CHAIN_ID_MONAD = 48;
   CHAIN_ID_MOVEMENT = 49;
   CHAIN_ID_WORMCHAIN = 3104;
   CHAIN_ID_COSMOSHUB = 4000;
@@ -62,6 +68,7 @@ enum ChainID {
   CHAIN_ID_SEDA = 4006;
   CHAIN_ID_DYMENSION = 4007;
   CHAIN_ID_PROVENANCE = 4008;
+  CHAIN_ID_NOBLE = 4009;
   CHAIN_ID_SEPOLIA = 10002;
   CHAIN_ID_ARBITRUM_SEPOLIA = 10003;
   CHAIN_ID_BASE_SEPOLIA = 10004;

+ 52 - 22
sdk/vaa/structs.go

@@ -147,18 +147,12 @@ func (c ChainID) String() string {
 		return "avalanche"
 	case ChainIDOasis:
 		return "oasis"
+	case ChainIDAlgorand:
+		return "algorand"
 	case ChainIDAurora:
 		return "aurora"
 	case ChainIDFantom:
 		return "fantom"
-	case ChainIDAlgorand:
-		return "algorand"
-	case ChainIDNear:
-		return "near"
-	case ChainIDAptos:
-		return "aptos"
-	case ChainIDSui:
-		return "sui"
 	case ChainIDKarura:
 		return "karura"
 	case ChainIDAcala:
@@ -167,6 +161,8 @@ func (c ChainID) String() string {
 		return "klaytn"
 	case ChainIDCelo:
 		return "celo"
+	case ChainIDNear:
+		return "near"
 	case ChainIDMoonbeam:
 		return "moonbeam"
 	case ChainIDTerra2:
@@ -175,6 +171,10 @@ func (c ChainID) String() string {
 		return "injective"
 	case ChainIDOsmosis:
 		return "osmosis"
+	case ChainIDSui:
+		return "sui"
+	case ChainIDAptos:
+		return "aptos"
 	case ChainIDArbitrum:
 		return "arbitrum"
 	case ChainIDOptimism:
@@ -183,14 +183,14 @@ func (c ChainID) String() string {
 		return "gnosis"
 	case ChainIDPythNet:
 		return "pythnet"
-	case ChainIDWormchain:
-		return "wormchain"
 	case ChainIDXpla:
 		return "xpla"
 	case ChainIDBtc:
 		return "btc"
 	case ChainIDBase:
 		return "base"
+	case ChainIDFileCoin:
+		return "filecoin"
 	case ChainIDSei:
 		return "sei"
 	case ChainIDRootstock:
@@ -209,6 +209,10 @@ func (c ChainID) String() string {
 		return "berachain"
 	case ChainIDSeiEVM:
 		return "seievm"
+	case ChainIDEclipse:
+		return "eclipse"
+	case ChainIDBOB:
+		return "bob"
 	case ChainIDSnaxchain:
 		return "snaxchain"
 	case ChainIDUnichain:
@@ -223,6 +227,8 @@ func (c ChainID) String() string {
 		return "monad"
 	case ChainIDMovement:
 		return "movement"
+	case ChainIDWormchain:
+		return "wormchain"
 	case ChainIDCosmoshub:
 		return "cosmoshub"
 	case ChainIDEvmos:
@@ -280,18 +286,12 @@ func ChainIDFromString(s string) (ChainID, error) {
 		return ChainIDAvalanche, nil
 	case "oasis":
 		return ChainIDOasis, nil
+	case "algorand":
+		return ChainIDAlgorand, nil
 	case "aurora":
 		return ChainIDAurora, nil
 	case "fantom":
 		return ChainIDFantom, nil
-	case "algorand":
-		return ChainIDAlgorand, nil
-	case "near":
-		return ChainIDNear, nil
-	case "sui":
-		return ChainIDSui, nil
-	case "aptos":
-		return ChainIDAptos, nil
 	case "karura":
 		return ChainIDKarura, nil
 	case "acala":
@@ -300,6 +300,8 @@ func ChainIDFromString(s string) (ChainID, error) {
 		return ChainIDKlaytn, nil
 	case "celo":
 		return ChainIDCelo, nil
+	case "near":
+		return ChainIDNear, nil
 	case "moonbeam":
 		return ChainIDMoonbeam, nil
 	case "terra2":
@@ -308,6 +310,10 @@ func ChainIDFromString(s string) (ChainID, error) {
 		return ChainIDInjective, nil
 	case "osmosis":
 		return ChainIDOsmosis, nil
+	case "sui":
+		return ChainIDSui, nil
+	case "aptos":
+		return ChainIDAptos, nil
 	case "arbitrum":
 		return ChainIDArbitrum, nil
 	case "optimism":
@@ -316,14 +322,14 @@ func ChainIDFromString(s string) (ChainID, error) {
 		return ChainIDGnosis, nil
 	case "pythnet":
 		return ChainIDPythNet, nil
-	case "wormchain":
-		return ChainIDWormchain, nil
 	case "xpla":
 		return ChainIDXpla, nil
 	case "btc":
 		return ChainIDBtc, nil
 	case "base":
 		return ChainIDBase, nil
+	case "filecoin":
+		return ChainIDFileCoin, nil
 	case "sei":
 		return ChainIDSei, nil
 	case "rootstock":
@@ -340,6 +346,12 @@ func ChainIDFromString(s string) (ChainID, error) {
 		return ChainIDLinea, nil
 	case "berachain":
 		return ChainIDBerachain, nil
+	case "seievm":
+		return ChainIDSeiEVM, nil
+	case "eclipse":
+		return ChainIDEclipse, nil
+	case "bob":
+		return ChainIDBOB, nil
 	case "snaxchain":
 		return ChainIDSnaxchain, nil
 	case "unichain":
@@ -354,10 +366,10 @@ func ChainIDFromString(s string) (ChainID, error) {
 		return ChainIDMonad, nil
 	case "movement":
 		return ChainIDMovement, nil
+	case "wormchain":
+		return ChainIDWormchain, nil
 	case "cosmoshub":
 		return ChainIDCosmoshub, nil
-	case "seievm":
-		return ChainIDSeiEVM, nil
 	case "evmos":
 		return ChainIDEvmos, nil
 	case "kujira":
@@ -425,6 +437,7 @@ func GetAllNetworkIDs() []ChainID {
 		ChainIDXpla,
 		ChainIDBtc,
 		ChainIDBase,
+		ChainIDFileCoin,
 		ChainIDSei,
 		ChainIDRootstock,
 		ChainIDScroll,
@@ -433,6 +446,9 @@ func GetAllNetworkIDs() []ChainID {
 		ChainIDXLayer,
 		ChainIDLinea,
 		ChainIDBerachain,
+		ChainIDSeiEVM,
+		ChainIDEclipse,
+		ChainIDBOB,
 		ChainIDSnaxchain,
 		ChainIDUnichain,
 		ChainIDWorldchain,
@@ -461,6 +477,7 @@ func GetAllNetworkIDs() []ChainID {
 	}
 }
 
+// NOTE: Please keep these in numerical order.
 const (
 	ChainIDUnset ChainID = 0
 	// ChainIDSolana is the ChainID of Solana
@@ -514,12 +531,15 @@ const (
 	ChainIDGnosis ChainID = 25
 	// ChainIDPythNet is the ChainID of PythNet
 	ChainIDPythNet ChainID = 26
+	// NOTE: 27 belongs to a chain that was never deployed.
 	// ChainIDXpla is the ChainID of Xpla
 	ChainIDXpla ChainID = 28
 	//ChainIDBtc is the ChainID of Bitcoin
 	ChainIDBtc ChainID = 29
 	// ChainIDBase is the ChainID of Base
 	ChainIDBase ChainID = 30
+	// ChainIDFileCoin is the ChainID of FileCoin
+	ChainIDFileCoin ChainID = 31
 	// ChainIDSei is the ChainID of Sei
 	ChainIDSei ChainID = 32
 	// ChainIDRootstock is the ChainID of Rootstock
@@ -538,6 +558,10 @@ const (
 	ChainIDBerachain ChainID = 39
 	// ChainIDSeiEVM is the ChainID of SeiEVM
 	ChainIDSeiEVM ChainID = 40
+	// ChainIDEclipse is the ChainID of Eclipse
+	ChainIDEclipse ChainID = 41
+	// ChainIDBOB is the ChainID of BOB
+	ChainIDBOB ChainID = 42
 	// ChainIDSnaxchain is the ChainID of Snaxchain
 	ChainIDSnaxchain ChainID = 43
 	// ChainIDUnichain is the ChainID of Unichain
@@ -553,7 +577,11 @@ const (
 	// ChainIDMovement is the ChainID of Movement
 	ChainIDMovement ChainID = 49
 	//ChainIDWormchain is the ChainID of Wormchain
+
+	// Wormchain is in it's own range.
 	ChainIDWormchain ChainID = 3104
+
+	// The IBC chains start at 4000.
 	// ChainIDCosmoshub is the ChainID of Cosmoshub
 	ChainIDCosmoshub ChainID = 4000
 	// ChainIDEvmos is the ChainID of Evmos
@@ -575,6 +603,8 @@ const (
 	// ChainIDNoble is the ChainID of Noble
 	ChainIDNoble ChainID = 4009
 	// ChainIDSepolia is the ChainID of Sepolia
+
+	// The Testnet only chains start at 10000.
 	ChainIDSepolia ChainID = 10002
 	// ChainIDArbitrumSepolia is the ChainID of Arbitrum on Sepolia
 	ChainIDArbitrumSepolia ChainID = 10003

+ 24 - 9
sdk/vaa/structs_test.go

@@ -37,26 +37,27 @@ func TestChainIDFromString(t *testing.T) {
 		{input: "avalanche", output: ChainIDAvalanche},
 		{input: "oasis", output: ChainIDOasis},
 		{input: "algorand", output: ChainIDAlgorand},
-		{input: "aptos", output: ChainIDAptos},
-		{input: "sui", output: ChainIDSui},
-		{input: "near", output: ChainIDNear},
 		{input: "aurora", output: ChainIDAurora},
 		{input: "fantom", output: ChainIDFantom},
 		{input: "karura", output: ChainIDKarura},
 		{input: "acala", output: ChainIDAcala},
 		{input: "klaytn", output: ChainIDKlaytn},
 		{input: "celo", output: ChainIDCelo},
+		{input: "near", output: ChainIDNear},
 		{input: "moonbeam", output: ChainIDMoonbeam},
 		{input: "terra2", output: ChainIDTerra2},
 		{input: "injective", output: ChainIDInjective},
 		{input: "osmosis", output: ChainIDOsmosis},
+		{input: "sui", output: ChainIDSui},
+		{input: "aptos", output: ChainIDAptos},
 		{input: "arbitrum", output: ChainIDArbitrum},
-		{input: "pythnet", output: ChainIDPythNet},
 		{input: "optimism", output: ChainIDOptimism},
 		{input: "gnosis", output: ChainIDGnosis},
+		{input: "pythnet", output: ChainIDPythNet},
 		{input: "xpla", output: ChainIDXpla},
 		{input: "btc", output: ChainIDBtc},
 		{input: "base", output: ChainIDBase},
+		{input: "filecoin", output: ChainIDFileCoin},
 		{input: "sei", output: ChainIDSei},
 		{input: "rootstock", output: ChainIDRootstock},
 		{input: "scroll", output: ChainIDScroll},
@@ -65,6 +66,9 @@ func TestChainIDFromString(t *testing.T) {
 		{input: "xlayer", output: ChainIDXLayer},
 		{input: "linea", output: ChainIDLinea},
 		{input: "berachain", output: ChainIDBerachain},
+		{input: "eclipse", output: ChainIDEclipse},
+		{input: "bob", output: ChainIDBOB},
+		{input: "seievm", output: ChainIDSeiEVM},
 		{input: "snaxchain", output: ChainIDSnaxchain},
 		{input: "unichain", output: ChainIDUnichain},
 		{input: "worldchain", output: ChainIDWorldchain},
@@ -72,7 +76,6 @@ func TestChainIDFromString(t *testing.T) {
 		{input: "hyperevm", output: ChainIDHyperEVM},
 		{input: "monad", output: ChainIDMonad},
 		{input: "movement", output: ChainIDMovement},
-		{input: "seievm", output: ChainIDSeiEVM},
 		{input: "wormchain", output: ChainIDWormchain},
 		{input: "cosmoshub", output: ChainIDCosmoshub},
 		{input: "evmos", output: ChainIDEvmos},
@@ -100,19 +103,19 @@ func TestChainIDFromString(t *testing.T) {
 		{input: "Avalanche", output: ChainIDAvalanche},
 		{input: "Oasis", output: ChainIDOasis},
 		{input: "Algorand", output: ChainIDAlgorand},
-		{input: "Aptos", output: ChainIDAptos},
-		{input: "Sui", output: ChainIDSui},
-		{input: "Near", output: ChainIDNear},
 		{input: "Aurora", output: ChainIDAurora},
 		{input: "Fantom", output: ChainIDFantom},
 		{input: "Karura", output: ChainIDKarura},
 		{input: "Acala", output: ChainIDAcala},
 		{input: "Klaytn", output: ChainIDKlaytn},
 		{input: "Celo", output: ChainIDCelo},
+		{input: "Near", output: ChainIDNear},
 		{input: "Moonbeam", output: ChainIDMoonbeam},
 		{input: "Terra2", output: ChainIDTerra2},
 		{input: "Injective", output: ChainIDInjective},
 		{input: "Osmosis", output: ChainIDOsmosis},
+		{input: "Sui", output: ChainIDSui},
+		{input: "Aptos", output: ChainIDAptos},
 		{input: "Arbitrum", output: ChainIDArbitrum},
 		{input: "Optimism", output: ChainIDOptimism},
 		{input: "Gnosis", output: ChainIDGnosis},
@@ -120,6 +123,7 @@ func TestChainIDFromString(t *testing.T) {
 		{input: "XPLA", output: ChainIDXpla},
 		{input: "BTC", output: ChainIDBtc},
 		{input: "Base", output: ChainIDBase},
+		{input: "filecoin", output: ChainIDFileCoin},
 		{input: "Sei", output: ChainIDSei},
 		{input: "Rootstock", output: ChainIDRootstock},
 		{input: "Scroll", output: ChainIDScroll},
@@ -128,6 +132,9 @@ func TestChainIDFromString(t *testing.T) {
 		{input: "XLayer", output: ChainIDXLayer},
 		{input: "Linea", output: ChainIDLinea},
 		{input: "Berachain", output: ChainIDBerachain},
+		{input: "SeiEVM", output: ChainIDSeiEVM},
+		{input: "Eclipse", output: ChainIDEclipse},
+		{input: "BOB", output: ChainIDBOB},
 		{input: "Snaxchain", output: ChainIDSnaxchain},
 		{input: "Unichain", output: ChainIDUnichain},
 		{input: "Worldchain", output: ChainIDWorldchain},
@@ -135,7 +142,6 @@ func TestChainIDFromString(t *testing.T) {
 		{input: "HyperEVM", output: ChainIDHyperEVM},
 		{input: "Monad", output: ChainIDMonad},
 		{input: "Movement", output: ChainIDMovement},
-		{input: "SeiEVM", output: ChainIDSeiEVM},
 		{input: "Wormchain", output: ChainIDWormchain},
 		{input: "Cosmoshub", output: ChainIDCosmoshub},
 		{input: "Evmos", output: ChainIDEvmos},
@@ -311,6 +317,7 @@ func TestChainId_String(t *testing.T) {
 		{input: 14, output: "celo"},
 		{input: 15, output: "near"},
 		{input: 16, output: "moonbeam"},
+		// 17 (Neon) is obsolete.
 		{input: 18, output: "terra2"},
 		{input: 19, output: "injective"},
 		{input: 20, output: "osmosis"},
@@ -320,9 +327,11 @@ func TestChainId_String(t *testing.T) {
 		{input: 24, output: "optimism"},
 		{input: 25, output: "gnosis"},
 		{input: 26, output: "pythnet"},
+		// NOTE: 27 belongs to a chain that was never deployed.
 		{input: 28, output: "xpla"},
 		{input: 29, output: "btc"},
 		{input: 30, output: "base"},
+		{input: 31, output: "filecoin"},
 		{input: 32, output: "sei"},
 		{input: 33, output: "rootstock"},
 		{input: 34, output: "scroll"},
@@ -332,11 +341,14 @@ func TestChainId_String(t *testing.T) {
 		{input: 38, output: "linea"},
 		{input: 39, output: "berachain"},
 		{input: 40, output: "seievm"},
+		{input: 41, output: "eclipse"},
+		{input: 42, output: "bob"},
 		{input: 43, output: "snaxchain"},
 		{input: 44, output: "unichain"},
 		{input: 45, output: "worldchain"},
 		{input: 46, output: "ink"},
 		{input: 47, output: "hyperevm"},
+		{input: 48, output: "monad"},
 		{input: 49, output: "movement"},
 		{input: 3104, output: "wormchain"},
 		{input: 4000, output: "cosmoshub"},
@@ -346,6 +358,9 @@ func TestChainId_String(t *testing.T) {
 		{input: 4004, output: "celestia"},
 		{input: 4005, output: "stargaze"},
 		{input: 4006, output: "seda"},
+		{input: 4007, output: "dymension"},
+		{input: 4008, output: "provenance"},
+		{input: 4009, output: "noble"},
 		{input: 10002, output: "sepolia"},
 		{input: 10003, output: "arbitrum_sepolia"},
 		{input: 10004, output: "base_sepolia"},