Skill — Copyable reference implementation. Use as-is or customize. See Skills Philosophy.
Multicall
Batch multiple contract read calls into a single RPC request using the Multicall3 contract.What is Multicall3?
Multicall3 is a smart contract deployed on 70+ EVM chains that aggregates multiple contract calls into a singleeth_call. Instead of making N separate RPC requests, you make 1 request that returns all results atomically at the same block.
Benefits:
- Performance: Reduce RPC calls from N to 1
- Consistency: All reads execute at the same block
- Cost: No gas for read operations (uses
eth_call) - Reliability: Per-call failure handling
Quick Start
Multiple Contract Reads
Read from multiple contracts in a single call:Error Handling
With allowFailure: true (default)
Each result includes status and error information:With allowFailure: false
Throws on first failure, returns raw values:Block Consistency
Query at a specific block for consistent reads:Batching Control
Control how calls are batched for large multicalls:Custom Multicall Address
Use a custom Multicall3 deployment:Deployless Mode
For chains without Multicall3, deploy inline:Create Bound Function
Create a multicall function with default options:Performance Comparison
| Approach | RPC Calls | Block Consistency |
|---|---|---|
| Sequential reads | N | No guarantee |
| Promise.all reads | N (parallel) | No guarantee |
| Multicall | 1 | Same block |
- Sequential: 10 round trips, ~500ms at 50ms latency
- Promise.all: 10 parallel, ~50ms
- Multicall: 1 call, ~50ms + atomic consistency
Supported Chains
Multicall3 is deployed at0xcA11bde05977b3631167028862bE2a173976CA11 on:
| Chain | Chain ID | Block Deployed |
|---|---|---|
| Ethereum | 1 | 14353601 |
| Polygon | 137 | 25770160 |
| Arbitrum One | 42161 | 7654707 |
| Optimism | 10 | 4286263 |
| Base | 8453 | 5022 |
| BSC | 56 | 15921452 |
| Avalanche | 43114 | 11907934 |
| Gnosis | 100 | 21022491 |
| … and 60+ more |
Error Types
| Error | Description |
|---|---|
MulticallEncodingError | Failed to encode a contract call |
MulticallDecodingError | Failed to decode result |
MulticallContractError | Contract call reverted |
MulticallZeroDataError | Call returned empty data (0x) |
MulticallRpcError | RPC call to Multicall3 failed |
MulticallResultsMismatchError | Results count doesn’t match contracts |

