This PR implements BIP-353 support in Bitcoin Core’s wallet, enabling users to send Bitcoin to human-readable usernames instead of traditional addresses.
What is BIP-353?
BIP-353 specifies a method for resolving human-friendly payment instructions via DNS. Instead of sharing long Bitcoin addresses, users can share memorable usernames like alice._bitcoin-payment.example.com
.
Key Features
- New
-dnsresolver
option: Specify a DNSSEC-validating DNS resolver command to handle BIP-353 lookups - Seamless integration: The
sendtoaddress
RPC now accepts both traditional Bitcoin addresses and BIP-353 usernames - Automatic resolution: When a BIP-353 username is provided, it’s automatically resolved to a Bitcoin address before processing the transaction
How it works
- Users provide a username in the format:
username._bitcoin-payment.domain.com
- The wallet validates the username format
- If valid and a DNS resolver is configured, it queries the DNS TXT record
- The resolver returns a
bitcoin:
URI containing the destination address - The transaction proceeds with the resolved address
Example Usage
0# Configure DNS resolver
1bitcoind -dnsresolver="/home/user/dns-bitcoin-resolver"
2
3# Send to a BIP-353 username
4bitcoin-cli sendtoaddress "alice.user._bitcoin-payment.alice.com" 0.01
Implementation Details
- Validates usernames according to DNS naming rules and BIP-353 format
- Handles FQDN format (with or without trailing dot)
- Provides error messages for resolution failures
- Falls back to traditional address validation if the input isn’t a valid BIP-353 username
P.S.: There is an example -dnsresolver
application here: https://github.com/w0xlt/dns-bitcoin-resolver for testing
The idea of this PR is to gather feedback on whether this direction makes sense and how we might best implement BIP-353 support if there’s interest. This would be even better if combined with Silent Payment and DNS resolver with DNSSEC validation could also solve some issues related to Payjoin V2 implementation in Core.