graphsense-lib 2.11.0
·
294 commits
to master
since this release
[2.11.0] 2026-04-29
Library (v2.11.0)
Added
- New ingest pipeline: replaced ethereum-etl and bitcoin-etl with direct batch RPC for all chains.
- Dual-sink pipeline:
from-node --sinks delta --sinks cassandraingests to both Delta Lake and Cassandra in a single pass. - TRX gRPC source: replaced HTTP-based TRX ingestion with native gRPC for higher throughput.
- UTXO prevout resolution: verbosity 3 support for BTC/BCH;
getrawtransaction-based input resolution for LTC/ZEC. Removes the Cassandra dependency on ingest and enables input resolution for Delta Lake ingest. - ETH Pectra fields:
requestsHash,authorizationList,y_parity,parentBeaconBlockRoot,uncles,creationMethod. - EIP-2930/4844 Cassandra fields:
access_liststored in Delta and Cassandra schema. - Named S3 configs: per-sink S3 references via
s3_configsingraphsense.yaml. - Config validation: warn on unknown keys at all nesting levels instead of failing; optimal
source_max_workersdefaults per currency; newsource_max_workersknob for tuning RPC concurrency. - Sink-level locking: independent locks for Delta and Cassandra sinks; single lock for ingest+compact.
- Sink divergence detection: refuse to ingest when Delta and Cassandra sinks have diverged.
ingest_completemarker: bootstrap-marker state table for keyspace auto-discovery.- Node-restart resilience: HTTP RPC and Tron gRPC retries now tolerate up to ~5 minutes of node downtime.
ingestmodule added to ty type-checking scope.
Changed
- UTXO addresses stored as plain text instead of custom binary encoding in delta lake. (breaking, needs delta lake re-intest from node)
- Delta Lake writes and compaction use ZSTD level 5 compression.
- Reduced Delta pre-compaction file sizes by ~10× and lowered output cache limit.
- Increased Cassandra driver heartbeat timeout to avoid spurious retries.
- Tag summary: lower weight on
darkwebandunknowntags; more emphasis on high-confidence tags. semver-checknow accepts full SemVer 2.0 prerelease and build-metadata identifiers.- Registry pattern for
dump.py, decoupled transform/sink boundary. - Obfuscation plugin RESt: easier toggle flags for debugging
- Replaced the
cashaddressdependency with a local implementation.
Performance
- Significantly sped up Tron and Ethereum ingest (parallelized source I/O, chunk-level pipelining, gRPC instead of REST for Tron, faster hex/bytes conversions, in-place sorts, merged transform passes).
Web API + Python client (webapi-2.11.0)
Added
- New
/{currency}/clusters/...endpoints (get_cluster,list_cluster_addresses,
list_cluster_neighbors,list_cluster_links,list_address_tags_by_cluster,
list_cluster_txs,search_cluster_neighbors) that supersede the
corresponding/entities/...endpoints. Both sets return identical data;
new integrations should use/clusters/.... - New
clusterfield onAddress,Cluster/Entity, andAddressTagresponse
models. Dual-emitted alongside the existingentityfield. - New
Cluster,NeighborCluster,NeighborClusters,ClusterAddressestypes
in the generated Python client (subclasses of theEntity*types, so both
are usable during the deprecation window). - RFC 9745
Deprecation: trueresponse header, RFC 8594Sunsetresponse
header (per-route sunset dates) on the/entities/...endpoints, and a
Linkheader withrel="deprecation"on every deprecated route. Clients
can detect these without parsing the OpenAPI schema. - Written deprecation policy in the API description (visible in
/docsand
in the generated spec).
Deprecated
/{currency}/entities/...endpoints — use/{currency}/clusters/...instead.entityfield onAddress,Cluster,NeighborEntity, andAddressTag—
useclusterinstead.statusfield onAddress— legacy field, no replacement.
All deprecated surfaces continue to work; see the "Deprecation policy" section
of the API description for the support window.
What's Changed
- Coinmixing Constant Changes by @frederik-raphael in #80
- Coinjoin FP Reduction by @frederik-raphael in #82
- Feature/rename entities endpoints by @soad003 in #81
Full Changelog: v2.10.1...v2.11.0