@ensnode/ensdb-sdk 1.11.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -45,7 +45,15 @@ import { DomainId, RegistryId, InterpretedLabel, PermissionsId, PermissionsResou
45
45
  * `registryId` at the virtual registry. Concrete `ENSv1Registry` rows (e.g. the mainnet ENS Registry,
46
46
  * the Basenames Registry, the Lineanames Registry) sit at the top. ENSv2 namegraphs are rooted in
47
47
  * a single `ENSv2Registry` RootRegistry on the ENS Root Chain and are possibly circular directed
48
- * graphs. The canonical namegraph is never materialized, only _navigated_ at resolution-time.
48
+ * graphs. The full namegraph is never materialized, only _navigated_ at resolution-time, with the
49
+ * exception of the canonical subgraph, which is reflected via `Registry.canonical` /
50
+ * `Domain.canonical` boolean flags on the rows themselves. The bidirectional canonical edge is
51
+ * NOT materialized in a parallel table; it is derived on demand by checking that the two
52
+ * unidirectional pointers agree (`Registry.canonicalDomainId = Domain.id`
53
+ * ↔ `Domain.subregistryId = Registry.id`). Cascading canonicality flips through the subgraph
54
+ * run as either an in-memory PK update (when `Registry.__hasChildren = false`, the dominant case
55
+ * for fresh ENSv1 virtual registries on first wire-up) or a single recursive-CTE batch UPDATE
56
+ * otherwise (see `canonicality-db-helpers.ts`).
49
57
  *
50
58
  * Note also that the Protocol Acceleration plugin is a hard requirement for the ENSv2 plugin. This
51
59
  * allows us to rely on the shared logic for indexing:
@@ -701,6 +709,59 @@ declare const registry: ponder.OnchainTable<{
701
709
  }, {}, {
702
710
  $type: `0x${string}`;
703
711
  }>;
712
+ canonicalDomainId: ponder.PgColumn<{
713
+ name: "canonicalDomainId";
714
+ tableName: "registries";
715
+ dataType: "string";
716
+ columnType: "PgText";
717
+ data: DomainId;
718
+ driverParam: string;
719
+ notNull: false;
720
+ hasDefault: false;
721
+ isPrimaryKey: false;
722
+ isAutoincrement: false;
723
+ hasRuntimeDefault: false;
724
+ enumValues: [string, ...string[]];
725
+ baseColumn: never;
726
+ identity: undefined;
727
+ generated: undefined;
728
+ }, {}, {
729
+ $type: DomainId;
730
+ }>;
731
+ canonical: ponder.PgColumn<{
732
+ name: "canonical";
733
+ tableName: "registries";
734
+ dataType: "boolean";
735
+ columnType: "PgBoolean";
736
+ data: boolean;
737
+ driverParam: boolean;
738
+ notNull: true;
739
+ hasDefault: true;
740
+ isPrimaryKey: false;
741
+ isAutoincrement: false;
742
+ hasRuntimeDefault: false;
743
+ enumValues: undefined;
744
+ baseColumn: never;
745
+ identity: undefined;
746
+ generated: undefined;
747
+ }, {}, {}>;
748
+ __hasChildren: ponder.PgColumn<{
749
+ name: "__hasChildren";
750
+ tableName: "registries";
751
+ dataType: "boolean";
752
+ columnType: "PgBoolean";
753
+ data: boolean;
754
+ driverParam: boolean;
755
+ notNull: true;
756
+ hasDefault: true;
757
+ isPrimaryKey: false;
758
+ isAutoincrement: false;
759
+ hasRuntimeDefault: false;
760
+ enumValues: undefined;
761
+ baseColumn: never;
762
+ identity: undefined;
763
+ generated: undefined;
764
+ }, {}, {}>;
704
765
  };
705
766
  extra: {
706
767
  byChainAddress: drizzle_orm_pg_core.IndexBuilder;
@@ -886,6 +947,23 @@ declare const domain: ponder.OnchainTable<{
886
947
  }, {}, {
887
948
  $type: `0x${string}`;
888
949
  }>;
950
+ canonical: ponder.PgColumn<{
951
+ name: "canonical";
952
+ tableName: "domains";
953
+ dataType: "boolean";
954
+ columnType: "PgBoolean";
955
+ data: boolean;
956
+ driverParam: boolean;
957
+ notNull: true;
958
+ hasDefault: true;
959
+ isPrimaryKey: false;
960
+ isAutoincrement: false;
961
+ hasRuntimeDefault: false;
962
+ enumValues: undefined;
963
+ baseColumn: never;
964
+ identity: undefined;
965
+ generated: undefined;
966
+ }, {}, {}>;
889
967
  };
