Skip to main content

Unified Python client for Etherscan, Routescan and Blockscout EVM block explorer APIs

Project description

blockparty

A unified Python client for EVM block explorer APIs — Etherscan, Routescan, and Blockscout.

Normalizes responses across providers, supports both sync and async usage, provides automatic fallback across providers, and builds frontend explorer URLs.

Installation

pip install blockparty

For httpx support:

pip install "blockparty[httpx]"

Requires Python ≥ 3.10.

Features

  • Multi-provider support — Etherscan, Routescan, and Blockscout behind one API
  • Normalized responses — Consistent Pydantic models regardless of which explorer answered
  • Sync and asyncSyncBlockpartyClient and AsyncBlockpartyClient
  • Provider fallback — Clients try providers in order, automatically falling back on transient errors
  • Shared rate limiting — Per-(provider, api_key) token bucket shared across all clients via ProviderSet
  • Pluggable HTTP backend — aiohttp + requests (default) or httpx (optional)
  • Transport injection — Pass your own aiohttp.ClientSession or httpx.AsyncClient
  • Response caching — Configurable TTL, per-request force_refresh override
  • Retry with backoff — Exponential backoff + jitter on transient errors
  • Frontend URL builder — Generate explorer links for addresses, transactions, tokens, and blocks
  • Bundled chain registry — 600+ chains with offline lookup and CLI regeneration

Quick Start

Async

from blockparty import AsyncBlockpartyClient

async with AsyncBlockpartyClient(chain_id=8453) as client:
    response = await client.get_internal_transactions(
        address="0x4200000000000000000000000000000000000006",
        start_block=7775467,
        limit=10,
        sort="asc",
    )
    for tx in response.result:
        print(f"{tx.hash}: {tx.value} wei")

Sync

from blockparty import SyncBlockpartyClient

with SyncBlockpartyClient(chain_id=8453) as client:
    response = client.get_internal_transactions(address="0x...", limit=10)

No API key required — blockparty auto-resolves to the best available explorer (priority: Etherscan > Routescan > Blockscout).

What Else It Does

Client configuration — Explicit explorer types, API keys, tier selection, httpx backend, transport injection, cache tuning.

Shared providersProviderSet shares rate limit budgets across clients, supports per-chain API keys via chain_ids, and gives every client automatic fallback with FallbackWarning.

Connection poolAsyncBlockpartyPool / SyncBlockpartyPool caches clients per chain and delegates all fallback logic to ProviderSet.

URL builder.urls for the preferred explorer, .urls_for(resp.provider) for the explorer that actually served a response. Supports Etherscan, Routescan (vanity + generic), and Blockscout.

Chain registry — 600+ chains bundled, offline lookup by ID or name search, custom JSON files, CLI regeneration.

Rate limits & tiers — Built-in tier enums for all three providers, CustomRateLimit for enterprise plans, Blockscout adaptive headers.

Development

git clone https://github.com/defidebauchery/blockparty.git
cd blockparty
pip install -e ".[dev]"
pytest
ruff check src/ tests/

See CONTRIBUTING.md for how to add new endpoints, run tests, and submit changes.

License

MIT

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

blockparty-0.7.5.tar.gz (202.2 kB view details)

Uploaded Source

Built Distribution

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

blockparty-0.7.5-py3-none-any.whl (79.2 kB view details)

Uploaded Python 3

File details

Details for the file blockparty-0.7.5.tar.gz.

File metadata

  • Download URL: blockparty-0.7.5.tar.gz
  • Upload date:
  • Size: 202.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for blockparty-0.7.5.tar.gz
Algorithm Hash digest
SHA256 87bd4da7288f8daaf2979ee672febbdae3b0922f329384048a6332d6c9e6154e
MD5 5e11f444bdeb803a8adbc023239f277a
BLAKE2b-256 049b4b61334347a40c943d15e0f044b239500078c3360f5a1ebfe47dfc965ef9

See more details on using hashes here.

Provenance

The following attestation bundles were made for blockparty-0.7.5.tar.gz:

Publisher: publish.yml on DefiDebauchery/blockparty

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file blockparty-0.7.5-py3-none-any.whl.

File metadata

  • Download URL: blockparty-0.7.5-py3-none-any.whl
  • Upload date:
  • Size: 79.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for blockparty-0.7.5-py3-none-any.whl
Algorithm Hash digest
SHA256 12695a596059cc1a4c874bdcc2b4cc5f04070bdb4ee8a9922dd5d9bac4d09fcb
MD5 3d717d569680a0a61c0de0ec0f3f9d94
BLAKE2b-256 b2b234d13c357a2af1238e4935613b611cae42dd53826cf70a3c4fa28d326989

See more details on using hashes here.

Provenance

The following attestation bundles were made for blockparty-0.7.5-py3-none-any.whl:

Publisher: publish.yml on DefiDebauchery/blockparty

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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