Internet-Draft | Abbreviated Title | September 2024 |
Chin | Expires 21 March 2025 | [Page] |
This document proposes a standard for mapping wallets to domain names using TXT records. The goal is to provide a secure and scalable way to associate wallets with domain names, enabling seamless lookup as well as assisting in authentication. The proposal heavily uses DNSSEC to ensure security. We also will propose a mechanism for mapping a wallet back to a domain name.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 21 March 2025.¶
Copyright (c) 2024 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
There is fragmentation in the mapping of Web3 Wallets to Domain Names [RFC1034] as well as the reverse lookup process. This document is putting forth a standard to map Web3 Wallet addresses to Domain Names and investigates the associated security and technical concerns.¶
As the use of digital wallets and online services grows, the need for a standardized way to lookup wallet addresses in an human readable format becomes increasingly important. This proposal aims to provide a solution that is easy to implement, scalable, and secure.¶
The proposed solution involves creating a TXT record with the record extension "_w3addr" to map a wallet to a domain name. The TXT record will contain a object that maps the wallet address to the registered coin type token [SLIP-0044]. It is assumed that the record will be part of a DNSSEC [RFC4033] [RFC9364] signed zonefile and that users of this service will verify the signatures to ensure that the record has been returned without alteration in flight.¶
On the reverse mapping, we propose that we allow a singular coin type/address be mapped to a domain name in DNS. This will also be protected by DNSSEC. We encourage users to use a more centralized registry for this.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
The TXT record SHALL have the following format:¶
_w3addr IN TXT "coin1:address1,coin2:address2,..."¶
record_list = item ("," item)* item = (coin_name ("|" coin_name | "*")*) ":" address coin_name = [a-zA-Z0-9_]+ address = [a-zA-Z0-9]+¶
The * symbol indicates zero or more occurrences of the preceding element. The + symbol indicates one or more occurrences.¶
This grammar can be used to parse the input string and extract the chain identifier and addresses.¶
Suppose a user wants to map their wallet with the public key 0x1234567890abcdef to the domain example.com using the registered coin type tokens BTC and ETH. The TXT record would be:¶
_w3addr IN TXT "BTC:0x1234567890abcd,ETH:0x987654321098765"¶
To support multiple wallets and chains, the TXT record SHALL allow for a solitary wildcard * to substitute for the default chain name. For example:¶
_w3addr IN TXT "*:0x1234567890abcd,ETH:0x987654321098765"¶
The lookup will return the most specific record for a chain.¶
To support multiple records, the TXT record SHALL allow for multiple coin:address pairs separated by commas. If the record exceeds the 2048 character limit, it MAY be continued on additional TXT records. There is no guarantees on ordering the records so overlapping records MAY ordered at the resolver's discretion. In the event of duplicate chains it is RECOMMENDED that multiple records be returned dedupped for identical addresses.¶
Implementations of this RFC SHALL:¶
A wallet owner has the OPTIONAL ability to setup a reverse lookup using DNS in a similar manner for IANA in-addr.arpa and ip6.arpa against a centralized service. Queriants will be able to query a CNAME record with wallet information, to get a domain mapping, they have the OPTIONAL ability to query with a chain designation using the registered coin type defined in SLIP-0044.¶
Until IANA decides to provide this service, this MAY be offered by outside parties.¶
DNS is case insensitive, but some wallet addresses are case sensitive. Because of the vast namespace available in Web3 Addresses, it is unlikely, but MAY result in a collision.¶
There is currently no IANA support lookup path, but a user will be able to lookup from a reverse mapping provider until there is a centralized body.¶
It can be qualified as a chain designation¶
0x1234567890abcd.eth.wallet.vana IN CNAME _w3addr.test.vana¶
or¶
Default¶
0x1234567890abcd.wallet.vana IN CNAME test.vana¶
It is NOT SUPPORTED for a wallet / network pair to point to multiple domains. The CNAME record does not support returning multiple records.¶
To ensure the security of the mapping, the following measures will be taken:¶
If the source of the DNS zone is compromised, the wallet address mapping is compromised, it is imperative that this not occur.¶
This proposal requests that IANA support reverse mapping of wallet addresses to domains.¶
Here is an example of how to create and retrieve a TXT records using the _w3addr name:¶
import dns.resolver.wallet # Retrieve the TXT record record = dns.resolveWallet("example.com", "BTC") print(record.value) # Output: "0x1234567890abcdef"¶
Thanks to all of the contributors for contributions to security and clarity.¶
Reviewed by:¶