AI prompts
base on provides metadata for chains # EVM-based Chains
The source data is in _data/chains. Each chain has its own file with the filename being the [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-2.md) representation as name and `.json` as extension.
## Example:
```json
{
"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 JSON files look like this:
```json
[
{
"url": "ipfs://QmdwQDr6vmBtXmK2TmknkEuZNoaDqTasFdZdu3DRw8b2wt",
"width": 1000,
"height": 1628,
"format": "png"
}
]
```
where:
* The URL MUST be publicly resolvable through IPFS
* width and height MUST be positive integers
* format is either "png", "jpg" or "svg"
* size MUST be less than 250kb
If the chain is an L2 or a shard of another chain you can link it to the parent chain like this:
```json
{
...
"parent": {
"type" : "L2",
"chain": "eip155-1",
"bridges": [ {"url":"https://bridge.arbitrum.io"} ]
}
}
```
where you need to specify the type 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`
## Aggregation
There are also aggregated json files with all chains automatically assembled:
* https://chainid.network/chains.json
* https://chainid.network/chains_mini.json (miniaturized - fewer fields for smaller filesize)
## 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 an 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 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.
## Getting your PR merged
### before PR is submitted
Before submitting a PR, please ensure all checks pass by running:
```bash
$ ./gradlew run
BUILD SUCCESSFUL in 7s
9 actionable tasks: 9 executed
```
Additionally, run Prettier to format your JSON according to the style [defined here ](https://github.com/ethereum-lists/chains/blob/master/.prettierrc.json)
e.g. run
```
npx prettier --write _data/*/*.json
```
### Once PR is submitted
* Make sure CI is green. There will likely be no review when the CI is red.
* When making changes that fix the CI problems - please re-request a review - otherwise it is too much work to track such changes with so many PRs daily
## Usages
### Tools
* [MESC](https://paradigmxyz.github.io/mesc)
### Explorers
* [Otterscan](https://otterscan.io)
### Wallets
* [WallETH](https://walleth.org)
* [TREZOR](https://trezor.io)
* [Minerva Wallet](https://minerva.digital)
### EIPs
* EIP-155
* EIP-3014
* EIP-3770
* EIP-4527
### Listing sites
* [chainid.network](https://chainid.network) / [chainlist.wtf](https://chainlist.wtf)
* [chainlist.org](https://chainlist.org)
* [Chainlink docs](https://docs.chain.link/)
* [dRPC Chainlist - Load-balanced public nodes](https://drpc.org/chainlist)
* [eth-chains](https://github.com/taylorjdawson/eth-chains)
* [EVM-BOX](https://github.com/izayl/evm-box)
* [evmchain.info](https://evmchain.info)
* [evmchainlist.org](https://evmchainlist.org)
* [networks.vercel.app](https://networks.vercel.app)
* [Wagmi compatible chain configurations](https://spenhouet.com/chains)
### Other
* [FaucETH](https://github.com/komputing/FaucETH)
* [Sourcify playground](https://playground.sourcify.dev)
* [Smart Contract UI](https://xtools-at.github.io/smartcontract-ui)
* Your project - contact us to add it here!
", Assign "at most 3 tags" to the expected json: {"id":"1739","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"