Open aqeelVaival opened 1 year ago
`import type { AddEthereumChainParameter } from '@web3-react/types'
const ETH: AddEthereumChainParameter['nativeCurrency'] = { name: 'Ether', symbol: 'ETH', decimals: 18, }
const LAVA: AddEthereumChainParameter['nativeCurrency'] = { name: 'Lava', symbol: 'LAVA', decimals: 18, }
const MATIC: AddEthereumChainParameter['nativeCurrency'] = { name: 'Matic', symbol: 'MATIC', decimals: 18, }
const CELO: AddEthereumChainParameter['nativeCurrency'] = { name: 'Celo', symbol: 'CELO', decimals: 18, }
interface BasicChainInformation { urls: string[] name: string }
interface ExtendedChainInformation extends BasicChainInformation { nativeCurrency: AddEthereumChainParameter['nativeCurrency'] blockExplorerUrls: AddEthereumChainParameter['blockExplorerUrls'] }
function isExtendedChainInformation( chainInformation: BasicChainInformation | ExtendedChainInformation ): chainInformation is ExtendedChainInformation { return !!(chainInformation as ExtendedChainInformation).nativeCurrency }
export function getAddChainParameters(chainId: number): AddEthereumChainParameter | number { const chainInformation = CHAINS[chainId] if (isExtendedChainInformation(chainInformation)) { return { chainId, chainName: chainInformation.name, nativeCurrency: chainInformation.nativeCurrency, rpcUrls: chainInformation.urls, blockExplorerUrls: chainInformation.blockExplorerUrls, } } else { return chainId } }
const getInfuraUrlFor = (network: string) =>
process.env.infuraKey ? https://${network}.infura.io/v3/${process.env.infuraKey}
: undefined
const getAlchemyUrlFor = (network: string) =>
process.env.alchemyKey ? https://${network}.alchemyapi.io/v2/${process.env.alchemyKey}
: undefined
type ChainConfig = { [chainId: number]: BasicChainInformation | ExtendedChainInformation }
export const MAINNET_CHAINS: ChainConfig = { 1: { urls: [getInfuraUrlFor('mainnet'), getAlchemyUrlFor('eth-mainnet'), 'https://cloudflare-eth.com'].filter(Boolean), name: 'Mainnet', },
10: { urls: [getInfuraUrlFor('optimism-mainnet'), 'https://mainnet.optimism.io'].filter(Boolean), name: 'Optimism', nativeCurrency: ETH, blockExplorerUrls: ['https://optimistic.etherscan.io'], }, 42161: { urls: [getInfuraUrlFor('arbitrum-mainnet'), 'https://arb1.arbitrum.io/rpc'].filter(Boolean), name: 'Arbitrum One', nativeCurrency: ETH, blockExplorerUrls: ['https://arbiscan.io'], }, 137: { urls: [getInfuraUrlFor('polygon-mainnet'), 'https://polygon-rpc.com'].filter(Boolean), name: 'Polygon Mainnet', nativeCurrency: MATIC, blockExplorerUrls: ['https://polygonscan.com'], }, 42220: { urls: ['https://forno.celo.org'], name: 'Celo', nativeCurrency: CELO, blockExplorerUrls: ['https://explorer.celo.org'], }, 1339: { urls: ['https://rpc.elysiumchain.tech'], name: 'Elysium Mainnet', nativeCurrency: LAVA, blockExplorerUrls: ['https://blockscout.elysiumchain.tech/'], }, }
export const TESTNET_CHAINS: ChainConfig = { 5: { urls: [getInfuraUrlFor('goerli')].filter(Boolean), name: 'Görli', }, 420: { urls: [getInfuraUrlFor('optimism-goerli'), 'https://goerli.optimism.io'].filter(Boolean), name: 'Optimism Goerli', nativeCurrency: ETH, blockExplorerUrls: ['https://goerli-explorer.optimism.io'], }, 421613: { urls: [getInfuraUrlFor('arbitrum-goerli'), 'https://goerli-rollup.arbitrum.io/rpc'].filter(Boolean), name: 'Arbitrum Goerli', nativeCurrency: ETH, blockExplorerUrls: ['https://testnet.arbiscan.io'], }, 80001: { urls: [getInfuraUrlFor('polygon-mumbai')].filter(Boolean), name: 'Polygon Mumbai', nativeCurrency: MATIC, blockExplorerUrls: ['https://mumbai.polygonscan.com'], }, 44787: { urls: ['https://alfajores-forno.celo-testnet.org'], name: 'Celo Alfajores', nativeCurrency: CELO, blockExplorerUrls: ['https://alfajores-blockscout.celo-testnet.org'], }, 1338: { urls: ['https://rpc.atlantischain.network'], name: 'Elysium Testnet', nativeCurrency: LAVA, blockExplorerUrls: ['https://elysium-explorer-blockscout.vulcanforged.com/'], }, }
export const CHAINS: ChainConfig = { ...MAINNET_CHAINS, ...TESTNET_CHAINS, }
export const URLS: { [chainId: number]: string[] } = Object.keys(CHAINS).reduce<{ [chainId: number]: string[] }>( (accumulator, chainId) => { const validURLs: string[] = CHAINS[Number(chainId)].urls
if (validURLs.length) {
accumulator[Number(chainId)] = validURLs
}
return accumulator
}, {} ) `
Added chain.ts file above
The issue is that the optional chains runs the default validations, to fix this for now just modify the code to include the regular chains with the defaults, IMO this is actually a bug in wallet connect
const [mainnet] = Object.keys(MAINNET_CHAINS).map(Number)
const [...optionalChains] = Object.keys(MAINNET_CHAINS).map(Number)
I solved the same issue.
new WalletConnectV2({
actions,
options: {
projectId: '',
chains: [],
showQrModal: true,
rpcMap: { []: '' }. <------- Please check that you add rpcMap which is omitted in the example.
}
})
Custom chain with id 1338 for testnet & 1339 for mainnet with Metamask are working fine with web3-react v8. But with walletConnect V2 only default selection works with already reputable network, not working with 1338 & 1339 , stating the error
{"status":"FAILED","reasons":[{"field":"chainId","description":"We don't support the chainId you provided: eip155:1338"}]}
Screenshoot attached as well... Is there any platform of walletConnect where we need to register the 1338/1339 evm chains? & after that only can we able to connect metamask using walletConnect v2? Please guide