Skip to main content

Multicall library for aggregating web3py contract calls

Project description

web3mc - multicall library for web3py

Based on makerdao's multicall contractand brownie implementation with batching and asynchronous support. Works directly with web3py contract functions and parameters

Installation

pip install web3mc

Quickstart

Basic usage

(this is default value if empty - set by web3py)

export WEB3_HTTP_PROVIDER_URI=http://localhost:8545
from web3.auto import w3
from web3mc.auto import multicall

abi = [{"constant": True, "inputs": [], "name": "name", "outputs": [{"name": "", "type": "string"}], "payable": False,
        "stateMutability": "view", "type": "function", },
       {"constant": True, "inputs": [], "name": "symbol", "outputs": [{"name": "", "type": "string"}], "payable": False,
        "stateMutability": "view", "type": "function", },
       {"constant": True, "inputs": [{"name": "", "type": "address"}], "name": "balanceOf",
        "outputs": [{"name": "", "type": "uint256"}], "payable": False, "stateMutability": "view", "type": "function"}]

weth_erc20 = w3.eth.contract("0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", abi=abi)

calls = [weth_erc20.functions.name(), weth_erc20.functions.symbol(), weth_erc20.functions.balanceOf("vitalik.eth")]

result = multicall.aggregate(calls)
print(result)  # ['Wrapped Ether', 'WETH', 26992040046283229929]

Call multiple contracts with same abi (implementation)

...
weth_erc20 = w3.eth.contract("0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", abi=abi)

calls = [weth_erc20.functions.name(),weth_erc20.functions.symbol(),weth_erc20.functions.balanceOf("vitalik.eth")] * 2
# WBTC, USDC
addresses = ["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"] * 3 + ["0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599"] * 3

result = multicall.aggregate(calls, use_try=True, addresses=addresses)  # tryAggregate()
print(result)  # ['Wrapped BTC', 'WBTC', 0, 'USD Coin', 'USDC', 396267093705]

Parameters

Environment variable

  • WEB3_HTTP_PROVIDER_URI - can be overwritten directly (from web3py)

Custom parameters

from web3mc import Multicall

multicall = Multicall(
    provider_url="<your custom provider url>",  # Overrides env parameter
    batch=100,  # can lead to overflow
    max_retries=3,  # retries without use_try (aggregate function in contract)
    gas_limit=15_000_000,  # gas limit for calls
    _semaphore=1000,  # max concurrent coroutines, change carefully!
)

Testing

Install dependencies, make sure you set WEB3_HTTP_PROVIDER_URI environment variable

pytest tests

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

web3mc-0.1.14.tar.gz (13.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

web3mc-0.1.14-py3-none-any.whl (13.2 kB view details)

Uploaded Python 3

File details

Details for the file web3mc-0.1.14.tar.gz.

File metadata

  • Download URL: web3mc-0.1.14.tar.gz
  • Upload date:
  • Size: 13.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.10.4 Linux/6.17.0-1018-azure

File hashes

Hashes for web3mc-0.1.14.tar.gz
Algorithm Hash digest
SHA256 798e79483cb63c87dc24df82d651434e48b31f2f87e186158969af5508688cba
MD5 eaba2506dd6874da25121534197bc900
BLAKE2b-256 cf2625082358a14aaa41054d2aa21aa72bf2ca7a8ef8f1f4f413ab4667408e29

See more details on using hashes here.

File details

Details for the file web3mc-0.1.14-py3-none-any.whl.

File metadata

  • Download URL: web3mc-0.1.14-py3-none-any.whl
  • Upload date:
  • Size: 13.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.10.4 Linux/6.17.0-1018-azure

File hashes

Hashes for web3mc-0.1.14-py3-none-any.whl
Algorithm Hash digest
SHA256 a74443f47908c1da463c6a3538e24a7bf3357c000c2fcb7798b46a74cb6a468d
MD5 a94c6e7651ed2eeb082513c9402439f0
BLAKE2b-256 23bb5874ffed0f636a31441a85a4e3643464b48f0fbdd223f56586558561b79e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page