Skip to main content
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 single eth_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

For 10 contract reads:
  • Sequential: 10 round trips, ~500ms at 50ms latency
  • Promise.all: 10 parallel, ~50ms
  • Multicall: 1 call, ~50ms + atomic consistency

Supported Chains

Multicall3 is deployed at 0xcA11bde05977b3631167028862bE2a173976CA11 on: Check availability:

Error Types

API Reference

multicall(provider, parameters)

createMulticall(provider, options?)