Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chain Evm Map #5313

Draft
wants to merge 5 commits into
base: master
Choose a base branch
from
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
143 changes: 143 additions & 0 deletions libs/remix-ui/run-tab/src/lib/actions/evmmap.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
export type ChainInfo = {
id: number
name: string
}

export type HardFork =
| 'cancun'
| 'shanghai'
| 'paris'
| 'london'
| 'berlin'
| 'istanbul'
| 'petersburg'
| 'constantinople'
| 'byzantium'
| 'spuriousDragon'
| 'tangerineWhistle'
| 'homestead'

export const evmMap: Map<HardFork, { chainId: ChainInfo[] }> = new Map([
['cancun', {
chainId: [
{ id: 1, name: "Ethereum Mainnet" },
{ id: 5, name: "Goerli" },
{ id: 11155111, name: "Sepolia" }
]
}],
['shanghai', {
chainId: [
{ id: 1, name: "Ethereum Mainnet" },
{ id: 5, name: "Goerli" },
{ id: 11155111, name: "Sepolia" }
]
}],
['paris', {
chainId: [
{ id: 1, name: "Ethereum Mainnet" },
{ id: 5, name: "Goerli" },
{ id: 10, name: "Optimism" },
{ id: 30, name: "Rootstock Mainnet" },
{ id: 56, name: "BNB Smart Chain Mainnet" },
{ id: 100, name: "Gnosis Chain" },
{ id: 137, name: "Polygon Mainnet" },
{ id: 300, name: "zkSync Era Mainnet" },
{ id: 302, name: "zkSync Era Testnet" },
{ id: 314, name: "Filecoin - Mainnet" },
{ id: 324, name: "zkSync Era Mainnet" },
{ id: 369, name: "PulseChain" },
{ id: 388, name: "HALO Mainnet" },
{ id: 1101, name: "Polygon zkEVM" },
{ id: 1284, name: "Moonbeam" },
{ id: 2000, name: "Dogechain Mainnet" },
{ id: 42220, name: "Celo Mainnet" },
{ id: 42161, name: "Arbitrum One" },
{ id: 42170, name: "Arbitrum Nova" },
{ id: 44787, name: "Celo Alfajores Testnet" },
{ id: 59144, name: "Linea Mainnet" },
{ id: 59141, name: "Linea Testnet" },
{ id: 11155111, name: "Sepolia" },
{ id: 11155420, name: "Optimism Sepolia Testnet" },
{ id: 1666600000, name: "Harmony Mainnet Shard 0" }
]
}],
['london', {
chainId: [
{ id: 1, name: "Ethereum Mainnet" },
{ id: 5, name: "Goerli" },
{ id: 10, name: "Optimism" },
{ id: 25, name: "Cronos Mainnet" },
{ id: 30, name: "Rootstock Mainnet" },
{ id: 56, name: "BNB Smart Chain Mainnet" },
{ id: 137, name: "Polygon Mainnet" },
{ id: 250, name: "Fantom Opera" },
{ id: 1280, name: "HALO Mainnet" },
{ id: 42161, name: "Arbitrum One" },
{ id: 42220, name: "Celo Mainnet" }
]
}],
['berlin', {
chainId: [
{ id: 1, name: "Ethereum Mainnet" },
{ id: 5, name: "Goerli" },
{ id: 11155111, name: "Sepolia" }
]
}],
['istanbul', {
chainId: [
{ id: 1, name: "Ethereum Mainnet" },
{ id: 5, name: "Goerli" },
{ id: 11155111, name: "Sepolia" }
]
}],
['petersburg', {
chainId: [
{ id: 1, name: "Ethereum Mainnet" },
{ id: 5, name: "Goerli" },
{ id: 11155111, name: "Sepolia" }
]
}],
['constantinople', {
chainId: [
{ id: 1, name: "Ethereum Mainnet" },
{ id: 5, name: "Goerli" },
{ id: 11155111, name: "Sepolia" }
]
}],
['byzantium', {
chainId: [
{ id: 1, name: "Ethereum Mainnet" }
]
}],
['spuriousDragon', {
chainId: [
{ id: 1, name: "Ethereum Mainnet" }
]
}],
['tangerineWhistle', {
chainId: [
{ id: 1, name: "Ethereum Mainnet" }
]
}],
['homestead', {
chainId: [
{ id: 1, name: "Ethereum Mainnet" },
{ id: 5, name: "Goerli" },
{ id: 11155111, name: "Sepolia" }
]
}]
])

export function getCompatibleChains(fork: HardFork): ChainInfo[] {
const forkData = evmMap.get(fork);
return forkData ? forkData.chainId : [];
}

export function isChainCompatible(fork: HardFork, chainId: number): boolean {
const compatibleChains = getCompatibleChains(fork);
return compatibleChains.some(chain => chain.id === chainId);
}

export function isChainCompatibleWithAnyFork(chainId: number, forks: HardFork[]): boolean {
return forks.some(fork => isChainCompatible(fork, chainId));
}
Loading