Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Greptile SummaryThis is an automated Changesets release PR that bumps all packages to
Confidence Score: 5/5Safe to merge — all changes are mechanical version bumps and changelog entries generated by the Changesets action; no business logic is modified. Every changed file is either a deleted changeset stub, an appended CHANGELOG entry, a package version number increment, or a Docker/OpenAPI default tag update. No source code is touched. No files require special attention; all changes are auto-generated release artifacts. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
CS[43 Changeset files] -->|consumed by changesets action| REL[Release 1.11.0]
REL --> CL[CHANGELOG.md updates]
REL --> PKG[package.json version bumps\n1.10.1 → 1.11.0]
REL --> DOCK[Docker service YAMLs\ndefault tag → 1.11.0]
REL --> OAS[ensapi-openapi.json\nversion → 1.11.0]
PKG --> NPM[npm publish\nvia CI on merge]
Reviews (37): Last reviewed commit: "chore(release): version apps" | Re-trigger Greptile |
8c08124 to
951bd5d
Compare
951bd5d to
84e86f5
Compare
| "name": "@ensnode/ensnode-sdk", | ||
| "version": "1.10.1", | ||
| "version": "1.11.0", | ||
| "type": "module", |
There was a problem hiding this comment.
Breaking changes shipped as a minor bump
The CHANGELOG for @ensnode/ensnode-sdk@1.11.0 explicitly marks changes as Breaking — labelSet → clientLabelSet rename and recordsCount removal — yet the bump is minor (1.10.1 → 1.11.0). Both packages are at 1.x.x and publicly published, so semver requires a major bump (2.0.0) for breaking API changes. Consumers relying on the removed or renamed fields will silently break without any version-range signal to warn them.
| "name": "@ensnode/ensrainbow-sdk", | ||
| "version": "1.10.1", | ||
| "version": "1.11.0", | ||
| "type": "module", |
There was a problem hiding this comment.
Breaking changes shipped as a minor bump
Same issue as @ensnode/ensnode-sdk: @ensnode/ensrainbow-sdk@1.11.0 also contains the breaking EnsRainbowPublicConfig changes (versionInfo replacing version: string, serverLabelSet rename, recordsCount removal) yet bumps minor instead of major. This violates semver for a public 1.x.x package and will silently break consumers.
84e86f5 to
462a433
Compare
462a433 to
408a21e
Compare
408a21e to
ac1d0ba
Compare
ac1d0ba to
4b27d58
Compare
|
|
||
| ### Breaking schema + id format changes | ||
| - `ENSv1DomainId` is now CAIP-shaped: `${ENSv1RegistryId}/${node}` (was `Node`). Every ENSv1 Domain is addressable through a concrete Registry, so bare `node` values no longer identify a Domain by themselves. | ||
| - `RegistryId` is a union of `ENSv1RegistryId`, `ENSv1VirtualRegistryId`, and `ENSv2RegistryId`. New id constructors: `makeENSv1RegistryId`, `makeENSv2RegistryId`, `makeENSv1VirtualRegistryId`, and `makeConcreteRegistryId` (returns `ENSv1RegistryId | ENSv2RegistryId` for callsites that only need to address a concrete Registry contract). `makeENSv1DomainId` now takes `(AccountId, Node)`. | ||
| - `domains` table: replaces `v1_domains` + `v2_domains`. Adds `type`, nullable `tokenId` (non-null iff ENSv2), nullable `node` (non-null iff ENSv1), nullable `rootRegistryOwnerId` (v1 only). `parentId` removed; parent relationships flow through `registryCanonicalDomain` for both v1 and v2. | ||
| - `registries` table: adds `type` enum column and nullable `node` (non-null iff `ENSv1VirtualRegistry`). Unique `(chainId, address)` index becomes a plain index so virtual Registries can share their concrete parent's `(chainId, address)`. | ||
| - `registryCanonicalDomain.domainId` is typed as the unified `DomainId`. | ||
|
|
||
| ### GraphQL | ||
| - `Registry` becomes a GraphQL interface with `ENSv1Registry`, `ENSv1VirtualRegistry`, and `ENSv2Registry` implementations. `ENSv1VirtualRegistry` exposes `node: Node!`. | ||
| - `Domain` interface gains `parent: Domain` (resolved via the canonical-path dataloader); `ENSv1Domain` exposes `node: Node!` and `rootRegistryOwner`; `ENSv2Domain` exposes `tokenId`, `registry`, `subregistry`, `permissions`. | ||
| - `Query.registry(by: { contract })` now DB-looks up the concrete Registry by `(chainId, address, type IN (ENSv1Registry, ENSv2Registry))`. Virtual Registries are not addressable via `AccountId` alone. | ||
|
|
||
| ### Patch Changes | ||
|
|
There was a problem hiding this comment.
Breaking changes in
enssdk and @ensnode/ensdb-sdk also shipped as minor bumps
The unified-domain-model.md changeset explicitly labels its changes as Breaking for both enssdk and @ensnode/ensdb-sdk — ENSv1DomainId shape change (Node → ${ENSv1RegistryId}/${node}), makeENSv1DomainId signature change, v1_domains/v2_domains tables replaced by a unified domains table, and parentId removed — yet both packages are bumped minor (1.10.1 → 1.11.0). Neither package has "private": true, so semver requires a major bump for breaking API changes affecting external consumers. The same pattern affects packages/enssdk/CHANGELOG.md.
d290025 to
f35133c
Compare
f35133c to
1b009b4
Compare
1b009b4 to
0d6bcab
Compare
0d6bcab to
a6ed9f7
Compare
a6ed9f7 to
0b12ff6
Compare
0b12ff6 to
f85dff7
Compare
f85dff7 to
ae3f0fd
Compare
Releases: @namehash/ens-referrals@1.11.0 ensadmin@1.11.0 ensindexer@1.11.0 @ensnode/ensnode-sdk@1.11.0 @docs/ensnode@1.11.0 @ensnode/integration-test-env@1.11.0 @ensnode/datasources@1.11.0 @ensnode/ensdb-sdk@1.11.0 ensrainbow@1.11.0 enssdk@1.11.0 ensapi@1.11.0 @ensnode/ensrainbow-sdk@1.11.0 @ensnode/ensindexer-perf-testing@1.11.0 fallback-ensapi@1.11.0 @ensnode/ensnode-react@1.11.0 @namehash/namehash-ui@1.11.0 @ensnode/enskit-react-example@0.0.3 enskit@1.11.0 @docs/ensrainbow@1.11.0 enscli@1.11.0 ensskills@1.11.0 @ensnode/ponder-sdk@1.11.0 @ensnode/ponder-subgraph@1.11.0 @ensnode/shared-configs@1.11.0 [skip ci]
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@ensnode/datasources@1.11.0
Minor Changes
43d8a9bThanks @shrugs! - Update sepolia-v2 namespace to point to the most recent Sepolia V2 deployment on the virtual Sepolia chain.Patch Changes
5729ac1Thanks @shrugs! - RemovedLegacyEthRegistrarController,WrappedEthRegistrarController, andUniversalRegistrarRenewalWithReferrerplaceholder entries from thesepolia-v2namespace, andUniversalRegistrarRenewalWithReferrerfromens-test-env.AnyRegistrarControllerABInow also includes theUniversalRegistrarRenewalWithReferrerABI.@namehash/ens-referrals@1.11.0
Minor Changes
#1986
aa26180Thanks @Goader! - AddBaseReferralProgramEditionConfigas the shared parent ofReferralProgramEditionConfigandBaseReferralProgramEditionSummary.#1986
aa26180Thanks @Goader! - Expose the per-award-model (pie-split,rev-share-cap) Zod schemas via@namehash/ens-referrals/internal.#1986
aa26180Thanks @Goader! - Reject overlapping referral program editions: for a givensubregistryId, no two editions may share any point in time.Patch Changes
43d8a9b,824d819,6173160,92ca54f,7e77c5c,0d8a4b4,0e7c601,0e7c601,0e7c601,6173160]:@ensnode/ensdb-sdk@1.11.0
Minor Changes
#2016
7e77c5cThanks @shrugs! -migrated_nodesrenamed tomigrated_nodes_by_parentand re-keyed by composite(parentNode, labelHash)to match the payload ofENSv1Registry(Old)#NewOwnerevents. New siblingmigrated_nodes_by_nodekeyed solely bynodefor the threeENSv1RegistryOldhandlers (Transfer/NewTTL/NewResolver) that emit onlynode. Both rows are written together by the migration helper so each read site addresses whichever key matches its event payload. Schema definitions live in a newmigrated-nodes.schema.ts.#2056
0e7c601Thanks @shrugs! - IntroducedIndexingMetadataContextas a single record type in the ENSNode Metadata table, replacing three separate record types (ensdb_version,ensindexer_public_config,ensindexer_indexing_status).EnsDbReader: addedgetIndexingMetadataContext(),isHealthy(),isReady().EnsDbWriter: addedupsertIndexingMetadataContext().EnsNodeMetadataKeysreduced to a singleIndexingMetadataContextkey.#1983
6173160Thanks @shrugs! - Unifyv1Domain+v2Domaininto a single polymorphicdomaintable discriminated by atypeenum ("ENSv1Domain"|"ENSv2Domain"), and make Registry polymorphic across concrete ENSv1 (mainnet Registry, Basenames Registry, Lineanames Registry), ENSv1 Virtual (per-parent-domain virtual Registry managed by each ENSv1 domain that has children), and ENSv2 Registries.Breaking schema + id format changes
ENSv1DomainIdis now a dash-delimited tuple:${ENSv1RegistryId}-${node}(wasNode). Every ENSv1 Domain is addressable through a concrete Registry, so barenodevalues no longer identify a Domain by themselves.RegistryIdis a union ofENSv1RegistryId,ENSv1VirtualRegistryId, andENSv2RegistryId. New id constructors:makeENSv1RegistryId,makeENSv2RegistryId,makeENSv1VirtualRegistryId, andmakeConcreteRegistryId(returnsENSv1RegistryId | ENSv2RegistryIdfor callsites that only need to address a concrete Registry contract).makeENSv1DomainIdnow takes(AccountId, Node).domainstable: replacesv1_domains+v2_domains. Addstype, nullabletokenId(non-null iff ENSv2), nullablenode(non-null iff ENSv1), nullablerootRegistryOwnerId(v1 only).parentIdremoved; parent relationships flow throughregistryCanonicalDomainfor both v1 and v2.registriestable: addstypeenum column and nullablenode(non-null iffENSv1VirtualRegistry). Unique(chainId, address)index becomes a plain index so virtual Registries can share their concrete parent's(chainId, address).registryCanonicalDomain.domainIdis typed as the unifiedDomainId.GraphQL
Registrybecomes a GraphQL interface withENSv1Registry,ENSv1VirtualRegistry, andENSv2Registryimplementations.ENSv1VirtualRegistryexposesnode: Node!.Domaininterface gainsparent: Domain(resolved via the canonical-path dataloader);ENSv1Domainexposesnode: Node!androotRegistryOwner;ENSv2DomainexposestokenId,registry,subregistry,permissions.Query.registry(by: { contract })now DB-looks up the concrete Registry by(chainId, address, type IN (ENSv1Registry, ENSv2Registry)). Virtual Registries are not addressable viaAccountIdalone.Patch Changes
#1996
c186ad8Thanks @tk-o! - MadeEnsDbWriter.migrateEnsNodeSchemarace-condition safe.Updated dependencies [
43d8a9b,824d819,6173160,92ca54f,7e77c5c,0d8a4b4,0e7c601,0e7c601,0e7c601,6173160]:@ensnode/ensnode-sdk@1.11.0
Minor Changes
#2036
43d8a9bThanks @shrugs! - Replaces the flatDEVNET_DEPLOYER/DEVNET_OWNER/DEVNET_USER/DEVNET_USER2constants exported from@ensnode/ensnode-sdk/internalwith a singleDevnetAccountsobject that groups each account'saddressandresolver. Consumers must migrate toDevnetAccounts.{deployer,owner,user,user2}.{address,resolver}.#2017
824d819Thanks @Goader! - Add$ENS Tokensas a supported currency in@ensnode/ensnode-sdk:CurrencyIds.ENSTokens,PriceEnsTokens/SerializedPriceEnsTokenstypes, and thepriceEnsTokens,parseEnsTokens,serializePriceEnsTokens,deserializePriceEnsTokenshelpers.#1983
6173160Thanks @shrugs! - Centralized Managed Name and Root Registry helpers.getEthnamesSubregistryId,getEthnamesSubregistryManagedName,getBasenamesSubregistryId,getBasenamesSubregistryManagedName,getLineanamesSubregistryId,getLineanamesSubregistryManagedName.getManagedName(namespace, contract)— given any contract in the ENSv1 ecosystem, returns its Managed Name, namehash, and concrete ENSv1 Registry. Replaces the per-plugin helpers above. Also exposesisNameWrapper(namespace, contract).getRootRegistryId(namespace)returns the namespace's primary Root Registry (prefers ENSv2 when defined).getRootRegistryIds(namespace)returns every top-level Root Registry — concrete ENSv1 Root, Basenames/Lineanamesbase.eth/linea.ethENSv1VirtualRegistries, and the ENSv2 Root when defined — for consumers that walk the full canonical-set tree.getENSv1RootRegistryId(namespace).#1988
0d8a4b4Thanks @tk-o! - Introduced a set of "stack info" data models:EnsIndexerStackInfo,EnsNodeStackInfo.#2056
0e7c601Thanks @shrugs! - AddedEnsIndexerStackInfoas a base type; refactoredEnsNodeStackInfoto extend it.#2056
0e7c601Thanks @shrugs! - Breaking:EnsIndexerPublicConfig: renamedlabelSet→clientLabelSet.#2056
0e7c601Thanks @shrugs! - AddedreplaceBigInts(sourced from@ponder/utils) andtoJsonhelpers to@ensnode/ensnode-sdk.toJsontakes an options object ({ pretty?: boolean }) withprettydefaulting tofalse— pass{ pretty: true }for indented output.#1983
6173160Thanks @shrugs! - Unifyv1Domain+v2Domaininto a single polymorphicdomaintable discriminated by atypeenum ("ENSv1Domain"|"ENSv2Domain"), and make Registry polymorphic across concrete ENSv1 (mainnet Registry, Basenames Registry, Lineanames Registry), ENSv1 Virtual (per-parent-domain virtual Registry managed by each ENSv1 domain that has children), and ENSv2 Registries.Breaking schema + id format changes
ENSv1DomainIdis now a dash-delimited tuple:${ENSv1RegistryId}-${node}(wasNode). Every ENSv1 Domain is addressable through a concrete Registry, so barenodevalues no longer identify a Domain by themselves.RegistryIdis a union ofENSv1RegistryId,ENSv1VirtualRegistryId, andENSv2RegistryId. New id constructors:makeENSv1RegistryId,makeENSv2RegistryId,makeENSv1VirtualRegistryId, andmakeConcreteRegistryId(returnsENSv1RegistryId | ENSv2RegistryIdfor callsites that only need to address a concrete Registry contract).makeENSv1DomainIdnow takes(AccountId, Node).domainstable: replacesv1_domains+v2_domains. Addstype, nullabletokenId(non-null iff ENSv2), nullablenode(non-null iff ENSv1), nullablerootRegistryOwnerId(v1 only).parentIdremoved; parent relationships flow throughregistryCanonicalDomainfor both v1 and v2.registriestable: addstypeenum column and nullablenode(non-null iffENSv1VirtualRegistry). Unique(chainId, address)index becomes a plain index so virtual Registries can share their concrete parent's(chainId, address).registryCanonicalDomain.domainIdis typed as the unifiedDomainId.GraphQL
Registrybecomes a GraphQL interface withENSv1Registry,ENSv1VirtualRegistry, andENSv2Registryimplementations.ENSv1VirtualRegistryexposesnode: Node!.Domaininterface gainsparent: Domain(resolved via the canonical-path dataloader);ENSv1Domainexposesnode: Node!androotRegistryOwner;ENSv2DomainexposestokenId,registry,subregistry,permissions.Query.registry(by: { contract })now DB-looks up the concrete Registry by(chainId, address, type IN (ENSv1Registry, ENSv2Registry)). Virtual Registries are not addressable viaAccountIdalone.Patch Changes
5729ac1,92ca54f,7e77c5c,43d8a9b,6173160]:@ensnode/ensrainbow-sdk@1.11.0
Minor Changes
#2056
0e7c601Thanks @shrugs! - Breaking: Updated core data models.EnsRainbowApiClientOptions: renamedlabelSet→clientLabelSet.EnsRainbowPublicConfig:version: stringwithversionInfo: EnsRainbowVersionInfo.labelSet→serverLabelSet.recordsCount.#2056
0e7c601Thanks @shrugs! - AddedEnsRainbowApiClient.ready(), plusEnsRainbow.ReadyResponse/EnsRainbow.ServiceUnavailableErrortypes andErrorCode.ServiceUnavailable. The client now throws a typedEnsRainbowHttpError(with structuredstatus/statusTextproperties) fromready(),health(), andconfig()whenever the service responds with a non-2xx HTTP status, so callers can branch their retry/abort logic on the status without parsing message strings.Patch Changes
92ca54f,7e77c5c,6173160]:enssdk@1.11.0
Minor Changes
#2050
92ca54fThanks @shrugs! - AddbeautifyInterpretedName(name: InterpretedName): BeautifiedNamefor converting an InterpretedName into a UI-presentable Name, plus a newBeautifiedNamenominally-typed alias. Each label is either preserved verbatim (Encoded LabelHashes) or passed throughens_beautify(normalized labels), so e.g."♾♾♾♾.eth"renders as"♾️♾️♾️♾️.eth". The brandedBeautifiedNamereturn type prevents the result from being passed to APIs that expect anInterpretedName— continue to use the source InterpretedName for navigation targets and lookups.#2016
7e77c5cThanks @shrugs! - Switch composite ids to dash-delimited tuples so Ponder's profile-pattern matcher can decompose them and prefetch hot tables.Every id constructor (
makeENSv1RegistryId,makeENSv2RegistryId,makeENSv1VirtualRegistryId,makeConcreteRegistryId,makeResolverId,makeENSv1DomainId,makeENSv2DomainId,makePermissionsId,makePermissionsResourceId,makePermissionsUserId,makeResolverRecordsId,makeRegistrationId,makeRenewalId) now joins its components with-instead of CAIP-style mixed://delimiters.makeENSv2DomainIdno longer wraps the registry contract in CAIP-19 ERC1155 form since the registry already namespaces it. Ponder's matcher only does single-level string-delimiter splits, so the unified-tuple is the shape it can decompose to derive prefetch lookup keys from event args.#1983
6173160Thanks @shrugs! - Unifyv1Domain+v2Domaininto a single polymorphicdomaintable discriminated by atypeenum ("ENSv1Domain"|"ENSv2Domain"), and make Registry polymorphic across concrete ENSv1 (mainnet Registry, Basenames Registry, Lineanames Registry), ENSv1 Virtual (per-parent-domain virtual Registry managed by each ENSv1 domain that has children), and ENSv2 Registries.Breaking schema + id format changes
ENSv1DomainIdis now a dash-delimited tuple:${ENSv1RegistryId}-${node}(wasNode). Every ENSv1 Domain is addressable through a concrete Registry, so barenodevalues no longer identify a Domain by themselves.RegistryIdis a union ofENSv1RegistryId,ENSv1VirtualRegistryId, andENSv2RegistryId. New id constructors:makeENSv1RegistryId,makeENSv2RegistryId,makeENSv1VirtualRegistryId, andmakeConcreteRegistryId(returnsENSv1RegistryId | ENSv2RegistryIdfor callsites that only need to address a concrete Registry contract).makeENSv1DomainIdnow takes(AccountId, Node).domainstable: replacesv1_domains+v2_domains. Addstype, nullabletokenId(non-null iff ENSv2), nullablenode(non-null iff ENSv1), nullablerootRegistryOwnerId(v1 only).parentIdremoved; parent relationships flow throughregistryCanonicalDomainfor both v1 and v2.registriestable: addstypeenum column and nullablenode(non-null iffENSv1VirtualRegistry). Unique(chainId, address)index becomes a plain index so virtual Registries can share their concrete parent's(chainId, address).registryCanonicalDomain.domainIdis typed as the unifiedDomainId.GraphQL
Registrybecomes a GraphQL interface withENSv1Registry,ENSv1VirtualRegistry, andENSv2Registryimplementations.ENSv1VirtualRegistryexposesnode: Node!.Domaininterface gainsparent: Domain(resolved via the canonical-path dataloader);ENSv1Domainexposesnode: Node!androotRegistryOwner;ENSv2DomainexposestokenId,registry,subregistry,permissions.Query.registry(by: { contract })now DB-looks up the concrete Registry by(chainId, address, type IN (ENSv1Registry, ENSv2Registry)). Virtual Registries are not addressable viaAccountIdalone.enskit@1.11.0
Patch Changes
92ca54f,7e77c5c,6173160]:@ensnode/ensnode-react@1.11.0
Patch Changes
43d8a9b,824d819,6173160,92ca54f,7e77c5c,0d8a4b4,0e7c601,0e7c601,0e7c601,6173160]:@namehash/namehash-ui@1.11.0
Patch Changes
43d8a9b,824d819,5729ac1,6173160,92ca54f,7e77c5c,0d8a4b4,0e7c601,0e7c601,0e7c601,43d8a9b,6173160]:ensskills@1.11.0
@ensnode/ponder-sdk@1.11.0
@ensnode/ponder-subgraph@1.11.0
ensadmin@1.11.0
Minor Changes
#1988
0d8a4b4Thanks @tk-o! - Removed Records Count info from the ENSRainbow card UI on the Connection page.#1988
0d8a4b4Thanks @tk-o! - RenamedENSNodeConfig*components to follow theEnsNodeStackInfo*pattern.Patch Changes
#2001
7c1c048Thanks @notrab! - Fix ENSAdmin GraphiQL docs sidebar failing to stay open on the omnigraph page. The editor now memoizes its fetcher, storage, and plugins so 1Hz parent re-renders (driven by the realtime indexing-status projection) no longer trigger schema re-introspection.#1951
c56e32cThanks @notrab! - Introduced interactive REST API Reference playground (/api/rest) powered by Scalar, enabling discovery and testing of all REST APIs published by a connected ENSApi instance. Added@ensnode/scalar-reactwrapper package.Updated dependencies [
43d8a9b,824d819,5729ac1,6173160,92ca54f,7e77c5c,0d8a4b4,0e7c601,0e7c601,0e7c601,43d8a9b,6173160]:ensapi@1.11.0
Minor Changes
#2014
6bd4154Thanks @shrugs! - Adds HCA-awareEvent.senderto the Omnigraph API alongside the existingEvent.from. For ENSv2 events that emit an explicitsender/owner/account/ERC1155operatorargument,Event.senderis set from that argument (the HCA Smart Account address, if used) and falls back totx.fromotherwise. Adds asenderfilter toEventsWhereInput.Account.eventsnow filters bysender(HCA-aware) instead oftx.from. Documents HCA-aware semantics onDomain.owner,Registration.registrant/unregistrant, and*.PermissionsUser.user.#2056
0e7c601Thanks @shrugs! -indexing-status.cacheandstack-info.cacheupdated to consume the newIndexingMetadataContextrecord. Config schema updated to fetchEnsIndexerPublicConfigfromEnsNodeStackInfo.#2007
e40ce8fThanks @shrugs! - AddsPermissionsUser.eventsto the Omnigraph API, exposing the per-role-assignment event history (grants, revokes, role-bitmap mutations) for a specific(contract, resource, user)tuple.#1983
6173160Thanks @shrugs! -Query.rootis now non-null and returns the namespace's Root Registry — preferring the ENSv2 Root Registry when defined, falling back to the ENSv1 Root Registry.#2021
6824f35Thanks @tk-o! - Integrated ENSDb health check and readiness check into ENSApi/healthand/readyendpoints.#1983
6173160Thanks @shrugs! - Unifyv1Domain+v2Domaininto a single polymorphicdomaintable discriminated by atypeenum ("ENSv1Domain"|"ENSv2Domain"), and make Registry polymorphic across concrete ENSv1 (mainnet Registry, Basenames Registry, Lineanames Registry), ENSv1 Virtual (per-parent-domain virtual Registry managed by each ENSv1 domain that has children), and ENSv2 Registries.Breaking schema + id format changes
ENSv1DomainIdis now a dash-delimited tuple:${ENSv1RegistryId}-${node}(wasNode). Every ENSv1 Domain is addressable through a concrete Registry, so barenodevalues no longer identify a Domain by themselves.RegistryIdis a union ofENSv1RegistryId,ENSv1VirtualRegistryId, andENSv2RegistryId. New id constructors:makeENSv1RegistryId,makeENSv2RegistryId,makeENSv1VirtualRegistryId, andmakeConcreteRegistryId(returnsENSv1RegistryId | ENSv2RegistryIdfor callsites that only need to address a concrete Registry contract).makeENSv1DomainIdnow takes(AccountId, Node).domainstable: replacesv1_domains+v2_domains. Addstype, nullabletokenId(non-null iff ENSv2), nullablenode(non-null iff ENSv1), nullablerootRegistryOwnerId(v1 only).parentIdremoved; parent relationships flow throughregistryCanonicalDomainfor both v1 and v2.registriestable: addstypeenum column and nullablenode(non-null iffENSv1VirtualRegistry). Unique(chainId, address)index becomes a plain index so virtual Registries can share their concrete parent's(chainId, address).registryCanonicalDomain.domainIdis typed as the unifiedDomainId.GraphQL
Registrybecomes a GraphQL interface withENSv1Registry,ENSv1VirtualRegistry, andENSv2Registryimplementations.ENSv1VirtualRegistryexposesnode: Node!.Domaininterface gainsparent: Domain(resolved via the canonical-path dataloader);ENSv1Domainexposesnode: Node!androotRegistryOwner;ENSv2DomainexposestokenId,registry,subregistry,permissions.Query.registry(by: { contract })now DB-looks up the concrete Registry by(chainId, address, type IN (ENSv1Registry, ENSv2Registry)). Virtual Registries are not addressable viaAccountIdalone.Patch Changes
#2056
0e7c601Thanks @shrugs! - Migrated to@ensnode/ensnode-sdk'sreplaceBigInts/toJsonhelpers. Dropped the direct@ponder/utilsdependency fromensapi.Updated dependencies [
aa26180,43d8a9b,824d819,5729ac1,7e77c5c,6173160,92ca54f,7e77c5c,0d8a4b4,0e7c601,0e7c601,0e7c601,aa26180,0e7c601,aa26180,43d8a9b,c186ad8,6173160]:ensindexer@1.11.0
Minor Changes
#2036
43d8a9bThanks @shrugs! - Updates ens-test-env devnet commit to580c60a.#2056
0e7c601Thanks @shrugs! - Consolidated startup init intoinitIndexingOnchainEvents()for reliable execution on every ENSIndexer startup. AddedIndexingMetadataContextBuilderandStackInfoBuilder.EnsDbWriterWorkersimplified to a single recurring task. The HTTP/configand/indexing-statusendpoints now read from in-memory builders instead of ENSDb.initializeIndexingSetup/initializeIndexingActivationreplaced byinitIndexingOnchainEvents.#1983
6173160Thanks @shrugs! - Unifyv1Domain+v2Domaininto a single polymorphicdomaintable discriminated by atypeenum ("ENSv1Domain"|"ENSv2Domain"), and make Registry polymorphic across concrete ENSv1 (mainnet Registry, Basenames Registry, Lineanames Registry), ENSv1 Virtual (per-parent-domain virtual Registry managed by each ENSv1 domain that has children), and ENSv2 Registries.Breaking schema + id format changes
ENSv1DomainIdis now a dash-delimited tuple:${ENSv1RegistryId}-${node}(wasNode). Every ENSv1 Domain is addressable through a concrete Registry, so barenodevalues no longer identify a Domain by themselves.RegistryIdis a union ofENSv1RegistryId,ENSv1VirtualRegistryId, andENSv2RegistryId. New id constructors:makeENSv1RegistryId,makeENSv2RegistryId,makeENSv1VirtualRegistryId, andmakeConcreteRegistryId(returnsENSv1RegistryId | ENSv2RegistryIdfor callsites that only need to address a concrete Registry contract).makeENSv1DomainIdnow takes(AccountId, Node).domainstable: replacesv1_domains+v2_domains. Addstype, nullabletokenId(non-null iff ENSv2), nullablenode(non-null iff ENSv1), nullablerootRegistryOwnerId(v1 only).parentIdremoved; parent relationships flow throughregistryCanonicalDomainfor both v1 and v2.registriestable: addstypeenum column and nullablenode(non-null iffENSv1VirtualRegistry). Unique(chainId, address)index becomes a plain index so virtual Registries can share their concrete parent's(chainId, address).registryCanonicalDomain.domainIdis typed as the unifiedDomainId.GraphQL
Registrybecomes a GraphQL interface withENSv1Registry,ENSv1VirtualRegistry, andENSv2Registryimplementations.ENSv1VirtualRegistryexposesnode: Node!.Domaininterface gainsparent: Domain(resolved via the canonical-path dataloader);ENSv1Domainexposesnode: Node!androotRegistryOwner;ENSv2DomainexposestokenId,registry,subregistry,permissions.Query.registry(by: { contract })now DB-looks up the concrete Registry by(chainId, address, type IN (ENSv1Registry, ENSv2Registry)). Virtual Registries are not addressable viaAccountIdalone.Patch Changes
#2049
5729ac1Thanks @shrugs! - Fixed a bug inensv2plugin where onlyUnwrappedEthRegistrarControllerwas indexed;LegacyEthRegistrarControllerandWrappedEthRegistrarControllerwere silently dropped. Fixes ENSv2 plugin silently overrides RegistrarController address per chain #2048.#2056
0e7c601Thanks @shrugs! -waitForEnsRainbowToBeReadynow polls/ready(viaensRainbowClient.ready()) instead of/health, so it correctly waits for the database to finish bootstrapping. It also aborts retries immediately on non-503 HTTP responses (e.g.404from a misconfiguredENSRAINBOW_URL,500from a broken instance) instead of blocking startup for ~1h, while still retrying on503 Service Unavailableand on transient network errors.#2056
0e7c601Thanks @shrugs! - Migrated to@ensnode/ensnode-sdk'sreplaceBigInts/toJsonhelpers. Dropped the direct@ponder/utilsdependency fromensapi.#1989
16ecad1Thanks @shrugs! - ENSIndexer's ensv2 plugin now avoids attempting to heal addr.reverse subnames if they've already been healed.Updated dependencies [
43d8a9b,824d819,5729ac1,7e77c5c,6173160,92ca54f,7e77c5c,0d8a4b4,0e7c601,0e7c601,0e7c601,0e7c601,0e7c601,0e7c601,43d8a9b,c186ad8,6173160]:ensrainbow@1.11.0
Minor Changes
#2037
1db1637Thanks @djstrong! - ENSRainbow'sGET /v1/configis now available immediately at startup, removing the cold-start gap that previously forced downstream services (e.g. ENSIndexer) to wait for the entire database download/validation before they could read public config (issue Allow ENSRainbow clients to fetchEnsRainbowPublicConfigas soon as possible. #2020).EnsRainbowPublicConfigin-memory from its CLI/env arguments (LABEL_SET_ID,LABEL_SET_VERSION) before the HTTP server starts accepting requests, so/v1/configreturns200from the first request.labelSetIdandhighestLabelSetVersion) matches the configured one. On mismatch it logs a helpful error naming both the expected and actual label sets, refuses to serve, and terminates with exit code1./readycontinues to gate on full database readiness (200only after the database has been attached and the env-vs-DB validation has passed)./v1/heal/{labelhash}and/v1/labels/countcontinue to return503 Service Unavailablewhile the database is still bootstrapping./healthis unchanged and still returns200as soon as the HTTP server is listening.#2056
0e7c601Thanks @shrugs! - ENSRainbow now starts its HTTP server immediately and downloads/validates its database in the background, instead of blocking container startup behind a netcat placeholder.GET /readyendpoint: returns200 { status: "ok" }once the database is attached, or503 Service Unavailablewhile ENSRainbow is still bootstrapping./healthis now a pure liveness probe that succeeds as soon as the HTTP server is listening./v1/heal,/v1/labels/count, and/v1/configreturn a structuredServiceUnavailableError(errorCode: 503) until the database is ready.pnpm run entrypointfrom theapps/ensrainbowworking directory (implemented in Node viatsx src/cli.ts entrypoint), which replacesscripts/entrypoint.shand thenetcatworkaround.download/tarchild processes are terminated (SIGTERM → SIGKILL after a 5s grace period) and any partially-opened LevelDB handle is closed before the HTTP server and DB-backed server shut down, so the container exits promptly without leaking child processes or LevelDB locks.Migration: if you previously polled
GET /healthto gate traffic on database readiness, switch toGET /ready./healthis still available and still returns200, but it now indicates liveness only.Patch Changes
43d8a9b,824d819,6173160,92ca54f,7e77c5c,0d8a4b4,0e7c601,0e7c601,0e7c601,0e7c601,0e7c601,6173160]:@docs/ensnode@1.11.0
Minor Changes
#1942
2df3b45Thanks @tk-o! - Created docs for ENSDb.#2012
c4a39bbThanks @tk-o! - Added "Startup sequence" page to ENSIndexer docs.Patch Changes
#2056
0e7c601Thanks @shrugs! - Updated docs and CI test paths to reflect the newdocker/location ofdocker-compose.yml.Updated dependencies []:
@ensnode/ensindexer-perf-testing@1.11.0
Minor Changes
16ecad1Thanks @shrugs! - Introduces the ENSIndexer Performance Testing package for running a local Prometheus x Grafana stack against an ENSIndexer instance.@ensnode/integration-test-env@1.11.0
Minor Changes
0e7c601Thanks @shrugs! -pollIndexingStatusupdated to usegetIndexingMetadataContext().Patch Changes
#2056
0e7c601Thanks @shrugs! - Moveddocker-compose.ymlinto a separatedocker/directory.Updated dependencies [
43d8a9b,824d819,5729ac1,7e77c5c,6173160,0d8a4b4,0e7c601,0e7c601,0e7c601,0e7c601,43d8a9b,c186ad8,6173160]:fallback-ensapi@1.11.0
Patch Changes
43d8a9b,824d819,5729ac1,6173160,0d8a4b4,0e7c601,0e7c601,0e7c601,43d8a9b,6173160]:@docs/ensrainbow@1.11.0
Patch Changes
@ensnode/enskit-react-example@0.0.3
Patch Changes
92ca54f,7e77c5c,6173160]:enscli@1.11.0
@ensnode/shared-configs@1.11.0