klaytn-multicall

[![Cover Image](https://raw.githubusercontent.com/junhoyeo/klaytn-multicall/main/docs/images/cover.jpg)](https://github.com/junhoyeo)


Keywords
caver-js, klaytn
License
MIT
Install
npm install klaytn-multicall@1.1.4-canary.0

Documentation

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

  • getEthBalance: Gets the ETH KLAY balance of an address
  • getBlockHash: Gets the block hash
  • getLastBlockHash: Gets the last blocks hash
  • getCurrentBlockTimestamp: Gets the current block timestamp
  • getCurrentBlockDifficulty: Gets the current block difficulty
  • getCurrentBlockGasLimit: Gets the current block gas limit
  • getCurrentBlockCoinbase: Gets the current block coinbase
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).