Skip to main content

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


Download files

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

Source Distribution

multicallable-7.2.1.tar.gz (13.3 kB view details)

Uploaded Source

Built Distribution

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

multicallable-7.2.1-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: multicallable-7.2.1.tar.gz
  • Upload date:
  • Size: 13.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.5

File hashes

Hashes for multicallable-7.2.1.tar.gz
Algorithm Hash digest
SHA256 36d7d36990118202ab3fd94a098c4c61a1c7e4453a22cb9ec12032d04277482d
MD5 b5a0784b2de870e42b831c096e8612e8
BLAKE2b-256 52edab5df29ef4e424e713c0c85a055497fe25ef78ff8b4fd5915642bc44895d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: multicallable-7.2.1-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.5

File hashes

Hashes for multicallable-7.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cea81ae0398ba1c6238eb643d53901a12df9337fb755334c7cc6330050ff91c1
MD5 82c23b12687be6be7a4c2860c04362db
BLAKE2b-256 cea33bf0824319d8221bf044782e19223c3cec3f8811d57f1f1d52ef0aad0fe0

See more details on using hashes here.

Supported by

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