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
as extension.
{
"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 an 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:
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 (via status deprecated
) 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
There are also aggregated json files with all chains automatically assembled:
ipfs get
- not only through some gateway (means please do not use pinata for now)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 requests 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.
Before submitting a PR, please verify that checks pass with:
$ ./gradlew run
BUILD SUCCESSFUL in 7s
9 actionable tasks: 9 executed
Also please run the prettier to format your json according to the style defined here e.g. run
npx prettier --write _data/*/*.json
Your project - contact us to add it here!