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
Unified registration lifecycle tracking across all subregistries
(Ethnames .eth, Basenames .base.eth, Lineanames .linea.eth). Tracks
subregistry metadata, registration lifecycles, and logical registrar
actions that aggregate data from multiple events in the same transaction.
- Add 4 new schema entities (Subregistry, RegistrationLifecycle,
RegistrarAction, RegistrarActionMetadata) and RegistrarActionType enum
- Create registrar-helpers.ts with CAIP-10 ID generation, bytes32
referrer decoding, lifecycle management, and action aggregation
- Add UniversalRenewal contract (RenewalReferred event) on mainnet
- Merge registrar logic into existing BaseRegistrar + Controller
handlers across all 3 chains (17 events updated)
- Add transaction.from to BaseRegistrar field_selection for registrant
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@@ -38,7 +38,7 @@ The ENSNode Ponder indexer is a monorepo with **8 plugins** across **6 chains**
38
38
| 3b | Lineanames (Linea L2) | DONE | — |
39
39
| 3c | ThreeDNS (Optimism + Base) | DONE | — |
40
40
| 4 | Protocol Acceleration | DONE | — |
41
-
| 5 | Registrars |NOT STARTED | Medium|
41
+
| 5 | Registrars |DONE | —|
42
42
| 6 | TokenScope | NOT STARTED | Medium |
43
43
| 7 | ENSv2 | NOT STARTED | Low (future protocol) |
44
44
@@ -48,20 +48,20 @@ The ENSNode Ponder indexer is a monorepo with **8 plugins** across **6 chains**
48
48
49
49
### What's Done
50
50
51
-
The HyperIndex indexer covers the **Subgraph Plugin for Ethereum Mainnet** (Phase 1), **Basenames on Base L2** (Phase 3a), **Lineanames on Linea L2** (Phase 3b), **ThreeDNS on Optimism + Base** (Phase 3c), and the **Protocol Acceleration Plugin** (Phase 4):
51
+
The HyperIndex indexer covers the **Subgraph Plugin for Ethereum Mainnet** (Phase 1), **Basenames on Base L2** (Phase 3a), **Lineanames on Linea L2** (Phase 3b), **ThreeDNS on Optimism + Base** (Phase 3c), the **Protocol Acceleration Plugin** (Phase 4), and the **Registrars Plugin** (Phase 5):
52
52
53
53
-**6 chains**: Ethereum Mainnet (1), Base (8453), Linea (59144), Optimism (10), Arbitrum (42161), Scroll (534352)
54
-
-**20 contracts** configured in `config.yaml` (10 mainnet + 6 Base + 2 Linea + ThreeDNSToken shared + StandaloneReverseRegistrar across 5 chains, with Registry, Resolver, and NameWrapper reused cross-chain)
54
+
-**21 contracts** configured in `config.yaml` (11 mainnet + 6 Base + 2 Linea + ThreeDNSToken shared + StandaloneReverseRegistrar across 5 chains, with Registry, Resolver, and NameWrapper reused cross-chain)
-**~52 event types** handled (26 mainnet + 9 Base + 7 Linea + 4 ThreeDNS + 3 DNS record + 1 StandaloneReverseRegistrar + PA logic merged into existing handlers)
Unified registration lifecycle tracking across all subregistries (Ethnames, Basenames, Lineanames).
434
+
Unified registration lifecycle tracking across all subregistries (Ethnames, Basenames, Lineanames). Tracks subregistry metadata, registration lifecycles (current state per managed name), and "logical registrar actions" that aggregate data from multiple events in the same transaction (BaseRegistrar events + Controller events).
|`config.yaml`| Modified | Added UniversalRenewal contract definition + mainnet chain entry; added `from` to `transaction_fields` for all BaseRegistrar NameRegistered/NameRenewed events across mainnet, Base, and Linea |
460
+
|`abis/UniversalRegistrarRenewalWithReferrer.json`| Created | ABI for RenewalReferred event |
-`EAController_Base/RegController_Base/UpgController_Base.NameRegistered/NameRenewed` → `handleRegistrarControllerEvent()` with pricing=undefined (unknown per Ponder TODO)
-`EthController_Linea.OwnerNameRegistered/PohNameRegistered` → `handleRegistrarControllerEvent()` with baseCost=0, premium=0, total=0
486
+
-`EthController_Linea.NameRegistered` → `handleRegistrarControllerEvent()` with baseCost + premium
487
+
-`EthController_Linea.NameRenewed` → `handleRegistrarControllerEvent()` with cost
488
+
489
+
### Key Design Decisions
490
+
491
+
1.**Metadata singleton**: `RegistrarActionMetadata` entity with `id: "current"` replaces Ponder's `internal_registrarActionMetadata` singleton. Tracks which registrar action is being built across multiple events in the same TX.
492
+
2.**Pricing simplification**: Ponder uses complex `PriceEth` / `RegistrarActionPricingAvailable` types with currency wrappers. We store raw bigint amounts directly (all prices in Wei). `undefined` = pricing unknown (Basenames controllers).
493
+
3.**No CAIP dependency**: CAIP-10 formatting implemented inline (`eip155:{chainId}:{address}`) rather than importing the `caip` npm package.
494
+
4.**Event ordering assumption**: Within a block, events are processed in logIndex order. BaseRegistrar events precede Controller events in the same TX because BaseRegistrar fires first in the call chain. Critical for the metadata aggregation pattern.
495
+
5.**Referrer decoding**: Ported from `ensnode-sdk/src/registrars/encoded-referrer.ts` — validates left-zero-padding (first 12 bytes must be zeros), extracts last 20 bytes as checksummed address. Non-zero padding returns zero address.
496
+
6.**`transaction.from` requirement**: Added `from` to `transaction_fields` for BaseRegistrar events on all 3 chains. Used as the `registrant` field on RegistrarAction. Falls back to `zeroAddress` for TypeScript safety.
> The registrars plugin tracks the same BaseRegistrar/Controller events as the subgraph plugin but writes to different entities. Same merge/compose consideration as Phase 4.
514
+
> Like Phase 4 (Protocol Acceleration), registrar logic is **merged into existing handlers** via helper function calls appended after subgraph logic. This preserves zero changes to subgraph behavior while adding registrar functionality. All registrar helper functions live in `src/lib/registrar-helpers.ts`.
471
515
472
516
---
473
517
@@ -628,10 +672,10 @@ Next-generation ENS protocol with new registry and registrar contracts.
0 commit comments