Skip to content

Commit dad2033

Browse files
author
tazhate
committed
fix(versioncheck): replace chainValueToConstName heuristic with exact map
The heuristic failed for chains like "hashkey" → generated "ChainHashkey" instead of the actual constant "ChainHashKey", causing a build error when versioncheck rewrote versions_gen.go in CI. Replace with a complete hardcoded map derived from api/v1alpha1/blockchainnode_types.go covering all 102 chains. No heuristics, no edge cases.
1 parent 1bd4bce commit dad2033

1 file changed

Lines changed: 109 additions & 35 deletions

File tree

cmd/versioncheck/main.go

Lines changed: 109 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -335,42 +335,116 @@ func lookupChainByConst(constName string) nodesv1alpha1.Chain {
335335
return nodesv1alpha1.Chain(constName)
336336
}
337337

338-
// chainValueToConstName converts a chain string value to its Go constant name.
339-
// e.g. "bitcoin" -> "ChainBitcoin", "bsc" -> "ChainBSC"
338+
// chainValueToConstName maps chain string values to their exact Go constant names.
339+
// Generated from api/v1alpha1/blockchainnode_types.go — update when new chains are added.
340340
func chainValueToConstName(value string) string {
341-
specials := map[string]string{
342-
"bsc": "ChainBSC",
343-
"ton": "ChainTON",
344-
"tron": "ChainTRON",
345-
"xrp": "ChainXRP",
346-
"opbnb": "ChainOpBNB",
347-
"bittorrent": "ChainBitTorrent",
348-
"ethereum-archive": "ChainEthereumArchive",
349-
"ethereum-beacon": "ChainEthereumBeacon",
350-
"ethereum-classic": "ChainEthereumClassic",
351-
"polygon-zkevm": "ChainPolygonZkEVM",
352-
"cronos-zkevm": "ChainCronosZkEVM",
353-
"immutable-zkevm": "ChainImmutableZkEVM",
354-
"gnosis-beacon": "ChainGnosisBeacon",
355-
"zero-network": "ChainZeroNetwork",
356-
"gravity-alpha": "ChainGravityAlpha",
357-
"manta-pacific": "ChainMantaPacific",
358-
"boba-eth": "ChainBobaEth",
359-
"zksync": "ChainZkSync",
360-
"megaeth": "ChainMegaETH",
361-
}
362-
if name, ok := specials[value]; ok {
363-
return name
364-
}
365-
parts := strings.FieldsFunc(value, func(r rune) bool { return r == '-' || r == '_' })
366-
var sb strings.Builder
367-
sb.WriteString("Chain")
368-
for _, p := range parts {
369-
if len(p) > 0 {
370-
sb.WriteString(strings.ToUpper(p[:1]) + p[1:])
371-
}
372-
}
373-
return sb.String()
341+
return chainConstNames[value]
342+
}
343+
344+
// chainConstNames is the authoritative map from chain runtime value to Go constant name.
345+
var chainConstNames = map[string]string{
346+
"abstract": "ChainAbstract",
347+
"aptos": "ChainAptos",
348+
"arbitrum": "ChainArbitrum",
349+
"aurora": "ChainAurora",
350+
"avalanche": "ChainAvalanche",
351+
"axelar": "ChainAxelar",
352+
"base": "ChainBase",
353+
"berachain": "ChainBerachain",
354+
"bitcoin": "ChainBitcoin",
355+
"bittorrent": "ChainBitTorrent",
356+
"blast": "ChainBlast",
357+
"bob": "ChainBob",
358+
"boba-eth": "ChainBobaEth",
359+
"bsc": "ChainBSC",
360+
"cardano": "ChainCardano",
361+
"celo": "ChainCelo",
362+
"core": "ChainCore",
363+
"cosmos": "ChainCosmos",
364+
"cronos": "ChainCronos",
365+
"cronos-zkevm": "ChainCronosZkEVM",
366+
"dash": "ChainDash",
367+
"dogecoin": "ChainDogecoin",
368+
"doma": "ChainDoma",
369+
"dymension": "ChainDymension",
370+
"ethereum": "ChainEthereum",
371+
"ethereum-archive": "ChainEthereumArchive",
372+
"ethereum-beacon": "ChainEthereumBeacon",
373+
"ethereum-classic": "ChainEthereumClassic",
374+
"everclear": "ChainEverclear",
375+
"evmos": "ChainEvmos",
376+
"fantom": "ChainFantom",
377+
"filecoin": "ChainFilecoin",
378+
"fraxtal": "ChainFraxtal",
379+
"fuse": "ChainFuse",
380+
"gnosis": "ChainGnosis",
381+
"gnosis-beacon": "ChainGnosisBeacon",
382+
"goat": "ChainGoat",
383+
"gravity-alpha": "ChainGravityAlpha",
384+
"haqq": "ChainHaqq",
385+
"harmony": "ChainHarmony",
386+
"hashkey": "ChainHashKey",
387+
"hemi": "ChainHemi",
388+
"hyperliquid": "ChainHyperliquid",
389+
"immutable-zkevm": "ChainImmutableZkEVM",
390+
"ink": "ChainInk",
391+
"katana": "ChainKatana",
392+
"kava": "ChainKava",
393+
"klaytn": "ChainKlaytn",
394+
"kroma": "ChainKroma",
395+
"kusama": "ChainKusama",
396+
"lens": "ChainLens",
397+
"linea": "ChainLinea",
398+
"lisk": "ChainLisk",
399+
"litecoin": "ChainLitecoin",
400+
"manta-pacific": "ChainMantaPacific",
401+
"mantle": "ChainMantle",
402+
"megaeth": "ChainMegaETH",
403+
"metis": "ChainMetis",
404+
"mezo": "ChainMezo",
405+
"moca": "ChainMoca",
406+
"mode": "ChainMode",
407+
"monad": "ChainMonad",
408+
"moonbeam": "ChainMoonbeam",
409+
"moonriver": "ChainMoonriver",
410+
"morph": "ChainMorph",
411+
"near": "ChainNear",
412+
"opbnb": "ChainOpBNB",
413+
"optimism": "ChainOptimism",
414+
"osmosis": "ChainOsmosis",
415+
"plasma": "ChainPlasma",
416+
"playnance": "ChainPlaynance",
417+
"plume": "ChainPlume",
418+
"polkadot": "ChainPolkadot",
419+
"polygon": "ChainPolygon",
420+
"polygon-zkevm": "ChainPolygonZkEVM",
421+
"ronin": "ChainRonin",
422+
"rootstock": "ChainRootstock",
423+
"scroll": "ChainScroll",
424+
"sei": "ChainSei",
425+
"shibarium": "ChainShibarium",
426+
"solana": "ChainSolana",
427+
"soneium": "ChainSoneium",
428+
"sonic": "ChainSonic",
429+
"starknet": "ChainStarknet",
430+
"stellar": "ChainStellar",
431+
"sui": "ChainSui",
432+
"superseed": "ChainSuperseed",
433+
"swell": "ChainSwell",
434+
"taiko": "ChainTaiko",
435+
"telos": "ChainTelos",
436+
"thundercore": "ChainThundercore",
437+
"ton": "ChainTON",
438+
"tron": "ChainTRON",
439+
"unichain": "ChainUnichain",
440+
"viction": "ChainViction",
441+
"wemix": "ChainWemix",
442+
"worldchain": "ChainWorldchain",
443+
"xrp": "ChainXRP",
444+
"zero-network": "ChainZeroNetwork",
445+
"zircuit": "ChainZircuit",
446+
"zksync": "ChainZkSync",
447+
"zora": "ChainZora",
374448
}
375449

376450
// versionsGenTemplate is the template for regenerating versions_gen.go.

0 commit comments

Comments
 (0)