splash 0.2.0

A decentralized network for sharing offers across the Chia ecosystem
Documentation
use hickory_resolver::{error::ResolveError, TokioAsyncResolver};
use libp2p::Multiaddr;
use std::str::FromStr;

pub async fn resolve_peers_from_dns(network_name: String) -> Result<Vec<Multiaddr>, ResolveError> {
    let (config, mut opts) = hickory_resolver::system_conf::read_system_conf()?;

    opts.edns0 = true;
    opts.try_tcp_on_error = true;

    let resolver = TokioAsyncResolver::tokio(config, opts);
    let records = resolver
        .txt_lookup(format!("_dnsaddr.{}.dexie.space.", network_name))
        .await?;

    let peers: Vec<Multiaddr> = records
        .iter()
        .flat_map(|record| record.txt_data())
        .filter_map(|txt| std::str::from_utf8(txt).ok())
        .map(|addr_str| addr_str.trim_start_matches("dnsaddr="))
        .filter_map(|addr_str| Multiaddr::from_str(addr_str).ok())
        .collect();

    if peers.is_empty() {
        Err(ResolveError::from("No peers found"))
    } else {
        Ok(peers)
    }
}