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).call()
[3955776201653330000000,
1499972538000000000000,
334010000000000000000,
135760891050327000000]
Get more details for call
>>> addresses = [
... '0xa345c89c07fEB0A13937eecE0204327271904cB7',
... '0xF493284a730e3D561Bf81f52991AF0C8D9227C35',
... '0x19dceFD603ea112CF547Cdddb8D68f61c6F4c73C',
... '0x633cBf6347ddddb5fEc65ad803b4e0B282ADdBd7',
... ]
>>> deus.balanceOf(addresses).detailed_call()
[{'block_number': 54040756,
'result': [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))).call(require_success=True)
Traceback (most recent call last):
.
.
.
web3.exceptions.ContractLogicError: execution reverted: Multicall3: call failed
>>> mc.getNum(list(range(7))).call(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))).call(require_success=False)
Traceback (most recent call last):
.
.
.
ValueError: {'code': -32000, 'message': 'out of gas'}
>>> result = mc.getNum(list(range(70000))).call(require_success=False, n=100)
>>> len(result)
70000
Show progress bar
Use progress_bar=True
to show progress bar while sending buckets.
>>> result = mc.getNum(list(range(70000))).call(n=100, progress_bar=True, require_success=False)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100/100 buckets
>>> 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file multicallable-5.1.1.tar.gz
.
File metadata
- Download URL: multicallable-5.1.1.tar.gz
- Upload date:
- Size: 7.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d965be73ca79d04ca2163b5d1cddcc442da893db1fb56ea705df8b434b8d2ce8 |
|
MD5 | 28461a08a8f5aff761f47b4b0f2113c6 |
|
BLAKE2b-256 | e60cf6fb080017c6aede08859ac98101f8aafaa144ad9a9cc38cac7a7c01d47c |
File details
Details for the file multicallable-5.1.1-py3-none-any.whl
.
File metadata
- Download URL: multicallable-5.1.1-py3-none-any.whl
- Upload date:
- Size: 8.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 301dbbbe12f9c7f444fc60247a9f6b1e4a9c7a62e4a1a220141106e175b4bba1 |
|
MD5 | 82243675c0480f338cc68936ebdb29b7 |
|
BLAKE2b-256 | e2163989189f9ad965fbc25351fe474a09e2d1d8784e33b6ea9938e64e758d80 |