eth-net-props/helpers/get-explorer-links.js

228 lines
6.8 KiB
JavaScript

const { networkIDs } = require('./enum')
const {
ETH_MAINNET_CODE,
ETH_ROPSTEN_CODE,
ETH_RINKEBY_CODE,
ETH_GOERLI_CODE,
ETH_SEPOLIA_CODE,
ETH_KOVAN_CODE,
POA_SOKOL_CODE,
POA_CORE_CODE,
GC_MAINNET_CODE,
GC_OPTIMISM_CODE,
RSK_MAINNET_CODE,
RSK_TESTNET_CODE,
ETC_MAINNET_CODE,
OPTIMISM_GOERLI_CODE,
ASTAR_CODE,
SHIDEN_CODE,
SHIBUYA_CODE,
CELO_CODE,
CELO_ALFAJORES_TESTNET_CODE,
CELO_BAKLAVA_TESTNET_CODE,
} = networkIDs
const blockScoutLink = (net, prefix) => {
if (prefix) {
return `https://blockscout.com/${net}/${prefix}`
} else {
return `https://blockscout.com/${net}`
}
}
const etherscanLink = (prefix) => prefix === 'mainnet' ? 'https://etherscan.io' : `https://${prefix}.etherscan.io`
const rskTestnetExplorerLink = 'https://explorer.testnet.rsk.co'
const celoExplorerLink = 'https://explorer.celo.org'
const celoAlfajoresTestnetExplorerLink = 'https://alfajores-blockscout.celo-testnet.org'
const celoBaklavaTestnetExplorerLink = 'https://baklava-blockscout.celo-testnet.org'
const explorerLink = (networkCode, net, prefix) => {
switch (networkCode) {
case POA_SOKOL_CODE: // POA Sokol testnet
case POA_CORE_CODE: // POA Core
case GC_MAINNET_CODE: // Gnosis chain
case GC_OPTIMISM_CODE: // GC Optimism
case ETC_MAINNET_CODE: // ETC mainnet
case RSK_MAINNET_CODE: // RSK mainnet
case OPTIMISM_GOERLI_CODE: // Optimissm Goerli testnet
case ASTAR_CODE: // Astar
case SHIDEN_CODE: // Shiden
case SHIBUYA_CODE: // Shibuya
return blockScoutLink(net, prefix)
case RSK_TESTNET_CODE: // RSK testnet
return rskTestnetExplorerLink
case ETH_MAINNET_CODE: // main net
case ETH_ROPSTEN_CODE: // ropsten testnet
case ETH_RINKEBY_CODE: // rinkeby testnet
case ETH_KOVAN_CODE: // kovan testnet
case ETH_GOERLI_CODE: // Goerli testnet
case ETH_SEPOLIA_CODE: // Sepolia testnet
return etherscanLink(prefix)
case CELO_CODE: // CELO
return celoExplorerLink
case CELO_ALFAJORES_TESTNET_CODE: // CELO ALFAJORES TESTNET
return celoAlfajoresTestnetExplorerLink
case CELO_BAKLAVA_TESTNET_CODE: // CELO BAKLAVA TESTNET
return celoBaklavaTestnetExplorerLink
default:
return blockScoutLink(net, prefix)
}
}
const tokenLink = (networkCode, chain, prefix, tokenAddress, holderAddress) => {
const blockscoutLinkStr = `${blockScoutLink(chain, prefix)}/address/${holderAddress}/tokens/${tokenAddress}/token-transfers`
const etherscanLinkStr = `${etherscanLink(prefix)}/token/${tokenAddress}?a=${holderAddress}`
const rskTestnetExplorerLinkStr = `${rskTestnetExplorerLink}/address/${tokenAddress}`
const celoExplorerLinkStr = `${celoExplorerLink}/address/${holderAddress}/tokens/${tokenAddress}/token_transfers`
const celoAlfajoresTestnetExplorerLinkStr = `${celoAlfajoresTestnetExplorerLink}/address/${holderAddress}/tokens/${tokenAddress}/token_transfers`
const celoBaklavaTestnetExplorerLinkStr = `${celoBaklavaTestnetExplorerLink}/address/${holderAddress}/tokens/${tokenAddress}/token_transfers`
switch (networkCode) {
case POA_SOKOL_CODE: // POA Sokol testnet
case POA_CORE_CODE: // POA Core
case GC_MAINNET_CODE: // Gnosis chain
case GC_OPTIMISM_CODE: // GC Optimism
case ETC_MAINNET_CODE: // ETC mainnet
case RSK_MAINNET_CODE: // RSK mainnet
case OPTIMISM_GOERLI_CODE: // Optimism Goerli testnet
case ASTAR_CODE: // Astar
case SHIDEN_CODE: // Shiden
case SHIBUYA_CODE: // Shibuya
return blockscoutLinkStr
case RSK_TESTNET_CODE: // RSK testnet
return rskTestnetExplorerLinkStr
case ETH_MAINNET_CODE: // main net
case ETH_ROPSTEN_CODE: // ropsten testnet
case ETH_RINKEBY_CODE: // rinkeby testnet
case ETH_KOVAN_CODE: // kovan testnet
case ETH_GOERLI_CODE: // Goerli testnet
case ETH_SEPOLIA_CODE: // Sepolia testnet
return etherscanLinkStr
case CELO_CODE: // CELO
return celoExplorerLinkStr
case CELO_ALFAJORES_TESTNET_CODE: // CELO Alfajores testnet
return celoAlfajoresTestnetExplorerLinkStr
case CELO_BAKLAVA_TESTNET_CODE: // CELO Baklava testnet
return celoBaklavaTestnetExplorerLinkStr
default:
return blockscoutLinkStr
}
}
const getExplorerAccountLinkFor = (account, networkCode) => {
const prefix = getExplorerPrefix(networkCode)
const chain = getExplorerChain(networkCode)
return `${explorerLink(networkCode, chain, prefix)}/address/${account}`
}
const getExplorerTxLinkFor = (hash, networkCode) => {
const prefix = getExplorerPrefix(networkCode)
const chain = getExplorerChain(networkCode)
return `${explorerLink(networkCode, chain, prefix)}/tx/${hash}`
}
const getExplorerTokenLinkFor = (tokenAddress, holderAddress, networkCode) => {
const prefix = getExplorerPrefix(networkCode)
const chain = getExplorerChain(networkCode)
return tokenLink(networkCode, chain, prefix, tokenAddress, holderAddress)
}
function getExplorerChain (networkCode) {
const net = parseInt(networkCode)
let chain
switch (net) {
case ETH_MAINNET_CODE: // main net
case ETH_ROPSTEN_CODE: // ropsten testnet
case ETH_RINKEBY_CODE: // rinkeby testnet
case ETH_KOVAN_CODE: // kovan testnet
case ETH_GOERLI_CODE: // Goerli testnet
case ETH_SEPOLIA_CODE: // Sepolia testnet
chain = 'eth'
break
case POA_SOKOL_CODE: // POA Sokol testnet
case POA_CORE_CODE: // POA Core
chain = 'poa'
break
case GC_MAINNET_CODE: // Gnosis chain
case GC_OPTIMISM_CODE: // Optimism on Gnosis chain
chain = 'xdai'
break
case ETC_MAINNET_CODE: // ETC mainnet
chain = 'etc'
break
case RSK_MAINNET_CODE: // RSK mainnet
chain = 'rsk'
break
case OPTIMISM_GOERLI_CODE: // Optimism Goerli testnet
chain = 'optimism'
break
case ASTAR_CODE: // Astar
chain = 'astar'
break
case SHIDEN_CODE: // Shiden
chain = 'shiden'
break
case SHIBUYA_CODE: // Shibuya
chain = 'shibuya'
break
case CELO_CODE: // CELO
chain = 'celo'
break
case CELO_ALFAJORES_TESTNET_CODE: // CELO Alfajores testnet
chain = 'celo-alfajores'
break
case CELO_BAKLAVA_TESTNET_CODE: // CELO Baklava testnet
chain = 'celo-baklava'
break
default:
chain = ''
}
return chain
}
function getExplorerPrefix (networkCode) {
const net = parseInt(networkCode)
let prefix
switch (net) {
case ETH_MAINNET_CODE: // main net
case ETC_MAINNET_CODE: // ETC mainnet
case RSK_MAINNET_CODE: // RSK mainnet
case GC_MAINNET_CODE: // Gnosis chain
prefix = 'mainnet'
break
case ETH_ROPSTEN_CODE: // ropsten testnet
prefix = 'ropsten'
break
case ETH_RINKEBY_CODE: // rinkeby testnet
prefix = 'rinkeby'
break
case ETH_SEPOLIA_CODE: // Sepolia testnet
prefix = 'sepolia'
break
case ETH_KOVAN_CODE: // kovan testnet
prefix = 'kovan'
break
case POA_SOKOL_CODE: // POA Sokol testnet
prefix = 'sokol'
break
case POA_CORE_CODE: // POA Core
prefix = 'core'
break
case GC_OPTIMISM_CODE: // GC Optimism
prefix = 'optimism'
break
case ETH_GOERLI_CODE: // Goerli testnet
case OPTIMISM_GOERLI_CODE: // Optimism Goerli testnet
prefix = 'goerli'
break
default:
prefix = ''
}
return prefix
}
module.exports = {
getExplorerAccountLinkFor,
getExplorerTxLinkFor,
getExplorerTokenLinkFor,
}