synapsecns/sanguine

View on GitHub
ethergo/chaindata/chaindata.go

Summary

Maintainability
A
0 mins
Test Coverage
// Package chaindata provides the chain metadata.
// TODO: this more elegantly.
// nolint: mnd
package chaindata

import "strings"

// ChainMetadata represents the chain metadata.
type ChainMetadata struct {
    // ChainID is the chain id.
    ChainID int64
    // ChainName is the chain name.
    ChainName string
    // Explorer is the chain explorer.
    Explorer string
}

// ChainMetadataList is the list of chain metadata.
var ChainMetadataList = []ChainMetadata{
    {
        ChainID:   1,
        ChainName: "ethereum",
        Explorer:  "https://etherscan.io",
    },
    {
        ChainID:   56,
        ChainName: "bsc",
        Explorer:  "https://bscscan.com",
    },
    {
        ChainID:   137,
        ChainName: "polygon",
        Explorer:  "https://polygonscan.com",
    },
    {
        ChainID:   80001,
        ChainName: "mumbai",
        Explorer:  "https://mumbai.polygonscan.com",
    },
    {
        ChainID:   250,
        ChainName: "fantom",
        Explorer:  "https://ftmscan.com",
    },
    {
        ChainID:   43114,
        ChainName: "avalanche",
        Explorer:  "https://snowtrace.io/",
    },
    {
        ChainID:   42161,
        ChainName: "arbitrum",
        Explorer:  "https://arbiscan.io",
    },
    {
        ChainID:   1337,
        ChainName: "local",
        Explorer:  "http://localhost:1337",
    },
    {
        ChainID:   42220,
        ChainName: "celo",
        Explorer:  "https://explorer.celo.org",
    },
    {
        ChainID:   128,
        ChainName: "heco",
        Explorer:  "https://hecoinfo.com",
    },
    {
        ChainID:   66,
        ChainName: "okexchain",
        Explorer:  "https://www.oklink.com/okexchain",
    },
    {
        ChainID:   100,
        ChainName: "xdai",
        Explorer:  "https://blockscout.com/poa/xdai",
    },
    {
        ChainID:   10,
        ChainName: "optimism",
        Explorer:  "https://optimistic.etherscan.io",
    },
    {
        ChainID:   25,
        ChainName: "cronos",
        Explorer:  "https://cronoscan.com",
    },
    {
        ChainID:   1285,
        ChainName: "moonriver",
        Explorer:  "https://moonriver.moonscan.io",
    },
    {
        ChainID:   1284,
        ChainName: "moonbeam",
        Explorer:  "https://moonbeam.moonscan.io",
    },
    {
        ChainID:   66,
        ChainName: "okc",
        Explorer:  "https://www.oklink.com/en/okc",
    },
    {
        ChainID:   9001,
        ChainName: "evmos",
        Explorer:  "https://evm.evmos.org",
    },
    {
        ChainID:   7700,
        ChainName: "canto",
        Explorer:  "https://tuber.build/",
    },
    {
        ChainID:   53935,
        ChainName: "dfk chain",
        Explorer:  "https://subnets.avax.network/defi-kingdoms",
    },
    {
        ChainID:   8217,
        ChainName: "klaytn",
        Explorer:  "https://scope.klaytn.com",
    },
    {
        ChainID:   288,
        ChainName: "boba",
        Explorer:  "https://bobascan.com",
    },
    {
        ChainID:   1088,
        ChainName: "metis",
        Explorer:  "https://andromeda-explorer.metis.io",
    },
    {
        ChainID:   1313161554,
        ChainName: "aurora",
        Explorer:  "https://explorer.mainnet.aurora.dev",
    },
    {
        ChainID:   1666600000,
        ChainName: "harmony",
        Explorer:  "https://explorer.harmony.one",
    },
    {
        ChainID:   2000,
        ChainName: "dogechain",
        Explorer:  "https://explorer.dogechain.dog",
    },
    {
        ChainID:   8453,
        ChainName: "base",
        Explorer:  "https://basescan.org",
    },
    {
        ChainID:   81457,
        ChainName: "blast",
        Explorer:  "https://blastscan.io",
    },
    {
        ChainID:   534352,
        ChainName: "scroll",
        Explorer:  "https://scrollscan.com",
    },
    {
        ChainID:   59144,
        ChainName: "linea",
        Explorer:  "https://lineascan.build",
    },
    {
        ChainID:   480,
        ChainName: "world chain",
        Explorer:  "https://worldscan.org",
    },
}

// ChainNameToChainID converts the chain name to the chain id.
// It returns 0 if the chain name is not found.
func ChainNameToChainID(chainName string) uint64 {
    for _, chainMetadata := range ChainMetadataList {
        if strings.EqualFold(chainMetadata.ChainName, chainName) {
            return uint64(chainMetadata.ChainID)
        }
    }
    return 0
}

// ChainIDToChainName converts the chain id to the chain name.
func ChainIDToChainName(chainID int64, isUpper bool) string {
    for _, chainMetadata := range ChainMetadataList {
        if chainMetadata.ChainID == chainID {
            // upper the first letter
            if isUpper {
                return strings.ToUpper(chainMetadata.ChainName)
            }
            return chainMetadata.ChainName
        }
    }
    return ""
}

// ChainIDToExplorer converts the chain id to the chain explorer.
func ChainIDToExplorer(chainID int64) string {
    for _, chainMetadata := range ChainMetadataList {
        if chainMetadata.ChainID == chainID {
            return chainMetadata.Explorer
        }
    }
    return ""
}

// ToTXLink converts the chain id and hash to the explorer link.
func ToTXLink(chainID int64, hash string) string {
    explorer := ChainIDToExplorer(chainID)
    if explorer == "" {
        return ""
    }
    return explorer + "/tx/" + hash
}