Repository URL to install this package:
|
Version:
0.0.1 ▾
|
import { otherChains } from '@sushiswap/wagmi-config'
import { allChains, useContract, useProvider } from 'wagmi'
const chains = [...allChains, ...otherChains]
export const getMulticall3ContractConfig = (chainId: number | undefined) => ({
addressOrName: chains.find((chain) => chain.id === chainId)?.multicall?.address || '',
contractInterface: [
{
inputs: [
{
components: [
{ internalType: 'address', name: 'target', type: 'address' },
{ internalType: 'bytes', name: 'callData', type: 'bytes' },
],
internalType: 'struct Multicall3.Call[]',
name: 'calls',
type: 'tuple[]',
},
],
name: 'aggregate',
outputs: [
{ internalType: 'uint256', name: 'blockNumber', type: 'uint256' },
{ internalType: 'bytes[]', name: 'returnData', type: 'bytes[]' },
],
stateMutability: 'payable',
type: 'function',
},
{
inputs: [
{
components: [
{ internalType: 'address', name: 'target', type: 'address' },
{ internalType: 'bool', name: 'allowFailure', type: 'bool' },
{ internalType: 'bytes', name: 'callData', type: 'bytes' },
],
internalType: 'struct Multicall3.Call3[]',
name: 'calls',
type: 'tuple[]',
},
],
name: 'aggregate3',
outputs: [
{
components: [
{ internalType: 'bool', name: 'success', type: 'bool' },
{ internalType: 'bytes', name: 'returnData', type: 'bytes' },
],
internalType: 'struct Multicall3.Result[]',
name: 'returnData',
type: 'tuple[]',
},
],
stateMutability: 'payable',
type: 'function',
},
{
inputs: [
{
components: [
{ internalType: 'address', name: 'target', type: 'address' },
{ internalType: 'bool', name: 'allowFailure', type: 'bool' },
{ internalType: 'uint256', name: 'value', type: 'uint256' },
{ internalType: 'bytes', name: 'callData', type: 'bytes' },
],
internalType: 'struct Multicall3.Call3Value[]',
name: 'calls',
type: 'tuple[]',
},
],
name: 'aggregate3Value',
outputs: [
{
components: [
{ internalType: 'bool', name: 'success', type: 'bool' },
{ internalType: 'bytes', name: 'returnData', type: 'bytes' },
],
internalType: 'struct Multicall3.Result[]',
name: 'returnData',
type: 'tuple[]',
},
],
stateMutability: 'payable',
type: 'function',
},
{
inputs: [
{
components: [
{ internalType: 'address', name: 'target', type: 'address' },
{ internalType: 'bytes', name: 'callData', type: 'bytes' },
],
internalType: 'struct Multicall3.Call[]',
name: 'calls',
type: 'tuple[]',
},
],
name: 'blockAndAggregate',
outputs: [
{ internalType: 'uint256', name: 'blockNumber', type: 'uint256' },
{ internalType: 'bytes32', name: 'blockHash', type: 'bytes32' },
{
components: [
{ internalType: 'bool', name: 'success', type: 'bool' },
{ internalType: 'bytes', name: 'returnData', type: 'bytes' },
],
internalType: 'struct Multicall3.Result[]',
name: 'returnData',
type: 'tuple[]',
},
],
stateMutability: 'payable',
type: 'function',
},
{
inputs: [],
name: 'getBasefee',
outputs: [{ internalType: 'uint256', name: 'basefee', type: 'uint256' }],
stateMutability: 'view',
type: 'function',
},
{
inputs: [{ internalType: 'uint256', name: 'blockNumber', type: 'uint256' }],
name: 'getBlockHash',
outputs: [{ internalType: 'bytes32', name: 'blockHash', type: 'bytes32' }],
stateMutability: 'view',
type: 'function',
},
{
inputs: [],
name: 'getBlockNumber',
outputs: [{ internalType: 'uint256', name: 'blockNumber', type: 'uint256' }],
stateMutability: 'view',
type: 'function',
},
{
inputs: [],
name: 'getChainId',
outputs: [{ internalType: 'uint256', name: 'chainid', type: 'uint256' }],
stateMutability: 'view',
type: 'function',
},
{
inputs: [],
name: 'getCurrentBlockCoinbase',
outputs: [{ internalType: 'address', name: 'coinbase', type: 'address' }],
stateMutability: 'view',
type: 'function',
},
{
inputs: [],
name: 'getCurrentBlockDifficulty',
outputs: [{ internalType: 'uint256', name: 'difficulty', type: 'uint256' }],
stateMutability: 'view',
type: 'function',
},
{
inputs: [],
name: 'getCurrentBlockGasLimit',
outputs: [{ internalType: 'uint256', name: 'gaslimit', type: 'uint256' }],
stateMutability: 'view',
type: 'function',
},
{
inputs: [],
name: 'getCurrentBlockTimestamp',
outputs: [{ internalType: 'uint256', name: 'timestamp', type: 'uint256' }],
stateMutability: 'view',
type: 'function',
},
{
inputs: [{ internalType: 'address', name: 'addr', type: 'address' }],
name: 'getEthBalance',
outputs: [{ internalType: 'uint256', name: 'balance', type: 'uint256' }],
stateMutability: 'view',
type: 'function',
},
{
inputs: [],
name: 'getLastBlockHash',
outputs: [{ internalType: 'bytes32', name: 'blockHash', type: 'bytes32' }],
stateMutability: 'view',
type: 'function',
},
{
inputs: [
{ internalType: 'bool', name: 'requireSuccess', type: 'bool' },
{
components: [
{ internalType: 'address', name: 'target', type: 'address' },
{ internalType: 'bytes', name: 'callData', type: 'bytes' },
],
internalType: 'struct Multicall3.Call[]',
name: 'calls',
type: 'tuple[]',
},
],
name: 'tryAggregate',
outputs: [
{
components: [
{ internalType: 'bool', name: 'success', type: 'bool' },
{ internalType: 'bytes', name: 'returnData', type: 'bytes' },
],
internalType: 'struct Multicall3.Result[]',
name: 'returnData',
type: 'tuple[]',
},
],
stateMutability: 'payable',
type: 'function',
},
{
inputs: [
{ internalType: 'bool', name: 'requireSuccess', type: 'bool' },
{
components: [
{ internalType: 'address', name: 'target', type: 'address' },
{ internalType: 'bytes', name: 'callData', type: 'bytes' },
],
internalType: 'struct Multicall3.Call[]',
name: 'calls',
type: 'tuple[]',
},
],
name: 'tryBlockAndAggregate',
outputs: [
{ internalType: 'uint256', name: 'blockNumber', type: 'uint256' },
{ internalType: 'bytes32', name: 'blockHash', type: 'bytes32' },
{
components: [
{ internalType: 'bool', name: 'success', type: 'bool' },
{ internalType: 'bytes', name: 'returnData', type: 'bytes' },
],
internalType: 'struct Multicall3.Result[]',
name: 'returnData',
type: 'tuple[]',
},
],
stateMutability: 'payable',
type: 'function',
},
],
})
export function useMulticall3Contract(chainId: number) {
return useContract({
...getMulticall3ContractConfig(chainId),
signerOrProvider: useProvider({ chainId }),
})
}