v1.11.0
@ensnode/datasources@1.11.0
Minor Changes
- #2036
43d8a9bThanks @shrugs! - Update sepolia-v2 namespace to point to the most recent Sepolia V2 deployment on the virtual Sepolia chain.
Patch Changes
- #2049
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
- Updated dependencies [
43d8a9b,824d819,6173160,92ca54f,7e77c5c,0d8a4b4,0e7c601,0e7c601,0e7c601,6173160]:- @ensnode/ensnode-sdk@1.11.0
- enssdk@1.11.0
@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().- Old per-record read/write methods removed.
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
- enssdk@1.11.0
@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.- Removed:
getEthnamesSubregistryId,getEthnamesSubregistryManagedName,getBasenamesSubregistryId,getBasenamesSubregistryManagedName,getLineanamesSubregistryId,getLineanamesSubregistryManagedName. - Added:
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). - Added:
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. - Added:
getENSv1RootRegistryId(namespace).
- Removed:
-
#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
- Updated dependencies [
5729ac1,92ca54f,7e77c5c,43d8a9b,6173160]:- @ensnode/datasources@1.11.0
- enssdk@1.11.0
@ensnode/ensrainbow-sdk@1.11.0
Minor Changes
-
#2056
0e7c601Thanks @shrugs! - Breaking: Updated core data models.EnsRainbowApiClientOptions: renamedlabelSet→clientLabelSet.EnsRainbowPublicConfig:- Replaced
version: stringwithversionInfo: EnsRainbowVersionInfo. - Renamed
labelSet→serverLabelSet. - Removed
recordsCount.
- Replaced
-
#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
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
@ensnode/ensnode-react@1.11.0
Patch Changes
- Updated dependencies [
43d8a9b,824d819,6173160,92ca54f,7e77c5c,0d8a4b4,0e7c601,0e7c601,0e7c601,6173160]:- @ensnode/ensnode-sdk@1.11.0
- enssdk@1.11.0
@namehash/namehash-ui@1.11.0
Patch Changes
- Updated dependencies [
43d8a9b,824d819,5729ac1,6173160,92ca54f,7e77c5c,0d8a4b4,0e7c601,0e7c601,0e7c601,43d8a9b,6173160]:- @ensnode/ensnode-sdk@1.11.0
- @ensnode/datasources@1.11.0
- enssdk@1.11.0
- @ensnode/ensnode-react@1.11.0
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]:- @ensnode/ensnode-sdk@1.11.0
- @ensnode/datasources@1.11.0
- enssdk@1.11.0
- @ensnode/ensnode-react@1.11.0
- @namehash/namehash-ui@1.11.0
- @ensnode/scalar-react@0.0.0
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]:- @namehash/ens-referrals@1.11.0
- @ensnode/ensnode-sdk@1.11.0
- @ensnode/datasources@1.11.0
- @ensnode/ensdb-sdk@1.11.0
- enssdk@1.11.0
- @ensnode/ponder-subgraph@1.11.0
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 #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]:- @ensnode/ensnode-sdk@1.11.0
- @ensnode/datasources@1.11.0
- @ensnode/ensdb-sdk@1.11.0
- enssdk@1.11.0
- @ensnode/ensrainbow-sdk@1.11.0
- @ensnode/ponder-sdk@1.11.0
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 #2020).- The entrypoint command now builds the
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. - After the background bootstrap finishes, ENSRainbow verifies that the on-disk database's stored label set (
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.
- The entrypoint command now builds the
-
#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.- New
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. - 503 responses for API routes during bootstrap:
/v1/heal,/v1/labels/count, and/v1/configreturn a structuredServiceUnavailableError(errorCode: 503) until the database is ready. - New Docker entrypoint: the container now runs
pnpm run entrypointfrom theapps/ensrainbowworking directory (implemented in Node viatsx src/cli.ts entrypoint), which replacesscripts/entrypoint.shand thenetcatworkaround. - Graceful shutdown during bootstrap: SIGTERM/SIGINT now abort an in-flight bootstrap. Spawned
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. - New
Patch Changes
- Updated dependencies [
43d8a9b,824d819,6173160,92ca54f,7e77c5c,0d8a4b4,0e7c601,0e7c601,0e7c601,0e7c601,0e7c601,6173160]:- @ensnode/ensnode-sdk@1.11.0
- enssdk@1.11.0
- @ensnode/ensrainbow-sdk@1.11.0
@docs/ensnode@1.11.0
Minor Changes
Patch Changes
-
#2056
0e7c601Thanks @shrugs! - Updated docs and CI test paths to reflect the newdocker/location ofdocker-compose.yml. -
Updated dependencies []:
- @namehash/namehash-ui@1.11.0
@ensnode/ensindexer-perf-testing@1.11.0
Minor Changes
- #1989
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
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]:- @ensnode/ensnode-sdk@1.11.0
- @ensnode/datasources@1.11.0
- @ensnode/ensdb-sdk@1.11.0
- @ensnode/shared-configs@1.11.0
fallback-ensapi@1.11.0
Patch Changes
- Updated dependencies [
43d8a9b,824d819,5729ac1,6173160,0d8a4b4,0e7c601,0e7c601,0e7c601,43d8a9b,6173160]:- @ensnode/ensnode-sdk@1.11.0
- @ensnode/datasources@1.11.0
@docs/ensrainbow@1.11.0
Patch Changes
- Updated dependencies []:
- @namehash/namehash-ui@1.11.0
@ensnode/enskit-react-example@0.0.3
Patch Changes
enscli@1.11.0
📦 NPM packages
- @ensnode/datasources@1.11.0
- @ensnode/ensdb-sdk@1.11.0
- enskit@1.11.0
- @ensnode/ensnode-react@1.11.0
- @ensnode/ensnode-sdk@1.11.0
- @ensnode/ensrainbow-sdk@1.11.0
- enssdk@1.11.0
- ensskills@1.11.0
- @ensnode/ponder-sdk@1.11.0
- @ensnode/ponder-subgraph@1.11.0
- enscli@1.11.0