provides metadata for networkIDs and chainIDs
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Go to file
zgjdx b40558df17
Update Camelark name (#2556)
2 hours ago
.ci Add test stage 2 years ago
.github Prefer cached icon copies over ipfs (#2463) 1 week ago
_data Update Camelark name (#2556) 2 hours ago
gradle/wrapper Use gradle 8.0.2 (#2367) 4 weeks ago
httpsloader Add initial httpsloader (#2104) 3 months ago
model Remove a leftover from commit a3cd16b7a7 (#2370) 4 weeks ago
processor Check for unused explorer icons 3 weeks ago
tools Make sure the path is correct (#2341) 2 weeks ago
website@e573725226 Use new website version (with icons now) 2 months ago
.gitignore suggest to run gradle before submitting PR; (#2284) 1 month ago
.gitmodules Add chainlist website as submodule 2 months ago
.jitpack.yml Tell jitpack to use openjdk 11 (#2105) 3 months ago
.prettierignore Added Prettier and formatted existing JSON files (#1501) 7 months ago
.prettierrc.json Added Prettier and formatted existing JSON files (#1501) 7 months ago
LICENSE Initial commit 4 years ago
README.md Add EvmChain.info app for chainlist (#2366) 4 weeks ago
build.gradle Bump com.github.ben-manes:gradle-versions-plugin from 0.45.0 to 0.46.0 (#2307) 1 month ago
gradlew Use gradle 8.0.1 (#2306) 1 month ago
gradlew.bat Use gradle 7.6 4 months ago
maintainer_checklist.md Clean up the maintainer_checklist.md (#2441) 2 weeks ago
settings.gradle.kts Add initial httpsloader (#2104) 3 months ago

README.md

EVM-based Chains

The source data is in _data/chains. Each chain has its own file with the filename being the CAIP-2 representation as name and .json ans extension.

Example

{
  "name": "Ethereum Mainnet",
  "chain": "ETH",
  "rpc": [
    "https://mainnet.infura.io/v3/${INFURA_API_KEY}",
    "https://api.mycryptoapi.com/eth"
  ],
  "faucets": [],
  "nativeCurrency": {
    "name": "Ether",
    "symbol": "ETH",
    "decimals": 18
  },
  "features": [{ "name": "EIP155" }, { "name": "EIP1559" }],
  "infoURL": "https://ethereum.org",
  "shortName": "eth",
  "chainId": 1,
  "networkId": 1,
  "icon": "ethereum",
  "explorers": [{
    "name": "etherscan",
    "url": "https://etherscan.io",
    "icon": "etherscan",
    "standard": "EIP3091"
  }]
}

when an icon is used in either the network or a explorer there must be a json in _data/icons with the name used (e.g. in the above example there must be a ethereum.json and a etherscan.json in there) - the icon jsons look like this:


[
    {
      "url": "ipfs://QmdwQDr6vmBtXmK2TmknkEuZNoaDqTasFdZdu3DRw8b2wt",
      "width": 1000,
      "height": 1628,
      "format": "png"
    }
]

where:

  • the URL must be a IPFS url that is publicly resolveable
  • width and height are positive integers
  • format is either "png", "jpg" or "svg"

If the chain is an L2 or a shard of another chain you can link it to the parent chain like this:

{
  ...
  "parent": {
   "type" : "L2",
   "chain": "eip155-1",
   "bridges": [ {"url":"https://bridge.arbitrum.io"} ]
  }
}

where you need to specify type 2 and the reference to an existing parent. The field about bridges is optional.

You can add a status field e.g. to deprecate a chain (a chain should never be deleted as this would open the door to replay attacks) Other options for status are active (default) or incubating

Aggregation

There are also aggregated json files with all chains automatically assembled:

Constraints

  • the shortName and name MUST be unique - see e.g. EIP-3770 on why
  • if referencing a parent chain - the chain MUST exist in the repo
  • if using a IPFS CID for the icon - the CID MUST be retrievable via ipfs get - not only through some gateway (means please do not use pinata for now)
  • for more constraints you can look into the CI

Collision management

We cannot allow more than one chain with the same chainID - this would open the door to replay attacks. The first pull request gets the chainID assigned. When creating a chain we can expect that you read EIP155 which states this repo. All pull request trying to replace a chainID because they think their chain is better than the other will be closed. The only way to get a chain reassigned is when the old chain gets deprecated. This can e.g. be used for testnets that are short lived. But then you will get the redFlag "reusedChaiID" that should be displayed in clients to warn them about the dangers here.

PR verification

Before submitting a PR, please verify that checks pass with:

$ ./gradlew run

BUILD SUCCESSFUL in 7s
9 actionable tasks: 9 executed

Usages

Wallets

Explorers

EIPs

  • EIP-155
  • EIP-3014
  • EIP-3770
  • EIP-4527

Listing sites

Other