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

228 lines
6.8 KiB
JavaScript
Raw Normal View History

2019-02-06 08:05:59 -08:00
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,
2019-02-06 08:05:59 -08:00
POA_CORE_CODE,
GC_MAINNET_CODE,
GC_OPTIMISM_CODE,
RSK_MAINNET_CODE,
2020-03-23 04:31:06 -07:00
RSK_TESTNET_CODE,
ETC_MAINNET_CODE,
OPTIMISM_GOERLI_CODE,
ASTAR_CODE,
SHIDEN_CODE,
SHIBUYA_CODE,
2021-02-09 03:40:26 -08:00
CELO_CODE,
CELO_ALFAJORES_TESTNET_CODE,
CELO_BAKLAVA_TESTNET_CODE,
2019-02-06 08:05:59 -08:00
} = networkIDs
const blockScoutLink = (net, prefix) => {
if (prefix) {
return `https://blockscout.com/${net}/${prefix}`
} else {
return `https://blockscout.com/${net}`
}
}
2020-12-04 02:06:15 -08:00
const etherscanLink = (prefix) => prefix === 'mainnet' ? 'https://etherscan.io' : `https://${prefix}.etherscan.io`
2020-03-23 04:31:06 -07:00
const rskTestnetExplorerLink = 'https://explorer.testnet.rsk.co'
2021-02-09 03:40:26 -08:00
const celoExplorerLink = 'https://explorer.celo.org'
const celoAlfajoresTestnetExplorerLink = 'https://alfajores-blockscout.celo-testnet.org'
const celoBaklavaTestnetExplorerLink = 'https://baklava-blockscout.celo-testnet.org'
2019-01-10 08:45:38 -08:00
2020-03-09 13:13:48 -07:00
const explorerLink = (networkCode, net, prefix) => {
switch (networkCode) {
case POA_SOKOL_CODE: // POA Sokol testnet
2020-03-09 13:13:48 -07:00
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
2020-03-09 13:13:48 -07:00
return blockScoutLink(net, prefix)
2020-03-23 04:31:06 -07:00
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
2020-03-09 13:13:48 -07:00
return etherscanLink(prefix)
2021-02-09 03:40:26 -08:00
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
2020-03-09 13:13:48 -07:00
default:
return blockScoutLink(net, prefix)
}
}
const tokenLink = (networkCode, chain, prefix, tokenAddress, holderAddress) => {
const blockscoutLinkStr = `${blockScoutLink(chain, prefix)}/address/${holderAddress}/tokens/${tokenAddress}/token-transfers`
2020-03-09 13:13:48 -07:00
const etherscanLinkStr = `${etherscanLink(prefix)}/token/${tokenAddress}?a=${holderAddress}`
2020-03-23 04:31:06 -07:00
const rskTestnetExplorerLinkStr = `${rskTestnetExplorerLink}/address/${tokenAddress}`
2021-02-09 03:40:26 -08:00
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`
2020-03-09 13:13:48 -07:00
switch (networkCode) {
case POA_SOKOL_CODE: // POA Sokol testnet
2020-03-09 13:13:48 -07:00
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
2020-03-09 13:13:48 -07:00
return blockscoutLinkStr
2020-03-23 04:31:06 -07:00
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
2020-03-09 13:13:48 -07:00
return etherscanLinkStr
2021-02-09 03:40:26 -08:00
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
2020-03-09 13:13:48 -07:00
default:
return blockscoutLinkStr
}
}
const getExplorerAccountLinkFor = (account, networkCode) => {
const prefix = getExplorerPrefix(networkCode)
const chain = getExplorerChain(networkCode)
return `${explorerLink(networkCode, chain, prefix)}/address/${account}`
2018-08-13 02:00:02 -07:00
}
2020-03-09 13:13:48 -07:00
const getExplorerTxLinkFor = (hash, networkCode) => {
const prefix = getExplorerPrefix(networkCode)
const chain = getExplorerChain(networkCode)
return `${explorerLink(networkCode, chain, prefix)}/tx/${hash}`
2018-08-13 02:00:02 -07:00
}
2020-03-09 13:13:48 -07:00
const getExplorerTokenLinkFor = (tokenAddress, holderAddress, networkCode) => {
const prefix = getExplorerPrefix(networkCode)
const chain = getExplorerChain(networkCode)
return tokenLink(networkCode, chain, prefix, tokenAddress, holderAddress)
2019-06-06 03:38:30 -07:00
}
2020-03-09 13:13:48 -07:00
function getExplorerChain (networkCode) {
const net = parseInt(networkCode)
2019-06-06 03:38:30 -07:00
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
2019-06-06 03:38:30 -07:00
chain = 'eth'
break
case POA_SOKOL_CODE: // POA Sokol testnet
2019-06-06 03:38:30 -07:00
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
2019-06-06 03:38:30 -07:00
chain = 'etc'
break
case RSK_MAINNET_CODE: // RSK mainnet
2019-06-06 03:38:30 -07:00
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
2021-02-09 03:40:26 -08:00
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
2019-06-06 03:38:30 -07:00
default:
chain = ''
2018-08-13 02:00:02 -07:00
}
2019-06-06 03:38:30 -07:00
return chain
2018-08-13 02:00:02 -07:00
}
2020-03-09 13:13:48 -07:00
function getExplorerPrefix (networkCode) {
const net = parseInt(networkCode)
2018-08-13 02:00:02 -07:00
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
2019-06-06 03:38:30 -07:00
prefix = 'mainnet'
2018-10-29 05:20:11 -07:00
break
case ETH_ROPSTEN_CODE: // ropsten testnet
2019-06-06 03:38:30 -07:00
prefix = 'ropsten'
2018-10-29 05:20:11 -07:00
break
case ETH_RINKEBY_CODE: // rinkeby testnet
2019-06-06 03:38:30 -07:00
prefix = 'rinkeby'
2018-10-29 05:20:11 -07:00
break
case ETH_SEPOLIA_CODE: // Sepolia testnet
prefix = 'sepolia'
break
case ETH_KOVAN_CODE: // kovan testnet
2019-06-06 03:38:30 -07:00
prefix = 'kovan'
2018-10-29 05:20:11 -07:00
break
case POA_SOKOL_CODE: // POA Sokol testnet
2018-10-29 05:20:11 -07:00
prefix = 'sokol'
break
2019-06-06 03:38:30 -07:00
case POA_CORE_CODE: // POA Core
2018-10-29 05:20:11 -07:00
prefix = 'core'
break
case GC_OPTIMISM_CODE: // GC Optimism
prefix = 'optimism'
2018-10-29 05:20:11 -07:00
break
case ETH_GOERLI_CODE: // Goerli testnet
case OPTIMISM_GOERLI_CODE: // Optimism Goerli testnet
2019-02-06 08:05:59 -08:00
prefix = 'goerli'
break
2018-10-29 05:20:11 -07:00
default:
prefix = ''
2018-08-13 02:00:02 -07:00
}
return prefix
}
module.exports = {
getExplorerAccountLinkFor,
getExplorerTxLinkFor,
getExplorerTokenLinkFor,
}