• Core
  • Actions
  • multicall

multicall

Action for calling multiple ethers Contract read-only methods via multicall3.

import { multicall } from '@wagmi/core'

Usage

The following examples use the wagmigotchi & more loot contracts.

import { multicall } from '@wagmi/core'
 
const wagmigotchiContract = {
  address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
  abi: wagmigotchiABI,
}
const mlootContract = {
  address: '0x1dfe7ca09e99d10835bf73044a23b73fc20623df',
  abi: mlootABI,
}
 
const data = await multicall({
  contracts: [
    {
      ...wagmigotchiContract,
      functionName: 'getAlive',
    },
    {
      ...wagmigotchiContract,
      functionName: 'getBoredom',
    },
    {
      ...mlootContract,
      functionName: 'getChest',
      args: [69],
    },
    {
      ...mlootContract,
      functionName: 'getWaist',
      args: [69],
    },
  ],
})

Return Value

MulticallResult[]

MulticallResult provides an inferred type from the outputs on functionName in the ABI (ie. the return type of the contract method). Learn more.

Configuration

contracts

address

Contract address.

import { multicall } from '@wagmi/core'
 
const data = await multicall({
  contracts: [
    {
      address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
      abi: wagmigotchiABI,
      functionName: 'getAlive',
    },
    {
      address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
      abi: wagmigotchiABI,
      functionName: 'getBoredom',
    },
  ],
})

abi

Contract ABI.

By defining inline or adding a const assertion to abi, TypeScript will infer the correct types for functionName, args, and action result. See the wagmi TypeScript docs for more information.

import { multicall } from '@wagmi/core'
 
const data = await multicall({
  contracts: [
    {
      address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
      abi: wagmigotchiABI,
      functionName: 'getAlive',
    },
    {
      address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
      abi: wagmigotchiABI,
      functionName: 'getBoredom',
    },
  ],
})

functionName

Name of function to call.

import { multicall } from '@wagmi/core'
 
const data = await multicall({
  contracts: [
    {
      address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
      abi: wagmigotchiABI,
      functionName: 'getAlive',
    },
    {
      address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
      abi: wagmigotchiABI,
      functionName: 'getBoredom',
    },
  ],
})

args

Arguments to pass to function call.

import { multicall } from '@wagmi/core'
 
const data = await multicall({
  contracts: [
    {
      address: '0x1dfe7ca09e99d10835bf73044a23b73fc20623df',
      abi: mlootABI,
      functionName: 'getChest',
      args: [69],
    },
    {
      address: '0x1dfe7ca09e99d10835bf73044a23b73fc20623df',
      abi: mlootABI,
      functionName: 'getWaist',
      args: [69],
    },
  ],
})

chainId (optional)

Force a specific chain id for the request. The wagmi Client's ethers provider must be set up as a chain-aware function for this to work correctly.

import { multicall, chain } from '@wagmi/core'
 
const data = await multicall({
  contracts: [
    {
      ...wagmigotchiContract,
      functionName: 'getAlive',
      chainId: chain.mainnet.id,
    },
    {
      ...wagmigotchiContract,
      functionName: 'getBoredom',
      chainId: chain.mainnet.id,
    },
  ],
})

allowFailure (optional)

If a contract read fails while fetching, it will fail silently and not throw an error.

import { multicall } from '@wagmi/core'
 
const data = await multicall({
  contracts: [
    {
      ...wagmigotchiContract,
      functionName: 'getAlive',
    },
    {
      ...wagmigotchiContract,
      functionName: 'getBoredom',
    },
  ],
  allowFailure: false,
})

overrides (optional)

Overrides to pass to function call.

import { multicall } from '@wagmi/core'
 
const data = await multicall({
  contracts: [
    {
      ...wagmigotchiContract,
      functionName: 'getAlive',
    },
    {
      ...wagmigotchiContract,
      functionName: 'getBoredom',
    },
  ],
  overrides: { from: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e' },
})