@ensnode/ensnode-schema
Version:
The ponder schema for ENSNode
695 lines (692 loc) • 19.4 kB
JavaScript
// src/subgraph.schema.ts
import { index, onchainTable, relations } from "ponder";
// src/collate.ts
function monkeypatchCollate(col, collation) {
col.getSQLType = function() {
return Object.getPrototypeOf(this).getSQLType.call(this) + " COLLATE " + collation;
};
return col;
}
// src/subgraph.schema.ts
var domain = onchainTable("domains", (t) => ({
// The namehash of the name
id: t.hex().primaryKey(),
// The human readable name, if known. Unknown portions replaced with hash in square brackets (eg, foo.[1234].eth)
name: t.text(),
// The human readable label name (imported from CSV), if known
labelName: t.text(),
// keccak256(labelName)
labelhash: t.hex(),
// The namehash (id) of the parent name
parentId: t.hex(),
// The number of subdomains
subdomainCount: t.integer().notNull().default(0),
// Address logged from current resolver, if any
resolvedAddressId: t.hex(),
// The resolver that controls the domain's settings
resolverId: t.text(),
// The time-to-live (TTL) value of the domain's records
ttl: t.bigint(),
// Indicates whether the domain has been migrated to a new registrar
isMigrated: t.boolean().notNull().default(false),
// The time when the domain was created
createdAt: t.bigint().notNull(),
// The account that owns the domain
ownerId: t.hex().notNull(),
// The account that owns the ERC721 NFT for the domain
registrantId: t.hex(),
// The account that owns the wrapped domain
wrappedOwnerId: t.hex(),
// The expiry date for the domain, from either the registration, or the wrapped domain if PCC is burned
expiryDate: t.bigint()
}));
monkeypatchCollate(domain.name, '"C"');
monkeypatchCollate(domain.labelName, '"C"');
var domainRelations = relations(domain, ({ one, many }) => ({
resolvedAddress: one(account, {
fields: [domain.resolvedAddressId],
references: [account.id]
}),
owner: one(account, { fields: [domain.ownerId], references: [account.id] }),
parent: one(domain, { fields: [domain.parentId], references: [domain.id] }),
resolver: one(resolver, {
fields: [domain.resolverId],
references: [resolver.id]
}),
subdomains: many(domain, { relationName: "parent" }),
registrant: one(account, {
fields: [domain.registrantId],
references: [account.id]
}),
wrappedOwner: one(account, {
fields: [domain.wrappedOwnerId],
references: [account.id]
}),
wrappedDomain: one(wrappedDomain, {
fields: [domain.id],
references: [wrappedDomain.domainId]
}),
registration: one(registration, {
fields: [domain.id],
references: [registration.domainId]
}),
// event relations
transfers: many(transfer),
newOwners: many(newOwner),
newResolvers: many(newResolver),
newTTLs: many(newTTL),
wrappedTransfers: many(wrappedTransfer),
nameWrappeds: many(nameWrapped),
nameUnwrappeds: many(nameUnwrapped),
fusesSets: many(fusesSet),
expiryExtendeds: many(expiryExtended)
}));
var account = onchainTable("accounts", (t) => ({
id: t.hex().primaryKey()
}));
var accountRelations = relations(account, ({ many }) => ({
domains: many(domain),
wrappedDomains: many(wrappedDomain),
registrations: many(registration)
}));
var resolver = onchainTable(
"resolvers",
(t) => ({
// The unique identifier for this resolver, which is a concatenation of the domain namehash and the resolver address
id: t.text().primaryKey(),
// The domain that this resolver is associated with
domainId: t.hex().notNull(),
// The address of the resolver contract
address: t.hex().notNull().$type(),
// The current value of the 'addr' record for this resolver, as determined by the associated events
addrId: t.hex(),
// The content hash for this resolver, in binary format
contentHash: t.text(),
// The set of observed text record keys for this resolver
// NOTE: we avoid .notNull.default([]) to match subgraph behavior
texts: t.text().array(),
// The set of observed SLIP-44 coin types for this resolver
// NOTE: we avoid .notNull.default([]) to match subgraph behavior
coinTypes: t.bigint().array(),
// NOTE(resolver-records): include the value of the reverse-resolution name() record
// https://docs.ens.domains/ensip/3
name: t.text()
}),
(t) => ({
idx: index().on(t.domainId)
})
);
var resolverRelations = relations(resolver, ({ one, many }) => ({
addr: one(account, { fields: [resolver.addrId], references: [account.id] }),
domain: one(domain, { fields: [resolver.domainId], references: [domain.id] }),
// event relations
addrChangeds: many(addrChanged),
multicoinAddrChangeds: many(multicoinAddrChanged),
nameChangeds: many(nameChanged),
abiChangeds: many(abiChanged),
pubkeyChangeds: many(pubkeyChanged),
textChangeds: many(textChanged),
contenthashChangeds: many(contenthashChanged),
interfaceChangeds: many(interfaceChanged),
authorisationChangeds: many(authorisationChanged),
versionChangeds: many(versionChanged)
}));
var registration = onchainTable(
"registrations",
(t) => ({
// The unique identifier of the registration
id: t.hex().primaryKey(),
// The domain name associated with the registration
domainId: t.hex().notNull(),
// The registration date of the domain
registrationDate: t.bigint().notNull(),
// The expiry date of the domain
expiryDate: t.bigint().notNull(),
// The cost associated with the domain registration
cost: t.bigint(),
// The account that registered the domain
registrantId: t.hex().notNull(),
// The human-readable label name associated with the domain registration
labelName: t.text()
}),
(t) => ({
idx: index().on(t.domainId)
})
);
var registrationRelations = relations(registration, ({ one, many }) => ({
domain: one(domain, {
fields: [registration.domainId],
references: [domain.id]
}),
registrant: one(account, {
fields: [registration.registrantId],
references: [account.id]
}),
// event relations
nameRegistereds: many(nameRegistered),
nameReneweds: many(nameRenewed),
nameTransferreds: many(nameTransferred)
}));
var wrappedDomain = onchainTable(
"wrapped_domains",
(t) => ({
// The unique identifier for each instance of the WrappedDomain entity
id: t.hex().primaryKey(),
// The domain that is wrapped by this WrappedDomain
domainId: t.hex().notNull(),
// The expiry date of the wrapped domain
expiryDate: t.bigint().notNull(),
// The number of fuses remaining on the wrapped domain
fuses: t.integer().notNull(),
// The account that owns this WrappedDomain
ownerId: t.hex().notNull(),
// The name of the wrapped domain
name: t.text()
}),
(t) => ({
idx: index().on(t.domainId)
})
);
var wrappedDomainRelations = relations(wrappedDomain, ({ one }) => ({
domain: one(domain, {
fields: [wrappedDomain.domainId],
references: [domain.id]
}),
owner: one(account, {
fields: [wrappedDomain.ownerId],
references: [account.id]
})
}));
var sharedEventColumns = (t) => ({
id: t.text().primaryKey(),
blockNumber: t.integer().notNull(),
transactionID: t.hex().notNull()
});
var domainEvent = (t) => ({
...sharedEventColumns(t),
domainId: t.hex().notNull()
});
var domainEventIndex = (t) => ({
// primary reverse lookup
idx: index().on(t.domainId),
// sorting index
idx_compound: index().on(t.domainId, t.id)
});
var transfer = onchainTable(
"transfers",
(t) => ({
...domainEvent(t),
ownerId: t.hex().notNull()
}),
domainEventIndex
);
var newOwner = onchainTable(
"new_owners",
(t) => ({
...domainEvent(t),
ownerId: t.hex().notNull(),
parentDomainId: t.hex().notNull()
}),
domainEventIndex
);
var newResolver = onchainTable(
"new_resolvers",
(t) => ({
...domainEvent(t),
resolverId: t.text().notNull()
}),
domainEventIndex
);
var newTTL = onchainTable(
"new_ttls",
(t) => ({
...domainEvent(t),
ttl: t.bigint().notNull()
}),
domainEventIndex
);
var wrappedTransfer = onchainTable(
"wrapped_transfers",
(t) => ({
...domainEvent(t),
ownerId: t.hex().notNull()
}),
domainEventIndex
);
var nameWrapped = onchainTable(
"name_wrapped",
(t) => ({
...domainEvent(t),
name: t.text(),
fuses: t.integer().notNull(),
ownerId: t.hex().notNull(),
expiryDate: t.bigint().notNull()
}),
domainEventIndex
);
var nameUnwrapped = onchainTable(
"name_unwrapped",
(t) => ({
...domainEvent(t),
ownerId: t.hex().notNull()
}),
domainEventIndex
);
var fusesSet = onchainTable(
"fuses_set",
(t) => ({
...domainEvent(t),
fuses: t.integer().notNull()
}),
domainEventIndex
);
var expiryExtended = onchainTable(
"expiry_extended",
(t) => ({
...domainEvent(t),
expiryDate: t.bigint().notNull()
}),
domainEventIndex
);
var registrationEvent = (t) => ({
...sharedEventColumns(t),
registrationId: t.hex().notNull()
});
var registrationEventIndex = (t) => ({
// primary reverse lookup
idx: index().on(t.registrationId),
// sorting index
idx_compound: index().on(t.registrationId, t.id)
});
var nameRegistered = onchainTable(
"name_registered",
(t) => ({
...registrationEvent(t),
registrantId: t.hex().notNull(),
expiryDate: t.bigint().notNull()
}),
registrationEventIndex
);
var nameRenewed = onchainTable(
"name_renewed",
(t) => ({
...registrationEvent(t),
expiryDate: t.bigint().notNull()
}),
registrationEventIndex
);
var nameTransferred = onchainTable(
"name_transferred",
(t) => ({
...registrationEvent(t),
newOwnerId: t.hex().notNull()
}),
registrationEventIndex
);
var resolverEvent = (t) => ({
...sharedEventColumns(t),
resolverId: t.text().notNull()
});
var resolverEventIndex = (t) => ({
// primary reverse lookup
idx: index().on(t.resolverId),
// sorting index
idx_compound: index().on(t.resolverId, t.id)
});
var addrChanged = onchainTable(
"addr_changed",
(t) => ({
...resolverEvent(t),
addrId: t.hex().notNull()
}),
resolverEventIndex
);
var multicoinAddrChanged = onchainTable(
"multicoin_addr_changed",
(t) => ({
...resolverEvent(t),
coinType: t.bigint().notNull(),
addr: t.hex().notNull()
}),
resolverEventIndex
);
var nameChanged = onchainTable(
"name_changed",
(t) => ({
...resolverEvent(t),
name: t.text().notNull()
}),
resolverEventIndex
);
var abiChanged = onchainTable(
"abi_changed",
(t) => ({
...resolverEvent(t),
contentType: t.bigint().notNull()
}),
resolverEventIndex
);
var pubkeyChanged = onchainTable(
"pubkey_changed",
(t) => ({
...resolverEvent(t),
x: t.hex().notNull(),
y: t.hex().notNull()
}),
resolverEventIndex
);
var textChanged = onchainTable(
"text_changed",
(t) => ({
...resolverEvent(t),
key: t.text().notNull(),
value: t.text()
}),
resolverEventIndex
);
var contenthashChanged = onchainTable(
"contenthash_changed",
(t) => ({
...resolverEvent(t),
hash: t.hex().notNull()
}),
resolverEventIndex
);
var interfaceChanged = onchainTable(
"interface_changed",
(t) => ({
...resolverEvent(t),
interfaceID: t.hex().notNull(),
implementer: t.hex().notNull()
}),
resolverEventIndex
);
var authorisationChanged = onchainTable(
"authorisation_changed",
(t) => ({
...resolverEvent(t),
owner: t.hex().notNull(),
target: t.hex().notNull(),
isAuthorized: t.boolean().notNull()
}),
resolverEventIndex
);
var versionChanged = onchainTable(
"version_changed",
(t) => ({
...resolverEvent(t),
version: t.bigint().notNull()
}),
resolverEventIndex
);
var transferRelations = relations(transfer, ({ one }) => ({
domain: one(domain, { fields: [transfer.domainId], references: [domain.id] }),
owner: one(account, { fields: [transfer.ownerId], references: [account.id] })
}));
var newOwnerRelations = relations(newOwner, ({ one }) => ({
domain: one(domain, { fields: [newOwner.domainId], references: [domain.id] }),
owner: one(account, { fields: [newOwner.ownerId], references: [account.id] }),
parentDomain: one(domain, {
fields: [newOwner.parentDomainId],
references: [domain.id]
})
}));
var newResolverRelations = relations(newResolver, ({ one }) => ({
domain: one(domain, {
fields: [newResolver.domainId],
references: [domain.id]
}),
resolver: one(resolver, {
fields: [newResolver.resolverId],
references: [resolver.id]
})
}));
var newTTLRelations = relations(newTTL, ({ one }) => ({
domain: one(domain, { fields: [newTTL.domainId], references: [domain.id] })
}));
var wrappedTransferRelations = relations(wrappedTransfer, ({ one }) => ({
domain: one(domain, {
fields: [wrappedTransfer.domainId],
references: [domain.id]
}),
owner: one(account, {
fields: [wrappedTransfer.ownerId],
references: [account.id]
})
}));
var nameWrappedRelations = relations(nameWrapped, ({ one }) => ({
domain: one(domain, {
fields: [nameWrapped.domainId],
references: [domain.id]
}),
owner: one(account, {
fields: [nameWrapped.ownerId],
references: [account.id]
})
}));
var nameUnwrappedRelations = relations(nameUnwrapped, ({ one }) => ({
domain: one(domain, {
fields: [nameUnwrapped.domainId],
references: [domain.id]
}),
owner: one(account, {
fields: [nameUnwrapped.ownerId],
references: [account.id]
})
}));
var fusesSetRelations = relations(fusesSet, ({ one }) => ({
domain: one(domain, { fields: [fusesSet.domainId], references: [domain.id] })
}));
var expiryExtendedRelations = relations(expiryExtended, ({ one }) => ({
domain: one(domain, {
fields: [expiryExtended.domainId],
references: [domain.id]
})
}));
var nameRegisteredRelations = relations(nameRegistered, ({ one }) => ({
registration: one(registration, {
fields: [nameRegistered.registrationId],
references: [registration.id]
}),
registrant: one(account, {
fields: [nameRegistered.registrantId],
references: [account.id]
})
}));
var nameRenewedRelations = relations(nameRenewed, ({ one }) => ({
registration: one(registration, {
fields: [nameRenewed.registrationId],
references: [registration.id]
})
}));
var nameTransferredRelations = relations(nameTransferred, ({ one }) => ({
registration: one(registration, {
fields: [nameTransferred.registrationId],
references: [registration.id]
}),
newOwner: one(account, {
fields: [nameTransferred.newOwnerId],
references: [account.id]
})
}));
var addrChangedRelations = relations(addrChanged, ({ one }) => ({
resolver: one(resolver, {
fields: [addrChanged.resolverId],
references: [resolver.id]
}),
addr: one(account, {
fields: [addrChanged.addrId],
references: [account.id]
})
}));
var multicoinAddrChangedRelations = relations(multicoinAddrChanged, ({ one }) => ({
resolver: one(resolver, {
fields: [multicoinAddrChanged.resolverId],
references: [resolver.id]
})
}));
var nameChangedRelations = relations(nameChanged, ({ one }) => ({
resolver: one(resolver, {
fields: [nameChanged.resolverId],
references: [resolver.id]
})
}));
var abiChangedRelations = relations(abiChanged, ({ one }) => ({
resolver: one(resolver, {
fields: [abiChanged.resolverId],
references: [resolver.id]
})
}));
var pubkeyChangedRelations = relations(pubkeyChanged, ({ one }) => ({
resolver: one(resolver, {
fields: [pubkeyChanged.resolverId],
references: [resolver.id]
})
}));
var textChangedRelations = relations(textChanged, ({ one }) => ({
resolver: one(resolver, {
fields: [textChanged.resolverId],
references: [resolver.id]
})
}));
var contenthashChangedRelations = relations(contenthashChanged, ({ one }) => ({
resolver: one(resolver, {
fields: [contenthashChanged.resolverId],
references: [resolver.id]
})
}));
var interfaceChangedRelations = relations(interfaceChanged, ({ one }) => ({
resolver: one(resolver, {
fields: [interfaceChanged.resolverId],
references: [resolver.id]
})
}));
var authorisationChangedRelations = relations(authorisationChanged, ({ one }) => ({
resolver: one(resolver, {
fields: [authorisationChanged.resolverId],
references: [resolver.id]
})
}));
var versionChangedRelations = relations(versionChanged, ({ one }) => ({
resolver: one(resolver, {
fields: [versionChanged.resolverId],
references: [resolver.id]
})
}));
// src/resolver-records.schema.ts
import { index as index2, onchainTable as onchainTable2, relations as relations2 } from "ponder";
var ext_resolverRelations = relations2(resolver, ({ one, many }) => ({
// resolver has many address records
addressRecords: many(ext_resolverAddressRecords),
// resolver has many text records
// NOTE: can't use `texts` because Resolver.texts is used by subgraph schema
textRecords: many(ext_resolverTextRecords)
}));
var ext_resolverAddressRecords = onchainTable2(
"ext_resolver_address_records",
(t) => ({
// keyed by (resolverId, coinType)
id: t.text().primaryKey(),
resolverId: t.text().notNull(),
coinType: t.bigint().notNull(),
address: t.text().notNull()
}),
(t) => ({
byCoinType: index2().on(t.id, t.coinType)
})
);
var ext_resolverAddressRecordsRelations = relations2(
ext_resolverAddressRecords,
({ one, many }) => ({
// belongs to resolver
resolver: one(resolver, {
fields: [ext_resolverAddressRecords.resolverId],
references: [resolver.id]
})
})
);
var ext_resolverTextRecords = onchainTable2(
"ext_resolver_text_records",
(t) => ({
// keyed by (resolverId, key)
id: t.text().primaryKey(),
resolverId: t.text().notNull(),
key: t.text().notNull(),
value: t.text().notNull()
}),
(t) => ({
byKey: index2().on(t.id, t.key)
})
);
var ext_resolverTextRecordsRelations = relations2(
ext_resolverTextRecords,
({ one, many }) => ({
// belongs to resolver
resolver: one(resolver, {
fields: [ext_resolverTextRecords.resolverId],
references: [resolver.id]
})
})
);
export {
abiChanged,
abiChangedRelations,
account,
accountRelations,
addrChanged,
addrChangedRelations,
authorisationChanged,
authorisationChangedRelations,
contenthashChanged,
contenthashChangedRelations,
domain,
domainRelations,
expiryExtended,
expiryExtendedRelations,
ext_resolverAddressRecords,
ext_resolverAddressRecordsRelations,
ext_resolverRelations,
ext_resolverTextRecords,
ext_resolverTextRecordsRelations,
fusesSet,
fusesSetRelations,
interfaceChanged,
interfaceChangedRelations,
multicoinAddrChanged,
multicoinAddrChangedRelations,
nameChanged,
nameChangedRelations,
nameRegistered,
nameRegisteredRelations,
nameRenewed,
nameRenewedRelations,
nameTransferred,
nameTransferredRelations,
nameUnwrapped,
nameUnwrappedRelations,
nameWrapped,
nameWrappedRelations,
newOwner,
newOwnerRelations,
newResolver,
newResolverRelations,
newTTL,
newTTLRelations,
pubkeyChanged,
pubkeyChangedRelations,
registration,
registrationRelations,
resolver,
resolverRelations,
textChanged,
textChangedRelations,
transfer,
transferRelations,
versionChanged,
versionChangedRelations,
wrappedDomain,
wrappedDomainRelations,
wrappedTransfer,
wrappedTransferRelations
};
//# sourceMappingURL=ponder.schema.js.map