+None of this is worth anything if the data differs from what an archive node would return. It doesn't. Logs (by address and topics) and account transactions (by from / to) are pushed to the Portal's native server-side filters, the field projection requests exactly the columns Ponder's sync store persists, and the Portal's number/quantity encodings are normalized so a stored block, transaction, receipt, or trace is indistinguishable from the RPC path (which always carries `nonce`, `mixHash`, `sha3Uncles`, `totalDifficulty`). Two row filters are applied client-side, and the first is the sharpest correctness detail in the system. **Traces** are fetched *whole* — the request carries only the parent-transaction relation, no trace filter — and matched after they arrive, because Ponder numbers each trace by its pre-order (depth-first) rank within the transaction's *entire* call tree. A server-side trace filter would return only the matched subset, so that rank would be computed over a partial tree and come out wrong; fetching every trace and filtering after ranking is what keeps `trace_index` byte-identical to the RPC path. The second is the **block-interval** (offset/modulo) test, which the Portal has no native equivalent for.
0 commit comments