Repository navigation
1.0.0
[1.0.0] — 2026-09-04
First stable release, and the first PyPI release since 0.2.3. The public API is
ChainscanClient (plus ChainscanPool for failover); the legacy Client
facade from the 0.2 series is long gone — see
docs/MIGRATION_GUIDE.md.
Added
- Guaranteed-complete pagination (
get_all_*/iter_*_streaming,
guarantee_complete=Trueby default): provider caps are scanner-declared
(result_window, per-methodRESULT_WINDOW_OVERRIDES, measured
max_page_size), overflow triggers adaptive block-range bisection, and
truncation that cannot be fixed by splitting raises
CompletenessUnavailableErrornaming providers that can serve the method
completely. Whale blocks raisePaginationDataLossError. ChainscanPool— multi-provider failover over the fullChainscanClient
surface: sticky routing, per-failure-class cooldowns, pagination pinned to
one provider per call, transparent provider switching with warnings.- Polling helpers —
wait_for_transaction,wait_for_block,
wait_for_verification(loop-clock deadlines, pending-vs-final states
returned rather than raised). - Custom base URLs + chain validation — self-hosted BlockScout instances
via a URL-shapednetwork;expected_chain_idvalidated once before the
first request;get_chain_info()/validate_chain(). - Normalized accessors —
get_all_*_normalized/
iter_*_normalizedcompose completeness with typed, provider-independent
records (frozen slotted dataclasses,provider_datapreserved). - MCP server (
[mcp]extra) — 12 read-only tools over stdio for AI
agents, opaque cursors, curated field sets, scanner-override per call. - NodeReal / MegaNode scanner — BSC analytics (25
Methodvalues)
including the only keyless-free alternative for BSC contract source and
internal transactions. - Value-conversion helpers —
wei_to_ether,to_decimal_amount,
format_ether,hex_to_int,to_datetime/to_iso: exactDecimal
math, no float paths. - Streaming DataFrame exports (
[data]extra) — Polars DataFrames from
the streaming iterators, Wei asUtf8.
Changed
- Distribution split:
aiochainscanis pure Python with four runtime
dependencies (httpx, orjson, tenacity, aiolimiter); the Rust accelerator
moved to the separateaiochainscan-fastabidistribution ([fastabi]
extra). The base install decodes the full ABI spec and computes Keccak-256
checksums with zero extras (abi_pure.py,_keccak.pyfallback chains). - ABI decoding is strict by contract across both tiers (padding, ranges,
UTF-8, canonical offsets); unsupported Solidity types raise
AbiTypeNotSupportedErrorinstead of returning empty results. - BlockScout V1 routes proxy methods through the instance's
/api/eth-rpc
JSON-RPC endpoint (the Etherscan-compatmodule=proxyis dead there).
Fixed
- Etherscan v2's silent 1000-items-per-page clamp no longer truncates
get_all_*underguarantee_complete=True(Scanner.max_page_size). - BlockScout V1
getLogspage/offset ignoring (re-fetching page 1) —
per-method result window declared instead. - NodeReal
nr_getTokenHolderCountdouble-nested envelope (0-holder
miscounts) — both documented and live shapes accepted, unknown shapes
raise.