This release upgrades the underlying Rust client from v0.17 to v1.0.2, bringing DNS failover fixes, the arrow-rs migration, new blockchain data fields, and multiple API improvements.
- Fixed: Connection pools during continuous polling now refresh DNS lookups every 60 seconds. Previously, connection pools would remain active indefinitely during long-running polling sessions, causing connections to never timeout and DNS lookups to never re-execute. This was problematic when underlying server IP addresses changed during failovers on HyperSync servers.
- Added: HTTP/2 support via the
http2feature in reqwest. - Improved: Removed unnecessary
content-type: application/x-capnpheaders.
The bearer_token field has been renamed to api_token throughout the API.
# Old (deprecated, still works for backward compatibility)
config = hypersync.ClientConfig(
url="https://eth.hypersync.xyz",
bearer_token="your-token"
)
# New (preferred)
config = hypersync.ClientConfig(
url="https://eth.hypersync.xyz",
api_token="your-token"
)Note: bearer_token is still accepted for backward compatibility but is
deprecated and will be removed in a future release.
The Arrow integration has been migrated from polars-arrow (v0.42) to
arrow-rs (v57). This change affects the internal Arrow FFI mechanism used to
pass data between Rust and Python. From the Python user's perspective, the
pyarrow Table objects returned by collect_arrow, get_arrow, and
stream_arrow remain the same.
The alloy-dyn-abi, alloy-json-abi, and alloy-primitives crates have been
updated from version 0.8 to 1.1. This should not affect Python users directly.
The following fields are now available on Transaction objects and in
TransactionField for field selection:
| Field | Type | Description |
|---|---|---|
blob_gas_price |
Optional[str] |
Gas price for blob transactions |
blob_gas_used |
Optional[str] |
Amount of blob gas used |
deposit_nonce |
Optional[str] |
Deposit transaction nonce (Optimism) |
deposit_receipt_version |
Optional[str] |
Deposit receipt version (Optimism) |
l1_base_fee_scalar |
Optional[str] |
Base fee scalar for L1 cost calculation |
l1_blob_base_fee |
Optional[str] |
L1 blob base fee for cost calculation |
l1_blob_base_fee_scalar |
Optional[str] |
L1 blob base fee scalar |
l1_block_number |
Optional[str] |
L1 block number associated with tx |
mint |
Optional[str] |
Amount of ETH minted (Optimism) |
sighash |
Optional[str] |
4-byte function signature hash |
source_hash |
Optional[str] |
Source hash (Optimism) |
The following fields are now available on Trace objects and in TraceField
for field selection:
| Field | Type | Description |
|---|---|---|
sighash |
Optional[str] |
4-byte function signature hash |
action_address |
Optional[str] |
Action address for contract creation traces |
balance |
Optional[str] |
Balance for the trace operation |
refund_address |
Optional[str] |
Refund address for refund operations |
Two new column mapping data types are available:
DataType.DECIMAL256- 256-bit decimal typeDataType.DECIMAL128- 128-bit decimal type
A new reverse field has been added to StreamConfig to support streaming data
in reverse chronological order:
config = hypersync.StreamConfig(reverse=True)- Fixed:
Block.send_count,Block.send_root, andBlock.mix_hashnow correctly map to their respective fields. Previously, they were all incorrectly mapped totransactions_root.
The following features are available in the Rust client (hypersync-client-rust) but have not yet been exposed in the Python client:
- Height subscriptions via SSE - Real-time block height notifications using Server-Sent Events.
- Cached query bodies - Query body caching for improved performance on repeated queries.
These features are planned for upcoming Python client releases.
- Bumped package version from 0.9.0 to 0.10.0.
- Updated hypersync-client dependency from 0.17 to 1.0.2.
- Migrated Arrow FFI from polars-arrow to arrow-rs v57.
- Updated alloy crates from 0.8 to 1.1.
- EventResponse data is now a flat
Vec<Event>instead ofVec<Vec<Event>>. - The Rust client now internally wraps
ClientinArc, making the outer Arc in the Python binding redundant but harmless.