mirror of
https://github.com/bitcoinj/bitcoinj.git
synced 2025-02-22 22:25:41 +01:00
DnsDiscovery, MultiplexingDiscovery: use Network in constructors
This commit is contained in:
parent
27cb2fc3cc
commit
7efab37c6c
11 changed files with 92 additions and 38 deletions
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue