multicall
Action for batching up multiple functions on a contract in a single RPC call via the Multicall3 contract.
Import
import { multicall } from '@wagmi/core'
Usage
import { multicall } from '@wagmi/core'
import { config } from './config'
const wagmigotchiContract = {
address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
abi: wagmigotchiABI,
} as const
const mlootContract = {
address: '0x1dfe7ca09e99d10835bf73044a23b73fc20623df',
abi: mlootABI,
} as const
const result = await multicall(config, {
contracts: [
{
...wagmigotchiContract,
functionName: 'getAlive',
},
{
...wagmigotchiContract,
functionName: 'getBoredom',
},
{
...mlootContract,
functionName: 'getChest',
args: [69],
},
{
...mlootContract,
functionName: 'getWaist',
args: [69],
},
],
})
import { http, createConfig } from '@wagmi/core'
import { mainnet, sepolia } from '@wagmi/core/chains'
export const config = createConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})
Parameters
import { type MulticallParameters } from '@wagmi/core'
contracts
readonly Contract[]
Set of contracts to call.
abi
Abi | undefined
The contract's ABI. Check out the TypeScript docs for how to set up ABIs for maximum type inference and safety.
import { multicall } from '@wagmi/core'
import { config } from './config'
const result = await multicall(config, {
contracts: [
{
address: '0x1dfe7ca09e99d10835bf73044a23b73fc20623df',
abi: mlootABI,
functionName: 'getChest',
args: [69],
},
// ...
],
})
import { http, createConfig } from 'wagmi'
import { mainnet, sepolia } from 'wagmi/chains'
export const config = createConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})
address
Address | undefined
The contract's address.
import { multicall } from '@wagmi/core'
import { config } from './config'
const result = await multicall(config, {
contracts: [
{
address: '0x1dfe7ca09e99d10835bf73044a23b73fc20623df',
abi: mlootABI,
functionName: 'getChest',
args: [69],
},
// ...
],
})
import { http, createConfig } from 'wagmi'
import { mainnet, sepolia } from 'wagmi/chains'
export const config = createConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})
args
readonly unknown[] | undefined
- Arguments to pass when calling the contract.
- Inferred from
abi
andfunctionName
.
import { multicall } from '@wagmi/core'
import { config } from './config'
const result = await multicall(config, {
contracts: [
{
address: '0x1dfe7ca09e99d10835bf73044a23b73fc20623df',
abi: mlootABI,
functionName: 'getChest',
args: [69],
},
// ...
],
})
import { http, createConfig } from 'wagmi'
import { mainnet, sepolia } from 'wagmi/chains'
export const config = createConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})
chainId
config['chains'][number]['id'] | undefined
ID of chain to use when fetching data.
import { multicall } from '@wagmi/core'
import { config } from './config'
const result = await multicall(config, {
contracts: [
{
address: '0x1dfe7ca09e99d10835bf73044a23b73fc20623df',
abi: mlootABI,
functionName: 'getChest',
args: [69],
chainId: 1,
},
// ...
],
})
import { http, createConfig } from 'wagmi'
import { mainnet, sepolia } from 'wagmi/chains'
export const config = createConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})
functionName
string | undefined
- Function to call on the contract.
- Inferred from
abi
.
import { multicall } from '@wagmi/core'
import { config } from './config'
const result = await multicall(config, {
contracts: [
{
address: '0x1dfe7ca09e99d10835bf73044a23b73fc20623df',
abi: mlootABI,
functionName: 'getChest',
args: [69],
},
// ...
],
})
import { http, createConfig } from 'wagmi'
import { mainnet, sepolia } from 'wagmi/chains'
export const config = createConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})
allowFailure
boolean
Whether or not the Hook should throw if a call reverts. If set to true
(default), and a call reverts, then multicall
will fail silently and its error will be logged in the results array. Defaults to true
.
import { multicall } from '@wagmi/core'
import { config } from './config'
const result = await multicall(config, {
allowFailure: false,
contracts: [
{
address: '0x1dfe7ca09e99d10835bf73044a23b73fc20623df',
abi: mlootABI,
functionName: 'getChest',
args: [69],
},
// ...
],
})
import { http, createConfig } from 'wagmi'
import { mainnet, sepolia } from 'wagmi/chains'
export const config = createConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})
batchSize
number
The maximum size (in bytes) for each calldata chunk. Set to 0
to disable the size limit. Defaults to 1024
.
Note: Some RPC Providers limit the amount of calldata (
data
) that can be sent in a singleeth_call
request. It is best to check with your RPC Provider to see if there are any calldata size limits toeth_call
requests.
import { multicall } from '@wagmi/core'
import { config } from './config'
const result = await multicall(config, {
batchSize: 1_024,
contracts: [
{
address: '0x1dfe7ca09e99d10835bf73044a23b73fc20623df',
abi: mlootABI,
functionName: 'getChest',
args: [69],
},
// ...
],
})
import { http, createConfig } from 'wagmi'
import { mainnet, sepolia } from 'wagmi/chains'
export const config = createConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})
blockNumber
number
The block number to perform the read against.
import { multicall } from '@wagmi/core'
import { config } from './config'
const result = await multicall(config, {
blockNumber: 69420n,
contracts: [
{
address: '0x1dfe7ca09e99d10835bf73044a23b73fc20623df',
abi: mlootABI,
functionName: 'getChest',
args: [69],
},
// ...
],
})
import { http, createConfig } from 'wagmi'
import { mainnet, sepolia } from 'wagmi/chains'
export const config = createConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})
blockTag
'latest' | 'earliest' | 'pending' | 'safe' | 'finalized' | undefined
Block tag to read against.
import { multicall } from '@wagmi/core'
import { config } from './config'
const result = await multicall(config, {
blockTag: 'safe',
contracts: [
{
address: '0x1dfe7ca09e99d10835bf73044a23b73fc20623df',
abi: mlootABI,
functionName: 'getChest',
args: [69],
},
// ...
],
})
import { http, createConfig } from 'wagmi'
import { mainnet, sepolia } from 'wagmi/chains'
export const config = createConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})
multicallAddress
Address
Address of multicall contract.
import { multicall } from '@wagmi/core'
import { config } from './config'
const result = await multicall(config, {
contracts: [
{
address: '0x1dfe7ca09e99d10835bf73044a23b73fc20623df',
abi: mlootABI,
functionName: 'getChest',
args: [69],
},
// ...
],
multicallAddress: '0xca11bde05977b3631167028862be2a173976ca11',
})
import { http, createConfig } from 'wagmi'
import { mainnet, sepolia } from 'wagmi/chains'
export const config = createConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})
Return Type
import { type MulticallReturnType } from '@wagmi/core'
Type Inference
With contracts[number]['abi']
setup correctly, TypeScript will infer the correct types for functionName
, args
, and the return type. See the Wagmi TypeScript docs for more information.
Error
import { type MulticallErrorType } from '@wagmi/core'