Skip to content

Commit 2634677

Browse files
committed
feat: added chains utils to get mappings between chanId and chainNames + network
1 parent 582c8aa commit 2634677

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

src/utils/chains.js

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import { ChainId as ChainName, Network } from '@liquality/cryptoassets'
2+
3+
export const chainIdsMapping = {
4+
eip155: {
5+
[42161]: `${ChainName.Arbitrum}:${Network.Mainnet}`,
6+
[421613]: `${ChainName.Arbitrum}:${Network.Testnet}`,
7+
[43114]: `${ChainName.Avalanche}:${Network.Mainnet}`,
8+
[43113]: `${ChainName.Avalanche}:${Network.Testnet}`,
9+
[56]: `${ChainName.BinanceSmartChain}:${Network.Mainnet}`,
10+
[97]: `${ChainName.BinanceSmartChain}:${Network.Testnet}`,
11+
[1]: `${ChainName.Ethereum}:${Network.Mainnet}`,
12+
[5]: `${ChainName.Ethereum}:${Network.Testnet}`,
13+
[122]: `${ChainName.Fuse}:${Network.Mainnet}`,
14+
[123]: `${ChainName.Fuse}:${Network.Testnet}`,
15+
[10]: `${ChainName.Optimism}:${Network.Mainnet}`,
16+
[420]: `${ChainName.Optimism}:${Network.Testnet}`,
17+
[137]: `${ChainName.Polygon}:${Network.Mainnet}`,
18+
[80001]: `${ChainName.Polygon}:${Network.Testnet}`,
19+
[30]: `${ChainName.Rootstock}:${Network.Mainnet}`,
20+
[31]: `${ChainName.Rootstock}:${Network.Testnet}`
21+
},
22+
bip122: {
23+
['000000000019d6689c085ae165831e93']: `${ChainName.Bitcoin}:${Network.Mainnet}`,
24+
['000000000933ea01ad0ee984209779ba']: `${ChainName.Bitcoin}:${Network.Testnet}`
25+
}
26+
}
27+
28+
// return the list of supported namespaces
29+
export const chainNamespaces = Object.keys(chainIdsMapping)
30+
31+
// Convertion to support mapping from chain name and network to valid chain Ids
32+
export const chainNameNetworkMapping = Object.keys(chainIdsMapping).reduce((p, c) => {
33+
const chains = Object.entries(chainIdsMapping[c])
34+
.map((c) => ({ [`${c[1].replace(':', '_')}`]: c[0] }))
35+
.reduce((prev, curr) => {
36+
const val = Object.entries(curr)
37+
prev[val[0][0]] = val[0][1]
38+
return prev
39+
}, {})
40+
p[c] = chains
41+
return p
42+
}, {})
43+
44+
/**
45+
*
46+
* @param {String} namespace
47+
* @param {String} chainName
48+
* @param {String} networkName
49+
* @returns Number
50+
*/
51+
export const getChainId = (namespace, chainName, networkName) => {
52+
return chainNameNetworkMapping[namespace]?.[chainName]?.[networkName]
53+
}
54+
55+
/**
56+
*
57+
* @param {String | Number} chainId
58+
* @returns Number
59+
*/
60+
export const parseChainId = (chainId) => {
61+
return `${chainId}`.toUpperCase().startsWith('0X') ? parseInt(`${chainId}`, 16) : chainId
62+
}
63+
64+
/**
65+
*
66+
* @param {string} namespace
67+
* @param {String|Number} chainId
68+
* @returns { name: 'The Chain Name', networkName: 'Mainnet | Testnet'}
69+
*/
70+
export const getChainInfo = (namespace, chainId) => {
71+
const chain = chainIdsMapping[namespace][parseChainId(chainId)]
72+
if (chain) {
73+
const values = chain.split(':')
74+
return {
75+
name: values[0],
76+
networkName: values[1]
77+
}
78+
}
79+
return null
80+
}

0 commit comments

Comments
 (0)