Date: Mar 3, 2026 Status: ✅ Working
# CNAME record
relay.jemartel.near → gork-relay-production.up.railway.app
# TXT record with full multiaddr
_p2p.relay.jemartel.near TXT → /dns4/relay.jemartel.near/tcp/4001/p2p/12D3KooWA9CMq2VYF5dt6TvWGPKKyXEwnp5Q2zwGtmb7XAu2Z8fGFile: src/relay_discovery.rs
What it does:
- Queries NEAR DNS contracts for TXT records
- Extracts multiaddr automatically
- Falls back to manual bootstrap peers if discovery fails
Code:
let discovery = RelayDiscovery::new("dns.jemartel.near");
let multiaddr = discovery.discover("relay.jemartel.near").await?;
// Returns: /dns4/relay.jemartel.near/tcp/4001/p2p/12D3Koo...New flag: --relay <domain>
Old way (verbose):
gork-agent daemon --bootstrap-peers /dns4/relay.jemartel.near/tcp/4001/p2p/12D3KooWA9CMq2VYF5dt6TvWGPKKyXEwnp5Q2zwGtmb7XAu2Z8fGNew way (seamless!):
gork-agent daemon --relay relay.jemartel.nearUser runs: gork-agent daemon --relay relay.jemartel.near
↓
Extract domain: relay.jemartel.near
↓
Query DNS: dns.jemartel.near contract
↓
Lookup: _p2p.relay TXT record
↓
Get: /dns4/relay.jemartel.near/tcp/4001/p2p/12D3Koo...
↓
Connect to relay automatically!
If DNS discovery fails:
gork-agent daemon --relay relay.jemartel.near --bootstrap-peers /ip4/backup/...✅ User-friendly: Just provide domain name ✅ Decentralized: Uses NEAR blockchain for DNS ✅ Automatic: No need to copy/paste peer IDs ✅ Flexible: Falls back to manual mode ✅ Standard: Uses DNS TXT records (RFC 1035)
# Query TXT record
near view dns.jemartel.near dns_query '{"name":"_p2p.relay","record_type":"TXT"}' --networkId mainnet
# List all records
near view dns.jemartel.near dns_list_all '{}' --networkId mainnet{
"name": "_p2p.relay",
"record": {
"record_type": "TXT",
"value": "/dns4/relay.jemartel.near/tcp/4001/p2p/12D3KooWA9CMq2VYF5dt6TvWGPKKyXEwnp5Q2zwGtmb7XAu2Z8fG",
"ttl": 300,
"priority": null
}
}# Start daemon with relay discovery
gork-agent daemon --relay relay.jemartel.near
# Output:
🔍 Discovering relay: relay.jemartel.near
✅ Relay discovered: /dns4/relay.jemartel.near/tcp/4001/p2p/12D3KooWA9CMq2VYF5dt6TvWGPKKyXEwnp5Q2zwGtmb7XAu2Z8fG
🚀 Starting Gork Agent P2P Daemon# If DNS fails, use manual peer
gork-agent daemon --relay relay.jemartel.near --bootstrap-peers /ip4/backup-relay/tcp/4001/p2p/BACKUP_PEER_ID# Explicit multiaddr (no discovery)
gork-agent daemon --bootstrap-peers /dns4/relay.jemartel.near/tcp/4001/p2p/12D3KooWA9CMq2VYF5dt6TvWGPKKyXEwnp5Q2zwGtmb7XAu2Z8fG┌─────────────┐
│ gork-agent │
│ daemon │
└──────┬──────┘
│ --relay relay.jemartel.near
↓
┌──────────────────────┐
│ RelayDiscovery │
│ 1. Parse domain │
│ 2. Query NEAR DNS │
│ 3. Extract multiaddr │
└──────┬───────────────┘
│
↓
┌──────────────────────┐
│ dns.jemartel.near │
│ (NEAR contract) │
│ │
│ _p2p.relay TXT │
└──────┬───────────────┘
│
↓
┌──────────────────────┐
│ Railway Relay │
│ relay.jemartel.near │
│ Peer ID: 12D3Koo... │
└──────────────────────┘
-
src/relay_discovery.rs (NEW)
- DNS discovery logic
- NEAR CLI integration
- Multiaddr parsing
-
src/main.rs (UPDATED)
- Added
--relayflag to Daemon command - Integrated relay discovery
- Fallback to bootstrap-peers
- Added
-
DNS Records (ADDED)
relay:CNAME→ Railway relay_p2p.relay:TXT→ Full multiaddr
# Test DNS resolution
near view dns.jemartel.near dns_query '{"name":"_p2p.relay","record_type":"TXT"}' --networkId mainnet
# Test relay discovery (requires NEAR CLI)
cd /Users/asil/.openclaw/workspace/gork-protocol
./target/release/gork-agent daemon --relay relay.jemartel.near- Caching - Cache discovered multiaddrs for faster startup
- Multiple relays - Support comma-separated relay domains
- Health checks - Verify relay is responsive before connecting
- DNS over HTTPS - Alternative discovery method
- Registry integration - Store relay metadata in Gork registry
- Relay: ~$3-5/month (Railway)
- DNS: 2.09 NEAR (one-time storage)
- Discovery: Free (uses NEAR RPC)
✅ Before: Users had to copy/paste 80+ character multiaddrs
✅ After: Users just provide domain name: relay.jemartel.near
Result: 10x better developer experience! 🚀
This implementation demonstrates how NEAR can serve as infrastructure for decentralized applications beyond simple token transfers.