Uniswap / web3-react

A simple, maximally extensible, dependency minimized framework for building modern Ethereum dApps
https://web3-react-mu.vercel.app/
GNU General Public License v3.0
5.54k stars 1.52k forks source link

We don't support the chainId you provided: eip155:1338 #875

Open aqeelVaival opened 1 year ago

aqeelVaival commented 1 year ago

image 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

aqeelVaival commented 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

}, {} ) `

aqeelVaival commented 1 year ago

Added chain.ts file above

RitzyDevBox commented 1 year ago

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)
hwnahm commented 1 year ago

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.
      }
    })