Skip to content

Conversation

@oed
Copy link

@oed oed commented Jul 25, 2025

📃 ENSIP-X: Dservice Text Records (preview)

This ENSIP proposes a standard for decentralized access to indexer (and other auxiliary) endpoints, enabling dapps to be more resilient.

I've used this pattern in simplepage.eth and plan to continue using it on other dapps I might build.

ensips/x.md Outdated

It is RECOMMENDED that the URL protocol *scheme* is `https`.

### DService Definition
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should probably come earlier.

ensips/x.md Outdated

### DService Definition

A decentralized service, or dservice for short, is a backend service that provides the dapp with specialized functionality beyond what is provided through ethereum RPCs and bundlers. Each dapp MAY implement one dservice (it MUST NOT implement more than one) and it is RECOMMENDED to provide multiple endpoints for this service that are hosted on independent infrastructure (these URLs are to be provided in the `dservice` text record).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is unclear. Is there a one to one relationship between an ENS name and a dApp?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A dapp here is defined as a frontend deployed to the contenthash field of the ENS name in question.

ensips/x.md Outdated

#### External DServices

A dapp MAY also use DServices provided through ENS names beyond its own. For example, `dapp-a.eth` could look up the `dservice` text record of `dapp-b.eth` to get the latest endpoints for its dservice, then query those endpoints directly.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How? Is there a standard for this forwarding?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would work the same way a dapp looks up it's on dservice urls. Happy to clarify this further, could you say more about what you don't find clear here?

@clowestab
Copy link
Contributor

This is interesting, but lacks some clarity IMO.

I think it'd be worth jumping on the ecosystem call to run through this proposal.

Often times getting further implementations up front is a better route to standardization.

It could also do with some tidying up - acronyms for example. rpc => RPC, dapp => dApp

@oed
Copy link
Author

oed commented Aug 4, 2025

Thanks for the feedback @clowestab! Where do I find info about the ecosystem call?

@oed oed changed the title draft: dservice text records draft: indexer text records Nov 24, 2025

#### Indexer Requirements

1. MUST only rely on indexed data from the following sources:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point, will add the following why: Because anyone should be able to spin up an indexer node and arrive at the same state as other nodes without having to rely on any trusted source of information

ensips/x.md Outdated
1. MUST only rely on indexed data from the following sources:
1. The Ethereum blockchain, i.e. Ethereum L1 and L2s
2. Content-addressed data, e.g. the IPFS network
2. MUST be deterministic, all Indexer nodes given the same input should produce the same state
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any integrity checking mechanism built in?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From the perspective of the node operator or the perspective of the user?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both, but I imagine its more important to the user..

@clowestab
Copy link
Contributor

Is 'indexer' the correct terminology here? it sounds like a more generic API endpoint. The lack of integrity checking and overrides concerns me - i could persuade people to override with my endpoint that isn't running the open source software (even though I say it is), and returns malicious data..

@oed
Copy link
Author

oed commented Nov 26, 2025

@clowestab I'm open to ideas as to what would be a better name. I did choose indexer because I think it describes what I'm trying to achieve here most accurately. That is, it should only provide an index over on-chain and content-addressable data.

@oed oed changed the title draft: indexer text records draft: dservice text records Dec 3, 2025
@oed
Copy link
Author

oed commented Dec 3, 2025

@clowestab Ended up reverting back to the dservice naming. I agree that indexing was to narrow.

@clowestab
Copy link
Contributor

It feels like this is an API discoverability solution. "dAPI" comes to mind. The title could be "Decentralized APIs using ENS".

Why are you constraining it to "should only provide an index over on-chain and content-addressable data."?

@oed
Copy link
Author

oed commented Dec 7, 2025

Why are you constraining it to "should only provide an index over on-chain and content-addressable data."?

Because if we don't do this we are opening up for prorietary api endpoints to be listed in this way. That would fundamentally break the trust assumption here, because whoever is running the api could lock users in to their service.

The main property that absolutely must be maintained is that anyone can trustlessly spin up an endpoint that would be equivalent to the existing endpoints in terms of functionality and state.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants