About
This post contains our reporting requirement for the ENS Service Provider Program Season 3.
Each quarterly report is contained in this forum thread and will cover:
-
the current progress against the deliverables in our SPP3 application;
-
what’s planned for the next quarter, and;
-
any scope changes or challenges (if applicable).
Reports
For any questions, please contact us via email at jeff@goldsky.com or @jeffling on Telegram
Q3 2026 Report
This report covers our work on Unified ENS Indexing (our SPP3 scope).
Shipped
-
Hosted ENS API: A public REST endpoint at https://ens-api.goldsky.com. It serves ENS v1 and ENSv2 on Ethereum mainnet, and Basenames on Base, from one unified schema. The API reference and OpenAPI 3.1 document are available online.
-
ENS Streamling plugin: A Rust plugin for Streamling, the Goldsky streaming pipeline engine. It decodes ENS events and applies them to the current state of each name. It covers the ENS v1 registry, .eth registrar, three controller generations, NameWrapper, seven PublicResolver generations, and the classic and ENSIP-19 reverse registrars.
-
ENSv2 indexing on mainnet and Sepolia: The plugin discovers UserRegistry contracts from SubregistryUpdated events and resolvers from ResolverUpdated events. A discovered registry becomes canonical only when a proven parent links to it. This rule stops an arbitrary contract from injecting addresses into the watched set. The plugin also handles TokenRegenerated, ERC-1155 transfers, EACRolesChanged, payment token and cost fields, and BatchRegistrar premigration.
-
v1 to v2 migration handling: When ENSv2 registers a name, the v2 row replaces the v1 row. The v1 projector drops names that the migration Graveyard contract holds.
-
enstate-compatible routes: Available under /enstate. A client that uses enstate can change its base URL to switch to the hosted API.
-
Standards support: Primary names follow ENSIP-19, and name normalization follows ENSIP-15.
-
QA tooling (ens-qa): Parity checks against pinned reference data and graphql.ens.dev, live comparisons with direct chain reads, and latency and load benchmarks.
-
Self-hosting: An MIT license, a Docker Compose stack, systemd units, a self-hosting guide, and container images that CI publishes on each push to main.
Progress against SPP3 milestones
| Timing |
Deliverable |
Status |
Notes |
| Weeks 1–2 |
Pipeline ingests all v1 events and writes to any sink |
Completed |
|
| Weeks 1–2 |
Pipeline indexes ENSv2 on Sepolia with dynamic registry expansion |
Completed |
Includes the provenance rule for discovered registries. |
| Months 1–3 |
Name construction, migration detection, resolver tracking, API server, and migration compatibility verification |
Completed |
|
| Months 1–3 |
Unified REST API live on Sepolia and/or mainnet |
Completed |
Live on mainnet at ens-api.goldsky.com. |
| Months 1–3 |
GraphQL endpoint live |
To do |
Moved to next quarter. See “Scope changes and challenges” below. |
| Months 4–16 |
Hosted public endpoint with SLA commitment: 99.5% uptime and defined incident response |
In progress |
Endpoint is live. Uptime reporting starts next quarter. |
| Months 4–16 |
Mainnet launch support: BatchRegistrar burst processing, post-launch debugging, and ABI updates within 72 hours of notice |
In progress |
Premigration processing is live. We indexed the 23 October ENSv2 contracts the same day and the 26 October contracts on 28 October. |
| Months 4–16 |
Multi-chain deployment: Base, Linea, Optimism, Arbitrum, and Scroll |
In progress |
Base (Basenames) is live. The other four chains are to do. |
| Months 4–16 |
Open-source release of the plugin with documentation |
In progress |
Code will be MIT-licensed and documented. The repository is not yet public. |
Additional scope items
| Deliverable |
Status |
Notes |
| Event streams for realtime consumers |
To do |
|
| Archival data on R2 |
To do |
|
| Kubernetes Helm chart |
To do |
Docker Compose is done. |
ENSv2 resolver aliases (AliasChanged) |
To do |
One alias level through ParentUpdated works today. |
Planned for next quarter
- Make the repository public.
- Add the GraphQL endpoint.
- Publish uptime, parity, and latency results from the hosted endpoint.
- Measure indexing lag against the network head and report it in
/v2/status.
- Index
AliasChanged and recursive resolver aliases.
- Start the Linea, Optimism, Arbitrum, and Scroll deployments.
Scope changes and challenges
GraphQL
We built the REST API and the enstate-compatible routes first, because existing clients can use them without changes. The GraphQL endpoint moves to next quarter.
ENSv2 mainnet contract changes
ENS Labs deployed new ENSv2 mainnet contracts on 23 October and 26 October. We added each set of addresses to the index within the 72-hour target.
Pre-migration volume
Each BatchRegistrar premigration transaction reserves 50 names. The full set is about 310 MB of calldata, which is above the PostgreSQL jsonb limit of 256 MB. The pipeline does not store transaction input for ENSv2 mainnet, so it can process about 920,000 premigration reservations.
Known gaps
The indexer does not discover arbitrary custom resolvers. A full document of spec gaps is currently managed internally and will be made public shortly.
For any questions, please contact us at jeff@goldsky.com or @jeffling on Telegram.