@sparkdotfi/abi-cli
v0.2.0-20260914.e54046ac
Published
CLI tool for automatically fetching and generating ABIs from blockchain contracts across multiple networks.
Readme
@sparkdotfi/abi-cli
CLI tool for automatically fetching and generating ABIs from blockchain contracts across multiple networks.
Installation
npm install @sparkdotfi/abi-cliConfiguration
Create abi-cli.config.ts in your project root:
import { GlobalConfig } from '@sparkdotfi/abi-cli'
import { getEnv } from '@sparkdotfi/common-nodejs/env'
const env = getEnv()
const config: GlobalConfig = {
out: 'out',
secrets: {
rpcProvider: 'drpc',
rpcApiKey: env.string('DRPC_API_KEY'),
blockscoutApiKey: env.string('BLOCKSCOUT_API_KEY'),
etherscanApiKey: env.string('ETHERSCAN_API_KEY'),
},
contracts: {
USDC: {
mainnet: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
base: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
arbitrum: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
optimism: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',
unichain: '0x078D782b760474a361dDA0AF3839290b0EF57AD6',
},
},
}
export default configUsage
# Set environment variables
export DRPC_API_KEY="your_key"
export BLOCKSCOUT_API_KEY="your_key"
export ETHERSCAN_API_KEY="your_key"
# Run CLI
npx @sparkdotfi/abi-cli
# Or add `abi-cli` command to your package.json
{
"scripts": {
"generate": "abi-cli"
}
}Features
- Fetches ABIs from multiple networks
- Supports proxy contract resolution
- Verifies ABI compatability between many networks
- Generates TypeScript files
- Remaps diamond PAU facet ABIs onto named proxies
Diamond proxies
Diamond proxies dispatch prefixed selectors (erc4626_withdraw) to unprefixed facet functions (withdraw). Configure each diamond proxy under diamondProxies with addresses and a list of facets (id plus prefix). Prefix and id uniqueness is per diamond. The generated ABI is the diamond proxy ABI, then remapped facet functions.
const config: GlobalConfig = {
out: 'out',
secrets: {},
diamondProxies: {
savingsProxy: {
addresses: {
[mainnet.id]: '0xB87A3680f5957AB3dC5F26d77b59326C267683a4',
},
facets: [{ id: 'ERC4626_FACET', prefix: 'erc4626' }],
},
},
}abi-cli fetches the diamond proxy explorer ABI, reads integrations to get facet addresses, remaps wired functions with the prefix, and checks that ${prefix}_${name} hashes to the wired callSelector. Events stay unprefixed. The proxy ABI is first; remapped facet ABIs are merged after it.
