DnsDiscovery, MultiplexingDiscovery: use Network in constructors

This commit is contained in:
Sean Gilligan 2023-07-15 10:21:31 -07:00 committed by Andreas Schildbach
parent 27cb2fc3cc
commit 7efab37c6c
11 changed files with 92 additions and 38 deletions

View file

@ -1033,7 +1033,7 @@ public class PeerGroup implements TransactionBroadcaster {
try {
this.requiredServices = requiredServices;
peerDiscoverers.clear();
addPeerDiscovery(MultiplexingDiscovery.forServices(params, requiredServices));
addPeerDiscovery(MultiplexingDiscovery.forServices(params.network(), requiredServices));
} finally {
lock.unlock();
}

View file

@ -445,7 +445,7 @@ public class WalletAppKit extends AbstractIdleService implements Closeable {
vPeerGroup.setMaxConnections(peerAddresses.length);
peerAddresses = null;
} else if (params.network() != BitcoinNetwork.REGTEST) {
vPeerGroup.addPeerDiscovery(discovery != null ? discovery : new DnsDiscovery(params));
vPeerGroup.addPeerDiscovery(discovery != null ? discovery : new DnsDiscovery(network));
}
vChain.addWallet(vWallet);
vPeerGroup.addWallet(vWallet);

View file

@ -17,6 +17,7 @@
package org.bitcoinj.net.discovery;
import org.bitcoinj.base.Network;
import org.bitcoinj.base.internal.PlatformUtils;
import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.core.Services;
@ -52,27 +53,44 @@ public class DnsDiscovery extends MultiplexingDiscovery {
/**
* Supports finding peers through DNS A records. Community run DNS entry points will be used.
*
* @param netParams Network parameters to be used for port information.
* @param network Network to be used for port information.
*/
public DnsDiscovery(NetworkParameters netParams) {
this(netParams.getDnsSeeds(), netParams);
public DnsDiscovery(Network network) {
this(NetworkParameters.of(network).getDnsSeeds(), network);
}
/**
* Supports finding peers through DNS A records.
*
* @param dnsSeeds Host names to be examined for seed addresses.
* @param params Network parameters to be used for port information.
* @param network Network to be used for port information.
*/
public DnsDiscovery(String[] dnsSeeds, NetworkParameters params) {
super(params, buildDiscoveries(params, dnsSeeds));
public DnsDiscovery(String[] dnsSeeds, Network network) {
super(network, buildDiscoveries(network, dnsSeeds));
}
private static List<PeerDiscovery> buildDiscoveries(NetworkParameters params, String[] seeds) {
/**
* @deprecated Use {@link DnsDiscovery#DnsDiscovery(Network)}
*/
@Deprecated
public DnsDiscovery(NetworkParameters netParams) {
this(netParams.getDnsSeeds(), netParams.network());
}
/**
* @deprecated Use {@link DnsDiscovery#DnsDiscovery(String[], Network)}
*/
@Deprecated
public DnsDiscovery(String[] dnsSeeds, NetworkParameters params) {
this(dnsSeeds, params.network());
}
private static List<PeerDiscovery> buildDiscoveries(Network network, String[] seeds) {
List<PeerDiscovery> discoveries = new ArrayList<>();
if (seeds != null)
for (String seed : seeds)
discoveries.add(new DnsSeedDiscovery(params, seed));
discoveries.add(new DnsSeedDiscovery(network, seed));
return discoveries;
}
@ -91,9 +109,17 @@ public class DnsDiscovery extends MultiplexingDiscovery {
private final String hostname;
private final NetworkParameters params;
public DnsSeedDiscovery(NetworkParameters params, String hostname) {
public DnsSeedDiscovery(Network network, String hostname) {
this.hostname = hostname;
this.params = params;
this.params = NetworkParameters.of(network);
}
/**
* @deprecated Use {@link DnsSeedDiscovery#DnsSeedDiscovery(Network, String)}
*/
@Deprecated
public DnsSeedDiscovery(NetworkParameters params, String hostname) {
this(params.network(), hostname);
}
@Override

View file

@ -17,6 +17,7 @@
package org.bitcoinj.net.discovery;
import org.bitcoinj.base.Network;
import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.core.Services;
import org.bitcoinj.core.VersionMessage;
@ -50,6 +51,7 @@ public class MultiplexingDiscovery implements PeerDiscovery {
private static final Logger log = LoggerFactory.getLogger(MultiplexingDiscovery.class);
protected final List<PeerDiscovery> seeds;
@Deprecated
protected final NetworkParameters netParams;
private volatile ExecutorService vThreadPool;
private final boolean parallelQueries;
@ -57,41 +59,69 @@ public class MultiplexingDiscovery implements PeerDiscovery {
/**
* Builds a suitable set of peer discoveries. Will query them in parallel before producing a merged response.
* @param params Network to use.
* @param network Network to use.
* @param services Required services as a bitmask, e.g. {@link Services#NODE_NETWORK}.
*/
public static MultiplexingDiscovery forServices(NetworkParameters params, long services) {
return forServices(params, services, true, true);
public static MultiplexingDiscovery forServices(Network network, long services) {
return forServices(network, services, true, true);
}
/**
* Builds a suitable set of peer discoveries.
* @param params Network to use.
* @param network Network to use.
* @param services Required services as a bitmask, e.g. {@link Services#NODE_NETWORK}.
* @param parallelQueries When true, seeds are queried in parallel
* @param shufflePeers When true, queried peers are shuffled
*/
public static MultiplexingDiscovery forServices(NetworkParameters params, long services, boolean parallelQueries,
public static MultiplexingDiscovery forServices(Network network, long services, boolean parallelQueries,
boolean shufflePeers) {
List<PeerDiscovery> discoveries = new ArrayList<>();
String[] dnsSeeds = params.getDnsSeeds();
String[] dnsSeeds = NetworkParameters.of(network).getDnsSeeds();
if (dnsSeeds != null)
for (String dnsSeed : dnsSeeds)
discoveries.add(new DnsSeedDiscovery(params, dnsSeed));
return new MultiplexingDiscovery(params, discoveries, parallelQueries, shufflePeers);
discoveries.add(new DnsSeedDiscovery(network, dnsSeed));
return new MultiplexingDiscovery(network, discoveries, parallelQueries, shufflePeers);
}
/**
* @deprecated Use {@link #forServices(Network, long)}
*/
@Deprecated
public static MultiplexingDiscovery forServices(NetworkParameters params, long services) {
return forServices(params.network(), services);
}
/**
* @deprecated Use {@link #forServices(Network, long, boolean, boolean)}
*/
@Deprecated
public static MultiplexingDiscovery forServices(NetworkParameters params, long services, boolean parallelQueries,
boolean shufflePeers) {
return forServices(params.network(), services, parallelQueries, shufflePeers);
}
/**
* Will query the given seeds in parallel before producing a merged response.
* @param network The network we are querying for
* @param seeds Sources to query in parallel
*/
public MultiplexingDiscovery(NetworkParameters params, List<PeerDiscovery> seeds) {
this(params, seeds, true, true);
public MultiplexingDiscovery(Network network, List<PeerDiscovery> seeds) {
this(network, seeds, true, true);
}
private MultiplexingDiscovery(NetworkParameters params, List<PeerDiscovery> seeds, boolean parallelQueries,
/**
* Will query the given seeds in parallel before producing a merged response.
* @deprecated Use {@link MultiplexingDiscovery#MultiplexingDiscovery(Network, List)}
*/
@Deprecated
public MultiplexingDiscovery(NetworkParameters params, List<PeerDiscovery> seeds) {
this(params.network(), seeds);
}
private MultiplexingDiscovery(Network network, List<PeerDiscovery> seeds, boolean parallelQueries,
boolean shufflePeers) {
checkArgument(!seeds.isEmpty() || params.network() == REGTEST);
this.netParams = params;
checkArgument(!seeds.isEmpty() || network == REGTEST);
this.netParams = NetworkParameters.of(network);
this.seeds = seeds;
this.parallelQueries = parallelQueries;
this.shufflePeers = shufflePeers;

View file

@ -16,7 +16,7 @@
package org.bitcoinj.net.discovery;
import org.bitcoinj.params.MainNetParams;
import org.bitcoinj.base.BitcoinNetwork;
import org.junit.Test;
import java.net.InetSocketAddress;
@ -32,7 +32,7 @@ public class DnsDiscoveryTest {
@Test
public void testBuildDiscoveries() throws PeerDiscoveryException {
String[] seeds = new String[] { "seed.bitcoin.sipa.be", "dnsseed.bluematt.me" };
DnsDiscovery dnsDiscovery = new DnsDiscovery(seeds, MainNetParams.get());
DnsDiscovery dnsDiscovery = new DnsDiscovery(seeds, BitcoinNetwork.MAINNET);
assertTrue(dnsDiscovery.seeds.size() == 2);
for (PeerDiscovery peerDiscovery : dnsDiscovery.seeds) {
assertTrue(peerDiscovery.getPeers(0, Duration.ofMillis(100)).size() > 0);
@ -41,13 +41,13 @@ public class DnsDiscoveryTest {
@Test(expected = PeerDiscoveryException.class)
public void testGetPeersThrowsPeerDiscoveryExceptionWithServicesGreaterThanZero() throws PeerDiscoveryException {
DnsDiscovery.DnsSeedDiscovery dnsSeedDiscovery = new DnsDiscovery.DnsSeedDiscovery(MainNetParams.get(), "");
DnsDiscovery.DnsSeedDiscovery dnsSeedDiscovery = new DnsDiscovery.DnsSeedDiscovery(BitcoinNetwork.MAINNET, "");
dnsSeedDiscovery.getPeers(1, Duration.ofMillis(100));
}
@Test
public void testGetPeersReturnsNotEmptyListOfSocketAddresses() throws PeerDiscoveryException {
DnsDiscovery.DnsSeedDiscovery dnsSeedDiscovery = new DnsDiscovery.DnsSeedDiscovery(MainNetParams.get(),
DnsDiscovery.DnsSeedDiscovery dnsSeedDiscovery = new DnsDiscovery.DnsSeedDiscovery(BitcoinNetwork.MAINNET,
"localhost");
List<InetSocketAddress> inetSocketAddresses = dnsSeedDiscovery.getPeers(0, Duration.ofMillis(100));
assertNotEquals(0, inetSocketAddresses.size());
@ -55,7 +55,7 @@ public class DnsDiscoveryTest {
@Test(expected = PeerDiscoveryException.class)
public void testGetPeersThrowsPeerDiscoveryExceptionForUnknownHost() throws PeerDiscoveryException {
DnsDiscovery.DnsSeedDiscovery dnsSeedDiscovery = new DnsDiscovery.DnsSeedDiscovery(MainNetParams.get(),
DnsDiscovery.DnsSeedDiscovery dnsSeedDiscovery = new DnsDiscovery.DnsSeedDiscovery(BitcoinNetwork.MAINNET,
"unknown host");
dnsSeedDiscovery.getPeers(0, Duration.ofMillis(100));
}

View file

@ -62,7 +62,7 @@ public class FetchBlock implements Callable<Integer> {
BlockChain chain = new BlockChain(network, blockStore);
PeerGroup peerGroup = new PeerGroup(network, chain);
if (localhost) {
peerGroup.addPeerDiscovery(new DnsDiscovery(params));
peerGroup.addPeerDiscovery(new DnsDiscovery(network));
} else {
PeerAddress addr = PeerAddress.localhost(params);
peerGroup.addAddress(addr);

View file

@ -21,7 +21,6 @@ import org.bitcoinj.base.BitcoinNetwork;
import org.bitcoinj.base.Network;
import org.bitcoinj.core.AddressMessage;
import org.bitcoinj.base.Coin;
import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.core.Peer;
import org.bitcoinj.core.PeerAddress;
import org.bitcoinj.core.PeerGroup;
@ -72,7 +71,7 @@ public class PeerMonitor {
peerGroup = new PeerGroup(network, null /* no chain */);
peerGroup.setUserAgent("PeerMonitor", "1.0");
peerGroup.setMaxConnections(4);
peerGroup.addPeerDiscovery(new DnsDiscovery(NetworkParameters.of(network)));
peerGroup.addPeerDiscovery(new DnsDiscovery(network));
peerGroup.addConnectedEventListener((peer, peerCount) -> {
refreshUI();
lookupReverseDNS(peer);

View file

@ -57,7 +57,7 @@ public class PrintPeers {
private static void printDNS(Network network) throws PeerDiscoveryException {
long start = System.currentTimeMillis();
DnsDiscovery dns = new DnsDiscovery(NetworkParameters.of(network));
DnsDiscovery dns = new DnsDiscovery(network);
dnsPeers = dns.getPeers(0, Duration.ofSeconds(10));
printPeers(dnsPeers);
printElapsed(start);

View file

@ -67,7 +67,7 @@ public class RestoreFromSeed {
SPVBlockStore chainStore = new SPVBlockStore(params, chainFile);
BlockChain chain = new BlockChain(network, chainStore);
PeerGroup peerGroup = new PeerGroup(network, chain);
peerGroup.addPeerDiscovery(new DnsDiscovery(params));
peerGroup.addPeerDiscovery(new DnsDiscovery(network));
// Now we need to hook the wallet up to the blockchain and the peers. This registers event listeners that notify our wallet about new transactions.
chain.addWallet(wallet);

View file

@ -121,7 +121,7 @@ public class BuildCheckpoints implements Callable<Integer> {
// use a peer group discovered with dns
peerGroup.setUserAgent("PeerMonitor", "1.0");
peerGroup.setMaxConnections(20);
peerGroup.addPeerDiscovery(new DnsDiscovery(params));
peerGroup.addPeerDiscovery(new DnsDiscovery(net));
peerGroup.start();
// Connect to at least 4 peers because some may not support download

View file

@ -28,7 +28,6 @@ import org.bitcoinj.base.BitcoinNetwork;
import org.bitcoinj.base.Network;
import org.bitcoinj.base.internal.TimeUtils;
import org.bitcoinj.core.listeners.*;
import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.core.Peer;
import org.bitcoinj.core.PeerGroup;
import org.bitcoinj.core.Transaction;
@ -52,7 +51,7 @@ public class WatchMempool {
BriefLogFormatter.init();
PeerGroup peerGroup = new PeerGroup(NETWORK);
peerGroup.setMaxConnections(32);
peerGroup.addPeerDiscovery(new DnsDiscovery(NetworkParameters.of(NETWORK)));
peerGroup.addPeerDiscovery(new DnsDiscovery(NETWORK));
peerGroup.addOnTransactionBroadcastListener((peer, tx) -> {
Result result = DefaultRiskAnalysis.FACTORY.create(null, tx, NO_DEPS).analyze();
incrementCounter(TOTAL_KEY);