From 069f2f13a874dec9f5862b105b34fab593eff096 Mon Sep 17 00:00:00 2001 From: Lucas Santos Date: Fri, 1 Dec 2023 18:07:25 -0300 Subject: [PATCH] feat: add isTestnet property in network object --- packages/sysweb3-keyring/src/initial-state.ts | 9 +++++++++ packages/sysweb3-network/src/networks.ts | 1 + packages/sysweb3-network/src/rpc.ts | 12 +++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/sysweb3-keyring/src/initial-state.ts b/packages/sysweb3-keyring/src/initial-state.ts index a4579712..8eb33ab5 100644 --- a/packages/sysweb3-keyring/src/initial-state.ts +++ b/packages/sysweb3-keyring/src/initial-state.ts @@ -47,6 +47,7 @@ export const initialNetworksState = { apiUrl: '', explorer: 'https://blockbook.elint.services/', slip44: 57, + isTestnet: false, }, 5700: { chainId: 5700, @@ -57,6 +58,7 @@ export const initialNetworksState = { apiUrl: '', explorer: '', slip44: 5700, + isTestnet: true, }, }, ethereum: { @@ -68,6 +70,7 @@ export const initialNetworksState = { currency: 'eth', explorer: 'https://etherscan.io/', apiUrl: 'https://api.etherscan.io/api', + isTestnet: false, }, 137: { chainId: 137, @@ -77,6 +80,7 @@ export const initialNetworksState = { url: 'https://polygon-rpc.com', apiUrl: 'https://api.polygonscan.com/api', explorer: 'https://polygonscan.com/', + isTestnet: false, }, 80001: { chainId: 80001, @@ -86,6 +90,7 @@ export const initialNetworksState = { url: 'https://endpoints.omniatech.io/v1/matic/mumbai/public', apiUrl: 'https://api-testnet.polygonscan.com/api', explorer: 'https://mumbai.polygonscan.com/', + isTestnet: true, }, 57: { chainId: 57, @@ -95,6 +100,7 @@ export const initialNetworksState = { url: 'https://rpc.syscoin.org', apiUrl: 'https://explorer.syscoin.org/api', explorer: 'https://explorer.syscoin.org/', + isTestnet: false, }, 570: { chainId: 570, @@ -104,6 +110,7 @@ export const initialNetworksState = { url: 'https://rpc.rollux.com', apiUrl: 'https://explorer.rollux.com/api', explorer: 'https://explorer.rollux.com/', + isTestnet: false, }, 5700: { chainId: 5700, @@ -113,6 +120,7 @@ export const initialNetworksState = { url: 'https://rpc.tanenbaum.io', apiUrl: 'https://tanenbaum.io/api', explorer: 'https://tanenbaum.io/', + isTestnet: true, }, }, }; @@ -141,5 +149,6 @@ export const initialWalletState: IWalletState = { url: 'https://blockbook.elint.services/', default: true, currency: 'sys', + isTestnet: false, }, }; diff --git a/packages/sysweb3-network/src/networks.ts b/packages/sysweb3-network/src/networks.ts index 9dfc21cd..c55edf9c 100644 --- a/packages/sysweb3-network/src/networks.ts +++ b/packages/sysweb3-network/src/networks.ts @@ -124,6 +124,7 @@ export type INetwork = { currency?: string; explorer?: string; slip44?: number; + isTestnet: boolean; }; export enum INetworkType { diff --git a/packages/sysweb3-network/src/rpc.ts b/packages/sysweb3-network/src/rpc.ts index 3ed0287e..b77c9117 100644 --- a/packages/sysweb3-network/src/rpc.ts +++ b/packages/sysweb3-network/src/rpc.ts @@ -86,6 +86,7 @@ export const validateEthRpc = async ( valid: boolean; hexChainId: string; details: Chain | undefined; + isTestnet: boolean; chain: string; }> => { try { @@ -104,11 +105,18 @@ export const validateEthRpc = async ( throw new Error('RPC has an invalid chain ID'); } + const ethTestnetsChainsIds = [5700, 80001, 11155111, 421611, 5, 69]; // Some ChainIds from Ethereum Testnets as Polygon Testnet, Goerli, Sepolia, etc. + + const isTestnet = details + ? details.name.toLowerCase().includes('test') + : ethTestnetsChainsIds.includes(chainId); // Fallback for RPCs that don't have details + return { chainId, details, chain: details && details.chain ? details.chain : 'unknown', hexChainId, + isTestnet, valid, }; } catch (error) { @@ -123,7 +131,7 @@ export const getEthRpc = async ( formattedNetwork: INetwork; }> => { const endsWithSlash = /\/$/; - const { valid, hexChainId, details } = await validateEthRpc( + const { valid, hexChainId, details, isTestnet } = await validateEthRpc( data.url, isInCooldown ); @@ -149,6 +157,7 @@ export const getEthRpc = async ( explorer: String(explorer), currency: details ? details.nativeCurrency.symbol : data.symbol, chainId: chainIdNumber, + isTestnet, }; return { @@ -264,6 +273,7 @@ export const getSysRpc = async (data: any) => { slip44: networkConfig ? networkConfig.networks[networkType].slip44 : syscoinSLIP, + isTestnet: chain === 'test', }; const rpc = { formattedNetwork,