Skip to content

pyk/multicall3.py

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

multicall3.py

Python 3 interface for Multicall3.

Installation

Install via pip:

pip install multicall3

Install via pdm:

pdm add multicall3

Example

from multicall3 import Multicall3
from web3 import Web3, AsyncWeb3, AsyncHTTPProvider
import asyncio

ERC20_ABI = [
    {
        "constant": True,
        "inputs": [],
        "name": "name",
        "outputs": [{"name": "", "type": "string"}],
        "payable": False,
        "stateMutability": "view",
        "type": "function",
    },
    {
        "constant": True,
        "inputs": [],
        "name": "decimals",
        "outputs": [{"name": "", "type": "uint8"}],
        "payable": False,
        "stateMutability": "view",
        "type": "function",
    },
    {
        "constant": True,
        "inputs": [],
        "name": "symbol",
        "outputs": [{"name": "", "type": "string"}],
        "payable": False,
        "stateMutability": "view",
        "type": "function",
    }
]

async def main():
  w3 = AsyncWeb3(AsyncHTTPProvider("https://ethereum.publicnode.com"))
  multicall3 = Multicall3(w3=w3)
  usdc_contract = w3.eth.contract(
      address=Web3.to_checksum_address("0xA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48"),
      abi=ERC20_ABI,
  )

  results = await multicall3.aggregate3(
      usdc_contract.functions.name(),
      usdc_contract.functions.symbol(),
      usdc_contract.functions.decimals(),
  )
  assert results[0] == "USD Coin"
  assert results[1] == "USDC"
  assert results[2] == 6

asyncio.run(main())

Contributing

Install pdm using pipx:

pipx install pdm --python $(which python)

Install dependencies:

pdm install

Activate the virtualenv:

$(pdm venv activate)

Run the test:

pytest

About

Python 3 interface for Multicall3

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages