Skip to content

Latest commit

 

History

History
 
 

multicall

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Pancake Multicall

Enhanced multicall sdk to safely make multicalls within the gas limit.

Inspired by the 1inch multicall.

Install

$ pnpm add @pancakeswap/multicall @pancakeswap/sdk viem

Usage

Basic usage

By default the calls will be splitted into chunks based on gas limit of each call and the rpc call gas limit of the chain

import { ChainId } from '@pancakeswap/chains'
import { multicallByGasLimit, MulticallRequestWithGas } from '@pancakeswap/multicall'

const calls: MulticallRequestWithGas[] = [
  {
    // Target contract to call
    target: '0x',
    // Encoded call data
    callData: '',
    // The maximum gas limit set to this single call
    gasLimit: 1_000_000,
  },
]

const { results, blockNumber } = await multicallByGasLimit(calls, {
  chainId: ChainId.BSC,

  // Rpc client. Please refer to `PublicClient` from viem
  client,
})

for (const { success, result, gasUsed } of results) {
  if (success) {
    // Decode result
    decodeResult(result)
  }
}

Advanced usage

The rpc call gas limit can be overriden if provided. Once provided, the multicall sdk won't ask for the gas limit from on chain.

const { results, blockNumber } = await multicallByGasLimit(calls, {
  chainId: ChainId.BSC,
  client,
  gasLimit: 150_000_000,
})

Other utilities

Get multicall gas limit

import { ChainId } from '@pancakeswap/chains'
import { getGasLimitOnChain } from '@pancakeswap/multicall'

// Get the rpc call gas limit of the specified chain
const gasLimit = await getGasLimitOnChain(ChainId.BSC)

Supported chains

For supported chains and contract addresses, please refer to multicall contracts.