Easy way to work with Multicall package
Project description
Multicallable: Simplified Interface for Multicall
Multicallable
provides a streamlined way to work with the Multicall package, allowing you to batch multiple contract calls into a single request.
Installation
Install the package using the following command:
pip install -U multicallable
Getting Started
Initialize Web3 or AsyncWeb3
First, import the Web3 library and set up a Web3 instance. The setup differs depending on whether you are using synchronous or asynchronous operations.
For synchronous operations:
from web3 import Web3
# Specify Ethereum RPC URL
ETH_RPC_URL = 'https://rpc.ankr.com/eth'
# Initialize Web3 instance
w3 = Web3(Web3.HTTPProvider(ETH_RPC_URL))
For asynchronous operations:
from web3 import AsyncWeb3
# Initialize AsyncWeb3 instance
w3 = AsyncWeb3(AsyncWeb3.AsyncHTTPProvider(ETH_RPC_URL))
Import and Initialize Multicallable
Next, import the Multicallable
class and initialize it for a specific token:
from multicallable import Multicallable
# Truncated ERC20 ABI for demonstration
ERC20_ABI = '[{"constant":true,"inputs":[],"name":"name", ...'
# sample token contract address
TOKEN = '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44'
# Initialize Multicallable instance
multicallable = Multicallable(TOKEN, ERC20_ABI, w3)
AsyncMulticallable: The Asynchronous Alternative
For asynchronous use-cases, AsyncMulticallable
is available. Unlike Multicallable
, its constructor is empty, and it includes an asynchronous setup
function that takes the same parameters:
from multicallable import AsyncMulticallable
# Initialize AsyncMulticallable instance
async_multicallable = AsyncMulticallable()
await async_multicallable.setup(TOKEN, ERC20_ABI, w3) # Make sure w3 is an AsyncWeb3 instance
Basic Operations
Querying Multiple Balances
For synchronous operations:
addresses = [
# List of addresses
]
balances = multicallable.balanceOf(addresses).call()
For asynchronous operations:
addresses = [
# List of addresses
]
balances = await async_multicallable.balanceOf(addresses).call()
Detailed Call Information
For synchronous operations:
detailed_info = multicallable.balanceOf(addresses).detailed_call()
For asynchronous operations:
detailed_info = await async_multicallable.balanceOf(addresses).detailed_call()
Advanced Features
Handling Failed Calls
By default, all calls must succeed for the batch call to return successfully. Use require_success=False
to allow partial success:
mc = Multicallable(contract_address, contract_abi, w3)
partial_result = mc.getNum(list(range(7))).call(require_success=False)
Batching Large Number of Calls
For large number of calls, you can specify the number of buckets using the n
parameter:
result = mc.getNum(list(range(70000))).call(require_success=False, n=100)
Progress Indicator
Enable a progress bar for better visibility into the batch processing:
result = mc.getNum(list(range(70000))).call(n=100, progress_bar=True, require_success=False)
Custom Multicall Instance
You can also use a custom Multicall instance with a custom address and ABI:
from multicallable.multicall import Multicall
multicall = Multicall(w3, custom_address, custom_abi)
mc = Multicallable(contract_address, contract_abi, multicall=multicall)
Authors
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-6.0.4.tar.gz
.
File metadata
- Download URL: multicallable-6.0.4.tar.gz
- Upload date:
- Size: 10.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4dae9d3081593fa4365bde8be4456ba515f957124cb70116a3c344643628d229 |
|
MD5 | 65f1eb9c1066e48100c9cbc84fb725ed |
|
BLAKE2b-256 | a77446b66a5391ee56667d25df78f1b678a3f5de264af4c1209152e5cab1080f |
File details
Details for the file multicallable-6.0.4-py3-none-any.whl
.
File metadata
- Download URL: multicallable-6.0.4-py3-none-any.whl
- Upload date:
- Size: 12.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d74f492ede764bb8dc2ce6b1583f38c91362fe16cf36fbf59f6b307acf89c22 |
|
MD5 | 9dfe6952cbeed369c5459bc6302d4de4 |
|
BLAKE2b-256 | 3426023b1f2d77e8615b72efae73a378eafafd44e312080282faa564f91445ca |