You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(history): support pearl-transactions v0.0.7 schema per chain
Base's transactions proxy pins subgraph v0.0.7, whose schema is
incompatible with the queries Pearl sends (FundsMovement.bondType
removed, bond rows moved to a separate bondMovements ledger, OLAS
sweeps pre-split into AGENT_OLAS_TO_MASTER, Service.id reshaped to
registry bytes with the numeric id in serviceId) — every request
failed GraphQL validation, so Base users saw the error state.
Adds a per-chain schema-revision map beside the subgraph URL map
(Base → v2; absent → v1), v2 query documents + Zod schemas verified
against the live Base deployment, and service-boundary normalization
back to the v1-shaped domain types (bond rows merged into
fundsMovements, sweep rows dropped, service.id mapped from serviceId).
Hooks and components are untouched and revision-agnostic; migrating
Gnosis/Optimism to v0.0.7 later is a one-line map flip.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Live deployments serve two incompatible schema revisions (2026-07): Gnosis/Optimism proxies pin subgraph **v0.0.6 (v1)**, Base pins **v0.0.7 (v2)** — its indexers no longer serve v0.0.6. Differences (verified against the live Base deployment, not the subgraph README):
42
+
43
+
|| v1 (v0.0.6) | v2 (v0.0.7) |
44
+
|---|---|---|
45
+
| Bond rows |`fundsMovements` with `bondType`| separate `bondMovements` ledger (carries `bondType`) |
46
+
| OLAS reward sweeps |`AGENT_TO_MASTER`, hidden client-side (`isOlasAgentToMaster`) | pre-split `AGENT_OLAS_TO_MASTER`, excluded by the query's category filter |
47
+
|`Service.id`| numeric string | registry Bytes (`"0x7802"`); numeric id in new `serviceId` field |
48
+
49
+
Mechanism: `TRANSACTION_HISTORY_SUBGRAPH_SCHEMA_BY_EVM_CHAIN` (`frontend/constants/urls.ts`) maps chain → revision (absent = v1). Both services pick the matching query document, Zod-parse with the matching schema, and — for v2 — normalize to the v1-shaped domain types via `normalize*V2` in `frontend/utils/transactionHistory.ts` (bond rows merged into `fundsMovements`, sweep rows dropped, `service.id` mapped from `serviceId`). Hooks and components are revision-agnostic. Migrating a chain to v0.0.7 = flip its map entry.
0 commit comments