Skip to content

Commit 8d00a8e

Browse files
dzhelezovclaude
andcommitted
docs(readme): add a Correctness section consolidating the data-correctness evidence
Speed and correctness are the two halves of the fork's claim; the README led with Benchmarks but had no consolidated backing for the hero line's "byte-identical to eth_getLogs". This adds one `## Correctness` section between Benchmarks and Compatibility. Thesis: the fork changes the transport (Portal, not per-chain JSON-RPC), not the data — sync-store rows are byte-identical to stock Ponder over RPC. Then the evidence layers, one canonical VALIDATION.md link per claim: - byte-diff vs stock RPC (§3.2 F-full eth, §3.6 polygon, §3.7 bsc) - whole-store count parity, 62/62 cells, 0 diffs (§5.7) - third-party corroboration: Goldsky subgraphs + public archive nodes (§5.7) - reorg & finality: finalized-only backfill + mutation-tested realtime (§5.8) - crash/durability: chaos kill-loop byte-identical resume (§4, Layer C) Honesty boundaries stated plainly (not hidden): residual diffs are upstream dataset column gaps surfaced as honest NULL (§5.6), not fork data loss (the old fabricated-[] defect is fixed, #32 closed); Portal-native /stream realtime is experimental. Docs-only — cannot affect the fork seam. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 5e5453f commit 8d00a8e

1 file changed

Lines changed: 16 additions & 0 deletions

File tree

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,22 @@ That's only half of it. A fast endpoint alone doesn't make a fast indexer — th
6767

6868
A single serial run, not an averaged gate: both legs are fetch-bound, so the ratio reflects the specific Portal dataset and metered RPC endpoint. The sync-store rows are byte-identical across every family ([VALIDATION.md §3.2](VALIDATION.md)) · methodology and caveats: [`BENCHMARKS.md`](harness/bench/BENCHMARKS.md).
6969

70+
## Correctness
71+
72+
The fork changes the **transport** — the SQD Portal instead of per-chain JSON-RPC — not the **data**: the sync-store rows it writes are byte-identical to what stock Ponder writes from RPC. The evidence, consolidated in [`VALIDATION.md`](VALIDATION.md):
73+
74+
- **Byte-diff vs stock RPC.** A paid matrix backfills the same ranges two ways — Portal and genuine `ponder` over metered RPC (ground truth) — and diffs every sync-store row. Logs, transactions, and receipts come out byte-identical across chain families: full Euler history on Ethereum ([VALIDATION.md §3.2](VALIDATION.md)), plus receipts byte-identity on Polygon ([§3.6](VALIDATION.md)) and BSC ([§3.7](VALIDATION.md)).
75+
- **Whole-store count parity.** The flagship 15-chain store matches the frozen reference exactly — **62/62 aggregate cells, 0 diffs** ([VALIDATION.md §5.7](VALIDATION.md)).
76+
- **Third-party corroboration.** Discovered vault sets agree with Euler's own public Goldsky subgraphs, and field-level disagreements are broken against independent public archive nodes ([VALIDATION.md §5.7](VALIDATION.md)).
77+
- **Reorg & finality.** The Portal serves only finalized data for backfill, so historical rows are write-once (reorg-free by construction); realtime reorg reconciliation is mutation-tested ([VALIDATION.md §5.8](VALIDATION.md)).
78+
- **Crash/durability.** A chaos kill-loop resumes to a store byte-identical to an uninterrupted baseline ([VALIDATION.md §4](VALIDATION.md), Layer C).
79+
80+
The residual Portal-vs-RPC differences are **upstream-dataset column gaps** (e.g. `access_list` missing on some chains, [§5.6](VALIDATION.md); a single non-consensus `block.size` off-by-one, tolerated as benign) — surfaced as honest SQL `NULL`, documented and bounded. They are **not** fork-introduced data loss: the fork's earlier fabricated-`[]` defect was fixed and proven FAIL→PASS ([§5.6](VALIDATION.md), issue [#32](https://github.com/subsquid-labs/portal-ponder/issues/32) closed).
81+
82+
One boundary, stated plainly: the default, validated realtime path runs on your RPC. Portal-native `/stream` realtime is **experimental**, not production-ready ([VALIDATION.md §5.8](VALIDATION.md)).
83+
84+
Full evidence, with repro commands: [`VALIDATION.md`](VALIDATION.md).
85+
7086
## Compatibility
7187

7288
All of Ponder's source types are supported — logs, factories, transactions, receipts, traces, block intervals, accounts; `readContract` uses your RPC. The Portal serves [130+ EVM networks](https://docs.sqd.dev/en/data/all-networks); per-network capabilities and per-portal availability vary. Check an indexer before migrating:

0 commit comments

Comments
 (0)