- Notifications
You must be signed in to change notification settings - Fork4
The single source of truth for chain-related data across API3 projects
License
api3dao/chains
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
npm install @api3/chains --saveyarn add @api3/chainspnpm add @api3/chains
The following variables/functions are exported from this package
The single source of truth for the list of supported chains.A static array ofChain
objects.
import{CHAINS}from'@api3/chains';console.log(CHAINS);/*[ { name: 'Arbitrum Sepolia testnet', alias: 'arbitrum-sepolia-testnet', id: '421614', ... }, ...]*/
Returns an object where the key is each chain's alias and the value is an object that can be used as thenetworks
field ofhardhat.config.js
.
The defaulturl
values can be overridden with chain specific environment variables. These environment variables take the form ofHARDHAT_HTTP_RPC_URL_${toUpperSnakeCase(chain.alias)}
. e.g.HARDHAT_HTTP_RPC_URL_ARBITRUM_SEPOLIA_TESTNET
.
import{hardhatConfig}from'@api3/chains';console.log(hardhatConfig.networks());/*{ "arbitrum-sepolia-testnet": { accounts: { mnemonic: '' }, chainId: '421614', url: 'https://...', }, ...}*/
Returns an object where the key is each chain's alias and the value is an object that can be used as theetherscan
field ofhardhat.config.js
(requires thehardhat-etherscan
plugin).
NOTE:hardhat-etherscan requires us to use a dummy API key with Blockscout block explorer APIs. We use "DUMMY_VALUE" but it could have been anything else.
import{hardhatConfig}from'@api3/chains';console.log(hardhatConfig.etherscan());/*{ apiKey: { 'arbitrumSepolia': { ... } }, customChains: [ ... ]}*/
Returns an array of expected environment variable names for chains that have an API key required for the explorer. The array also includes a singleMNEMONIC
variable that can be used to configure all networks.
NOTE: EachETHERSCAN_API_KEY_
andHARDHAT_HTTP_RPC_URL_
environment variable has the chain alias as a suffix, where the alias has been converted to upper snake case.
import{hardhatConfig}from'@api3/chains';console.log(hardhatConfig.getEnvVariableNames());/*[ 'MNEMONIC', 'ETHERSCAN_API_KEY_ARBITRUM_SEPOLIA_TESTNET', ... 'HARDHAT_HTTP_RPC_URL_ARBITRUM_SEPOLIA_TESTNET', ...]*/
Returns an array of chains in the format thatViem expects. Each Chain object can be used tocreate a Viem public client.
AdditionalrpcUrls
values can (optionally) be added through the use of environment variables. These environment variables take the form ofAPI3_CHAINS_HTTP_RPC_URL_${toUpperSnakeCase(chain.alias)}
. If a matching environment variable is detected for a given chain, then it will be added to thehttp
array of therpcUrls.environment
object. If no matching environment variable is detected, then thehttp
array is left empty.
import{viemConfig}from'@api3/chains';console.log(viemConfig.chains());/*[ { id: 421613, name: 'arbitrum-sepolia-testnet', network: 'arbitrum-sepolia-testnet', rpcUrls: { default: ..., public: ..., environment: ... } ... }, ...]*/
Types are also exported and can be found insrc/types.ts
.Types are generated fromzod schemas.These schemas are also used to validate each chain.
The following utility scripts are available
Generates the latestCHAINS
array and outputs the file tosrc/generated/chains.ts
pnpm generate:chains
Iterates through the list of chains to check that the chain is configured correctly and is responsive.
pnpm providers:ping
The most common type of change would be adding or updating a chain. This can be done by creating or editing the relevant JSON file in thechains/
directory.
If any changes are made to chains, you will need to "regenerate" the chains. This will compile all of the JSON files into a single TypeScript file for projects to import. This can be done with the following command
pnpm generate:chains
The list of TypeScript chains is also validated against all of the list of JSON files to ensure that everything is in sync.
NOTE: You will not be able to push changes to chains without having regenerated the TypeScript chains.
Validations can be run with the following commands.
# Validate each chain JSON file conforms to the zod schemaspnpm validate:chains# Run all validationspnpm validate
Releasing new versions is handled automatically withchangesets. Pull requests should include a changeset file before being merged.These can be generated by runningpnpm changeset
and following the instructions. Once a new version is ready to be released, simply mergemain
into theproduction
branch. Changeset files will be consolidated into a single new version and that version released to npm.
More information is contained in theAPI3 guidelines.
About
The single source of truth for chain-related data across API3 projects
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors12
Uh oh!
There was an error while loading.Please reload this page.