-
Notifications
You must be signed in to change notification settings - Fork 17
Docs: improve docs narrative around "ENSNode Plugins", "ENSDb Writers", and "ENSDb Readers". #2227
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
tk-o
wants to merge
13
commits into
main
Choose a base branch
from
docs/improve-ensdb-writer-reader-ensnode-plugins
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
a83d810
Update docs for Unigraph examples
tk-o 5ab3e68
Apply AI PR feedback
tk-o 3d9881c
Apply AI PR feedback
tk-o 22012e2
Merge remote-tracking branch 'origin/main' into docs/improve-unigraph…
tk-o 97ccdb4
Create dedicated pages
tk-o 15fc5b2
Udpate ENSNode Plugins page
tk-o d701b2e
Merge remote-tracking branch 'origin/main' into docs/improve-ensdb-wr…
tk-o 2e61b46
Shift plugins narrative to focus on "ENSNode Plugins"
tk-o dc68c9a
Apply AI PR feedback
tk-o 799444a
Apply AI PR feedback
tk-o 4ffbc77
Merge remote-tracking branch 'origin/main' into docs/improve-ensdb-wr…
tk-o b9ad9ff
Apply AI PR feedback
tk-o 8e6910f
Fix sidebar link desc
tk-o File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
48 changes: 48 additions & 0 deletions
48
...nsnode.io/src/content/docs/docs/integrate/integration-options/ensdb-readers.mdx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,48 @@ | ||
| --- | ||
| title: ENSDb Readers (Custom APIs) | ||
| description: How to build custom APIs on top of ENSDb, using the ENSDb Reader specification. | ||
| --- | ||
|
|
||
| import { LinkCard } from "@astrojs/starlight/components"; | ||
|
|
||
| ## Standards-compliant ENSDb Readers | ||
|
|
||
| There are multiple [ENSDb Reader](/docs/services/ensdb/concepts/glossary#ensdb-reader) apps created (and planned) by the NameHash team. Find out more about each of them below. | ||
|
|
||
| :::note[Build your own ENSDb Reader] | ||
| Continuing on the ideas shared in [ENSDb integration options page](/docs/integrate/integration-options/ensdb), you can build your own ENSDb Reader app and define a custom data model and capabilities that are required for your use cases. Feel free to reach out to the NameHash team on [Telegram](https://t.me/ensnode) if you want to build your own ENSDb Reader and want any help or guidance! | ||
| ::: | ||
|
|
||
| ### ENSApi | ||
|
|
||
| ENSApi is a reference implementation of an [ENSDb Reader](/docs/services/ensdb/concepts/glossary#ensdb-reader) that includes standards-compliant web services: | ||
|
|
||
| - A standards-compliant [ENS Omnigraph GraphQL API](/docs/integrate/integration-options/omnigraph-graphql-api) on top of [ENSNode Plugins](/docs/integrate/integration-options/ensnode-plugins) such as `unigraph` and `protocol-acceleration`. | ||
| - A standards-compliant [ENS Subgraph GraphQL API](/docs/integrate/ens-subgraph) on top of [ENSNode Plugins](/docs/integrate/integration-options/ensnode-plugins) such as `subgraph`, `basenames`, `lineanames`, and `threedns`. | ||
| - An API for accessing the metadata stored in ENSDb, including [metadata](/docs/services/ensdb/concepts/glossary#indexing-metadata-context) about the indexing status from the [ENSDb Writer](/docs/services/ensdb/concepts/glossary#ensdb-writer) and [metadata](/docs/services/ensdb/concepts/glossary#indexing-metadata-context) about the overall [ENSNode stack of services](/docs/services) active in the ENSNode instance. | ||
|
|
||
| <LinkCard | ||
| title="Learn more about ENSApi" | ||
| description="A reference implementation of ENSDb Reader, built by the NameHash team." | ||
| href="/docs/services/ensapi" | ||
| /> | ||
|
|
||
| ### Other ENSDb Readers | ||
|
|
||
| <LinkCard | ||
| title="Learn more about ensdb-cli" | ||
| description="A command-line interface for interacting with ENSDb." | ||
| href="/docs/integrate/integration-options/ensdb-cli" | ||
| /> | ||
|
|
||
| <LinkCard | ||
| title="Learn more about ENSEngine" | ||
| description="A push-based web service allowing to track ENS data changes in real-time." | ||
| href="/docs/integrate/integration-options/ensengine" | ||
| /> | ||
|
|
||
| <LinkCard | ||
| title="Learn more about ENSAnalytics (coming soon)" | ||
| description="A web service that provides analytics and insights on ENS data." | ||
| href="#" | ||
| /> | ||
|
coderabbitai[bot] marked this conversation as resolved.
tk-o marked this conversation as resolved.
Comment on lines
+44
to
+48
|
||
49 changes: 49 additions & 0 deletions
49
...nsnode.io/src/content/docs/docs/integrate/integration-options/ensdb-writers.mdx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,49 @@ | ||||||
| --- | ||||||
| title: ENSDb Writers (Indexers) | ||||||
| description: How to build indexers for ENSDb, using the ENSDb Writer specification. | ||||||
| --- | ||||||
|
|
||||||
| import { LinkCard } from "@astrojs/starlight/components"; | ||||||
|
|
||||||
| An [ENSDb Writer](/docs/services/ensdb/concepts/glossary#ensdb-writer) defines how an indexing process for ENS looks like, including: | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Awkward grammar mixing "how" with "looks like" in sentence about ENSDb Writer definition |
||||||
|
|
||||||
| - How to source onchain data about ENS (events, blocks, etc.) | ||||||
| - How to process onchain data into an indexed data model (including transforming raw onchain data into a desired internal data model). | ||||||
| - How to store that processed data in the [ENSDb instance](/docs/services/ensdb/concepts/glossary#ensdb-instance). | ||||||
| - How to store metadata about the [ENSDb Writer](/docs/services/ensdb/concepts/glossary#ensdb-writer) in the [ENSDb instance](/docs/services/ensdb/concepts/glossary#ensdb-instance). | ||||||
|
|
||||||
| :::tip[Build your own ENSDb Writer] | ||||||
| You can build your own ENSDb Writer in any language, using any indexing framework, as long as you follow the [ENSDb Standard](/docs/services/ensdb/concepts/glossary#ensdb-standard). The ENSDb Standard defines rules and constraints for how an ENSDb Writer should write data into an ENSDb instance in a way that maintains the integrity of the data and supports interoperability with any ENSDb Reader. | ||||||
|
|
||||||
| Your ENSDb Writer must include: | ||||||
|
|
||||||
| - The _implementation_ of 1 or more standards-compliant [ENSNode plugins](/docs/integrate/integration-options/ensnode-plugins). | ||||||
| - The _implementation_ of an [ENSDb Metadata Writer](/docs/services/ensdb/concepts/glossary#ensdb-metadata-writer) that stores [metadata](/docs/services/ensdb/concepts/glossary#indexing-metadata-context) about the [ENSDb Writer](/docs/services/ensdb/concepts/glossary#ensdb-writer) overall, including which [ENSNode Plugins](/docs/integrate/integration-options/ensnode-plugins) it has activated, what the status of indexing is across each indexed chain, etc. | ||||||
|
tk-o marked this conversation as resolved.
|
||||||
|
|
||||||
| ::: | ||||||
|
|
||||||
| ## Standards-compliant ENSDb Writers | ||||||
|
|
||||||
| ### ENSIndexer | ||||||
|
|
||||||
| [ENSIndexer](/docs/services/ensindexer) is a reference implementation of an [ENSDb Writer](/docs/services/ensdb/concepts/glossary#ensdb-writer) built by the NameHash team. It is a multi-chain ENS indexer built on top of [Ponder](https://ponder.sh/), a modular blockchain indexing framework. ENSIndexer processes events from each relevant chain and transforms the data, storing it in your ENSDb instance. | ||||||
|
|
||||||
| <LinkCard | ||||||
| title="Learn more about ENSIndexer" | ||||||
| description="A reference implementation of ENSDb Writer, built by the NameHash team." | ||||||
| href="/docs/services/ensindexer" | ||||||
| /> | ||||||
|
|
||||||
| ### Envio | ||||||
|
|
||||||
| The [Envio](https://envio.dev/) team is actively collaborating with NameHash Labs to build another standards-compliant [ENSDb Writer](/docs/services/ensdb/concepts/glossary#ensdb-writer) that uses Envio as the indexing engine. Their initial plugin is `subgraph`, with plans to support `unigraph` and `protocol-acceleration` after that. | ||||||
|
|
||||||
| ## Other Potential ENSDb Writers | ||||||
|
|
||||||
| ### Amp (Edge & Node) | ||||||
|
|
||||||
| [Amp](https://www.edgeandnode.com/articles/stream-live-chain-data-into-your-analytics-stack-with-amp) by [Edge & Node](https://www.edgeandnode.com) is a next-generation blockchain data platform that transforms onchain activity into structured, verifiable datasets — preserving full cryptographic provenance for compliance and auditability. Amp can stream live onchain data, including live ENS state, making it a perfect foundation for a new production-grade ENSDb Writer implementation. | ||||||
|
|
||||||
| ### Build Your Own | ||||||
|
|
||||||
| You can build your own ENSDb Writer in any language, using any indexing framework, as long as you follow the [ENSDb Standard](/docs/services/ensdb/concepts/glossary#ensdb-standard). Join us on [Telegram](https://t.me/ensnode) for any questions and support. | ||||||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
73 changes: 73 additions & 0 deletions
73
...node.io/src/content/docs/docs/integrate/integration-options/ensnode-plugins.mdx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,73 @@ | ||
| --- | ||
| title: ENSNode Plugins | ||
| description: How to customize data models for ENSNode, using the ENSNode Plugin specification. | ||
| --- | ||
|
|
||
| import { LinkCard } from "@astrojs/starlight/components"; | ||
|
|
||
| ## What is an ENSNode Plugin? | ||
|
|
||
| An **ENSNode Plugin** is an abstract specification that defines how a specific aspect of the ENS namespace is indexed into [ENSDb](/docs/services/ensdb). It is **not** an implementation — it is a standard that any [ENSDb Writer](/docs/services/ensdb/concepts/glossary#ensdb-writer) can implement. | ||
|
|
||
| Each ENSNode Plugin defines: | ||
|
|
||
| - **Name** — e.g. `unigraph`, `protocol-acceleration`, `subgraph`. | ||
| - **Datasources** — which onchain contracts should be indexed, as a function of the ENS namespace. | ||
| - **Dependency relationships** — other plugins that must (or must not) be activated concurrently. | ||
| - **Indexed data model** — the tables, columns, and indexes that the plugin produces in ENSDb. | ||
| - **Standards and invariants** — rules for how onchain events are translated into the indexed data model during indexing. | ||
| - **Versioning** — a version number that can be stored in ENSNode Metadata, to track which version of the plugin implementation is being used by ENSDb Writers and ENSDb Readers. | ||
|
|
||
| ## Why ENSNode Plugins Matter | ||
|
|
||
| ENSNode Plugins are the key architectural piece that enables a decoupling between [ENSDb Writers](/docs/services/ensdb/concepts/glossary#ensdb-writer) and [ENSDb Readers](/docs/services/ensdb/concepts/glossary#ensdb-reader), so that anyone can create their own implementations of these. For example, any team working on indexing infrastructure can implement an ENSDb Writer and have it produce a standards-compliant ENSDb. On the other hand, any team working on products for ENS ecosystem can build their own standards-compliant ENSDb Reader and have it query ENSDb. | ||
|
|
||
| :::note[Interoperability between ENSDb Writers and Readers] | ||
| When new ENSNode plugins are created, it becomes possible for the [ENS Omnigraph API](/docs/integrate/omnigraph) (or other APIs built by any ENSDb Reader) to unify the ability to query across ENSNode plugins in a single query. For example, you could query both ENS state from the `unigraph` and EFP state about followers from the `efp` plugin in a single GraphQL query. | ||
| ::: | ||
|
|
||
| ## Core Plugins | ||
|
|
||
| [ENSIndexer](/docs/services/ensindexer) is a reference implementation of an [ENSDb Writer](/docs/services/ensdb/concepts/glossary#ensdb-writer) that implements multiple core plugins following the ENSNode Plugins specification. The code for each plugin inside ENSIndexer is a reference implementation of that plugin's abstract specification. [The core plugins implemented in ENSIndexer today](https://github.com/namehash/ensnode/tree/main/apps/ensindexer/src/plugins) are: | ||
|
|
||
| :::note[Built by the NameHash team] | ||
| All core ENSNode Plugins are built by the NameHash team. [We welcome contributions and collaborations to expand the ecosystem of plugins](#build-your-own). | ||
| ::: | ||
|
|
||
| | Plugin | Description | | ||
| | ----------------------- | ---------------------------------------------------------- | | ||
| | `unigraph` | Unified ENSv1 + ENSv2 data model with polymorphic entities | | ||
| | `protocol-acceleration` | Accelerated lookups for ENS resolution | | ||
| | `subgraph` | Legacy ENS Subgraph-compatible data model | | ||
| | `basenames` | Basenames (`.base.eth`) subname indexing | | ||
| | `lineanames` | Lineanames (`.linea.eth`) subname indexing | | ||
| | `threedns` | 3DNS (`.box`) name indexing | | ||
| | `registrars` | Registration and renewal lifecycle tracking | | ||
| | `tokenscope` | NFT tokenization and marketplace activity | | ||
|
|
||
| ## Community Plugins | ||
|
|
||
| ### Under Development | ||
|
|
||
| The `efp` plugin is [a new plugin currently under development](https://github.com/Quantumlyy/efpnode/tree/main/packages/ensnode-plugin-efp) by the [EthId team](https://ethid.org/): | ||
|
|
||
| - [EFP (Ethereum Follow Protocol)](https://efp.app/) — onchain social graph protocol | ||
| - [Grails](https://grails.app/) — by the EthId Foundation | ||
|
|
||
| ### Build Your Own | ||
|
|
||
| If you are interested in defining a new ENSNode plugin or implementing an existing one, reach out to the NameHash Labs team — we are happy to provide support and additional info. Join us on [Telegram](https://t.me/ensnode) for any questions. | ||
|
|
||
| ## Related | ||
|
|
||
| <LinkCard | ||
| title="ENSDb Writers" | ||
| description="Learn how to build indexers that implement ENSNode plugins." | ||
| href="/docs/integrate/integration-options/ensdb-writers" | ||
| /> | ||
|
|
||
| <LinkCard | ||
| title="ENSDb Readers" | ||
| description="Learn how to build APIs that read from ENSNode plugins." | ||
| href="/docs/integrate/integration-options/ensdb-readers" | ||
| /> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.