0xinevitable / klaytn-multicall

πŸ₯ Batch contract/on-chain queries to the same block. Multicall SDK for the Klaytn blockchain.
MIT License
5 stars 0 forks source link
caver-js klaytn

Cover Image

Klaytn Multicall

Built for inevitable-dao/bento
Inspired by makerdao/multicall and dopex-io/web3-multicall

πŸ“¦ Installation

# Yarn
yarn add klaytn-multicall

# NPM
npm install klaytn-multicall

πŸš€ Usage

import { Multicall } from 'klaytn-multicall';

const provider = new Caver(...);
const multicall = new Multicall({ provider });

const staking = new caver.klay.Contract(...);
const calls = [
  staking.methods.balanceOf(
    '0x7777777141f111cf9f0308a63dbd9d0cad3010c4',
  ),
  staking.methods.rewardsOf(
    '0x7777777141f111cf9f0308a63dbd9d0cad3010c4',
  ),
];

await multicall.aggregate(calls)
  .then((console.log));

From version 1.1.1, you can also use web3 (to unify the interface or for other chains) as well.

const ethereumProvider = new Web3(...); // Ethereum
const klaytnProvider = new Caver(...); // Klaytn

const multicall = new Multicall({
  provider: Config.CHAIN === 'klaytn'
    ? klaytnProvider
    : ethereumProvider
});

Helpers live inside

const multicall = new Multicall({ provider });

const calls = [
  staking.methods.balanceOf('0x7777777141f111cf9f0308a63dbd9d0cad3010c4'),
  staking.methods.rewardsOf('0x7777777141f111cf9f0308a63dbd9d0cad3010c4'),

  // Queries KLAY balance of address
  multicall.contract.methods.getEthBalance(
    '0x7777777141f111cf9f0308a63dbd9d0cad3010c4',
  ),
  multicall.contract.methods.getBlockHash(103742609),
  multicall.contract.methods.getLastBlockHash(),
];

await multicall.aggregate(calls).then(console.log);

Customization

You can inject contract address of your custom implementation, too:

new Multicall({
  provider,
  multicallV2Address: '0xd11dfc2ab34abd3e1abfba80b99aefbd6255c4b8',
});

multicallV2Address defaults to 0xd11dfc2ab34abd3e1abfba80b99aefbd6255c4b8(Multicall2 deployed in Cypress).