Skip to main content

Easy way to work with Multicall package

Project description

Multicallable

Easy way to work with Multicall package

Installation

pip install -U multicallable

Usage

Importing Web3

>>> from web3 import Web3

Initializing Web3 instance

>>> ETH_RPC_URL = 'https://rpc.ankr.com/eth'
>>> w3 = Web3(Web3.HTTPProvider(ETH_RPC_URL))

Importing Multicallable

>>> from multicallable import Multicallable

Initializing Multicallable instance for Deus token

# ERC20 ABI string is cropped for readability
>>> ERC20_ABI = '[{"constant":true,"inputs":[],"name":"name", ...
>>> DEUS_TOKEN = '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44'
>>> deus = Multicallable(DEUS_TOKEN, ERC20_ABI, w3)

Calling balanceOf function for a list of addresses

>>> addresses = [
...     '0xa345c89c07fEB0A13937eecE0204327271904cB7',
...     '0xF493284a730e3D561Bf81f52991AF0C8D9227C35',
...     '0x19dceFD603ea112CF547Cdddb8D68f61c6F4c73C',
...     '0x633cBf6347ddddb5fEc65ad803b4e0B282ADdBd7',
... ]
>>> deus.balanceOf(addresses)
[(3955776201653330000000,), (1499972538000000000000,), (334010000000000000000,), (135760891050327000000,)]

Ignore failed calls

If require_success is True, all calls must return true, otherwise the multicall fails.
The default value is True.

>>> contract_address = '0x15BB7787Be4E03E6Caa09D2fF502564D3eD67Ec2'
>>> contract_abi = '[{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"getNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]'
>>> mc = Multicallable(contract_address, contract_abi, w3)
>>> mc.getNum(list(range(7)), require_success=True)
Traceback (most recent call last):
.
.
.
web3.exceptions.ContractLogicError: execution reverted: Multicall3: call failed

>>> mc.getNum(list(range(7)), require_success=False)
[ValueError('Bad number!'),
 (2,),
 (3,),
 (4,),
 (5,),
 ValueError('Bad number!'),
 (7,)]

Change number of buckets

Set n as the number of buckets for calling Multicall contract for large number of calls.
Thde default value is 1.

>>> result = mc.getNum(list(range(70000)), require_success=False)
Traceback (most recent call last):
.
.
.
ValueError: {'code': -32000, 'message': 'out of gas'}

>>> result = mc.getNum(list(range(70000)), require_success=False, n=100)
>>> len(result)
70000

Use with custom Multicall

It is possible to pass a Multicall instance with custom address and abi to Multicallable

>>> from multicallable.multicall import Multicall
>>> multicall = Multicall(w3, custom_address, custom_abi)
>>> mc = Multicallable(contract_address, contract_abi, multicall=multicall)

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

multicallable-2.0.0.tar.gz (5.8 kB view details)

Uploaded Source

Built Distribution

multicallable-2.0.0-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file multicallable-2.0.0.tar.gz.

File metadata

  • Download URL: multicallable-2.0.0.tar.gz
  • Upload date:
  • Size: 5.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.12

File hashes

Hashes for multicallable-2.0.0.tar.gz
Algorithm Hash digest
SHA256 5e1bd9484ac6b725ee70a7f8b0b57669e3c12121c8eb44a8a8d20666a35438ba
MD5 a12fcf0e5854ec650054ff832f84ed85
BLAKE2b-256 18d58624eb735c361e87dc080179ba2d173c8f2d2ed2ebb22c975ecd82a0a524

See more details on using hashes here.

File details

Details for the file multicallable-2.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for multicallable-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4cc9085f8b0428ff1a9f4c7544099d318a2e41e0e4523567a586444f3e9c8c7d
MD5 0a2331d7d4d71ad62b28627f3daa1507
BLAKE2b-256 004e21d11cb80a87112d0c0f8485e26765092673eb6e2acc5ff6fe9a7a0055e2

See more details on using hashes here.

Supported by

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