890
968
  extra: {
891
969
  byType: drizzle_orm_pg_core.IndexBuilder;
@@ -1847,52 +1925,6 @@ declare const label: ponder.OnchainTable<{
1847
1925
  declare const label_relations: drizzle_orm.Relations<"labels", {
1848
1926
  domains: drizzle_orm.Many<"domains">;
1849
1927
  }>;
1850
- declare const registryCanonicalDomain: ponder.OnchainTable<{
1851
- name: "registry_canonical_domains";
1852
- schema: undefined;
1853
- columns: {
1854
- registryId: ponder.PgColumn<{
1855
- name: "registryId";
1856
- tableName: "registry_canonical_domains";
1857
- dataType: "string";
1858
- columnType: "PgText";
1859
- data: RegistryId;
1860
- driverParam: string;
1861
- notNull: true;
1862
- hasDefault: false;
1863
- isPrimaryKey: true;
1864
- isAutoincrement: false;
1865
- hasRuntimeDefault: false;
1866
- enumValues: [string, ...string[]];
1867
- baseColumn: never;
1868
- identity: undefined;
1869
- generated: undefined;
1870
- }, {}, {
1871
- $type: RegistryId;
1872
- }>;
1873
- domainId: ponder.PgColumn<{
1874
- name: "domainId";
1875
- tableName: "registry_canonical_domains";
1876
- dataType: "string";
1877
- columnType: "PgText";
1878
- data: DomainId;
1879
- driverParam: string;
1880
- notNull: true;
1881
- hasDefault: false;
1882
- isPrimaryKey: false;
1883
- isAutoincrement: false;
1884
- hasRuntimeDefault: false;
1885
- enumValues: [string, ...string[]];
1886
- baseColumn: never;
1887
- identity: undefined;
1888
- generated: undefined;
1889
- }, {}, {
1890
- $type: DomainId;
1891
- }>;
1892
- };
1893
- extra: undefined;
1894
- dialect: "pg";
1895
- }>;
1896
1928
 
1897
1929
  /**
1898
1930
  * Schema Definitions that track ENS Registry migration status for Protocol Acceleration.
@@ -7289,7 +7321,6 @@ declare const abstractEnsIndexerSchema_registrationLifecycles: typeof registrati
7289
7321
  declare const abstractEnsIndexerSchema_registrationType: typeof registrationType;
7290
7322
  declare const abstractEnsIndexerSchema_registration_relations: typeof registration_relations;
7291
7323
  declare const abstractEnsIndexerSchema_registry: typeof registry;
7292
- declare const abstractEnsIndexerSchema_registryCanonicalDomain: typeof registryCanonicalDomain;
7293
7324
  declare const abstractEnsIndexerSchema_registryType: typeof registryType;
7294
7325
  declare const abstractEnsIndexerSchema_relations_domain: typeof relations_domain;
7295
7326
  declare const abstractEnsIndexerSchema_relations_permissions: typeof relations_permissions;
@@ -7365,7 +7396,7 @@ declare const abstractEnsIndexerSchema_subgraph_wrappedTransferRelations: typeof
7365
7396
  declare const abstractEnsIndexerSchema_subregistries: typeof subregistries;
7366
7397
  declare const abstractEnsIndexerSchema_subregistryRelations: typeof subregistryRelations;
7367
7398
  declare namespace abstractEnsIndexerSchema {
7368
- export { abstractEnsIndexerSchema_account as account, abstractEnsIndexerSchema_account_relations as account_relations, abstractEnsIndexerSchema_domain as domain, abstractEnsIndexerSchema_domainEvent as domainEvent, abstractEnsIndexerSchema_domainResolverRelation as domainResolverRelation, abstractEnsIndexerSchema_domainResolverRelation_relations as domainResolverRelation_relations, abstractEnsIndexerSchema_domainType as domainType, abstractEnsIndexerSchema_event as event, abstractEnsIndexerSchema_internal_registrarActionMetadata as internal_registrarActionMetadata, abstractEnsIndexerSchema_internal_registrarActionMetadataType as internal_registrarActionMetadataType, abstractEnsIndexerSchema_label as label, abstractEnsIndexerSchema_label_relations as label_relations, abstractEnsIndexerSchema_latestRegistrationIndex as latestRegistrationIndex, abstractEnsIndexerSchema_latestRegistrationIndex_relations as latestRegistrationIndex_relations, abstractEnsIndexerSchema_latestRenewalIndex as latestRenewalIndex, abstractEnsIndexerSchema_latestRenewalIndex_relations as latestRenewalIndex_relations, abstractEnsIndexerSchema_migratedNodeByNode as migratedNodeByNode, abstractEnsIndexerSchema_migratedNodeByParent as migratedNodeByParent, abstractEnsIndexerSchema_nameSales as nameSales, abstractEnsIndexerSchema_nameTokens as nameTokens, abstractEnsIndexerSchema_permissions as permissions, abstractEnsIndexerSchema_permissionsEvent as permissionsEvent, abstractEnsIndexerSchema_permissionsResource as permissionsResource, abstractEnsIndexerSchema_permissionsUser as permissionsUser, abstractEnsIndexerSchema_permissionsUserEvent as permissionsUserEvent, abstractEnsIndexerSchema_registrarActionRelations as registrarActionRelations, abstractEnsIndexerSchema_registrarActionType as registrarActionType, abstractEnsIndexerSchema_registrarActions as registrarActions, abstractEnsIndexerSchema_registration as registration, abstractEnsIndexerSchema_registrationLifecycleRelations as registrationLifecycleRelations, abstractEnsIndexerSchema_registrationLifecycles as registrationLifecycles, abstractEnsIndexerSchema_registrationType as registrationType, abstractEnsIndexerSchema_registration_relations as registration_relations, abstractEnsIndexerSchema_registry as registry, abstractEnsIndexerSchema_registryCanonicalDomain as registryCanonicalDomain, abstractEnsIndexerSchema_registryType as registryType, abstractEnsIndexerSchema_relations_domain as relations_domain, abstractEnsIndexerSchema_relations_permissions as relations_permissions, abstractEnsIndexerSchema_relations_permissionsResource as relations_permissionsResource, abstractEnsIndexerSchema_relations_permissionsUser as relations_permissionsUser, abstractEnsIndexerSchema_relations_registry as relations_registry, abstractEnsIndexerSchema_renewal as renewal, abstractEnsIndexerSchema_renewal_relations as renewal_relations, abstractEnsIndexerSchema_resolver as resolver, abstractEnsIndexerSchema_resolverAddressRecord as resolverAddressRecord, abstractEnsIndexerSchema_resolverAddressRecordRelations as resolverAddressRecordRelations, abstractEnsIndexerSchema_resolverEvent as resolverEvent, abstractEnsIndexerSchema_resolverRecords as resolverRecords, abstractEnsIndexerSchema_resolverRecords_relations as resolverRecords_relations, abstractEnsIndexerSchema_resolverTextRecord as resolverTextRecord, abstractEnsIndexerSchema_resolverTextRecordRelations as resolverTextRecordRelations, abstractEnsIndexerSchema_resolver_relations as resolver_relations, abstractEnsIndexerSchema_reverseNameRecord as reverseNameRecord, abstractEnsIndexerSchema_subgraph_abiChanged as subgraph_abiChanged, abstractEnsIndexerSchema_subgraph_abiChangedRelations as subgraph_abiChangedRelations, abstractEnsIndexerSchema_subgraph_account as subgraph_account, abstractEnsIndexerSchema_subgraph_accountRelations as subgraph_accountRelations, abstractEnsIndexerSchema_subgraph_addrChanged as subgraph_addrChanged, abstractEnsIndexerSchema_subgraph_addrChangedRelations as subgraph_addrChangedRelations, abstractEnsIndexerSchema_subgraph_authorisationChanged as subgraph_authorisationChanged, abstractEnsIndexerSchema_subgraph_authorisationChangedRelations as subgraph_authorisationChangedRelations, abstractEnsIndexerSchema_subgraph_contenthashChanged as subgraph_contenthashChanged, abstractEnsIndexerSchema_subgraph_contenthashChangedRelations as subgraph_contenthashChangedRelations, abstractEnsIndexerSchema_subgraph_domain as subgraph_domain, abstractEnsIndexerSchema_subgraph_domainRelations as subgraph_domainRelations, abstractEnsIndexerSchema_subgraph_expiryExtended as subgraph_expiryExtended, abstractEnsIndexerSchema_subgraph_expiryExtendedRelations as subgraph_expiryExtendedRelations, abstractEnsIndexerSchema_subgraph_fusesSet as subgraph_fusesSet, abstractEnsIndexerSchema_subgraph_fusesSetRelations as subgraph_fusesSetRelations, abstractEnsIndexerSchema_subgraph_interfaceChanged as subgraph_interfaceChanged, abstractEnsIndexerSchema_subgraph_interfaceChangedRelations as subgraph_interfaceChangedRelations, abstractEnsIndexerSchema_subgraph_multicoinAddrChanged as subgraph_multicoinAddrChanged, abstractEnsIndexerSchema_subgraph_multicoinAddrChangedRelations as subgraph_multicoinAddrChangedRelations, abstractEnsIndexerSchema_subgraph_nameChanged as subgraph_nameChanged, abstractEnsIndexerSchema_subgraph_nameChangedRelations as subgraph_nameChangedRelations, abstractEnsIndexerSchema_subgraph_nameRegistered as subgraph_nameRegistered, abstractEnsIndexerSchema_subgraph_nameRegisteredRelations as subgraph_nameRegisteredRelations, abstractEnsIndexerSchema_subgraph_nameRenewed as subgraph_nameRenewed, abstractEnsIndexerSchema_subgraph_nameRenewedRelations as subgraph_nameRenewedRelations, abstractEnsIndexerSchema_subgraph_nameTransferred as subgraph_nameTransferred, abstractEnsIndexerSchema_subgraph_nameTransferredRelations as subgraph_nameTransferredRelations, abstractEnsIndexerSchema_subgraph_nameUnwrapped as subgraph_nameUnwrapped, abstractEnsIndexerSchema_subgraph_nameUnwrappedRelations as subgraph_nameUnwrappedRelations, abstractEnsIndexerSchema_subgraph_nameWrapped as subgraph_nameWrapped, abstractEnsIndexerSchema_subgraph_nameWrappedRelations as subgraph_nameWrappedRelations, abstractEnsIndexerSchema_subgraph_newOwner as subgraph_newOwner, abstractEnsIndexerSchema_subgraph_newOwnerRelations as subgraph_newOwnerRelations, abstractEnsIndexerSchema_subgraph_newResolver as subgraph_newResolver, abstractEnsIndexerSchema_subgraph_newResolverRelations as subgraph_newResolverRelations, abstractEnsIndexerSchema_subgraph_newTTL as subgraph_newTTL, abstractEnsIndexerSchema_subgraph_newTTLRelations as subgraph_newTTLRelations, abstractEnsIndexerSchema_subgraph_pubkeyChanged as subgraph_pubkeyChanged, abstractEnsIndexerSchema_subgraph_pubkeyChangedRelations as subgraph_pubkeyChangedRelations, abstractEnsIndexerSchema_subgraph_registration as subgraph_registration, abstractEnsIndexerSchema_subgraph_registrationRelations as subgraph_registrationRelations, abstractEnsIndexerSchema_subgraph_resolver as subgraph_resolver, abstractEnsIndexerSchema_subgraph_resolverRelations as subgraph_resolverRelations, abstractEnsIndexerSchema_subgraph_textChanged as subgraph_textChanged, abstractEnsIndexerSchema_subgraph_textChangedRelations as subgraph_textChangedRelations, abstractEnsIndexerSchema_subgraph_transfer as subgraph_transfer, abstractEnsIndexerSchema_subgraph_transferRelations as subgraph_transferRelations, abstractEnsIndexerSchema_subgraph_versionChanged as subgraph_versionChanged, abstractEnsIndexerSchema_subgraph_versionChangedRelations as subgraph_versionChangedRelations, abstractEnsIndexerSchema_subgraph_wrappedDomain as subgraph_wrappedDomain, abstractEnsIndexerSchema_subgraph_wrappedDomainRelations as subgraph_wrappedDomainRelations, abstractEnsIndexerSchema_subgraph_wrappedTransfer as subgraph_wrappedTransfer, abstractEnsIndexerSchema_subgraph_wrappedTransferRelations as subgraph_wrappedTransferRelations, abstractEnsIndexerSchema_subregistries as subregistries, abstractEnsIndexerSchema_subregistryRelations as subregistryRelations };
7399
+ export { abstractEnsIndexerSchema_account as account, abstractEnsIndexerSchema_account_relations as account_relations, abstractEnsIndexerSchema_domain as domain, abstractEnsIndexerSchema_domainEvent as domainEvent, abstractEnsIndexerSchema_domainResolverRelation as domainResolverRelation, abstractEnsIndexerSchema_domainResolverRelation_relations as domainResolverRelation_relations, abstractEnsIndexerSchema_domainType as domainType, abstractEnsIndexerSchema_event as event, abstractEnsIndexerSchema_internal_registrarActionMetadata as internal_registrarActionMetadata, abstractEnsIndexerSchema_internal_registrarActionMetadataType as internal_registrarActionMetadataType, abstractEnsIndexerSchema_label as label, abstractEnsIndexerSchema_label_relations as label_relations, abstractEnsIndexerSchema_latestRegistrationIndex as latestRegistrationIndex, abstractEnsIndexerSchema_latestRegistrationIndex_relations as latestRegistrationIndex_relations, abstractEnsIndexerSchema_latestRenewalIndex as latestRenewalIndex, abstractEnsIndexerSchema_latestRenewalIndex_relations as latestRenewalIndex_relations, abstractEnsIndexerSchema_migratedNodeByNode as migratedNodeByNode, abstractEnsIndexerSchema_migratedNodeByParent as migratedNodeByParent, abstractEnsIndexerSchema_nameSales as nameSales, abstractEnsIndexerSchema_nameTokens as nameTokens, abstractEnsIndexerSchema_permissions as permissions, abstractEnsIndexerSchema_permissionsEvent as permissionsEvent, abstractEnsIndexerSchema_permissionsResource as permissionsResource, abstractEnsIndexerSchema_permissionsUser as permissionsUser, abstractEnsIndexerSchema_permissionsUserEvent as permissionsUserEvent, abstractEnsIndexerSchema_registrarActionRelations as registrarActionRelations, abstractEnsIndexerSchema_registrarActionType as registrarActionType, abstractEnsIndexerSchema_registrarActions as registrarActions, abstractEnsIndexerSchema_registration as registration, abstractEnsIndexerSchema_registrationLifecycleRelations as registrationLifecycleRelations, abstractEnsIndexerSchema_registrationLifecycles as registrationLifecycles, abstractEnsIndexerSchema_registrationType as registrationType, abstractEnsIndexerSchema_registration_relations as registration_relations, abstractEnsIndexerSchema_registry as registry, abstractEnsIndexerSchema_registryType as registryType, abstractEnsIndexerSchema_relations_domain as relations_domain, abstractEnsIndexerSchema_relations_permissions as relations_permissions, abstractEnsIndexerSchema_relations_permissionsResource as relations_permissionsResource, abstractEnsIndexerSchema_relations_permissionsUser as relations_permissionsUser, abstractEnsIndexerSchema_relations_registry as relations_registry, abstractEnsIndexerSchema_renewal as renewal, abstractEnsIndexerSchema_renewal_relations as renewal_relations, abstractEnsIndexerSchema_resolver as resolver, abstractEnsIndexerSchema_resolverAddressRecord as resolverAddressRecord, abstractEnsIndexerSchema_resolverAddressRecordRelations as resolverAddressRecordRelations, abstractEnsIndexerSchema_resolverEvent as resolverEvent, abstractEnsIndexerSchema_resolverRecords as resolverRecords, abstractEnsIndexerSchema_resolverRecords_relations as resolverRecords_relations, abstractEnsIndexerSchema_resolverTextRecord as resolverTextRecord, abstractEnsIndexerSchema_resolverTextRecordRelations as resolverTextRecordRelations, abstractEnsIndexerSchema_resolver_relations as resolver_relations, abstractEnsIndexerSchema_reverseNameRecord as reverseNameRecord, abstractEnsIndexerSchema_subgraph_abiChanged as subgraph_abiChanged, abstractEnsIndexerSchema_subgraph_abiChangedRelations as subgraph_abiChangedRelations, abstractEnsIndexerSchema_subgraph_account as subgraph_account, abstractEnsIndexerSchema_subgraph_accountRelations as subgraph_accountRelations, abstractEnsIndexerSchema_subgraph_addrChanged as subgraph_addrChanged, abstractEnsIndexerSchema_subgraph_addrChangedRelations as subgraph_addrChangedRelations, abstractEnsIndexerSchema_subgraph_authorisationChanged as subgraph_authorisationChanged, abstractEnsIndexerSchema_subgraph_authorisationChangedRelations as subgraph_authorisationChangedRelations, abstractEnsIndexerSchema_subgraph_contenthashChanged as subgraph_contenthashChanged, abstractEnsIndexerSchema_subgraph_contenthashChangedRelations as subgraph_contenthashChangedRelations, abstractEnsIndexerSchema_subgraph_domain as subgraph_domain, abstractEnsIndexerSchema_subgraph_domainRelations as subgraph_domainRelations, abstractEnsIndexerSchema_subgraph_expiryExtended as subgraph_expiryExtended, abstractEnsIndexerSchema_subgraph_expiryExtendedRelations as subgraph_expiryExtendedRelations, abstractEnsIndexerSchema_subgraph_fusesSet as subgraph_fusesSet, abstractEnsIndexerSchema_subgraph_fusesSetRelations as subgraph_fusesSetRelations, abstractEnsIndexerSchema_subgraph_interfaceChanged as subgraph_interfaceChanged, abstractEnsIndexerSchema_subgraph_interfaceChangedRelations as subgraph_interfaceChangedRelations, abstractEnsIndexerSchema_subgraph_multicoinAddrChanged as subgraph_multicoinAddrChanged, abstractEnsIndexerSchema_subgraph_multicoinAddrChangedRelations as subgraph_multicoinAddrChangedRelations, abstractEnsIndexerSchema_subgraph_nameChanged as subgraph_nameChanged, abstractEnsIndexerSchema_subgraph_nameChangedRelations as subgraph_nameChangedRelations, abstractEnsIndexerSchema_subgraph_nameRegistered as subgraph_nameRegistered, abstractEnsIndexerSchema_subgraph_nameRegisteredRelations as subgraph_nameRegisteredRelations, abstractEnsIndexerSchema_subgraph_nameRenewed as subgraph_nameRenewed, abstractEnsIndexerSchema_subgraph_nameRenewedRelations as subgraph_nameRenewedRelations, abstractEnsIndexerSchema_subgraph_nameTransferred as subgraph_nameTransferred, abstractEnsIndexerSchema_subgraph_nameTransferredRelations as subgraph_nameTransferredRelations, abstractEnsIndexerSchema_subgraph_nameUnwrapped as subgraph_nameUnwrapped, abstractEnsIndexerSchema_subgraph_nameUnwrappedRelations as subgraph_nameUnwrappedRelations, abstractEnsIndexerSchema_subgraph_nameWrapped as subgraph_nameWrapped, abstractEnsIndexerSchema_subgraph_nameWrappedRelations as subgraph_nameWrappedRelations, abstractEnsIndexerSchema_subgraph_newOwner as subgraph_newOwner, abstractEnsIndexerSchema_subgraph_newOwnerRelations as subgraph_newOwnerRelations, abstractEnsIndexerSchema_subgraph_newResolver as subgraph_newResolver, abstractEnsIndexerSchema_subgraph_newResolverRelations as subgraph_newResolverRelations, abstractEnsIndexerSchema_subgraph_newTTL as subgraph_newTTL, abstractEnsIndexerSchema_subgraph_newTTLRelations as subgraph_newTTLRelations, abstractEnsIndexerSchema_subgraph_pubkeyChanged as subgraph_pubkeyChanged, abstractEnsIndexerSchema_subgraph_pubkeyChangedRelations as subgraph_pubkeyChangedRelations, abstractEnsIndexerSchema_subgraph_registration as subgraph_registration, abstractEnsIndexerSchema_subgraph_registrationRelations as subgraph_registrationRelations, abstractEnsIndexerSchema_subgraph_resolver as subgraph_resolver, abstractEnsIndexerSchema_subgraph_resolverRelations as subgraph_resolverRelations, abstractEnsIndexerSchema_subgraph_textChanged as subgraph_textChanged, abstractEnsIndexerSchema_subgraph_textChangedRelations as subgraph_textChangedRelations, abstractEnsIndexerSchema_subgraph_transfer as subgraph_transfer, abstractEnsIndexerSchema_subgraph_transferRelations as subgraph_transferRelations, abstractEnsIndexerSchema_subgraph_versionChanged as subgraph_versionChanged, abstractEnsIndexerSchema_subgraph_versionChangedRelations as subgraph_versionChangedRelations, abstractEnsIndexerSchema_subgraph_wrappedDomain as subgraph_wrappedDomain, abstractEnsIndexerSchema_subgraph_wrappedDomainRelations as subgraph_wrappedDomainRelations, abstractEnsIndexerSchema_subgraph_wrappedTransfer as subgraph_wrappedTransfer, abstractEnsIndexerSchema_subgraph_wrappedTransferRelations as subgraph_wrappedTransferRelations, abstractEnsIndexerSchema_subregistries as subregistries, abstractEnsIndexerSchema_subregistryRelations as subregistryRelations };
7369
7400
  }
7370
7401
 
7371
- export { reverseNameRecord as $, registrarActionRelations as A, registrarActionType as B, registrarActions as C, registration as D, registrationLifecycleRelations as E, registrationLifecycles as F, registrationType as G, registration_relations as H, registry as I, registryCanonicalDomain as J, registryType as K, relations_domain as L, relations_permissions as M, relations_permissionsResource as N, relations_permissionsUser as O, relations_registry as P, renewal as Q, renewal_relations as R, resolver as S, resolverAddressRecord as T, resolverAddressRecordRelations as U, resolverEvent as V, resolverRecords as W, resolverRecords_relations as X, resolverTextRecord as Y, resolverTextRecordRelations as Z, resolver_relations as _, abstractEnsIndexerSchema as a, subgraph_abiChanged as a0, subgraph_abiChangedRelations as a1, subgraph_account as a2, subgraph_accountRelations as a3, subgraph_addrChanged as a4, subgraph_addrChangedRelations as a5, subgraph_authorisationChanged as a6, subgraph_authorisationChangedRelations as a7, subgraph_contenthashChanged as a8, subgraph_contenthashChangedRelations as a9, subgraph_newTTL as aA, subgraph_newTTLRelations as aB, subgraph_pubkeyChanged as aC, subgraph_pubkeyChangedRelations as aD, subgraph_registration as aE, subgraph_registrationRelations as aF, subgraph_resolver as aG, subgraph_resolverRelations as aH, subgraph_textChanged as aI, subgraph_textChangedRelations as aJ, subgraph_transfer as aK, subgraph_transferRelations as aL, subgraph_versionChanged as aM, subgraph_versionChangedRelations as aN, subgraph_wrappedDomain as aO, subgraph_wrappedDomainRelations as aP, subgraph_wrappedTransfer as aQ, subgraph_wrappedTransferRelations as aR, subregistries as aS, subregistryRelations as aT, subgraph_domain as aa, subgraph_domainRelations as ab, subgraph_expiryExtended as ac, subgraph_expiryExtendedRelations as ad, subgraph_fusesSet as ae, subgraph_fusesSetRelations as af, subgraph_interfaceChanged as ag, subgraph_interfaceChangedRelations as ah, subgraph_multicoinAddrChanged as ai, subgraph_multicoinAddrChangedRelations as aj, subgraph_nameChanged as ak, subgraph_nameChangedRelations as al, subgraph_nameRegistered as am, subgraph_nameRegisteredRelations as an, subgraph_nameRenewed as ao, subgraph_nameRenewedRelations as ap, subgraph_nameTransferred as aq, subgraph_nameTransferredRelations as ar, subgraph_nameUnwrapped as as, subgraph_nameUnwrappedRelations as at, subgraph_nameWrapped as au, subgraph_nameWrappedRelations as av, subgraph_newOwner as aw, subgraph_newOwnerRelations as ax, subgraph_newResolver as ay, subgraph_newResolverRelations as az, account as b, account_relations as c, domain as d, domainEvent as e, domainResolverRelation as f, domainResolverRelation_relations as g, domainType as h, event as i, internal_registrarActionMetadata as j, internal_registrarActionMetadataType as k, label as l, label_relations as m, latestRegistrationIndex as n, latestRegistrationIndex_relations as o, latestRenewalIndex as p, latestRenewalIndex_relations as q, migratedNodeByNode as r, migratedNodeByParent as s, nameSales as t, nameTokens as u, permissions as v, permissionsEvent as w, permissionsResource as x, permissionsUser as y, permissionsUserEvent as z };
7402
+ export { subgraph_abiChanged as $, registrarActionRelations as A, registrarActionType as B, registrarActions as C, registration as D, registrationLifecycleRelations as E, registrationLifecycles as F, registrationType as G, registration_relations as H, registry as I, registryType as J, relations_domain as K, relations_permissions as L, relations_permissionsResource as M, relations_permissionsUser as N, relations_registry as O, renewal as P, renewal_relations as Q, resolver as R, resolverAddressRecord as S, resolverAddressRecordRelations as T, resolverEvent as U, resolverRecords as V, resolverRecords_relations as W, resolverTextRecord as X, resolverTextRecordRelations as Y, resolver_relations as Z, reverseNameRecord as _, abstractEnsIndexerSchema as a, subgraph_abiChangedRelations as a0, subgraph_account as a1, subgraph_accountRelations as a2, subgraph_addrChanged as a3, subgraph_addrChangedRelations as a4, subgraph_authorisationChanged as a5, subgraph_authorisationChangedRelations as a6, subgraph_contenthashChanged as a7, subgraph_contenthashChangedRelations as a8, subgraph_domain as a9, subgraph_newTTLRelations as aA, subgraph_pubkeyChanged as aB, subgraph_pubkeyChangedRelations as aC, subgraph_registration as aD, subgraph_registrationRelations as aE, subgraph_resolver as aF, subgraph_resolverRelations as aG, subgraph_textChanged as aH, subgraph_textChangedRelations as aI, subgraph_transfer as aJ, subgraph_transferRelations as aK, subgraph_versionChanged as aL, subgraph_versionChangedRelations as aM, subgraph_wrappedDomain as aN, subgraph_wrappedDomainRelations as aO, subgraph_wrappedTransfer as aP, subgraph_wrappedTransferRelations as aQ, subregistries as aR, subregistryRelations as aS, subgraph_domainRelations as aa, subgraph_expiryExtended as ab, subgraph_expiryExtendedRelations as ac, subgraph_fusesSet as ad, subgraph_fusesSetRelations as ae, subgraph_interfaceChanged as af, subgraph_interfaceChangedRelations as ag, subgraph_multicoinAddrChanged as ah, subgraph_multicoinAddrChangedRelations as ai, subgraph_nameChanged as aj, subgraph_nameChangedRelations as ak, subgraph_nameRegistered as al, subgraph_nameRegisteredRelations as am, subgraph_nameRenewed as an, subgraph_nameRenewedRelations as ao, subgraph_nameTransferred as ap, subgraph_nameTransferredRelations as aq, subgraph_nameUnwrapped as ar, subgraph_nameUnwrappedRelations as as, subgraph_nameWrapped as at, subgraph_nameWrappedRelations as au, subgraph_newOwner as av, subgraph_newOwnerRelations as aw, subgraph_newResolver as ax, subgraph_newResolverRelations as ay, subgraph_newTTL as az, account as b, account_relations as c, domain as d, domainEvent as e, domainResolverRelation as f, domainResolverRelation_relations as g, domainType as h, event as i, internal_registrarActionMetadata as j, internal_registrarActionMetadataType as k, label as l, label_relations as m, latestRegistrationIndex as n, latestRegistrationIndex_relations as o, latestRenewalIndex as p, latestRenewalIndex_relations as q, migratedNodeByNode as r, migratedNodeByParent as s, nameSales as t, nameTokens as u, permissions as v, permissionsEvent as w, permissionsResource as x, permissionsUser as y, permissionsUserEvent as z };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { EnsDbPublicConfig, IndexingMetadataContext, IndexingMetadataContextInitialized, Unvalidated } from '@ensnode/ensnode-sdk';
2
2
  export { IndexingMetadataContext, IndexingMetadataContextInitialized, IndexingMetadataContextStatusCodes, IndexingMetadataContextUninitialized } from '@ensnode/ensnode-sdk';
3
3
  import { NodePgDatabase } from 'drizzle-orm/node-postgres';
4
- import { a as abstractEnsIndexerSchema } from './index-C0lByZGy.js';
4
+ import { a as abstractEnsIndexerSchema } from './index-CVAtPcO6.js';
5
5
  import { e as ensNodeSchema } from './index-BHoa233Z.js';
6
6
  import 'drizzle-orm/pg-core';
7
7
  import 'drizzle-orm';
package/dist/index.js CHANGED
@@ -41,7 +41,6 @@ __export(ensindexer_abstract_exports, {
41
41
  registrationType: () => registrationType,
42
42
  registration_relations: () => registration_relations,
43
43
  registry: () => registry,
44
- registryCanonicalDomain: () => registryCanonicalDomain,
45
44
  registryType: () => registryType,
46
45
  relations_domain: () => relations_domain,
47
46
  relations_permissions: () => relations_permissions,
@@ -212,7 +211,18 @@ var registry = onchainTable(
212
211
  address: t.hex().notNull().$type(),
213
212
  // If this is an ENSv1VirtualRegistry, `node` is the namehash of the parent ENSv1 domain that
214
213
  // owns it, otherwise null.
215
- node: t.hex().$type()
214
+ node: t.hex().$type(),
215
+ // the Registry's declared Canonical Domain (uni-directional)
216
+ canonicalDomainId: t.text().$type(),
217
+ // Whether this Registry is part of the canonical nametree. See canonicality-db-helpers.ts.
218
+ canonical: t.boolean().notNull().default(false),
219
+ // Synthetic monotonic sentinel: flipped to true the first time a child Domain is registered
220
+ // under this Registry (see `ensureDomainInRegistry`). Read by `cascadeCanonicality` to skip
221
+ // the raw-SQL recursive-CTE walk (and its associated Ponder cache flush) when the start
222
+ // registry provably has no descendants — the dominant case for fresh ENSv1 virtual
223
+ // registries on first wire-up. Double-underscore prefix marks it as an internal-only
224
+ // bookkeeping field, not part of the on-chain protocol surface.
225
+ __hasChildren: t.boolean().notNull().default(false)
216
226
  }),
217
227
  (t) => ({
218
228
  // NOTE: non-unique index because multiple rows can share (chainId, address) across virtual registries
@@ -240,7 +250,7 @@ var domain = onchainTable(
240
250
  type: domainType().notNull(),
241
251
  // belongs to a registry
242
252
  registryId: t.text().notNull().$type(),
243
- // may have a subregistry
253
+ // the Domain's declared Subregistry (uni-directional)
244
254
  subregistryId: t.text().$type(),
245
255
  // If this is an ENSv2Domain, the TokenId within the ENSv2Registry, otherwise null.
246
256
  tokenId: t.bigint().$type(),
@@ -252,9 +262,10 @@ var domain = onchainTable(
252
262
  // If this is an ENSv2Domain, this is the on-chain owner address (the HCA account address if used).
253
263
  ownerId: t.hex().$type(),
254
264
  // If this is an ENSv1Domain, may have a `rootRegistryOwner`, otherwise null.
255
- rootRegistryOwnerId: t.hex().$type()
265
+ rootRegistryOwnerId: t.hex().$type(),
266
+ // Whether this Domain is part of the canonical nametree. Mirrors the parent Registry's flag.
267
+ canonical: t.boolean().notNull().default(false)
256
268
  // NOTE: Domain-Resolver Relations tracked via Protocol Acceleration plugin
257
- // NOTE: parent is derived via registryCanonicalDomain, not stored on the domain row
258
269
  }),
259
270
  (t) => ({
260
271
  byType: index().on(t.type),
@@ -515,10 +526,6 @@ var label = onchainTable(
515
526
  var label_relations = relations(label, ({ many }) => ({
516
527
  domains: many(domain)
517
528
  }));
518
- var registryCanonicalDomain = onchainTable("registry_canonical_domains", (t) => ({
519
- registryId: t.text().primaryKey().$type(),
520
- domainId: t.text().notNull().$type()
521
- }));
522
529
 
523
530
  // src/ensindexer-abstract/migrated-nodes.schema.ts
524
531
  import { onchainTable as onchainTable2, primaryKey as primaryKey2 } from "ponder";