mirror of
https://github.com/luxfi/node.git
synced 2026-07-27 03:39:39 +00:00
1260 lines
47 KiB
Go
1260 lines
47 KiB
Go
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package chainadapter
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// AllChainConfigs returns configurations for all 200+ supported chains
|
|
// with proper EVM chain IDs where applicable
|
|
func AllChainConfigs() map[ChainID]*ChainConfig {
|
|
return map[ChainID]*ChainConfig{
|
|
// ======== Major L1s ========
|
|
idBitcoin: {
|
|
ChainID: idBitcoin, Name: "Bitcoin", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "BTC", NativeDecimals: 8, IsEVM: false,
|
|
RequiredConfirmations: 6, FinalityMode: "probabilistic",
|
|
BlockTime: 10 * time.Minute, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://blockstream.info",
|
|
},
|
|
idEthereum: {
|
|
ChainID: idEthereum, Name: "Ethereum", NetworkID: 1,
|
|
EVMChainID: 1, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 12 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://etherscan.io",
|
|
},
|
|
idSolana: {
|
|
ChainID: idSolana, Name: "Solana", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "SOL", NativeDecimals: 9, IsEVM: false,
|
|
RequiredConfirmations: 32, FinalityMode: "instant",
|
|
BlockTime: 400 * time.Millisecond, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://solscan.io",
|
|
},
|
|
idCosmos: {
|
|
ChainID: idCosmos, Name: "Cosmos Hub", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "ATOM", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://mintscan.io/cosmos",
|
|
},
|
|
idPolkadot: {
|
|
ChainID: idPolkadot, Name: "Polkadot", NetworkID: 0,
|
|
EVMChainID: 0, NativeSymbol: "DOT", NativeDecimals: 10, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://polkadot.subscan.io",
|
|
},
|
|
idPolygon: {
|
|
ChainID: idPolygon, Name: "Polygon", NetworkID: 137,
|
|
EVMChainID: 137, NativeSymbol: "MATIC", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 256, FinalityMode: "checkpoint",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://polygonscan.com",
|
|
},
|
|
idBSC: {
|
|
ChainID: idBSC, Name: "BNB Smart Chain", NetworkID: 56,
|
|
EVMChainID: 56, NativeSymbol: "BNB", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 15, FinalityMode: "instant",
|
|
BlockTime: 3 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://bscscan.com",
|
|
},
|
|
idRipple: {
|
|
ChainID: idRipple, Name: "XRP Ledger", NetworkID: 0,
|
|
EVMChainID: 0, NativeSymbol: "XRP", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 4 * time.Second, TrustThreshold: 0.80,
|
|
ExplorerURL: "https://xrpscan.com",
|
|
},
|
|
idArbitrum: {
|
|
ChainID: idArbitrum, Name: "Arbitrum One", NetworkID: 42161,
|
|
EVMChainID: 42161, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 250 * time.Millisecond, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://arbiscan.io",
|
|
},
|
|
idOptimism: {
|
|
ChainID: idOptimism, Name: "Optimism", NetworkID: 10,
|
|
EVMChainID: 10, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://optimistic.etherscan.io",
|
|
},
|
|
idBase: {
|
|
ChainID: idBase, Name: "Base", NetworkID: 8453,
|
|
EVMChainID: 8453, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://basescan.org",
|
|
},
|
|
idTron: {
|
|
ChainID: idTron, Name: "TRON", NetworkID: 728126428,
|
|
EVMChainID: 728126428, NativeSymbol: "TRX", NativeDecimals: 6, IsEVM: true,
|
|
RequiredConfirmations: 19, FinalityMode: "instant",
|
|
BlockTime: 3 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://tronscan.org",
|
|
},
|
|
idCardano: {
|
|
ChainID: idCardano, Name: "Cardano", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "ADA", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 2160, FinalityMode: "probabilistic",
|
|
BlockTime: 20 * time.Second, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://cardanoscan.io",
|
|
},
|
|
idNear: {
|
|
ChainID: idNear, Name: "NEAR", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "NEAR", NativeDecimals: 24, IsEVM: false,
|
|
RequiredConfirmations: 3, FinalityMode: "instant",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://nearblocks.io",
|
|
},
|
|
idAptos: {
|
|
ChainID: idAptos, Name: "Aptos", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "APT", NativeDecimals: 8, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 400 * time.Millisecond, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://aptoscan.com",
|
|
},
|
|
idSui: {
|
|
ChainID: idSui, Name: "Sui", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "SUI", NativeDecimals: 9, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 400 * time.Millisecond, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://suiscan.xyz",
|
|
},
|
|
idTON: {
|
|
ChainID: idTON, Name: "TON", NetworkID: 0xFFFFFFFFFFFFFF11,
|
|
EVMChainID: 0, NativeSymbol: "TON", NativeDecimals: 9, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 5 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://tonscan.org",
|
|
},
|
|
idStellar: {
|
|
ChainID: idStellar, Name: "Stellar", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "XLM", NativeDecimals: 7, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 5 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://stellarscan.io",
|
|
},
|
|
idAlgorand: {
|
|
ChainID: idAlgorand, Name: "Algorand", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "ALGO", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 3300 * time.Millisecond, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://algoexplorer.io",
|
|
},
|
|
|
|
// ======== EVM L1s (21-40) ========
|
|
idFantom: {
|
|
ChainID: idFantom, Name: "Fantom", NetworkID: 250,
|
|
EVMChainID: 250, NativeSymbol: "FTM", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://ftmscan.com",
|
|
},
|
|
idCronos: {
|
|
ChainID: idCronos, Name: "Cronos", NetworkID: 25,
|
|
EVMChainID: 25, NativeSymbol: "CRO", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://cronoscan.com",
|
|
},
|
|
idGnosis: {
|
|
ChainID: idGnosis, Name: "Gnosis", NetworkID: 100,
|
|
EVMChainID: 100, NativeSymbol: "xDAI", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 5 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://gnosisscan.io",
|
|
},
|
|
idCelo: {
|
|
ChainID: idCelo, Name: "Celo", NetworkID: 42220,
|
|
EVMChainID: 42220, NativeSymbol: "CELO", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 5 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://celoscan.io",
|
|
},
|
|
idMoonbeam: {
|
|
ChainID: idMoonbeam, Name: "Moonbeam", NetworkID: 1284,
|
|
EVMChainID: 1284, NativeSymbol: "GLMR", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 12 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://moonscan.io",
|
|
},
|
|
idMoonriver: {
|
|
ChainID: idMoonriver, Name: "Moonriver", NetworkID: 1285,
|
|
EVMChainID: 1285, NativeSymbol: "MOVR", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 12 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://moonriver.moonscan.io",
|
|
},
|
|
idAstar: {
|
|
ChainID: idAstar, Name: "Astar", NetworkID: 592,
|
|
EVMChainID: 592, NativeSymbol: "ASTR", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 12 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://astar.subscan.io",
|
|
},
|
|
idMetis: {
|
|
ChainID: idMetis, Name: "Metis", NetworkID: 1088,
|
|
EVMChainID: 1088, NativeSymbol: "METIS", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 4 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://andromeda-explorer.metis.io",
|
|
},
|
|
idBoba: {
|
|
ChainID: idBoba, Name: "Boba Network", NetworkID: 288,
|
|
EVMChainID: 288, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://bobascan.com",
|
|
},
|
|
idAurora: {
|
|
ChainID: idAurora, Name: "Aurora", NetworkID: 1313161554,
|
|
EVMChainID: 1313161554, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://explorer.aurora.dev",
|
|
},
|
|
idKlaytn: {
|
|
ChainID: idKlaytn, Name: "Klaytn", NetworkID: 8217,
|
|
EVMChainID: 8217, NativeSymbol: "KLAY", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://klaytnscope.com",
|
|
},
|
|
idFuse: {
|
|
ChainID: idFuse, Name: "Fuse", NetworkID: 122,
|
|
EVMChainID: 122, NativeSymbol: "FUSE", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 5 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://explorer.fuse.io",
|
|
},
|
|
idEvmos: {
|
|
ChainID: idEvmos, Name: "Evmos", NetworkID: 9001,
|
|
EVMChainID: 9001, NativeSymbol: "EVMOS", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://escan.live",
|
|
},
|
|
idKava: {
|
|
ChainID: idKava, Name: "Kava", NetworkID: 2222,
|
|
EVMChainID: 2222, NativeSymbol: "KAVA", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://kavascan.com",
|
|
},
|
|
idOKX: {
|
|
ChainID: idOKX, Name: "OKX Chain", NetworkID: 66,
|
|
EVMChainID: 66, NativeSymbol: "OKT", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 3 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://www.oklink.com/okc",
|
|
},
|
|
idPulse: {
|
|
ChainID: idPulse, Name: "PulseChain", NetworkID: 369,
|
|
EVMChainID: 369, NativeSymbol: "PLS", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 10 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://scan.pulsechain.com",
|
|
},
|
|
idCore: {
|
|
ChainID: idCore, Name: "Core", NetworkID: 1116,
|
|
EVMChainID: 1116, NativeSymbol: "CORE", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 3 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://scan.coredao.org",
|
|
},
|
|
idFlare: {
|
|
ChainID: idFlare, Name: "Flare", NetworkID: 14,
|
|
EVMChainID: 14, NativeSymbol: "FLR", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 3 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://flare-explorer.flare.network",
|
|
},
|
|
idSongbird: {
|
|
ChainID: idSongbird, Name: "Songbird", NetworkID: 19,
|
|
EVMChainID: 19, NativeSymbol: "SGB", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 3 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://songbird-explorer.flare.network",
|
|
},
|
|
idRON: {
|
|
ChainID: idRON, Name: "Ronin", NetworkID: 2020,
|
|
EVMChainID: 2020, NativeSymbol: "RON", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 3 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://app.roninchain.com",
|
|
},
|
|
|
|
// ======== EVM L2s and Rollups (41-70) ========
|
|
idZkSync: {
|
|
ChainID: idZkSync, Name: "zkSync Era", NetworkID: 324,
|
|
EVMChainID: 324, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "zk",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 1.0,
|
|
ExplorerURL: "https://explorer.zksync.io",
|
|
},
|
|
idStarknet: {
|
|
ChainID: idStarknet, Name: "Starknet", NetworkID: 0,
|
|
EVMChainID: 0, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "zk",
|
|
BlockTime: 30 * time.Second, TrustThreshold: 1.0,
|
|
ExplorerURL: "https://starkscan.co",
|
|
},
|
|
idScroll: {
|
|
ChainID: idScroll, Name: "Scroll", NetworkID: 534352,
|
|
EVMChainID: 534352, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "zk",
|
|
BlockTime: 3 * time.Second, TrustThreshold: 1.0,
|
|
ExplorerURL: "https://scrollscan.com",
|
|
},
|
|
idLinea: {
|
|
ChainID: idLinea, Name: "Linea", NetworkID: 59144,
|
|
EVMChainID: 59144, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "zk",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 1.0,
|
|
ExplorerURL: "https://lineascan.build",
|
|
},
|
|
idMantle: {
|
|
ChainID: idMantle, Name: "Mantle", NetworkID: 5000,
|
|
EVMChainID: 5000, NativeSymbol: "MNT", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://mantlescan.xyz",
|
|
},
|
|
idZora: {
|
|
ChainID: idZora, Name: "Zora", NetworkID: 7777777,
|
|
EVMChainID: 7777777, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://explorer.zora.energy",
|
|
},
|
|
idMode: {
|
|
ChainID: idMode, Name: "Mode", NetworkID: 34443,
|
|
EVMChainID: 34443, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://modescan.io",
|
|
},
|
|
idBlast: {
|
|
ChainID: idBlast, Name: "Blast", NetworkID: 81457,
|
|
EVMChainID: 81457, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://blastscan.io",
|
|
},
|
|
idManta: {
|
|
ChainID: idManta, Name: "Manta Pacific", NetworkID: 169,
|
|
EVMChainID: 169, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://pacific-explorer.manta.network",
|
|
},
|
|
idPolygonZk: {
|
|
ChainID: idPolygonZk, Name: "Polygon zkEVM", NetworkID: 1101,
|
|
EVMChainID: 1101, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "zk",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 1.0,
|
|
ExplorerURL: "https://zkevm.polygonscan.com",
|
|
},
|
|
idLoopring: {
|
|
ChainID: idLoopring, Name: "Loopring", NetworkID: 0,
|
|
EVMChainID: 0, NativeSymbol: "LRC", NativeDecimals: 18, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "zk",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 1.0,
|
|
ExplorerURL: "https://explorer.loopring.io",
|
|
},
|
|
idImmutableX: {
|
|
ChainID: idImmutableX, Name: "Immutable X", NetworkID: 0,
|
|
EVMChainID: 0, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "zk",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 1.0,
|
|
ExplorerURL: "https://immutascan.io",
|
|
},
|
|
iddYdX: {
|
|
ChainID: iddYdX, Name: "dYdX", NetworkID: 0,
|
|
EVMChainID: 0, NativeSymbol: "DYDX", NativeDecimals: 18, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://dydx.exchange",
|
|
},
|
|
idApechain: {
|
|
ChainID: idApechain, Name: "ApeChain", NetworkID: 33139,
|
|
EVMChainID: 33139, NativeSymbol: "APE", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://apescan.io",
|
|
},
|
|
idWorldchain: {
|
|
ChainID: idWorldchain, Name: "World Chain", NetworkID: 480,
|
|
EVMChainID: 480, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://worldscan.org",
|
|
},
|
|
idTaiko: {
|
|
ChainID: idTaiko, Name: "Taiko", NetworkID: 167000,
|
|
EVMChainID: 167000, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "zk",
|
|
BlockTime: 12 * time.Second, TrustThreshold: 1.0,
|
|
ExplorerURL: "https://taikoscan.io",
|
|
},
|
|
idFrax: {
|
|
ChainID: idFrax, Name: "Fraxtal", NetworkID: 252,
|
|
EVMChainID: 252, NativeSymbol: "frxETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://fraxscan.com",
|
|
},
|
|
idRedstone: {
|
|
ChainID: idRedstone, Name: "Redstone", NetworkID: 690,
|
|
EVMChainID: 690, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://explorer.redstone.xyz",
|
|
},
|
|
idLisk: {
|
|
ChainID: idLisk, Name: "Lisk", NetworkID: 1135,
|
|
EVMChainID: 1135, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://liskscan.com",
|
|
},
|
|
idBob: {
|
|
ChainID: idBob, Name: "BOB", NetworkID: 60808,
|
|
EVMChainID: 60808, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://explorer.gobob.xyz",
|
|
},
|
|
idCyber: {
|
|
ChainID: idCyber, Name: "Cyber", NetworkID: 7560,
|
|
EVMChainID: 7560, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://cyberscan.co",
|
|
},
|
|
idMint: {
|
|
ChainID: idMint, Name: "Mint", NetworkID: 185,
|
|
EVMChainID: 185, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://explorer.mintchain.io",
|
|
},
|
|
idKroma: {
|
|
ChainID: idKroma, Name: "Kroma", NetworkID: 255,
|
|
EVMChainID: 255, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "zk",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 1.0,
|
|
ExplorerURL: "https://kromascan.com",
|
|
},
|
|
idOpBNB: {
|
|
ChainID: idOpBNB, Name: "opBNB", NetworkID: 204,
|
|
EVMChainID: 204, NativeSymbol: "BNB", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://opbnb.bscscan.com",
|
|
},
|
|
idXLayer: {
|
|
ChainID: idXLayer, Name: "X Layer", NetworkID: 196,
|
|
EVMChainID: 196, NativeSymbol: "OKB", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "zk",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 1.0,
|
|
ExplorerURL: "https://www.oklink.com/xlayer",
|
|
},
|
|
idZircuit: {
|
|
ChainID: idZircuit, Name: "Zircuit", NetworkID: 48900,
|
|
EVMChainID: 48900, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "zk",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 1.0,
|
|
ExplorerURL: "https://explorer.zircuit.com",
|
|
},
|
|
|
|
// ======== Cosmos Ecosystem (71-100) ========
|
|
idOsmosis: {
|
|
ChainID: idOsmosis, Name: "Osmosis", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "OSMO", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://mintscan.io/osmosis",
|
|
},
|
|
idInjective: {
|
|
ChainID: idInjective, Name: "Injective", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "INJ", NativeDecimals: 18, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://explorer.injective.network",
|
|
},
|
|
idSei: {
|
|
ChainID: idSei, Name: "Sei", NetworkID: 1,
|
|
EVMChainID: 1329, NativeSymbol: "SEI", NativeDecimals: 6, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 400 * time.Millisecond, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://seitrace.com",
|
|
},
|
|
idCelestia: {
|
|
ChainID: idCelestia, Name: "Celestia", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "TIA", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 12 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://celenium.io",
|
|
},
|
|
idThorchain: {
|
|
ChainID: idThorchain, Name: "THORChain", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "RUNE", NativeDecimals: 8, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://thorchain.net",
|
|
},
|
|
idAkash: {
|
|
ChainID: idAkash, Name: "Akash", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "AKT", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://mintscan.io/akash",
|
|
},
|
|
idJuno: {
|
|
ChainID: idJuno, Name: "Juno", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "JUNO", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://mintscan.io/juno",
|
|
},
|
|
idStargaze: {
|
|
ChainID: idStargaze, Name: "Stargaze", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "STARS", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://mintscan.io/stargaze",
|
|
},
|
|
idSecret: {
|
|
ChainID: idSecret, Name: "Secret Network", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "SCRT", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://mintscan.io/secret",
|
|
},
|
|
idAxelar: {
|
|
ChainID: idAxelar, Name: "Axelar", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "AXL", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://axelarscan.io",
|
|
},
|
|
idStride: {
|
|
ChainID: idStride, Name: "Stride", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "STRD", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://mintscan.io/stride",
|
|
},
|
|
idNeutron: {
|
|
ChainID: idNeutron, Name: "Neutron", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "NTRN", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://mintscan.io/neutron",
|
|
},
|
|
idNoble: {
|
|
ChainID: idNoble, Name: "Noble", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "USDC", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://mintscan.io/noble",
|
|
},
|
|
idDymension: {
|
|
ChainID: idDymension, Name: "Dymension", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "DYM", NativeDecimals: 18, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://dymension.explorers.guru",
|
|
},
|
|
idSaga: {
|
|
ChainID: idSaga, Name: "Saga", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "SAGA", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://saga.explorers.guru",
|
|
},
|
|
|
|
// ======== DAG-based and Unique Consensus (101-120) ========
|
|
idHedera: {
|
|
ChainID: idHedera, Name: "Hedera", NetworkID: 295,
|
|
EVMChainID: 295, NativeSymbol: "HBAR", NativeDecimals: 8, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 3 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://hashscan.io",
|
|
},
|
|
idIOTA: {
|
|
ChainID: idIOTA, Name: "IOTA", NetworkID: 8822,
|
|
EVMChainID: 8822, NativeSymbol: "IOTA", NativeDecimals: 6, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 5 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://explorer.iota.org",
|
|
},
|
|
idKaspa: {
|
|
ChainID: idKaspa, Name: "Kaspa", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "KAS", NativeDecimals: 8, IsEVM: false,
|
|
RequiredConfirmations: 10, FinalityMode: "probabilistic",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://explorer.kaspa.org",
|
|
},
|
|
idFilecoin: {
|
|
ChainID: idFilecoin, Name: "Filecoin", NetworkID: 314,
|
|
EVMChainID: 314, NativeSymbol: "FIL", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 900, FinalityMode: "probabilistic",
|
|
BlockTime: 30 * time.Second, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://filfox.info",
|
|
},
|
|
idICP: {
|
|
ChainID: idICP, Name: "Internet Computer", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "ICP", NativeDecimals: 8, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://dashboard.internetcomputer.org",
|
|
},
|
|
idFlow: {
|
|
ChainID: idFlow, Name: "Flow", NetworkID: 1,
|
|
EVMChainID: 747, NativeSymbol: "FLOW", NativeDecimals: 8, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://flowscan.org",
|
|
},
|
|
idMina: {
|
|
ChainID: idMina, Name: "Mina", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "MINA", NativeDecimals: 9, IsEVM: false,
|
|
RequiredConfirmations: 15, FinalityMode: "probabilistic",
|
|
BlockTime: 3 * time.Minute, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://minascan.io",
|
|
},
|
|
idMultiversX: {
|
|
ChainID: idMultiversX, Name: "MultiversX", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "EGLD", NativeDecimals: 18, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://explorer.multiversx.com",
|
|
},
|
|
idHarmony: {
|
|
ChainID: idHarmony, Name: "Harmony", NetworkID: 1666600000,
|
|
EVMChainID: 1666600000, NativeSymbol: "ONE", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://explorer.harmony.one",
|
|
},
|
|
idZilliqa: {
|
|
ChainID: idZilliqa, Name: "Zilliqa", NetworkID: 32769,
|
|
EVMChainID: 32769, NativeSymbol: "ZIL", NativeDecimals: 12, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 45 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://viewblock.io/zilliqa",
|
|
},
|
|
idVechain: {
|
|
ChainID: idVechain, Name: "VeChain", NetworkID: 100009,
|
|
EVMChainID: 100009, NativeSymbol: "VET", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 12, FinalityMode: "probabilistic",
|
|
BlockTime: 10 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://vechainstats.com",
|
|
},
|
|
idTheta: {
|
|
ChainID: idTheta, Name: "Theta", NetworkID: 361,
|
|
EVMChainID: 361, NativeSymbol: "THETA", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 6 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://explorer.thetatoken.org",
|
|
},
|
|
idEOS: {
|
|
ChainID: idEOS, Name: "EOS", NetworkID: 17777,
|
|
EVMChainID: 17777, NativeSymbol: "EOS", NativeDecimals: 4, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 500 * time.Millisecond, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://bloks.io",
|
|
},
|
|
idWAX: {
|
|
ChainID: idWAX, Name: "WAX", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "WAXP", NativeDecimals: 8, IsEVM: false,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 500 * time.Millisecond, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://waxblock.io",
|
|
},
|
|
idTezos: {
|
|
ChainID: idTezos, Name: "Tezos", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "XTZ", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 2, FinalityMode: "instant",
|
|
BlockTime: 15 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://tzkt.io",
|
|
},
|
|
idNEO: {
|
|
ChainID: idNEO, Name: "Neo", NetworkID: 47763,
|
|
EVMChainID: 47763, NativeSymbol: "NEO", NativeDecimals: 0, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 15 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://neoscan.io",
|
|
},
|
|
|
|
// ======== Bitcoin Forks and PoW Chains (121-140) ========
|
|
idLitecoin: {
|
|
ChainID: idLitecoin, Name: "Litecoin", NetworkID: 2,
|
|
EVMChainID: 0, NativeSymbol: "LTC", NativeDecimals: 8, IsEVM: false,
|
|
RequiredConfirmations: 6, FinalityMode: "probabilistic",
|
|
BlockTime: 150 * time.Second, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://blockchair.com/litecoin",
|
|
},
|
|
idBitcoinCash: {
|
|
ChainID: idBitcoinCash, Name: "Bitcoin Cash", NetworkID: 145,
|
|
EVMChainID: 0, NativeSymbol: "BCH", NativeDecimals: 8, IsEVM: false,
|
|
RequiredConfirmations: 6, FinalityMode: "probabilistic",
|
|
BlockTime: 10 * time.Minute, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://blockchair.com/bitcoin-cash",
|
|
},
|
|
idDogecoin: {
|
|
ChainID: idDogecoin, Name: "Dogecoin", NetworkID: 3,
|
|
EVMChainID: 0, NativeSymbol: "DOGE", NativeDecimals: 8, IsEVM: false,
|
|
RequiredConfirmations: 6, FinalityMode: "probabilistic",
|
|
BlockTime: 1 * time.Minute, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://dogechain.info",
|
|
},
|
|
idZcash: {
|
|
ChainID: idZcash, Name: "Zcash", NetworkID: 133,
|
|
EVMChainID: 0, NativeSymbol: "ZEC", NativeDecimals: 8, IsEVM: false,
|
|
RequiredConfirmations: 24, FinalityMode: "probabilistic",
|
|
BlockTime: 75 * time.Second, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://blockchair.com/zcash",
|
|
},
|
|
idMonero: {
|
|
ChainID: idMonero, Name: "Monero", NetworkID: 128,
|
|
EVMChainID: 0, NativeSymbol: "XMR", NativeDecimals: 12, IsEVM: false,
|
|
RequiredConfirmations: 10, FinalityMode: "probabilistic",
|
|
BlockTime: 2 * time.Minute, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://xmrchain.net",
|
|
},
|
|
idDash: {
|
|
ChainID: idDash, Name: "Dash", NetworkID: 5,
|
|
EVMChainID: 0, NativeSymbol: "DASH", NativeDecimals: 8, IsEVM: false,
|
|
RequiredConfirmations: 6, FinalityMode: "instant",
|
|
BlockTime: 150 * time.Second, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://insight.dash.org",
|
|
},
|
|
idDecred: {
|
|
ChainID: idDecred, Name: "Decred", NetworkID: 42,
|
|
EVMChainID: 0, NativeSymbol: "DCR", NativeDecimals: 8, IsEVM: false,
|
|
RequiredConfirmations: 6, FinalityMode: "probabilistic",
|
|
BlockTime: 5 * time.Minute, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://dcrdata.decred.org",
|
|
},
|
|
idDigiByte: {
|
|
ChainID: idDigiByte, Name: "DigiByte", NetworkID: 20,
|
|
EVMChainID: 0, NativeSymbol: "DGB", NativeDecimals: 8, IsEVM: false,
|
|
RequiredConfirmations: 40, FinalityMode: "probabilistic",
|
|
BlockTime: 15 * time.Second, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://digiexplorer.info",
|
|
},
|
|
idErgo: {
|
|
ChainID: idErgo, Name: "Ergo", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "ERG", NativeDecimals: 9, IsEVM: false,
|
|
RequiredConfirmations: 10, FinalityMode: "probabilistic",
|
|
BlockTime: 2 * time.Minute, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://explorer.ergoplatform.com",
|
|
},
|
|
idEtherClassic: {
|
|
ChainID: idEtherClassic, Name: "Ethereum Classic", NetworkID: 61,
|
|
EVMChainID: 61, NativeSymbol: "ETC", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 40000, FinalityMode: "probabilistic",
|
|
BlockTime: 13 * time.Second, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://etcexplorer.com",
|
|
},
|
|
idFlux: {
|
|
ChainID: idFlux, Name: "Flux", NetworkID: 19167,
|
|
EVMChainID: 19167, NativeSymbol: "FLUX", NativeDecimals: 8, IsEVM: true,
|
|
RequiredConfirmations: 100, FinalityMode: "probabilistic",
|
|
BlockTime: 2 * time.Minute, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://explorer.runonflux.io",
|
|
},
|
|
idHandshake: {
|
|
ChainID: idHandshake, Name: "Handshake", NetworkID: 1,
|
|
EVMChainID: 0, NativeSymbol: "HNS", NativeDecimals: 6, IsEVM: false,
|
|
RequiredConfirmations: 6, FinalityMode: "probabilistic",
|
|
BlockTime: 10 * time.Minute, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://hnsnetwork.com",
|
|
},
|
|
idNervos: {
|
|
ChainID: idNervos, Name: "Nervos", NetworkID: 71402,
|
|
EVMChainID: 71402, NativeSymbol: "CKB", NativeDecimals: 8, IsEVM: true,
|
|
RequiredConfirmations: 24, FinalityMode: "probabilistic",
|
|
BlockTime: 10 * time.Second, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://explorer.nervos.org",
|
|
},
|
|
idConflux: {
|
|
ChainID: idConflux, Name: "Conflux", NetworkID: 1030,
|
|
EVMChainID: 1030, NativeSymbol: "CFX", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 50, FinalityMode: "probabilistic",
|
|
BlockTime: 500 * time.Millisecond, TrustThreshold: 0.51,
|
|
ExplorerURL: "https://confluxscan.io",
|
|
},
|
|
|
|
// ======== Gaming and NFT Chains ========
|
|
idWemix: {
|
|
ChainID: idWemix, Name: "WEMIX", NetworkID: 1111,
|
|
EVMChainID: 1111, NativeSymbol: "WEMIX", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://wemixscan.com",
|
|
},
|
|
idOasys: {
|
|
ChainID: idOasys, Name: "Oasys", NetworkID: 248,
|
|
EVMChainID: 248, NativeSymbol: "OAS", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 15 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://scan.oasys.games",
|
|
},
|
|
idBeam: {
|
|
ChainID: idBeam, Name: "Beam", NetworkID: 4337,
|
|
EVMChainID: 4337, NativeSymbol: "BEAM", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://explorer.onbeam.com",
|
|
},
|
|
idXai: {
|
|
ChainID: idXai, Name: "Xai", NetworkID: 660279,
|
|
EVMChainID: 660279, NativeSymbol: "XAI", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "optimistic",
|
|
BlockTime: 250 * time.Millisecond, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://explorer.xai-chain.net",
|
|
},
|
|
idSkale: {
|
|
ChainID: idSkale, Name: "SKALE", NetworkID: 0,
|
|
EVMChainID: 0, NativeSymbol: "sFUEL", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 1 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://elated-tan-skat.explorer.mainnet.skalenodes.com",
|
|
},
|
|
|
|
// ======== DeFi and Finance Chains ========
|
|
idHyperliquid: {
|
|
ChainID: idHyperliquid, Name: "Hyperliquid", NetworkID: 998,
|
|
EVMChainID: 998, NativeSymbol: "HYPE", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 200 * time.Millisecond, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://hyperliquid.xyz",
|
|
},
|
|
idBerachain: {
|
|
ChainID: idBerachain, Name: "Berachain", NetworkID: 80094,
|
|
EVMChainID: 80094, NativeSymbol: "BERA", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://berascan.io",
|
|
},
|
|
idMonad: {
|
|
ChainID: idMonad, Name: "Monad", NetworkID: 0,
|
|
EVMChainID: 0, NativeSymbol: "MON", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 500 * time.Millisecond, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://monad.xyz",
|
|
},
|
|
idMegaETH: {
|
|
ChainID: idMegaETH, Name: "MegaETH", NetworkID: 0,
|
|
EVMChainID: 0, NativeSymbol: "ETH", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 1 * time.Millisecond, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://megaeth.systems",
|
|
},
|
|
|
|
// ======== Lux Ecosystem ========
|
|
idLux: {
|
|
ChainID: idLux, Name: "Lux", NetworkID: 96369,
|
|
EVMChainID: 96369, NativeSymbol: "LUX", NativeDecimals: 18, IsEVM: true,
|
|
RequiredConfirmations: 1, FinalityMode: "instant",
|
|
BlockTime: 2 * time.Second, TrustThreshold: 0.67,
|
|
ExplorerURL: "https://explore.lux.network",
|
|
},
|
|
}
|
|
}
|
|
|
|
// NewExtendedAdapter creates an adapter for any supported chain by invoking
|
|
// the per-row Constructor closure carried on the Chain seed row. Adding a
|
|
// chain with adapter support is a one-row edit to DefaultChainSeed — there is
|
|
// no switch and no per-id case statement here. Rows whose Constructor is nil
|
|
// have no adapter implementation in this package today; the call returns
|
|
// ErrChainNotSupported cleanly.
|
|
func NewExtendedAdapter(chainID ChainID) (ChainAdapter, error) {
|
|
chain, ok := DefaultChainTaxonomy().Get(chainID)
|
|
if !ok || chain.Constructor == nil {
|
|
return nil, fmt.Errorf("%w: chain ID %d", ErrChainNotSupported, chainID)
|
|
}
|
|
return chain.Constructor(), nil
|
|
}
|
|
|
|
// GetAllSupportedChains returns all supported chain IDs
|
|
func GetAllSupportedChains() []ChainID {
|
|
configs := AllChainConfigs()
|
|
chains := make([]ChainID, 0, len(configs))
|
|
for id := range configs {
|
|
chains = append(chains, id)
|
|
}
|
|
return chains
|
|
}
|
|
|
|
// GetEVMChainID returns the EVM chain ID for a given internal chain ID
|
|
func GetEVMChainID(chainID ChainID) (uint64, bool) {
|
|
configs := AllChainConfigs()
|
|
if config, ok := configs[chainID]; ok && config.IsEVM {
|
|
return config.EVMChainID, true
|
|
}
|
|
return 0, false
|
|
}
|
|
|
|
// GetChainByEVMID finds a chain by its EVM chain ID
|
|
func GetChainByEVMID(evmChainID uint64) (ChainID, bool) {
|
|
configs := AllChainConfigs()
|
|
for id, config := range configs {
|
|
if config.IsEVM && config.EVMChainID == evmChainID {
|
|
return id, true
|
|
}
|
|
}
|
|
return 0, false
|
|
}
|
|
|
|
// InferChainType determines the ChainType based on chain characteristics
|
|
func InferChainType(chainID ChainID) ChainType {
|
|
switch {
|
|
// UTXO chains
|
|
case chainID == idBitcoin || chainID == idLitecoin || chainID == idBitcoinCash ||
|
|
chainID == idDogecoin || chainID == idDash || chainID == idZcash ||
|
|
chainID == idDecred || chainID == idDigiByte || chainID == idFiro ||
|
|
chainID == idRavencoin || chainID == idBSV || chainID == idHandshake:
|
|
return ChainTypeUTXO
|
|
|
|
// Privacy chains (special UTXO variant)
|
|
case chainID == idMonero || chainID == idHorizen:
|
|
return ChainTypePrivacy
|
|
|
|
// Cardano (extended UTXO)
|
|
case chainID == idCardano:
|
|
return ChainTypeCardano
|
|
|
|
// Cosmos SDK chains
|
|
case chainID == idCosmos || chainID == idOsmosis || chainID == idInjective ||
|
|
chainID == idSei || chainID == idCelestia || chainID == idThorchain ||
|
|
chainID == idAkash || chainID == idJuno || chainID == idStargaze ||
|
|
chainID == idSecret || chainID == idAxelar || chainID == idStride ||
|
|
chainID == idNeutron || chainID == idNoble || chainID == idMars ||
|
|
chainID == idPersistence || chainID == idFetchAI || chainID == idBand ||
|
|
chainID == idRegen || chainID == idSommelier || chainID == idUmee ||
|
|
chainID == idCanto || chainID == idDymension || chainID == idSaga ||
|
|
chainID == iddYdX:
|
|
return ChainTypeCosmosSDK
|
|
|
|
// Substrate/Polkadot parachains
|
|
case chainID == idPolkadot || chainID == idKusama || chainID == idAcala ||
|
|
chainID == idPhala || chainID == idBifrost || chainID == idParallel ||
|
|
chainID == idClover || chainID == idCentrifuge || chainID == idInterlay ||
|
|
chainID == idHydra || chainID == idNodle || chainID == idEfinity ||
|
|
chainID == idMangata || chainID == idZeitgeist || chainID == idPolimec ||
|
|
chainID == idMoonbeam || chainID == idMoonriver || chainID == idAstar:
|
|
return ChainTypeSubstrate
|
|
|
|
// DAG-based chains
|
|
case chainID == idHedera || chainID == idIOTA || chainID == idKaspa ||
|
|
chainID == idHarmony || chainID == idMultiversX:
|
|
return ChainTypeDAG
|
|
|
|
// Move VM chains
|
|
case chainID == idAptos || chainID == idSui:
|
|
return ChainTypeMoveVM
|
|
|
|
// TON
|
|
case chainID == idTON:
|
|
return ChainTypeTVM
|
|
|
|
// Stellar
|
|
case chainID == idStellar:
|
|
return ChainTypeStellar
|
|
|
|
// Algorand
|
|
case chainID == idAlgorand:
|
|
return ChainTypeAlgorand
|
|
|
|
// Tezos
|
|
case chainID == idTezos:
|
|
return ChainTypeTezos
|
|
|
|
// Internet Computer
|
|
case chainID == idICP:
|
|
return ChainTypeICP
|
|
|
|
// XRP Ledger
|
|
case chainID == idRipple:
|
|
return ChainTypeRipple
|
|
|
|
// Filecoin
|
|
case chainID == idFilecoin:
|
|
return ChainTypeFVM
|
|
|
|
// Account-based chains (Solana, NEAR, etc.)
|
|
case chainID == idSolana || chainID == idNear || chainID == idFlow ||
|
|
chainID == idMina || chainID == idTron || chainID == idEOS ||
|
|
chainID == idWAX || chainID == idNEO || chainID == idWaves ||
|
|
chainID == idOntology:
|
|
return ChainTypeAccount
|
|
|
|
// Default: EVM for anything else (especially if IsEVM is true)
|
|
default:
|
|
return ChainTypeEVM
|
|
}
|
|
}
|
|
|
|
// InferAddressFormat determines the address format for a chain
|
|
func InferAddressFormat(chainID ChainID, chainType ChainType) AddressFormat {
|
|
switch chainType {
|
|
case ChainTypeEVM:
|
|
return AddressFormatHex
|
|
case ChainTypeUTXO:
|
|
// Modern Bitcoin uses Bech32, legacy uses Base58
|
|
if chainID == idBitcoin || chainID == idLitecoin {
|
|
return AddressFormatBech32
|
|
}
|
|
return AddressFormatBase58
|
|
case ChainTypeCosmosSDK:
|
|
return AddressFormatBech32
|
|
case ChainTypeSubstrate:
|
|
return AddressFormatSS58
|
|
case ChainTypeAccount, ChainTypeMoveVM:
|
|
return AddressFormatHex
|
|
case ChainTypeStellar:
|
|
return AddressFormatBase58 // Stellar uses a variant of Base58
|
|
case ChainTypeRipple:
|
|
return AddressFormatBase58
|
|
case ChainTypeCardano:
|
|
return AddressFormatBech32
|
|
default:
|
|
return AddressFormatHex
|
|
}
|
|
}
|
|
|
|
// GetAddressPrefix returns the expected address prefix for a chain
|
|
func GetAddressPrefix(chainID ChainID, chainType ChainType) string {
|
|
switch chainType {
|
|
case ChainTypeEVM:
|
|
return "0x"
|
|
case ChainTypeCosmosSDK:
|
|
prefixes := map[ChainID]string{
|
|
idCosmos: "cosmos",
|
|
idOsmosis: "osmo",
|
|
idInjective: "inj",
|
|
idSei: "sei",
|
|
idCelestia: "celestia",
|
|
idThorchain: "thor",
|
|
idAkash: "akash",
|
|
idJuno: "juno",
|
|
idSecret: "secret",
|
|
idAxelar: "axelar",
|
|
idStride: "stride",
|
|
idNeutron: "neutron",
|
|
idNoble: "noble",
|
|
idKava: "kava",
|
|
}
|
|
if prefix, ok := prefixes[chainID]; ok {
|
|
return prefix
|
|
}
|
|
return "cosmos"
|
|
case ChainTypeUTXO:
|
|
if chainID == idBitcoin {
|
|
return "bc1" // Bech32 native segwit
|
|
} else if chainID == idLitecoin {
|
|
return "ltc1"
|
|
}
|
|
return "" // Legacy base58 has no prefix
|
|
case ChainTypeCardano:
|
|
return "addr"
|
|
default:
|
|
return ""
|
|
}
|
|
}
|
|
|
|
// GetMPCCurve returns the MPC signing curve for a chain
|
|
func GetMPCCurve(chainType ChainType) string {
|
|
switch chainType {
|
|
case ChainTypeEVM, ChainTypeUTXO, ChainTypeCosmosSDK:
|
|
return string(CurveSecp256k1)
|
|
case ChainTypeSubstrate:
|
|
return string(CurveSr25519)
|
|
case ChainTypeAccount, ChainTypeMoveVM, ChainTypeStellar, ChainTypeAlgorand,
|
|
ChainTypeCardano, ChainTypeTezos, ChainTypeTVM, ChainTypeRipple:
|
|
return string(CurveEd25519)
|
|
default:
|
|
return string(CurveSecp256k1)
|
|
}
|
|
}
|
|
|
|
// EnrichChainConfig adds ChainType, AddressFormat, and MPC fields to a config
|
|
func EnrichChainConfig(config *ChainConfig) *ChainConfig {
|
|
if config == nil {
|
|
return nil
|
|
}
|
|
|
|
// Infer chain type if not set
|
|
if config.ChainType == 0 {
|
|
config.ChainType = InferChainType(config.ChainID)
|
|
}
|
|
|
|
// Infer address format if not set
|
|
if config.AddressFormat == 0 {
|
|
config.AddressFormat = InferAddressFormat(config.ChainID, config.ChainType)
|
|
}
|
|
|
|
// Set address prefix if not set
|
|
if config.AddressPrefix == "" {
|
|
config.AddressPrefix = GetAddressPrefix(config.ChainID, config.ChainType)
|
|
}
|
|
|
|
// Set MPC curve if not set
|
|
if config.MPCCurve == "" {
|
|
config.MPCCurve = GetMPCCurve(config.ChainType)
|
|
}
|
|
|
|
// All chains support MPC signing
|
|
config.SupportsMPC = true
|
|
|
|
// Determine smart contract support
|
|
switch config.ChainType {
|
|
case ChainTypeEVM, ChainTypeCosmosSDK, ChainTypeMoveVM, ChainTypeTVM,
|
|
ChainTypeTezos, ChainTypeAlgorand, ChainTypeCardano:
|
|
config.SupportsSmartContracts = true
|
|
case ChainTypeUTXO, ChainTypePrivacy:
|
|
config.SupportsSmartContracts = false
|
|
default:
|
|
config.SupportsSmartContracts = config.IsEVM
|
|
}
|
|
|
|
return config
|
|
}
|
|
|
|
// GetEnrichedChainConfig returns an enriched chain config with all fields populated
|
|
func GetEnrichedChainConfig(chainID ChainID) *ChainConfig {
|
|
configs := AllChainConfigs()
|
|
if config, ok := configs[chainID]; ok {
|
|
return EnrichChainConfig(config)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetAllEnrichedConfigs returns all chain configs with ChainType and MPC fields populated
|
|
func GetAllEnrichedConfigs() map[ChainID]*ChainConfig {
|
|
configs := AllChainConfigs()
|
|
enriched := make(map[ChainID]*ChainConfig, len(configs))
|
|
for id, config := range configs {
|
|
enriched[id] = EnrichChainConfig(config)
|
|
}
|
|
return enriched
|
|
}
|
|
|
|
// GetChainsByCategory returns chains grouped by their ChainType
|
|
func GetChainsByCategory() map[ChainType][]*ChainConfig {
|
|
configs := GetAllEnrichedConfigs()
|
|
categories := make(map[ChainType][]*ChainConfig)
|
|
|
|
for _, config := range configs {
|
|
categories[config.ChainType] = append(categories[config.ChainType], config)
|
|
}
|
|
|
|
return categories
|
|
}
|
|
|
|
// GetEVMCompatibleChains returns all EVM-compatible chains (L1s, L2s, rollups)
|
|
func GetEVMCompatibleChains() []*ChainConfig {
|
|
configs := GetAllEnrichedConfigs()
|
|
var evmChains []*ChainConfig
|
|
|
|
for _, config := range configs {
|
|
if config.IsEVM || config.ChainType == ChainTypeEVM {
|
|
evmChains = append(evmChains, config)
|
|
}
|
|
}
|
|
|
|
return evmChains
|
|
}
|
|
|
|
// GetNativePrimaryNetworks returns non-EVM native L1 chains
|
|
func GetNativePrimaryNetworks() []*ChainConfig {
|
|
configs := GetAllEnrichedConfigs()
|
|
var nativeChains []*ChainConfig
|
|
|
|
for _, config := range configs {
|
|
if !config.IsEVM && config.ChainType != ChainTypeEVM {
|
|
nativeChains = append(nativeChains, config)
|
|
}
|
|
}
|
|
|
|
return nativeChains
|
|
}
|
|
|
|
// ChainCategory groups chains by their use case
|
|
type ChainCategory string
|
|
|
|
const (
|
|
CategoryMajorL1 ChainCategory = "major_l1"
|
|
CategoryEVML1 ChainCategory = "evm_l1"
|
|
CategoryOptimistic ChainCategory = "optimistic_rollup"
|
|
CategoryZKRollup ChainCategory = "zk_rollup"
|
|
CategoryCosmos ChainCategory = "cosmos_ecosystem"
|
|
CategoryPolkadot ChainCategory = "polkadot_ecosystem"
|
|
CategoryBitcoinFork ChainCategory = "bitcoin_fork"
|
|
CategoryDAG ChainCategory = "dag_chain"
|
|
CategoryGaming ChainCategory = "gaming"
|
|
CategoryDeFi ChainCategory = "defi"
|
|
CategoryPrivacy ChainCategory = "privacy"
|
|
)
|
|
|
|
// GetChainCategory returns the category for a chain
|
|
func GetChainCategory(chainID ChainID) ChainCategory {
|
|
switch {
|
|
// Major L1s
|
|
case chainID <= idAlgorand:
|
|
return CategoryMajorL1
|
|
|
|
// EVM L1s
|
|
case chainID >= idFantom && chainID <= idRON:
|
|
return CategoryEVML1
|
|
|
|
// L2s and Rollups
|
|
case chainID >= idZkSync && chainID <= idZircuit:
|
|
config := GetEnrichedChainConfig(chainID)
|
|
if config != nil && config.FinalityMode == "zk" {
|
|
return CategoryZKRollup
|
|
}
|
|
return CategoryOptimistic
|
|
|
|
// Cosmos ecosystem
|
|
case chainID >= idOsmosis && chainID <= idSaga:
|
|
return CategoryCosmos
|
|
|
|
// DAG chains
|
|
case chainID >= idHedera && chainID <= idRavencoin:
|
|
return CategoryDAG
|
|
|
|
// Bitcoin forks
|
|
case chainID >= idLitecoin && chainID <= idConflux:
|
|
if chainID == idMonero || chainID == idZcash || chainID == idHorizen {
|
|
return CategoryPrivacy
|
|
}
|
|
return CategoryBitcoinFork
|
|
|
|
// Polkadot ecosystem
|
|
case chainID >= idAcala && chainID <= idPolimec:
|
|
return CategoryPolkadot
|
|
|
|
// Gaming chains
|
|
case chainID >= idWemix && chainID <= idEnjin:
|
|
return CategoryGaming
|
|
|
|
// DeFi chains
|
|
case chainID >= idUnichain && chainID <= idMegaETH:
|
|
return CategoryDeFi
|
|
|
|
default:
|
|
return CategoryMajorL1
|
|
}
|
|
}
|