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.
The 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.2.tar.gz (5.9 kB view details)

Uploaded Source

Built Distribution

multicallable-2.0.2-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: multicallable-2.0.2.tar.gz
  • Upload date:
  • Size: 5.9 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.2.tar.gz
Algorithm Hash digest
SHA256 13c613a8366278b9be6fb7b1bb3fbaf40e01bd29ebdbe725e0eb6308f70b4ffa
MD5 3cdfa54eee7211507cf139bb1c9d0ccd
BLAKE2b-256 5479c42f7e987eefd0b9470684286ab5fc588d1557c00ac8dc6d9c4ebeb87a86

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for multicallable-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 34da8e7b2768ff181495a66f233e77c81012b0d767e86c552eccee950880d317
MD5 47786ba67c71a31ab150d4816f108b4c
BLAKE2b-256 600731a0f3fde6fafa13a1c66f644a385a91d3cb5d486e18d43a6896c98158b2

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