From aa2a9b01b6f9ffa05f3ebf8c64e834346e4fa2fa Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 14 Mar 2026 20:16:17 +0000 Subject: [PATCH] Upgrade to hypersync-client-rust v1.0.1 with DNS failover fix Major upgrade of the underlying Rust client from v0.17 to v1.0.1. Key changes: - DNS failover fix: HTTP client now refreshes connections every 60s to ensure DNS lookups catch server IP changes during failovers - Migrated Arrow FFI from polars-arrow (v0.42) to arrow-rs (v57) - Updated alloy crates from 0.8 to 1.1 - Renamed bearer_token to api_token (backward compat preserved) - Added new Transaction fields: blob_gas_price, blob_gas_used, deposit_nonce, deposit_receipt_version, l1_base_fee_scalar, l1_blob_base_fee, l1_blob_base_fee_scalar, l1_block_number, mint, sighash, source_hash - Added new Trace fields: sighash, action_address, balance, refund_address - Added DataType.DECIMAL256 and DataType.DECIMAL128 - Added StreamConfig.reverse for reverse-order streaming - Fixed Block.send_count, send_root, mix_hash mappings (were incorrectly mapped to transactions_root) - EventResponse data flattened from Vec> to Vec See CHANGELOG.md and MIGRATION_GUIDE.md for full details. https://claude.ai/code/session_01KKQaiY8uNKsLqKz5eAu1fe --- CHANGELOG.md | 120 +++ Cargo.lock | 1624 +++++++++++++++++++++++++++-------------- Cargo.toml | 12 +- MIGRATION_GUIDE.md | 261 +++++++ hypersync/__init__.py | 53 +- src/arrow_ffi.rs | 31 +- src/config.rs | 12 +- src/response.rs | 29 +- src/types.rs | 42 +- 9 files changed, 1603 insertions(+), 581 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 MIGRATION_GUIDE.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..6ab97e0 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,120 @@ +# Changelog + +## [0.10.0] - 2026-03-14 + +### Upgrade to hypersync-client-rust v1.0.1 + +This release upgrades the underlying Rust client from v0.17 to v1.0.1, bringing +DNS failover fixes, the arrow-rs migration, new blockchain data fields, and +multiple API improvements. + +### DNS Failover Fix (Critical) + +- **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 `http2` feature in reqwest. +- **Improved**: Removed unnecessary `content-type: application/x-capnp` headers. + +### Breaking Changes + +#### `ClientConfig.bearer_token` renamed to `api_token` + +The `bearer_token` field has been renamed to `api_token` throughout the API. + +```python +# 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. + +#### Arrow FFI Migration: polars-arrow to arrow-rs + +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. + +#### alloy Dependencies Updated: 0.8 to 1.1 + +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. + +### New Features + +#### New Transaction Fields + +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) | + +#### New Trace Fields + +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 | + +#### New DataType Enum Values + +Two new column mapping data types are available: + +- `DataType.DECIMAL256` - 256-bit decimal type +- `DataType.DECIMAL128` - 128-bit decimal type + +#### StreamConfig.reverse + +A new `reverse` field has been added to `StreamConfig` to support streaming data +in reverse chronological order: + +```python +config = hypersync.StreamConfig(reverse=True) +``` + +### Bug Fixes + +- **Fixed**: `Block.send_count`, `Block.send_root`, and `Block.mix_hash` now + correctly map to their respective fields. Previously, they were all incorrectly + mapped to `transactions_root`. + +### Internal Changes + +- Bumped package version from 0.9.0 to 0.10.0. +- Updated hypersync-client dependency from 0.17 to 1.0.1. +- 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` instead of `Vec>`. +- The Rust client now internally wraps `Client` in `Arc`, making the outer Arc + in the Python binding redundant but harmless. diff --git a/Cargo.lock b/Cargo.lock index dee7d08..772d6fc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,10 +24,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom", + "const-random", + "getrandom 0.2.15", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -54,34 +55,27 @@ dependencies = [ "alloc-no-stdlib", ] -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - [[package]] name = "alloy-dyn-abi" -version = "0.8.15" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41056bde53ae10ffbbf11618efbe1e0290859e5eab0fe9ef82ebdb62f12a866f" +checksum = "cc2db5c583aaef0255aa63a4fe827f826090142528bba48d1bf4119b62780cad" dependencies = [ "alloy-json-abi", "alloy-primitives", "alloy-sol-type-parser", "alloy-sol-types", - "const-hex", "itoa", "serde", "serde_json", - "winnow", + "winnow 0.7.15", ] [[package]] name = "alloy-json-abi" -version = "0.8.15" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c357da577dfb56998d01f574d81ad7a1958d248740a7981b205d69d65a7da404" +checksum = "e9dbe713da0c737d9e5e387b0ba790eb98b14dd207fe53eef50e19a5a8ec3dac" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -91,30 +85,29 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.15" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6259a506ab13e1d658796c31e6e39d2e2ee89243bcc505ddc613b35732e0a430" +checksum = "de3b431b4e72cd8bd0ec7a50b4be18e73dab74de0dba180eef171055e5d5926e" dependencies = [ "alloy-rlp", "bytes", "cfg-if", "const-hex", - "derive_more", + "derive_more 2.1.1", "foldhash", - "hashbrown 0.15.2", - "hex-literal", + "hashbrown 0.16.1", "indexmap", "itoa", "k256", "keccak-asm", "paste", "proptest", - "rand", + "rand 0.9.2", + "rapidhash", "ruint", "rustc-hash", "serde", "sha3", - "tiny-keccak", ] [[package]] @@ -129,23 +122,23 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.8.15" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9d64f851d95619233f74b310f12bcf16e0cbc27ee3762b6115c14a84809280a" +checksum = "ab81bab693da9bb79f7a95b64b394718259fdd7e41dceeced4cad57cb71c4f6a" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.8.15" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bf7ed1574b699f48bf17caab4e6e54c6d12bc3c006ab33d58b1e227c1c3559f" +checksum = "489f1620bb7e2483fb5819ed01ab6edc1d2f93939dce35a5695085a1afd1d699" dependencies = [ "alloy-sol-macro-input", "const-hex", @@ -154,49 +147,58 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.90", + "sha3", + "syn 2.0.117", "syn-solidity", - "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.8.15" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c02997ccef5f34f9c099277d4145f183b422938ed5322dc57a089fe9b9ad9ee" +checksum = "56cef806ad22d4392c5fc83cf8f2089f988eb99c7067b4e0c6f1971fc1cca318" dependencies = [ "const-hex", "dunce", "heck", + "macro-string", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "0.8.15" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce13ff37285b0870d0a0746992a4ae48efaf34b766ae4c2640fa15e5305f8e73" +checksum = "a6df77fea9d6a2a75c0ef8d2acbdfd92286cc599983d3175ccdc170d3433d249" dependencies = [ "serde", - "winnow", + "winnow 0.7.15", ] [[package]] name = "alloy-sol-types" -version = "0.8.15" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1174cafd6c6d810711b4e00383037bdb458efc4fe3dbafafa16567e0320c54d8" +checksum = "64612d29379782a5dde6f4b6570d9c756d734d760c0c94c254d361e678a6591f" dependencies = [ "alloy-json-abi", "alloy-primitives", "alloy-sol-macro", - "const-hex", "serde", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anstream" version = "0.6.18" @@ -248,9 +250,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.94" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "ark-ff" @@ -282,7 +284,7 @@ dependencies = [ "ark-std 0.4.0", "derivative", "digest 0.10.7", - "itertools", + "itertools 0.10.5", "num-bigint", "num-traits", "paste", @@ -290,6 +292,26 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "educe", + "itertools 0.13.0", + "num-bigint", + "num-traits", + "paste", + "zeroize", +] + [[package]] name = "ark-ff-asm" version = "0.3.0" @@ -310,6 +332,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.117", +] + [[package]] name = "ark-ff-macros" version = "0.3.0" @@ -335,6 +367,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "ark-serialize" version = "0.3.0" @@ -356,6 +401,18 @@ dependencies = [ "num-bigint", ] +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "num-bigint", +] + [[package]] name = "ark-std" version = "0.3.0" @@ -363,7 +420,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -373,14 +430,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] -name = "array-init-cursor" -version = "0.2.0" +name = "ark-std" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7d0a018de4f6aa429b9d33d69edf69072b1c5b1cb8d3e4a5f7ef898fc3eb76" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +dependencies = [ + "num-traits", + "rand 0.8.5", +] [[package]] name = "arrayvec" @@ -392,43 +453,239 @@ dependencies = [ ] [[package]] -name = "async-stream" -version = "0.3.6" +name = "arrow" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +checksum = "e4754a624e5ae42081f464514be454b39711daae0458906dacde5f4c632f33a8" dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", + "arrow-arith", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-csv", + "arrow-data", + "arrow-ipc", + "arrow-json", + "arrow-ord", + "arrow-row", + "arrow-schema", + "arrow-select", + "arrow-string", ] [[package]] -name = "async-stream-impl" -version = "0.3.6" +name = "arrow-arith" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +checksum = "f7b3141e0ec5145a22d8694ea8b6d6f69305971c4fa1c1a13ef0195aef2d678b" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.90", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "num-traits", ] [[package]] -name = "async-trait" -version = "0.1.83" +name = "arrow-array" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +checksum = "4c8955af33b25f3b175ee10af580577280b4bd01f7e823d94c7cdef7cf8c9aef" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.90", + "ahash", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "hashbrown 0.16.1", + "num-complex", + "num-integer", + "num-traits", ] [[package]] -name = "atoi_simd" -version = "0.15.6" +name = "arrow-buffer" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae037714f313c1353189ead58ef9eec30a8e8dc101b2622d461418fd59e28a9" +checksum = "c697ddca96183182f35b3a18e50b9110b11e916d7b7799cbfd4d34662f2c56c2" +dependencies = [ + "bytes", + "half", + "num-bigint", + "num-traits", +] + +[[package]] +name = "arrow-cast" +version = "57.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "646bbb821e86fd57189c10b4fcdaa941deaf4181924917b0daa92735baa6ada5" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-ord", + "arrow-schema", + "arrow-select", + "atoi", + "base64", + "chrono", + "half", + "lexical-core", + "num-traits", + "ryu", +] + +[[package]] +name = "arrow-csv" +version = "57.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da746f4180004e3ce7b83c977daf6394d768332349d3d913998b10a120b790a" +dependencies = [ + "arrow-array", + "arrow-cast", + "arrow-schema", + "chrono", + "csv", + "csv-core", + "regex", +] + +[[package]] +name = "arrow-data" +version = "57.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fdd994a9d28e6365aa78e15da3f3950c0fdcea6b963a12fa1c391afb637b304" +dependencies = [ + "arrow-buffer", + "arrow-schema", + "half", + "num-integer", + "num-traits", +] + +[[package]] +name = "arrow-ipc" +version = "57.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf7df950701ab528bf7c0cf7eeadc0445d03ef5d6ffc151eaae6b38a58feff1" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "flatbuffers", + "lz4_flex", + "zstd", +] + +[[package]] +name = "arrow-json" +version = "57.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ff8357658bedc49792b13e2e862b80df908171275f8e6e075c460da5ee4bf86" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "indexmap", + "itoa", + "lexical-core", + "memchr", + "num-traits", + "ryu", + "serde_core", + "serde_json", + "simdutf8", +] + +[[package]] +name = "arrow-ord" +version = "57.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d8f1870e03d4cbed632959498bcc84083b5a24bded52905ae1695bd29da45b" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", +] + +[[package]] +name = "arrow-row" +version = "57.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18228633bad92bff92a95746bbeb16e5fc318e8382b75619dec26db79e4de4c0" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half", +] + +[[package]] +name = "arrow-schema" +version = "57.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c872d36b7bf2a6a6a2b40de9156265f0242910791db366a2c17476ba8330d68" +dependencies = [ + "bitflags", +] + +[[package]] +name = "arrow-select" +version = "57.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68bf3e3efbd1278f770d67e5dc410257300b161b93baedb3aae836144edcaf4b" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "num-traits", +] + +[[package]] +name = "arrow-string" +version = "57.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e968097061b3c0e9fe3079cf2e703e487890700546b5b0647f60fca1b5a8d8" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "memchr", + "num-traits", + "regex", + "regex-syntax", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "auto_impl" @@ -438,7 +695,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", ] [[package]] @@ -491,24 +748,24 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.5.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" -version = "0.6.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "bitvec" @@ -533,9 +790,9 @@ dependencies = [ [[package]] name = "brotli" -version = "6.0.0" +version = "8.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -544,9 +801,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "4.0.1" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -564,26 +821,6 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" -[[package]] -name = "bytemuck" -version = "1.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.90", -] - [[package]] name = "byteorder" version = "1.5.0" @@ -601,22 +838,13 @@ dependencies = [ [[package]] name = "capnp" -version = "0.19.8" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e985a566bdaae9a428a957d12b10c318d41b2afddb54cfbb764878059df636e" +checksum = "fa8c2ce958193219f203a6887788231a1aaa0b22ed012d67436ea3b87a9645c4" dependencies = [ "embedded-io", ] -[[package]] -name = "capnpc" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ba30e0f08582d53c2f3710cf4bb65ff562614b1ba86906d7391adffe189ec" -dependencies = [ - "capnp", -] - [[package]] name = "cc" version = "1.2.5" @@ -642,11 +870,13 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ + "iana-time-zone", "num-traits", + "windows-link", ] [[package]] @@ -674,6 +904,26 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "tiny-keccak", +] + [[package]] name = "convert_case" version = "0.6.0" @@ -684,21 +934,27 @@ dependencies = [ ] [[package]] -name = "cpufeatures" -version = "0.2.16" +name = "convert_case" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" dependencies = [ - "libc", + "unicode-segmentation", ] [[package]] -name = "crc32fast" -version = "1.4.2" +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ - "cfg-if", + "libc", ] [[package]] @@ -739,7 +995,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", "subtle", "zeroize", ] @@ -754,6 +1010,27 @@ dependencies = [ "typenum", ] +[[package]] +name = "csv" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde_core", +] + +[[package]] +name = "csv-core" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" +dependencies = [ + "memchr", +] + [[package]] name = "der" version = "0.7.9" @@ -781,7 +1058,16 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" dependencies = [ - "derive_more-impl", + "derive_more-impl 1.0.0", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl 2.1.1", ] [[package]] @@ -790,10 +1076,24 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ - "convert_case", + "convert_case 0.6.0", + "proc-macro2", + "quote", + "syn 2.0.117", + "unicode-xid", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case 0.10.0", "proc-macro2", "quote", - "syn 2.0.90", + "rustc_version 0.4.1", + "syn 2.0.117", "unicode-xid", ] @@ -826,7 +1126,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", ] [[package]] @@ -855,6 +1155,18 @@ dependencies = [ "spki", ] +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "either" version = "1.13.0" @@ -874,7 +1186,7 @@ dependencies = [ "generic-array", "group", "pkcs8", - "rand_core", + "rand_core 0.6.4", "sec1", "subtle", "zeroize", @@ -882,9 +1194,29 @@ dependencies = [ [[package]] name = "embedded-io" -version = "0.6.1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eb1aa714776b75c7e67e1da744b81a129b3ff919c8712b5e1b32252c1f07cc7" + +[[package]] +name = "enum-ordinalize" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" +checksum = "4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] [[package]] name = "env_filter" @@ -926,22 +1258,15 @@ dependencies = [ ] [[package]] -name = "ethnum" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" - -[[package]] -name = "fallible-streaming-iterator" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" - -[[package]] -name = "fast-float" -version = "0.2.0" +name = "eventsource-stream" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" +checksum = "74fef4569247a5f429d9156b9d0a2599914385dd189c539334c625d8099d90ab" +dependencies = [ + "futures-core", + "nom", + "pin-project-lite", +] [[package]] name = "faster-hex" @@ -992,7 +1317,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -1003,19 +1328,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", - "rand", + "rand 0.8.5", "rustc-hex", "static_assertions", ] +[[package]] +name = "flatbuffers" +version = "25.12.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35f6839d7b3b98adde531effaf34f0c2badc6f4735d26fe74709d8e513a96ef3" +dependencies = [ + "bitflags", + "rustc_version 0.4.1", +] + [[package]] name = "flate2" -version = "1.0.35" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ - "crc32fast", "miniz_oxide", + "zlib-rs", ] [[package]] @@ -1026,9 +1361,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "form_urlencoded" @@ -1101,7 +1436,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", ] [[package]] @@ -1116,6 +1451,12 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + [[package]] name = "futures-util" version = "0.3.31" @@ -1158,6 +1499,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + [[package]] name = "gimli" version = "0.31.1" @@ -1171,20 +1524,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand_core", + "rand_core 0.6.4", "subtle", ] [[package]] -name = "hashbrown" -version = "0.14.5" +name = "h2" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ - "ahash", - "allocator-api2", - "rayon", - "serde", + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "cfg-if", + "crunchy", + "num-traits", + "zerocopy 0.8.27", ] [[package]] @@ -1192,9 +1564,16 @@ name = "hashbrown" version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "foldhash", "serde", + "serde_core", ] [[package]] @@ -1218,12 +1597,6 @@ dependencies = [ "serde", ] -[[package]] -name = "hex-literal" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" - [[package]] name = "hmac" version = "0.12.1" @@ -1288,6 +1661,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", + "h2", "http", "http-body", "httparse", @@ -1337,18 +1711,18 @@ dependencies = [ [[package]] name = "hypersync" -version = "0.9.0" +version = "0.10.0" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", "alloy-primitives", "anyhow", + "arrow", "env_logger", "faster-hex", "hypersync-client", "mimalloc", "num-bigint", - "polars-arrow", "prefix-hex", "pyo3", "pyo3-async-runtimes", @@ -1360,15 +1734,14 @@ dependencies = [ [[package]] name = "hypersync-client" -version = "0.17.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6012e4303c710dd1889d031daac23b4f9e1b726c06d9f03fc192677ba285563" +version = "1.0.1" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", "alloy-primitives", "anyhow", "arrayvec", + "arrow", "bincode", "capnp", "faster-hex", @@ -1380,29 +1753,29 @@ dependencies = [ "log", "nohash-hasher", "num_cpus", - "polars-arrow", - "polars-parquet", - "rand", + "parquet", + "rand 0.8.5", "rayon", "reqwest", + "reqwest-eventsource", "ruint", + "schemars", "serde", "serde_json", + "thiserror 2.0.18", "tokio", - "tokio-util", "url", + "uuid", "xxhash-rust", ] [[package]] name = "hypersync-format" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6876c9a5a0930784c7b8d86159361943273a073c1f07ad0f6d4ca9897b26e6b9" +version = "0.7.0" dependencies = [ "alloy-primitives", "arrayvec", - "derive_more", + "derive_more 1.0.0", "faster-hex", "nohash-hasher", "sbbf-rs-safe", @@ -1413,25 +1786,49 @@ dependencies = [ [[package]] name = "hypersync-net-types" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b51d8ac12eacb7fe1c63cf212435eaa360661da636386e2fe230bc56634c81" +version = "0.12.3" dependencies = [ + "anyhow", "arrayvec", "capnp", - "capnpc", "hypersync-format", + "schemars", "serde", + "strum", + "strum_macros", + "xxhash-rust", ] [[package]] name = "hypersync-schema" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a12de03592570a007d6c904a6a0691d46c9f17f416f2eb3fc47f3da29a68ab6" +version = "0.4.0" dependencies = [ "anyhow", - "polars-arrow", + "arrow", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", ] [[package]] @@ -1549,7 +1946,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", ] [[package]] @@ -1590,7 +1987,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", ] [[package]] @@ -1610,6 +2007,12 @@ version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + [[package]] name = "ipnet" version = "2.10.1" @@ -1631,6 +2034,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.14" @@ -1680,19 +2092,70 @@ dependencies = [ [[package]] name = "keccak-asm" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +checksum = "b646a74e746cd25045aa0fd42f4f7f78aa6d119380182c7e63a5593c4ab8df6f" dependencies = [ "digest 0.10.7", "sha3-asm", ] [[package]] -name = "lazy_static" -version = "1.5.0" +name = "lexical-core" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d8d125a277f807e55a77304455eb7b1cb52f2b18c143b60e766c120bd64a594" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52a9f232fbd6f550bc0137dcb5f99ab674071ac2d690ac69704593cb4abbea56" +dependencies = [ + "lexical-parse-integer", + "lexical-util", +] + +[[package]] +name = "lexical-parse-integer" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a7a039f8fb9c19c996cd7b2fcce303c1b2874fe1aca544edc85c4a5f8489b34" +dependencies = [ + "lexical-util", +] + +[[package]] +name = "lexical-util" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2604dd126bb14f13fb5d1bd6a66155079cb9fa655b37f875b3a742c705dbed17" + +[[package]] +name = "lexical-write-float" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c438c87c013188d415fbabbb1dceb44249ab81664efbd31b14ae55dabb6361" +dependencies = [ + "lexical-util", + "lexical-write-integer", +] + +[[package]] +name = "lexical-write-integer" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "409851a618475d2d5796377cad353802345cba92c867d9fbcde9cf4eac4e14df" +dependencies = [ + "lexical-util", +] [[package]] name = "libc" @@ -1728,16 +2191,6 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", -] - [[package]] name = "log" version = "0.4.22" @@ -1745,22 +2198,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] -name = "lz4" -version = "1.28.0" +name = "lz4_flex" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d1febb2b4a79ddd1980eede06a8f7902197960aa0383ffcfdd62fe723036725" +checksum = "98c23545df7ecf1b16c303910a69b079e8e251d60f7dd2cc9b4177f2afaf1746" dependencies = [ - "lz4-sys", + "twox-hash", ] [[package]] -name = "lz4-sys" -version = "1.11.1+lz4-1.10.0" +name = "macro-string" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ - "cc", - "libc", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] @@ -1769,15 +2223,6 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "memmap2" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49388d20533534cd19360ad3d6a7dadc885944aa802ba3995040c5ec11288c6" -dependencies = [ - "libc", -] - [[package]] name = "memoffset" version = "0.9.1" @@ -1802,13 +2247,20 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" -version = "0.8.2" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", ] [[package]] @@ -1823,33 +2275,21 @@ dependencies = [ ] [[package]] -name = "multiversion" -version = "0.7.4" +name = "nohash-hasher" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4851161a11d3ad0bf9402d90ffc3967bf231768bfd7aeb61755ad06dbf1a142" -dependencies = [ - "multiversion-macros", - "target-features", -] +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] -name = "multiversion-macros" -version = "0.7.4" +name = "nom" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79a74ddee9e0c27d2578323c13905793e91622148f138ba29738f9dddb835e90" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "target-features", + "memchr", + "minimal-lexical", ] -[[package]] -name = "nohash-hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" - [[package]] name = "num-bigint" version = "0.4.6" @@ -1860,6 +2300,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + [[package]] name = "num-integer" version = "0.1.46" @@ -1904,6 +2353,15 @@ version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + [[package]] name = "parity-scale-codec" version = "3.6.12" @@ -1931,36 +2389,39 @@ dependencies = [ ] [[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets", -] - -[[package]] -name = "parquet-format-safe" -version = "0.2.4" +name = "parquet" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1131c54b167dd4e4799ce762e1ab01549ebb94d5bdd13e6ec1b467491c378e1f" +checksum = "6ee96b29972a257b855ff2341b37e61af5f12d6af1158b6dcdb5b31ea07bb3cb" dependencies = [ - "async-trait", + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-ipc", + "arrow-schema", + "arrow-select", + "base64", + "brotli", + "bytes", + "chrono", + "flate2", "futures", + "half", + "hashbrown 0.16.1", + "lz4_flex", + "num-bigint", + "num-integer", + "num-traits", + "paste", + "seq-macro", + "simdutf8", + "snap", + "thrift", + "tokio", + "twox-hash", + "zstd", ] [[package]] @@ -1982,7 +2443,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", - "thiserror 2.0.8", + "thiserror 2.0.18", "ucd-trie", ] @@ -2000,146 +2461,19 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" - -[[package]] -name = "planus" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1691dd09e82f428ce8d6310bd6d5da2557c82ff17694d2a32cad7242aea89f" -dependencies = [ - "array-init-cursor", -] - -[[package]] -name = "polars-arrow" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d19c6db79cb6a3c55af3b5a3976276edaab64cbf7f69b392617c2af30d7742" -dependencies = [ - "ahash", - "atoi_simd", - "bytemuck", - "chrono", - "dyn-clone", - "either", - "ethnum", - "fast-float", - "getrandom", - "hashbrown 0.14.5", - "itoa", - "lz4", - "multiversion", - "num-traits", - "parking_lot", - "polars-arrow-format", - "polars-error", - "polars-utils", - "ryu", - "simdutf8", - "streaming-iterator", - "strength_reduce", - "version_check", - "zstd", -] - -[[package]] -name = "polars-arrow-format" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b0ef2474af9396b19025b189d96e992311e6a47f90c53cd998b36c4c64b84c" -dependencies = [ - "planus", - "serde", -] - -[[package]] -name = "polars-compute" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30194a5ff325f61d6fcb62dc215c9210f308fc4fc85a493ef777dbcd938cba24" -dependencies = [ - "bytemuck", - "either", - "num-traits", - "polars-arrow", - "polars-error", - "polars-utils", - "strength_reduce", - "version_check", -] - -[[package]] -name = "polars-error" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07101d1803ca2046cdb3a8adb1523ddcc879229860f0ac56a853034269dec1e1" -dependencies = [ - "polars-arrow-format", - "simdutf8", - "thiserror 1.0.69", -] - -[[package]] -name = "polars-parquet" -version = "0.42.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2993265079ffa07dd16277189444424f8d787b00b01c6f6e001f58bab543ce" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "ahash", - "async-stream", - "base64", - "brotli", - "bytemuck", - "ethnum", - "flate2", - "futures", - "lz4", - "num-traits", - "parquet-format-safe", - "polars-arrow", - "polars-compute", - "polars-error", - "polars-utils", - "simdutf8", - "snap", - "streaming-decompression", - "zstd", + "der", + "spki", ] [[package]] -name = "polars-utils" -version = "0.42.0" +name = "pkg-config" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19dd73207bd15efb0ae5c9c3ece3227927ed6a16ad63578acec342378e6bdcb4" -dependencies = [ - "ahash", - "bytemuck", - "bytes", - "hashbrown 0.14.5", - "indexmap", - "memmap2", - "num-traits", - "once_cell", - "polars-error", - "raw-cpuid", - "rayon", - "smartstring", - "stacker", - "version_check", -] +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "portable-atomic" @@ -2153,7 +2487,7 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -2204,7 +2538,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", ] [[package]] @@ -2218,17 +2552,16 @@ dependencies = [ [[package]] name = "proptest" -version = "1.5.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +checksum = "37566cb3fdacef14c0737f9546df7cfeadbfbc9fef10991038bf5015d0c80532" dependencies = [ "bit-set", "bit-vec", "bitflags", - "lazy_static", "num-traits", - "rand", - "rand_chacha", + "rand 0.9.2", + "rand_chacha 0.9.0", "rand_xorshift", "regex-syntax", "rusty-fork", @@ -2236,15 +2569,6 @@ dependencies = [ "unarray", ] -[[package]] -name = "psm" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" -dependencies = [ - "cc", -] - [[package]] name = "pyo3" version = "0.23.5" @@ -2307,7 +2631,7 @@ dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.90", + "syn 2.0.117", ] [[package]] @@ -2320,7 +2644,7 @@ dependencies = [ "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.90", + "syn 2.0.117", ] [[package]] @@ -2342,7 +2666,7 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror 2.0.8", + "thiserror 2.0.18", "tokio", "tracing", ] @@ -2354,14 +2678,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", - "getrandom", - "rand", + "getrandom 0.2.15", + "rand 0.8.5", "ring", "rustc-hash", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.8", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -2390,6 +2714,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "radium" version = "0.7.0" @@ -2403,8 +2733,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.5", "serde", ] @@ -2415,7 +2755,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", ] [[package]] @@ -2424,25 +2774,35 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", + "serde", ] [[package]] name = "rand_xorshift" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "rand_core", + "rand_core 0.9.5", ] [[package]] -name = "raw-cpuid" -version = "11.2.0" +name = "rapidhash" +version = "4.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab240315c661615f2ee9f0f2cd32d5a7343a84d5ebcccb99d46e6637565e7b0" +checksum = "b5e48930979c155e2f33aa36ab3119b5ee81332beb6482199a8ecd6029b80b59" dependencies = [ - "bitflags", + "rustversion", ] [[package]] @@ -2466,12 +2826,23 @@ dependencies = [ ] [[package]] -name = "redox_syscall" -version = "0.5.8" +name = "ref-cast" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ - "bitflags", + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] @@ -2513,6 +2884,7 @@ dependencies = [ "bytes", "futures-core", "futures-util", + "h2", "http", "http-body", "http-body-util", @@ -2536,15 +2908,33 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-rustls", + "tokio-util", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", "webpki-roots", "windows-registry", ] +[[package]] +name = "reqwest-eventsource" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "632c55746dbb44275691640e7b40c907c16a2dc1a5842aa98aaec90da6ec6bde" +dependencies = [ + "eventsource-stream", + "futures-core", + "futures-timer", + "mime", + "nom", + "pin-project-lite", + "reqwest", + "thiserror 1.0.69", +] + [[package]] name = "rfc6979" version = "0.4.0" @@ -2563,7 +2953,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", "spin", "untrusted", @@ -2582,13 +2972,14 @@ dependencies = [ [[package]] name = "ruint" -version = "1.12.4" +version = "1.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5ef8fb1dd8de3870cb8400d51b4c2023854bbafd5431a3ac7e7317243e22d2f" +checksum = "c141e807189ad38a07276942c6623032d3753c8859c146104ac2e4d68865945a" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", "ark-ff 0.4.2", + "ark-ff 0.5.0", "bytes", "fastrlp 0.3.1", "fastrlp 0.4.0", @@ -2598,10 +2989,11 @@ dependencies = [ "parity-scale-codec", "primitive-types", "proptest", - "rand", + "rand 0.8.5", + "rand 0.9.2", "rlp", "ruint-macro", - "serde", + "serde_core", "valuable", "zeroize", ] @@ -2704,6 +3096,12 @@ dependencies = [ "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + [[package]] name = "rusty-fork" version = "0.3.0" @@ -2742,10 +3140,29 @@ dependencies = [ ] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "schemars" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" +dependencies = [ + "dyn-clone", + "ref-cast", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "7d115b50f4aaeea07e79c1912f645c7513d81715d0420f8bc77a18c6260b307f" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.117", +] [[package]] name = "sec1" @@ -2785,24 +3202,51 @@ dependencies = [ "pest", ] +[[package]] +name = "seq-macro" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" + [[package]] name = "serde" -version = "1.0.216" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.216" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] @@ -2852,9 +3296,9 @@ dependencies = [ [[package]] name = "sha3-asm" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +checksum = "b31139435f327c93c6038ed350ae4588e2c70a13d50599509fee6349967ba35a" dependencies = [ "cc", "cfg-if", @@ -2873,9 +3317,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", - "rand_core", + "rand_core 0.6.4", ] +[[package]] +name = "simd-adler32" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" + [[package]] name = "simdutf8" version = "0.1.5" @@ -2897,17 +3347,6 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -[[package]] -name = "smartstring" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" -dependencies = [ - "autocfg", - "static_assertions", - "version_check", -] - [[package]] name = "snap" version = "1.1.1" @@ -2946,19 +3385,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" -[[package]] -name = "stacker" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" -dependencies = [ - "cc", - "cfg-if", - "libc", - "psm", - "windows-sys 0.59.0", -] - [[package]] name = "static_assertions" version = "1.1.0" @@ -2966,25 +3392,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] -name = "streaming-decompression" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf6cc3b19bfb128a8ad11026086e31d3ce9ad23f8ea37354b31383a187c44cf3" -dependencies = [ - "fallible-streaming-iterator", -] - -[[package]] -name = "streaming-iterator" -version = "0.1.9" +name = "strum" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" [[package]] -name = "strength_reduce" -version = "0.2.4" +name = "strum_macros" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.117", +] [[package]] name = "subtle" @@ -3005,9 +3428,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.90" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -3016,14 +3439,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.15" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219389c1ebe89f8333df8bdfb871f6631c552ff399c23cac02480b6088aad8f0" +checksum = "53f425ae0b12e2f5ae65542e00898d500d4d318b4baf09f40fd0d410454e9947" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", ] [[package]] @@ -3043,7 +3466,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", ] [[package]] @@ -3052,12 +3475,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" -[[package]] -name = "target-features" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1bbb9f3c5c463a01705937a24fdabc5047929ac764b2d5b9cf681c1f5041ed5" - [[package]] name = "target-lexicon" version = "0.12.16" @@ -3088,11 +3505,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.8" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f5383f3e0071702bf93ab5ee99b52d26936be9dedd9413067cbdcddcb6141a" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.8", + "thiserror-impl 2.0.18", ] [[package]] @@ -3103,18 +3520,29 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", ] [[package]] name = "thiserror-impl" -version = "2.0.8" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f357fcec90b3caef6623a099691be676d033b40a058ac95d2a6ade6fa0c943" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", +] + +[[package]] +name = "thrift" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" +dependencies = [ + "byteorder", + "integer-encoding", + "ordered-float", ] [[package]] @@ -3175,7 +3603,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", ] [[package]] @@ -3196,7 +3624,6 @@ checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", - "futures-io", "futures-sink", "pin-project-lite", "tokio", @@ -3216,7 +3643,7 @@ checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ "indexmap", "toml_datetime", - "winnow", + "winnow 0.6.20", ] [[package]] @@ -3250,6 +3677,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "twox-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" + [[package]] name = "typenum" version = "1.17.0" @@ -3340,6 +3773,15 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "uuid" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" +dependencies = [ + "getrandom 0.3.4", +] + [[package]] name = "valuable" version = "0.1.0" @@ -3376,6 +3818,15 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasip2" +version = "1.0.2+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + [[package]] name = "wasm-bindgen" version = "0.2.99" @@ -3397,7 +3848,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", "wasm-bindgen-shared", ] @@ -3432,7 +3883,7 @@ checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3443,6 +3894,19 @@ version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.76" @@ -3472,14 +3936,55 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + [[package]] name = "windows-registry" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ - "windows-result", - "windows-strings", + "windows-result 0.2.0", + "windows-strings 0.1.0", "windows-targets", ] @@ -3492,16 +3997,34 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-strings" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ - "windows-result", + "windows-result 0.2.0", "windows-targets", ] +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -3593,6 +4116,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" + [[package]] name = "write16" version = "1.0.0" @@ -3616,9 +4154,9 @@ dependencies = [ [[package]] name = "xxhash-rust" -version = "0.8.12" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" +checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" [[package]] name = "yoke" @@ -3640,7 +4178,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", "synstructure", ] @@ -3651,7 +4189,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive 0.8.27", ] [[package]] @@ -3662,7 +4209,18 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] @@ -3682,7 +4240,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", "synstructure", ] @@ -3703,7 +4261,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", ] [[package]] @@ -3725,9 +4283,15 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.117", ] +[[package]] +name = "zlib-rs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" + [[package]] name = "zstd" version = "0.13.2" diff --git a/Cargo.toml b/Cargo.toml index 525af42..c5b56ec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hypersync" -version = "0.9.0" +version = "0.10.0" edition = "2021" [lib] @@ -17,12 +17,12 @@ pyo3-async-runtimes = { version = "0.23", features = ["tokio-runtime"] } tokio = "1" serde_json = "1" serde = { version = "1", features = ["derive"] } -alloy-json-abi = "0.8" -alloy-dyn-abi = "0.8" -alloy-primitives = "0.8" -hypersync-client = "0.17" +alloy-json-abi = "1.1" +alloy-dyn-abi = "1.1" +alloy-primitives = "1.1" +hypersync-client = { path = "../hypersync-client-rust/hypersync-client" } anyhow = "1" -polars-arrow = { version = "0.42" } +arrow = { version = "57", features = ["ffi"] } prefix-hex = "0.7" env_logger = "0.11" faster-hex = "0.9" diff --git a/MIGRATION_GUIDE.md b/MIGRATION_GUIDE.md new file mode 100644 index 0000000..5b7073b --- /dev/null +++ b/MIGRATION_GUIDE.md @@ -0,0 +1,261 @@ +# Migration Guide: hypersync v0.9 to v0.10 + +This guide covers all changes needed to migrate from hypersync-client-python +v0.9.x (backed by hypersync-client-rust v0.17) to v0.10.0 (backed by +hypersync-client-rust v1.0.1). + +## Quick Summary + +| Change | Action Required | +|--------|----------------| +| `bearer_token` renamed to `api_token` | **Recommended** (old name still works) | +| New Transaction/Trace fields | None (additive) | +| New DataType enum values | None (additive) | +| StreamConfig.reverse | None (additive) | +| Block field bug fixes | **Awareness** (may affect data) | +| polars-arrow to arrow-rs | None (transparent to Python) | +| alloy 0.8 to 1.1 | None (transparent to Python) | +| DNS failover fix | None (transparent fix) | + +--- + +## 1. ClientConfig: `bearer_token` to `api_token` + +### What Changed + +The `bearer_token` field in `ClientConfig` has been renamed to `api_token` to +align with the upstream Rust client terminology. + +### Migration + +**Before (v0.9):** +```python +import hypersync + +client = hypersync.HypersyncClient(hypersync.ClientConfig( + url="https://eth.hypersync.xyz", + bearer_token="your-api-token" +)) +``` + +**After (v0.10):** +```python +import hypersync + +client = hypersync.HypersyncClient(hypersync.ClientConfig( + url="https://eth.hypersync.xyz", + api_token="your-api-token" +)) +``` + +**Backward compatibility:** `bearer_token` is still accepted and will be +automatically mapped to `api_token`. However, it is deprecated and will be +removed in a future version. If both `api_token` and `bearer_token` are +specified, `api_token` takes precedence. + +--- + +## 2. New Transaction Fields + +The following fields have been added to the `Transaction` class and +`TransactionField` enum. These are all additive and require no migration action. + +### EIP-4844 Blob Transaction Fields + +```python +# New TransactionField enum values +TransactionField.BLOB_GAS_PRICE +TransactionField.BLOB_GAS_USED + +# Available on Transaction objects +tx.blob_gas_price # Optional[str] - hex encoded +tx.blob_gas_used # Optional[str] - hex encoded +``` + +### Optimism / L2 Fields + +```python +# New TransactionField enum values +TransactionField.DEPOSIT_NONCE +TransactionField.DEPOSIT_RECEIPT_VERSION +TransactionField.L1_BASE_FEE_SCALAR +TransactionField.L1_BLOB_BASE_FEE +TransactionField.L1_BLOB_BASE_FEE_SCALAR +TransactionField.L1_BLOCK_NUMBER +TransactionField.MINT +TransactionField.SOURCE_HASH + +# Available on Transaction objects +tx.deposit_nonce # Optional[str] +tx.deposit_receipt_version # Optional[str] +tx.l1_base_fee_scalar # Optional[str] +tx.l1_blob_base_fee # Optional[str] +tx.l1_blob_base_fee_scalar # Optional[str] +tx.l1_block_number # Optional[str] +tx.mint # Optional[str] +tx.source_hash # Optional[str] +``` + +### Function Signature Hash + +```python +TransactionField.SIGHASH + +tx.sighash # Optional[str] - 4-byte function signature hash +``` + +### Usage Example + +```python +query = hypersync.Query( + from_block=19000000, + field_selection=hypersync.FieldSelection( + transaction=[ + hypersync.TransactionField.HASH, + hypersync.TransactionField.FROM, + hypersync.TransactionField.TO, + hypersync.TransactionField.SIGHASH, # New + hypersync.TransactionField.BLOB_GAS_USED, # New + ] + ), + transactions=[hypersync.TransactionSelection()] +) +``` + +--- + +## 3. New Trace Fields + +The following fields have been added to the `Trace` class and `TraceField` enum. + +```python +# New TraceField enum values +TraceField.SIGHASH +TraceField.ACTION_ADDRESS +TraceField.BALANCE +TraceField.REFUND_ADDRESS + +# Available on Trace objects +trace.sighash # Optional[str] - 4-byte function signature hash +trace.action_address # Optional[str] - action address for contract creation +trace.balance # Optional[str] - balance for the trace operation +trace.refund_address # Optional[str] - refund address for refund operations +``` + +--- + +## 4. New DataType Enum Values + +Two new column mapping data types are available for use with `ColumnMapping`: + +```python +hypersync.DataType.DECIMAL256 # 256-bit decimal type +hypersync.DataType.DECIMAL128 # 128-bit decimal type +``` + +### Usage Example + +```python +config = hypersync.StreamConfig( + column_mapping=hypersync.ColumnMapping( + transaction={ + hypersync.TransactionField.VALUE: hypersync.DataType.DECIMAL256, + hypersync.TransactionField.GAS_PRICE: hypersync.DataType.DECIMAL128, + } + ) +) +``` + +--- + +## 5. StreamConfig.reverse + +A new `reverse` boolean field allows streaming data in reverse chronological +order: + +```python +config = hypersync.StreamConfig( + reverse=True # Stream from newest to oldest +) +``` + +--- + +## 6. Block Field Bug Fixes + +**Impact:** If you were using `Block.send_count`, `Block.send_root`, or +`Block.mix_hash`, their values were previously incorrect (they all returned the +`transactions_root` value). They now correctly return their respective field +values from the blockchain data. + +If your code relied on this incorrect behavior, you may see different values +after upgrading. + +--- + +## 7. Internal Changes (No Action Required) + +These changes are transparent to Python users but are documented for +completeness: + +### Arrow FFI Migration + +The Arrow integration has been migrated from `polars-arrow` (v0.42) to +`arrow-rs` (v57). The pyarrow `Table` objects returned by `collect_arrow`, +`get_arrow`, and `stream_arrow` remain functionally identical. + +### alloy Crate Updates + +The Ethereum ABI encoding/decoding libraries (`alloy-dyn-abi`, `alloy-json-abi`, +`alloy-primitives`) have been updated from version 0.8 to 1.1. This does not +affect the Python API. + +### EventResponse Data Flattening + +The internal `EventResponse.data` structure changed from `Vec>` to +`Vec`. The Python API (`EventResponse.data`) continues to return a flat +list of `Event` objects as before, so this change is transparent. + +### DNS Failover Fix + +The HTTP client now recreates its connection pool every 60 seconds to ensure DNS +lookups are refreshed. This fixes an issue where long-running polling sessions +would hold stale connections to IPs that had changed during server failovers. +This is completely transparent and requires no code changes. + +### Client Arc Wrapping + +The Rust `Client` struct now internally wraps its state in `Arc`, making it +cheap to clone. The Python binding's outer `Arc` wrapper is redundant but +harmless and has been preserved for simplicity. + +--- + +## Dependency Changes + +### Cargo.toml (for building from source) + +| Dependency | Old Version | New Version | +|-----------|-------------|-------------| +| `hypersync-client` | 0.17 | 1.0.1 | +| `polars-arrow` | 0.42 | **Removed** | +| `arrow` | — | 57 | +| `alloy-dyn-abi` | 0.8 | 1.1 | +| `alloy-json-abi` | 0.8 | 1.1 | +| `alloy-primitives` | 0.8 | 1.1 | + +--- + +## Complete Version History (Rust Client) + +The Rust client went through these versions between 0.17 and 1.0.1: + +- **0.17.x** - Previous Python client dependency +- **0.18.0-0.18.5** - Incremental improvements +- **0.19.0** - Minor updates +- **0.20.0** - Release candidates and stable +- **0.21.0-0.21.2** - Incremental improvements +- **0.22.0** - Minor updates +- **0.23.0** (Dec 2025) - Pre-1.0 release +- **1.0.0** (Jan 2026) - Stability milestone, streaming large payload fixes +- **1.0.1** (Feb 2026) - DNS failover fixes, HTTP/2 support diff --git a/hypersync/__init__.py b/hypersync/__init__.py index 5ee0cce..a0f66f1 100644 --- a/hypersync/__init__.py +++ b/hypersync/__init__.py @@ -66,6 +66,17 @@ class Transaction(object): l1_gas_used: Optional[str] l1_fee_scalar: Optional[float] gas_used_for_l1: Optional[str] + blob_gas_price: Optional[str] + blob_gas_used: Optional[str] + deposit_nonce: Optional[str] + deposit_receipt_version: Optional[str] + l1_base_fee_scalar: Optional[str] + l1_blob_base_fee: Optional[str] + l1_blob_base_fee_scalar: Optional[str] + l1_block_number: Optional[str] + mint: Optional[str] + sighash: Optional[str] + source_hash: Optional[str] class Withdrawal(object): @@ -128,6 +139,10 @@ class Trace(object): transaction_position: Optional[int] kind: Optional[str] error: Optional[str] + sighash: Optional[str] + action_address: Optional[str] + balance: Optional[str] + refund_address: Optional[str] class Event(object): @@ -232,6 +247,8 @@ class DataType(StrEnum): FLOAT32 = "float32" FLOAT64 = "float64" INTSTR = "intstr" + DECIMAL256 = "decimal256" + DECIMAL128 = "decimal128" class BlockField(StrEnum): @@ -401,6 +418,28 @@ class TransactionField(StrEnum): L1_FEE_SCALAR = "l1_fee_scalar" # Amount of gas spent on L1 calldata in units of L2 gas. GAS_USED_FOR_L1 = "gas_used_for_l1" + # Gas price for blob transactions + BLOB_GAS_PRICE = "blob_gas_price" + # Amount of blob gas used by this transaction + BLOB_GAS_USED = "blob_gas_used" + # Deposit transaction nonce for Optimism + DEPOSIT_NONCE = "deposit_nonce" + # Deposit receipt version for Optimism + DEPOSIT_RECEIPT_VERSION = "deposit_receipt_version" + # Base fee scalar for L1 cost calculation + L1_BASE_FEE_SCALAR = "l1_base_fee_scalar" + # L1 blob base fee for cost calculation + L1_BLOB_BASE_FEE = "l1_blob_base_fee" + # L1 blob base fee scalar for cost calculation + L1_BLOB_BASE_FEE_SCALAR = "l1_blob_base_fee_scalar" + # L1 block number associated with transaction + L1_BLOCK_NUMBER = "l1_block_number" + # Amount of ETH minted in this transaction + MINT = "mint" + # 4-byte function signature hash + SIGHASH = "sighash" + # Source hash for optimism transactions + SOURCE_HASH = "source_hash" class LogField(StrEnum): @@ -489,6 +528,14 @@ class TraceField(StrEnum): # A string that indicates whether the transaction was successful or not. # None if successful, Reverted if not. ERROR = "error" + # 4-byte function signature hash for the trace + SIGHASH = "sighash" + # The action address for traces that create contracts + ACTION_ADDRESS = "action_address" + # The balance associated with the trace operation + BALANCE = "balance" + # The refund address for refund operations + REFUND_ADDRESS = "refund_address" class HexOutput(StrEnum): @@ -663,6 +710,8 @@ class StreamConfig: response_bytes_ceiling: Optional[int] = None # Response bytes floor for dynamic batch size adjustment. response_bytes_floor: Optional[int] = None + # Stream data in reverse order. + reverse: Optional[bool] = None @dataclass @@ -671,7 +720,9 @@ class ClientConfig: # HyperSync server URL. url: Optional[str] = None - # HyperSync server bearer token. + # HyperSync server API token. + api_token: Optional[str] = None + # Deprecated: use api_token instead. Kept for backward compatibility. bearer_token: Optional[str] = None # Milliseconds to wait for a response before timing out. http_req_timeout_millis: Optional[int] = None diff --git a/src/arrow_ffi.rs b/src/arrow_ffi.rs index 7ed0edd..d6a6f7d 100644 --- a/src/arrow_ffi.rs +++ b/src/arrow_ffi.rs @@ -1,13 +1,12 @@ use anyhow::{Context, Result}; -use hypersync_client::ArrowBatch; -use polars_arrow::{ - array::StructArray, - datatypes::{ArrowDataType as DataType, Field}, - ffi, +use arrow::{ + array::RecordBatch, + ffi_stream::FFI_ArrowArrayStream, + record_batch::RecordBatchIterator, }; use pyo3::{ ffi::Py_uintptr_t, - types::{PyAnyMethods, PyModule}, + types::PyAnyMethods, PyErr, PyObject, Python, }; @@ -50,28 +49,20 @@ pub fn response_to_pyarrow(response: hypersync_client::ArrowResponse) -> Result< fn convert_batches_to_pyarrow_table<'py>( py: Python<'py>, - pyarrow: &pyo3::Bound<'py, PyModule>, - batches: Vec, + pyarrow: &pyo3::Bound<'py, pyo3::types::PyModule>, + batches: Vec, ) -> Result { if batches.is_empty() { return Ok(py.None()); } - let schema = batches.first().unwrap().schema.fields.clone(); - let field = Field::new("a", DataType::Struct(schema), true); + let schema = batches[0].schema(); + let reader = RecordBatchIterator::new(batches.into_iter().map(Ok), schema); + let mut ffi_stream = FFI_ArrowArrayStream::new(Box::new(reader)); - let mut data = vec![]; - for batch in batches { - data.push( - StructArray::new(field.data_type.clone(), batch.chunk.arrays().to_vec(), None).boxed(), - ); - } - - let iter = Box::new(data.into_iter().map(Ok)) as _; - let stream = Box::new(ffi::export_iterator(iter, field)); let py_stream = pyarrow.getattr("RecordBatchReader")?.call_method1( "_import_from_c", - ((&*stream as *const ffi::ArrowArrayStream) as Py_uintptr_t,), + (&mut ffi_stream as *mut FFI_ArrowArrayStream as Py_uintptr_t,), )?; let table = pyarrow .getattr("Table") diff --git a/src/config.rs b/src/config.rs index e48cf8c..5c3cec6 100644 --- a/src/config.rs +++ b/src/config.rs @@ -32,6 +32,8 @@ pub struct StreamConfig { pub response_bytes_ceiling: Option, #[serde(skip_serializing_if = "Option::is_none")] pub response_bytes_floor: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub reverse: Option, } #[derive(Default, Clone, Serialize, Deserialize, FromPyObject)] @@ -60,6 +62,9 @@ pub struct ClientConfig { #[serde(skip_serializing_if = "Option::is_none")] pub url: Option, #[serde(skip_serializing_if = "Option::is_none")] + pub api_token: Option, + /// Deprecated: use api_token instead. Kept for backward compatibility. + #[serde(skip_serializing_if = "Option::is_none", skip_deserializing)] pub bearer_token: Option, #[serde(skip_serializing_if = "Option::is_none")] pub http_req_timeout_millis: Option, @@ -75,7 +80,12 @@ pub struct ClientConfig { impl ClientConfig { pub fn try_convert(&self) -> Result { - let json = serde_json::to_vec(self).context("serialize to json")?; + // Handle bearer_token → api_token backward compatibility + let mut config = self.clone(); + if config.api_token.is_none() && config.bearer_token.is_some() { + config.api_token = config.bearer_token.take(); + } + let json = serde_json::to_vec(&config).context("serialize to json")?; serde_json::from_slice(&json).context("parse json") } } diff --git a/src/response.rs b/src/response.rs index 0e1a6a2..6328b3a 100644 --- a/src/response.rs +++ b/src/response.rs @@ -88,16 +88,13 @@ impl QueryResponseStream { } } -type HSEventResponse = - hypersync_client::QueryResponse>>; - #[pyclass] pub struct EventStream { - inner: Arc>>>, + inner: Arc>>>, } impl EventStream { - pub fn new(inner: mpsc::Receiver>) -> Self { + pub fn new(inner: mpsc::Receiver>) -> Self { Self { inner: Arc::new(tokio::sync::Mutex::new(inner)), } @@ -284,19 +281,17 @@ pub fn convert_response(res: hypersync_client::QueryResponse) -> Result>>, + resp: hypersync_client::EventResponse, ) -> Result { - let mut data = Vec::new(); - - for batch in resp.data { - for event in batch { - data.push(Event { - transaction: event.transaction.map(|v| Transaction::from(&*v)), - block: event.block.map(|v| Block::from(&*v)), - log: Log::from(&event.log), - }); - } - } + let data = resp + .data + .into_iter() + .map(|event| Event { + transaction: event.transaction.map(|v| Transaction::from(&*v)), + block: event.block.map(|v| Block::from(&*v)), + log: Log::from(&event.log), + }) + .collect(); Ok(EventResponse { archive_height: resp.archive_height.map(|v| v.try_into().unwrap()), diff --git a/src/types.rs b/src/types.rs index 48160b4..d2f7589 100644 --- a/src/types.rs +++ b/src/types.rs @@ -80,6 +80,17 @@ pub struct Transaction { pub l1_gas_used: Option, pub l1_fee_scalar: Option, pub gas_used_for_l1: Option, + pub blob_gas_price: Option, + pub blob_gas_used: Option, + pub deposit_nonce: Option, + pub deposit_receipt_version: Option, + pub l1_base_fee_scalar: Option, + pub l1_blob_base_fee: Option, + pub l1_blob_base_fee_scalar: Option, + pub l1_block_number: Option, + pub mint: Option, + pub sighash: Option, + pub source_hash: Option, } /// Evm withdrawal object @@ -194,6 +205,10 @@ pub struct Trace { pub transaction_position: Option, pub kind: Option, pub error: Option, + pub sighash: Option, + pub action_address: Option, + pub balance: Option, + pub refund_address: Option, } /// Decoded EVM log @@ -345,9 +360,9 @@ impl From<&simple_types::Block> for Block { .as_ref() .map(|w| w.iter().map(Withdrawal::from).collect()), l1_block_number: b.l1_block_number.map(|n| u64::from(n).try_into().unwrap()), - send_count: map_binary(&b.transactions_root), - send_root: map_binary(&b.transactions_root), - mix_hash: map_binary(&b.transactions_root), + send_count: map_binary(&b.send_count), + send_root: map_binary(&b.send_root), + mix_hash: map_binary(&b.mix_hash), } } } @@ -377,7 +392,7 @@ impl From<&simple_types::Transaction> for Transaction { chain_id: t .chain_id .as_ref() - .map(|n| ruint::aliases::U256::from_be_slice(n).try_into().unwrap()), + .map(|n| ruint::aliases::U256::from_be_slice(n.as_ref()).try_into().unwrap()), access_list: t .access_list .as_ref() @@ -392,7 +407,7 @@ impl From<&simple_types::Transaction> for Transaction { gas_used: map_binary(&t.gas_used), contract_address: map_binary(&t.contract_address), logs_bloom: map_binary(&t.logs_bloom), - kind: t.kind.map(|v| u8::from(v).into()), + kind: t.type_.map(|v| u8::from(v).into()), root: map_binary(&t.root), status: t.status.map(|v| v.to_u8().into()), l1_fee: map_binary(&t.l1_fee), @@ -400,6 +415,17 @@ impl From<&simple_types::Transaction> for Transaction { l1_gas_used: map_binary(&t.l1_gas_used), l1_fee_scalar: t.l1_fee_scalar, gas_used_for_l1: map_binary(&t.gas_used_for_l1), + blob_gas_price: map_binary(&t.blob_gas_price), + blob_gas_used: map_binary(&t.blob_gas_used), + deposit_nonce: map_binary(&t.deposit_nonce), + deposit_receipt_version: map_binary(&t.deposit_receipt_version), + l1_base_fee_scalar: map_binary(&t.l1_base_fee_scalar), + l1_blob_base_fee: map_binary(&t.l1_blob_base_fee), + l1_blob_base_fee_scalar: map_binary(&t.l1_blob_base_fee_scalar), + l1_block_number: map_binary(&t.l1_block_number), + mint: map_binary(&t.mint), + sighash: map_binary(&t.sighash), + source_hash: map_binary(&t.source_hash), } } } @@ -451,8 +477,12 @@ impl From<&simple_types::Trace> for Trace { .map(|arr| arr.iter().map(|n| (*n).try_into().unwrap()).collect()), transaction_hash: map_binary(&t.transaction_hash), transaction_position: t.transaction_position.map(|n| n.try_into().unwrap()), - kind: t.kind.clone(), + kind: t.type_.clone(), error: t.error.clone(), + sighash: map_binary(&t.sighash), + action_address: map_binary(&t.action_address), + balance: map_binary(&t.balance), + refund_address: map_binary(&t.refund_address), } } }