I would like to propose a new web standard URI scheme, ettp://. Currently there is no URI scheme that is well known and associated with Web3. ENS is known more broadly for identity. Looking out into the future, I believe the number of ENS names registered for other uses will be much larger than for identity.
ENS supports both native .eth domains as well as DNS domains. It is however not clear to most the differences between them, or what happens when a DNS name (e.g. .com) is registered as an ENS name, particularly when it comes to web browser resolution.
When it is possible to resolve an ENS name in a web browser, either by using a plugin (e.g. Metamask) or native browser support, (e.g. Brave Browser) there is still not one standard. With Metamask it is necessary to use a trailing slash with the ENS name. For instance, if using Chrome with Metamask, vitalik.eth returns a google search, and vitalik.eth/ returns a dapp, wherein the URI is also changed to https://bafybeihm77mt7bxtctilul2ko75gxzrzzc3kd5k5do7bjdjkgnguv7fe24.ipfs.dweb.link/.
When it comes to DNS names registered with ENS this becomes even more confusing. The solution I believe is to use a new Web3 URI scheme for resolving content data in web browsers.
The “ethereum:” scheme, https://github.com/ethereum/EIPs/blob/master/EIPS/eip-681.md, I believe is not sufficient for web page resolution. “ethereum:” can be thought of much like “mailto:” which is associated with a specific purpose, and that is payment. There is currently no way to disambiguate payment from web page resolution with “ethereum:” unless “pay-” is added, e.g. “ethereum:pay-www”. While this might be a possible way to disambiguate payment from web page resolution it doesn’t make Web3 content resolution more understandable. Also, ENS is not just a system for Ethereum, therefore it is desirable to use a more generic URI scheme.
The ETTP standard could include:
- A single Web3 standard for browser resolution of distributed web content. e.g. ettp://vitalik.eth
- resolving NFTs using only a contract address and id in the browser. e.g. ettp://nftcontract.eth/nft/1
- resolving ENS resolver data in the browser e.g ettp://vitalik.eth/ens
- resolving specific txt fields in the resolver. e.g. ettp://vitalik.eth/avatar
- resolving in the browser a public distributed profile e.g. ettp://vitalik.eth/profile
- resolving a distributed social graph including friends e.g ettp://vitalik.eth/friends
- resolving Web3 content subscriptions ettp://vitalik.eth/subscriptions
The ETTP scheme works differently than traditional URI’s in that the path portion of the URI is part of the protocol. This makes sense, because with distributed files i.e. CIDs, it is inconvenient to use path variables. The only conflict this introduces is with CID’s of directories, which use the path part of the URI. For this case I propose the standard would be to use the query part of the path e.g. ettp://vitalik.eth?cid=QmPvaEQFVvuiaYzkSVUp23iHTQeEUpDaJnP8U7C3PqE57w/mytextfile.txt or ettp://vitalik.eth?path=mytextfile.txt
Because the way that queries work using key-value pairs, there are an unlimited number of key-value pairs that can be used. Others might include NFT standard e.g. nftstandard=erc721, chain id e.g. chainid=1, etc.
What does ETTP stand for? Ethereum Token Transfer Protocol, but the more important thing is that it is familiar, and new at the same time, and is specifically designed for browser resolution for Web3.