Conversation
barnabasbusa
approved these changes
Feb 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Execution Data Storage Rework: BlockDB-backed Transaction Details
Moves per-transaction detail data (events, call traces, state changes) out of the database and into the blockdb storage layer (Pebble/S3). The
el_tx_eventstable is removed entirely. Only lightweight indexes remain in the DB, while raw event/trace data lives in size-limited, prunable blockdb objects.Indexing Modes
Three modes provide granular control over resource usage:
enabled: falsedetailsEnabled: falsedetailsEnabled: trueFull mode optionally fetches call traces via
debug_traceBlockByHashwhentracesEnabled: true.Key Changes
Storage format — Custom versioned binary format for per-block objects with a fixed-size index header for O(1) random access to individual transaction data. Each section (events, call traces, state changes) is independently snappy-compressed. S3 range reads can fetch just the index, then specific sections by offset.
BlockDB extensions — New
ExecDataEngineinterface on both Pebble and S3 backends supporting write (with size tracking), read, partial/range read, delete, and slot-range pruning.Trace fetching — Streaming JSON parser for
debug_traceBlockByHashresponses (can be hundreds of MB). Parses per-tx, converts to binary format, compresses, and frees memory incrementally. Call traces are normalized across EL clients (Geth, Nethermind, Erigon, Besu, Reth).New DB tables:
el_transactions_internal— lightweight index of internal calls from call traces (from, to, value, call type)el_event_index— lightweight searchable index for events (source address, topic1)Pruning — Two independent axes: time-based retention (existing, extended to blockdb) and size-based eviction (
detailsMaxSize). Oldest blocks evicted first when size limit exceeded.UI — New transaction detail tabs for internal transactions (call trace tree), events (loaded from blockdb), and state changes. New internal transactions tab on address pages. Graceful degradation when blockdb data is pruned.
Schema Migration
el_tx_eventstabledata_statusanddata_sizecolumns toel_blocksel_transactions_internalandel_event_indextables with indexesFiles Changed
41 files changed, ~5800 insertions, ~530 deletions across blockdb, DB layer, indexer, RPC client, handlers, and templates.
Screenshots