Skip to content

Instantly share code, notes, and snippets.

@notmandatory
Last active February 11, 2021 01:05
Show Gist options
  • Save notmandatory/3520a27dba6be63dd73fcefd8809859c to your computer and use it in GitHub Desktop.
Save notmandatory/3520a27dba6be63dd73fcefd8809859c to your computer and use it in GitHub Desktop.
use bdk::blockchain::compact_filters::{Mempool, Peer};
use bitcoin::Network;
use std::sync::Arc;
use bdk::bitcoin::network::constants::ServiceFlags;
use trust_dns_resolver::config::*;
use trust_dns_resolver::Resolver;
// add to [dev-dependencies] trust-dns-resolver = "^0.20"
// fix peer version timeout to 5 seconds (from None) and handle unexpected response
//
// let version = if let Some(NetworkMessage::Version(version)) =
// Self::_recv(&responses, "version", Some(Duration::new(5, 0)))?
fn main() {
// https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp
let testnet_seeds = vec![
"testnet-seed.bitcoin.jonasschnelli.ch",
"seed.tbtc.petertodd.org",
"seed.testnet.bitcoin.sprovoost.nl",
"testnet-seed.bluematt.me",
];
let mempool = Arc::new(Mempool::default());
// Construct a new Resolver with default configuration options
let resolver = Resolver::new(ResolverConfig::default(), ResolverOpts::default()).unwrap();
// Lookup the IP addresses associated with a name.
for seed in testnet_seeds {
let response = resolver.lookup_ip(seed).unwrap();
// There can be many addresses associated with the name,
// this can return IPv4 and/or IPv6 addresses
for address in response.iter() {
if address.is_ipv4() {
let peer = Peer::connect(
format!("{}:18333", address),
Arc::clone(&mempool),
Network::Testnet,
);
if let Ok(peer) = peer {
let version_msg = peer.get_version();
let version = version_msg.version;
let services = version_msg.services;
if version >= 70016 && services.has(ServiceFlags::COMPACT_FILTERS) {
println!("{} | version: {}, services: {}", address, version, services);
}
} else {
println!("{} failed", address);
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment