Gas oracle across Base, Ethereum, Arbitrum, Optimism, Polygon and Avalanche with USD costs; token risk scan (owner, mint/pause/blacklist functions, proxy, liquidity) and on-chain DEX price; pre-signing safety for calldata and EIP-712 typed data (Permit, Permit2, EIP-3009); human-readable transaction decoding; verified ABIs via Sourcify; wallet balances with USDC by chain; ENS and Basename resolution. Each call is one x402 v2 payment in USDC on Base, Polygon, Arbitrum, Avalanche or Sei; no signup or API key. Requests that fail or match nothing are not charged.
x402 v2USDC on BaseNo API keysFree if it fails
1. CallSend a plain GET request. Without payment you receive HTTP 402 with the price in the PAYMENT-REQUIRED header.
2. PayAny x402 client signs a USDC authorization and retries with the PAYMENT-SIGNATURE header.
3. ReceiveYou get the JSON report. Settlement happens only for 2xx responses.
Onchain tools (EVM)
Gas prices with USD costs, token risk scans and DEX prices, calldata and EIP-712 signature safety, transaction decoding, ABIs, wallet balances and ENS.
GET/v1/chain/gas$0.002
EVM gas fees and USD transaction costs (6 chains)
Live gas fees and estimated USD transaction costs on Base, Ethereum, Arbitrum, OP Mainnet, Polygon and Avalanche: base fee and next-block estimate, priority fee p25/p50/p75 over 10 blocks, gas price, 10-block base-fee trend, suggested max fee, and USD cost of a native transfer, ERC-20 transfer and swap (upper-bound rollup L1 fees included), plus the cheapest chain per action. Sources: JSON-RPC via PublicNode (public RPC fallback); prices from on-chain Uniswap v3 pools.
Decodes EVM calldata before signing: function signature, selector, named arguments, candidate signatures for ambiguous selectors, one level of bundled calls (multicall, Multicall3, ERC-4337 execute, Safe execTransaction, multiSend), token symbol and decimals, and risk flags with reasons for unlimited approvals, setApprovalForAll, permits, transferFrom, admin calls and delegatecall. Sources: Sourcify ABIs and 4byte signatures, JSON-RPC via PublicNode.
Params: data, tooptional, chainoptional
Sample response
{
"query": {
"data": "0x095ea7b3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3... (68 bytes)",
"to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"chain": "base"
},
"result": {
"selector": "0x095ea7b3",
"function": "approve(address,uint256)",
"name": "approve",
"decoded_with": "sourcify_abi",
"signature_verified": true,
"args": [
{
"name": "spender",
"type": "address",
"value": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
},
{
"name": "value",
"type": "uint256",
"value": "115792089237316195423570985008687907853269984665640564039457584007913129639935"
}
],
"exact_encoding": true,
"target": {
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"chain": "base",
"chain_id": 8453,
"label": null,
"is_contract": true,
"delegated_to": null,
"verified": true,
"contract_name": "FiatTokenProxy",
"proxy_type": "ZeppelinOSProxy",
"implementation": {
"address": "0x2Ce6311ddAE708829bc0784C967b7d77D19FD779",
"name": "FiatTokenV2_2"
},
"token": {
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6
}
},
"nested": null,
"addresses": [
{
"address": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
"role": "spender",
"label": "Uniswap Permit2",
"is_contract": true,
"delegated_to": null,
"verified_name": null
}
],
"risk_level": "high",
"flags": [
{
"code": "unlimited_approval",
"severity": "high",
"reason": "Grants 0x000000000022D473030F116dDEE9F6B43aC78BA3 (Uniswap Permit2) an unlimited allowance on USDC (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913): it can move all of the sender's balance of this token, now and later, until the allowance is revoked."
}
],
"summary": "Approves 0x000000000022D473030F116dDEE9F6B43aC78BA3 (Uniswap Permit2) to spend an unlimited amount of USDC (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913). Risk: high (unlimited_approval)."
},
"sources": [
{
"name": "Sourcify verified contract repository",
"url": "https://sourcify.dev/"
},
{
"name": "Base JSON-RPC via PublicNode",
"url": "https://base-rpc.publicnode.com"
}
],
"attribution": [
"Contract metadata and function/event signatures from Sourcify (https://sourcify.dev), the open-source smart contract ...",
"Blockchain data read through PublicNode public RPC endpoints (https://www.publicnode.com, operated by Allnodes Inc.);..."
],
"generated_at": "2026-11-15T01:18:49.839Z"
}
Inspects EIP-712 typed data before signing: kind (EIP-2612 or DAI permit, Permit2 allowance or transfer, EIP-3009 transfer authorization as used by x402, Seaport order, Safe transaction, generic), digest, chain id with mismatch check, verifying contract with token symbol and decimals, spender or recipient, raw and formatted amount, unlimited flag, deadline window in ISO time, risk level, flags with reasons, one-line summary. Sources: JSON-RPC via PublicNode, Sourcify.
EVM contract ABI, proxy info and signatures (6 chains)
ABI and metadata for an EVM contract on Base, Ethereum, Arbitrum, OP Mainnet, Polygon or Avalanche: Sourcify verification match, contract name, compiler, proxy type and implementations (implementation ABI merged), function, event and error signatures with selectors and topics, and read vs write function lists. Unverified contracts get a best-effort function list from bytecode selectors named via the Sourcify 4byte database. Sources: Sourcify, chain JSON-RPC via PublicNode.
Params: chain, address, formatoptional
Sample response
{
"query": {
"chain": "base",
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"format": "json"
},
"result": {
"chain": "base",
"chain_id": 8453,
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"verified": true,
"name": "FiatTokenProxy",
"verification": {
"match": "exact_match",
"creation_match": "exact_match",
"runtime_match": "exact_match",
"verified_at": "2024-08-08T13:59:29Z"
},
"compiler": {
"language": "Solidity",
"compiler_version": "0.6.12+commit.27d51765",
"evm_version": "istanbul",
"optimizer": {
"enabled": true,
"runs": 10000000
},
"source_file": "FiatTokenProxy.sol"
},
"bytecode_size": 1852,
"proxy": {
"is_proxy": true,
"type": "ZeppelinOSProxy",
"implementations": [
{
"address": "0x2Ce6311ddAE708829bc0784C967b7d77D19FD779",
"name": "FiatTokenV2_2"
}
]
},
"implementation": {
"address": "0x2Ce6311ddAE708829bc0784C967b7d77D19FD779",
"name": "FiatTokenV2_2",
"verified": true,
"verification": {
"match": "exact_match",
"creation_match": "exact_match",
"runtime_match": "exact_match",
"verified_at": "2026-09-13T14:12:39Z"
},
"compiler": {
"language": "Solidity",
"compiler_version": "0.6.12+commit.27d51765",
"evm_version": "istanbul",
"optimizer": {
"enabled": true,
"runs": 10000000
},
"source_file": "FiatTokenV2_2.sol"
}
},
"counts": {
"functions": 60,
"read": 26,
"write": 34,
"events": 19,
"errors": 0,
"abi_entries": 81
},
"constructor": "constructor(address implementationContract)",
"fallback": true,
"receive": false,
"functions": {
"read": [
{
"selector": "0x70a08231",
"signature": "balanceOf(address)",
"human": "function balanceOf(address account) view returns (uint256)",
"state_mutability": "view"
}
],
"write": [
{
"selector": "0xa9059cbb",
"signature": "transfer(address,uint256)",
"human": "function transfer(address to, uint256 value) returns (bool)",
"state_mutability": "nonpayable"
}
],
"unclassified": []
},
"events": [
{
"topic0": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"signature": "Transfer(address,address,uint256)",
"human": "event Transfer(address indexed from, address indexed to, uint256 value)"
}
],
"errors": [],
"abi": [
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
}
],
"truncated": {
"summary": false,
"abi": false
},
"abi_source": "sourcify_verified_proxy_and_implementation"
},
"sources": [
{
"name": "Sourcify verified contract repository",
"url": "https://sourcify.dev/"
},
{
"name": "Base JSON-RPC via PublicNode",
"url": "https://base-rpc.publicnode.com"
}
],
"notes": [
"Selectors are the first 4 bytes of keccak256 of the canonical signature; event topic0 is the full hash. Read functions are view or pure."
],
"attribution": [
"Contract metadata and function/event signatures from Sourcify (https://sourcify.dev), the open-source smart contract verification service. Kit Rx is not affiliated with or endorsed by Sourcify.",
"Blockchain data read through PublicNode public RPC endpoints (https://www.publicnode.com, operated by Allnodes Inc.); figures are derived by Kit Rx (aggregated, decoded or converted), not a raw RPC feed. Not affiliated with or endorsed by PublicNode or Allnodes."
],
"generated_at": "2026-11-15T01:14:47.893Z"
}
Decode an EVM transaction: method, events, transfers
Decoded EVM transaction on Base, Ethereum, Arbitrum, OP Mainnet, Polygon or Avalanche: status, block time, sender, target, value and fee in native coin and USD (current price), method and arguments, decoded events, ERC-20/721 token transfers, net token flows per address and a one-line summary. ABIs from Sourcify verified contracts or the Sourcify 4byte database. Ethereum receipts cover about the last 2 days. Sources: PublicNode and official chain JSON-RPC, Uniswap v3 pools.
Params: chain, hash
Sample response
{
"query": {
"chain": "base",
"hash": "0xa8970f8f69f1dbedac711cfdec10dbd690e7c039304aed363fc843c4fd88d3b1"
},
"result": {
"chain": "base",
"chain_id": 8453,
"hash": "0xa8970f8f69f1dbedac711cfdec10dbd690e7c039304aed363fc843c4fd88d3b1",
"status": "success",
"summary": "Swapped 0.1475 WETH for 258 USDC",
"block": 57562921,
"timestamp": "2026-11-15T00:35:59.000Z",
"from": "0x3623C63AB138Af28b7F3005E9906FEd7a2A618B1",
"to": "0x678Aa4bF4E210cf2166753e054d5b7c31cc7fa86",
"to_name": "SmartRouter",
"contract_created": null,
"nonce": 242154,
"value": {
"amount": "0",
"symbol": "ETH",
"usd": 0
},
"fee": {
"amount": "0.000001466323151794",
"symbol": "ETH",
"usd": 0.002541,
"gas_used": 137681,
"gas_limit": 1000000,
"effective_gas_price_gwei": 0.010625,
"l1_data_fee": "0.000000003462389113"
},
"native_usd_price": 1732.73,
"method": {
"selector": "0x04e45aaf",
"name": "exactInputSingle",
"signature": "exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))",
"decoded_with": "sourcify_verified_abi",
"args": [
{
"name": "params",
"type": "(address,address,uint24,address,uint256,uint256,uint160)",
"value": {
"tokenIn": "0x4200000000000000000000000000000000000006",
"tokenOut": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"fee": 100,
"recipient": "0x3623C63AB138Af28b7F3005E9906FEd7a2A618B1",
"amountIn": "147489999000000000",
"amountOutMinimum": "0",
"sqrtPriceLimitX96": "3313737701918105378226176"
}
}
]
},
"token_transfers": [
{
"token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"symbol": "USDC",
"standard": "erc20",
"from": "0x72AB388E2E2F6FaceF59E3C3FA2C4E29011c2D38",
"to": "0x3623C63AB138Af28b7F3005E9906FEd7a2A618B1",
"amount": "257.999859"
}
],
"token_transfers_total": 2,
"net_flows": [
{
"address": "0x3623C63AB138Af28b7F3005E9906FEd7a2A618B1",
"role": "sender",
"name": null,
"changes": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"symbol": "USDC",
"amount": "257.999859"
},
{
"asset": "0x4200000000000000000000000000000000000006",
"symbol": "WETH",
"amount": "-0.147489999"
}
]
}
],
"events": [
{
"log_index": 11,
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"name": "Transfer",
"signature": "Transfer(address,address,uint256)",
"decoded_with": "standard_abi",
"args": [
{
"name": "from",
"type": "address",
"value": "0x72AB388E2E2F6FaceF59E3C3FA2C4E29011c2D38"
},
{
"name": "to",
"type": "address",
"value": "0x3623C63AB138Af28b7F3005E9906FEd7a2A618B1"
},
{
"name": "value",
"type": "uint256",
"value": "257999859"
}
]
}
],
"events_total": 3,
"events_truncated": false,
"contracts": [
{
"address": "0x678Aa4bF4E210cf2166753e054d5b7c31cc7fa86",
"name": "SmartRouter",
"proxy_type": null,
"implementation_name": null
}
]
},
"sources": [
{
"name": "Base JSON-RPC via PublicNode",
"url": "https://base-rpc.publicnode.com"
},
{
"name": "Sourcify verified contract repository",
"url": "https://sourcify.dev/"
}
],
"notes": [
"Amounts are decimal strings in token units (raw integers when decimals are unknown). USD values use the current price from the chain's deepest Uniswap v3 wrapped-native/USDC pool, not the price at transaction time."
],
"attribution": [
"Blockchain data read through PublicNode public RPC endpoints (https://www.publicnode.com, operated by Allnodes Inc.); figures are derived by Kit Rx (aggregated, decoded or converted), not a raw RPC feed. Not affiliated with or endorsed by PublicNode or Allnodes.",
"Contract metadata and function/event signatures from Sourcify (https://sourcify.dev), the open-source smart contract verification service. Kit Rx is not affiliated with or endorsed by Sourcify."
],
"generated_at": "2026-11-15T01:14:48.045Z"
}
Heuristic risk screen of an ERC-20 token on Base, Ethereum, Arbitrum, OP Mainnet, Polygon or Avalanche: name, symbol, supply; owner and renounce status; proxy and upgradeability; Sourcify verification; privileged functions in bytecode or verified ABI (mint, pause, blacklist, fee, limit, trading switch); Uniswap v2/v3 and Aerodrome pools with USD depth; risk score 0-100 with a reason per flag. Sources: on-chain reads via PublicNode JSON-RPC, Sourcify.
Spot USD and native-coin price of an ERC-20 token on Base, Ethereum, Arbitrum, OP Mainnet, Polygon or Avalanche from its deepest Uniswap v2/v3 pool (plus Aerodrome on Base) paired with the wrapped native coin or USDC, with each pool's fee and USD liquidity, the best pool, a confidence level and the block read. Sources: on-chain reads via PublicNode JSON-RPC (official RPC fallback); native USD from Uniswap v3 pools.
Params: chain, address
Sample response
{
"query": {
"chain": "base",
"address": "0x940181a94A35A4569E4529A3CDfB74e38FD98631"
},
"result": {
"chain": "base",
"chain_id": 8453,
"address": "0x940181a94A35A4569E4529A3CDfB74e38FD98631",
"symbol": "AERO",
"decimals": 18,
"price_usd": 0.423687,
"price_native": 0.000245343,
"native_symbol": "ETH",
"native_usd": 1726.92,
"best_pool": {
"dex": "Aerodrome",
"address": "0x6cDcb1C4A4D1C3C6d054b27AC5B77e89eAFb971d",
"pair": "AERO/USDC",
"fee_pct": 0.3,
"stable": false,
"price_usd": 0.423687,
"liquidity_usd": 3678000,
"quote_reserve_usd": 1839000
},
"pools": [
{
"dex": "Aerodrome",
"address": "0x6cDcb1C4A4D1C3C6d054b27AC5B77e89eAFb971d",
"pair": "AERO/USDC",
"fee_pct": 0.3,
"stable": false,
"price_usd": 0.423687,
"liquidity_usd": 3678000,
"quote_reserve_usd": 1839000
},
{
"dex": "Uniswap v3",
"address": "0x3d5D143381916280ff91407FeBEB52f2b60f33Cf",
"pair": "AERO/WETH",
"fee_pct": 0.3,
"price_usd": 0.42352,
"liquidity_usd": 1015000,
"quote_reserve_usd": 303200,
"in_range": true
}
],
"pools_found": 24,
"total_liquidity_usd": 6513000,
"price_spread_pct": 0.887,
"confidence": "high",
"confidence_reasons": [],
"block": 57571656
},
"sources": [
{
"name": "Base JSON-RPC via PublicNode",
"url": "https://base-rpc.publicnode.com"
}
],
"notes": [
"Spot price (before fees and price impact) from the pool with the largest WETH or USDC reserves; WETH converted via Base's deepest Uniswap v3 WETH/USDC pool, USDC = $1. liquidity_usd values the token side at price_usd; quote_reserve_usd is the WETH or USDC side alone; confidence counts at most twice that side."
],
"generated_at": "2026-11-15T01:05:06.894Z"
}
Multi-chain wallet balances in USD (curated tokens)
Balances of an EVM wallet (0x address, ENS name or Basename) on Base, Ethereum, Arbitrum, OP Mainnet, Polygon and Avalanche: native coin plus a curated list of 9-13 major tokens per chain (USDC, USDT, DAI, WETH, WBTC/cbBTC, AERO, ARB, OP and more), USD values, per-chain and total USD, chains holding funds, and native USDC per chain for x402 payments. Sources: each chain's JSON-RPC via PublicNode; prices from on-chain Uniswap v3 and Velodrome pools.
ENS and Basenames lookup: name to address, or address to primary name with forward verification. Returns the ETH address, resolver contract, text records (url, avatar, description, Twitter, GitHub, Telegram, and email when set on-chain) and decoded contenthash (IPFS, IPNS, Swarm, Arweave). Sources: ENS Universal Resolver on Ethereum and the Basenames registry on Base, read via PublicNode JSON-RPC; offchain (CCIP-read) names are reported, not followed.
Params: nameoptional, addressoptional
Sample response
{
"query": {
"name": "vitalik.eth"
},
"result": {
"lookup": "forward",
"name": "vitalik.eth",
"network": "ethereum",
"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"resolver": "0x394D8EB4a4fDF599384DeAb25F31d111d755c398",
"is_offchain": false,
"wildcard": false,
"text": {
"url": "https://vitalik.ca",
"avatar": "https://euc.li/vitalik.eth",
"description": "mi pinxe lo crino tcati",
"com.twitter": "VitalikButerin",
"com.github": "vbuterin",
"org.telegram": null,
"email": null
},
"contenthash": {
"protocol": "ipfs",
"uri": "ipfs://bafybeia5eyombgegdwmvfzwisveadaaok2vdjkv5rklfdmcljysjrjc4km"
},
"forward_verified": null
},
"sources": [
{
"name": "Ethereum JSON-RPC via PublicNode",
"url": "https://ethereum-rpc.publicnode.com"
}
],
"notes": [
"Text records are public on-chain values set by the name's owner; empty records are null."
],
"generated_at": "2026-11-15T00:45:43.981Z"
}