Skip to main content

multicall.py

python interface for makerdao's multicall and a port of multicall.js.

This fork supports multithreading/processing in dockerized env which breaks with original module, by disabling Async execution of w3 requests.

To enable threaded/parallel execution with docker set env variable ASYNC_W3=0.

installation

pip install multicall

example

from multicall import Call, Multicall

# assuming you are on kovan
MKR_TOKEN = '0xaaf64bfcc32d0f15873a02163e7e500671a4ffcd'
MKR_WHALE = '0xdb33dfd3d61308c33c63209845dad3e6bfb2c674'
MKR_FISH = '0x2dfcedcb401557354d0cf174876ab17bfd6f4efd'

def from_wei(value):
    return value / 1e18

multi = Multicall([
    Call(MKR_TOKEN, ['balanceOf(address)(uint256)', MKR_WHALE], [('whale', from_wei)]),
    Call(MKR_TOKEN, ['balanceOf(address)(uint256)', MKR_FISH], [('fish', from_wei)]),
    Call(MKR_TOKEN, 'totalSupply()(uint256)', [('supply', from_wei)]),
])

multi()  # {'whale': 566437.0921992733, 'fish': 7005.0, 'supply': 1000003.1220798912}

# seth-style calls
Call(MKR_TOKEN, ['balanceOf(address)(uint256)', MKR_WHALE])()
Call(MKR_TOKEN, 'balanceOf(address)(uint256)')(MKR_WHALE)
# return values processing
Call(MKR_TOKEN, 'totalSupply()(uint256)', [('supply', from_wei)])()

for a full example, see implementation of daistats. original daistats.com made by nanexcool.

api

Signature(signature)

  • signature is a seth-style function signature of function_name(input,types)(output,types). it also supports structs which need to be broken down to basic parts, e.g. (address,bytes)[].

use encode_data(args) with input args to get the calldata. use decode_data(output) with the output to decode the result.

Call(target, function, returns)

  • target is the to address which is supplied to eth_call.
  • function can be either seth-style signature of method(input,types)(output,types) or a list of [signature, *args].
  • returns is a list of tuples of (name, handler) for return values. if returns argument is omitted, you get a tuple, otherwise you get a dict. to skip processing of a value, pass None as a handler.

use Call(...)() with predefined args or Call(...)(args) to reuse a prepared call with different args.

use decode_output(output) with to decode the output and process it with returns handlers.

Multicall(calls)

  • calls is a list of calls with prepared values.

use Multicall(...)() to get the result of a prepared multicall.

Environment Variables

  • GAS_LIMIT: sets overridable default gas limit for Multicall to prevent out of gas errors. Default: 50,000,000
  • MULTICALL_DEBUG: if set, sets logging level for all library loggers to logging.DEBUG
  • MULTICALL_PROCESSES: pass an integer > 1 to use multiprocessing for encoding args and decoding results. Default: 1, which executes all code in the main process.
  • AIOHTTP_TIMEOUT: sets aiohttp timeout period in seconds for async calls to node. Default: 30
  • ASYNC_W3: enables/disables web3 async execution, 0 = Disable, 1 = Enable.

test

export WEB3_INFURE_PROJECT_ID=<your_infura_id>
export PYTEST_NETWORK='mainnet'
poetry run python -m pytest

Download files

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

Source Distribution

multicall_thread_safe-0.1.5.tar.gz (15.6 kB view details)

Uploaded Source

Built Distribution

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

multicall_thread_safe-0.1.5-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file multicall_thread_safe-0.1.5.tar.gz.

File metadata

  • Download URL: multicall_thread_safe-0.1.5.tar.gz
  • Upload date:
  • Size: 15.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.8.10 Linux/5.15.0-58-generic

File hashes

Hashes for multicall_thread_safe-0.1.5.tar.gz
Algorithm Hash digest
SHA256 f2d49aff8869d77caf5f28ce5825c3009b2c5ad625c3d351e6bbe14c6f9c2046
MD5 6d1126d3ad4ae0cba30159aa52d95193
BLAKE2b-256 8b880a7c3674ab7e24a3fe5d87d0849f042e441ef6c0794c6aed9ea4deaf07d7

See more details on using hashes here.

File details

Details for the file multicall_thread_safe-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for multicall_thread_safe-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 9cf986de729ba054ab78b3f1f998744a31da31739eeb470466c486c2ac86668a
MD5 8bcc9effa7b260ca4ec3a968a7001d55
BLAKE2b-256 a53b1a3e8fe727d178da7c68e5f6c094321d6ed072c5be9d9d201ff1a9250cba

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.5 This release

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

Supported by

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