Last active
February 11, 2021 01:05
-
-
Save notmandatory/3520a27dba6be63dd73fcefd8809859c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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