Merge pull request #7278 from alvasw/Migrate_Socks5SeedOnionDiscovery_to_BitcoinCoreSeedListDiscovery

Migrate Socks5SeedOnionDiscovery to BitcoinCoreSeedListDiscovery
This commit is contained in:
Alejandro García 2024-11-05 05:06:05 +00:00 committed by GitHub
commit 694bfeff96
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 3 additions and 186 deletions

View File

@ -20,8 +20,6 @@ package bisq.network;
import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.net.discovery.PeerDiscovery;
import org.bitcoinj.net.discovery.PeerDiscoveryException;
import org.bitcoinj.net.discovery.SeedPeers;
import org.bitcoinj.params.MainNetParams;
import com.runjva.sourceforge.jsocks.protocol.Socks5Proxy;
@ -59,13 +57,9 @@ public class Socks5MultiDiscovery implements PeerDiscovery {
* SOCKS5_DISCOVER_ALL
*/
public Socks5MultiDiscovery(Socks5Proxy proxy, NetworkParameters params, int mode) {
if ((mode & SOCKS5_DISCOVER_ONION) != 0)
discoveryList.add(new Socks5SeedOnionDiscovery(proxy, params));
// Testnet has no addrSeeds so SeedPeers is not supported (would throw a nullPointer)
if ((mode & SOCKS5_DISCOVER_ADDR) != 0 && params == MainNetParams.get())
// note: SeedPeers does not perform any network operations, so does not use proxy.
discoveryList.add(new SeedPeers(params));
if ((mode & SOCKS5_DISCOVER_ONION) != 0 || (mode & SOCKS5_DISCOVER_ADDR) != 0) {
discoveryList.add(new BitcoinCoreSeedListDiscovery(mode));
}
if ((mode & SOCKS5_DISCOVER_DNS) != 0)
discoveryList.add(new Socks5DnsDiscovery(proxy, params));

View File

@ -1,177 +0,0 @@
/*
* This file is part of Bisq.
*
* Bisq is free software: you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at
* your option) any later version.
*
* Bisq is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
* License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Bisq. If not, see <http://www.gnu.org/licenses/>.
*/
package bisq.network;
import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.net.discovery.PeerDiscovery;
import org.bitcoinj.net.discovery.PeerDiscoveryException;
import com.runjva.sourceforge.jsocks.protocol.Socks5Proxy;
import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;
/**
* Socks5SeedOnionDiscovery provides a list of known Bitcoin .onion seeds.
* These are nodes running as hidden services on the Tor network.
*/
public class Socks5SeedOnionDiscovery implements PeerDiscovery {
private InetSocketAddress[] seedAddrs;
/**
* Supports finding peers by hostname over a socks5 proxy.
*
* @param proxy proxy the socks5 proxy to connect over.
* @param params param to be used for seed and port information.
*/
public Socks5SeedOnionDiscovery(@SuppressWarnings("UnusedParameters") Socks5Proxy proxy, NetworkParameters params) {
// We do this because NetworkParameters does not contain any .onion
// seeds. Perhaps someday...
String[] seedAddresses = {};
switch (params.getId()) {
case NetworkParameters.ID_MAINNET:
seedAddresses = mainNetSeeds();
break;
case NetworkParameters.ID_TESTNET:
seedAddresses = testNet3Seeds();
break;
}
this.seedAddrs = convertAddrsString(seedAddresses, params.getPort());
}
/**
* returns .onion nodes available on mainnet
*/
private String[] mainNetSeeds() {
// List copied from bitcoin-core on 2017-11-03
// https://raw.githubusercontent.com/bitcoin/bitcoin/master/contrib/seeds/nodes_main.txt
return new String[]{
"226eupdnaouu4h2v.onion",
"2frgxpe5mheghyom.onion",
"3ihjnsvwc3x6dp2o.onion",
"3w77hrilg6q64opl.onion",
"4ls4o6iszcd7mkfw.onion",
"4p3abjxqppzxi7qi.onion",
"546esc6botbjfbxb.onion",
"5msftytzlsskr4ut.onion",
"5ty6rxpgrkmdnk4a.onion",
"akmqyuidrf56ip26.onion",
"alhlegtjkdmbqsvt.onion",
"bafk5ioatlgt7dgl.onion",
"bup5n5e3kurvjzf3.onion",
"cjygd7pu5lqkky5j.onion",
"cyvpgt25274i5b7c.onion",
"dekj4wacywpqsad3.onion",
"dqpxwlpnv3z3hznl.onion",
"drarzpycbtxwbcld.onion",
"drp4pvejybx2ejdr.onion",
"dxkmtmwiq7ddtgul.onion",
"e6j57zkyibu2smad.onion",
"ejcqevujcqltqn7d.onion",
"eqgbt2ghfvsshbvo.onion",
"fgizgkdnndilo6ka.onion",
"fqxup4oev33eeidg.onion",
"gb5ypqt63du3wfhn.onion",
"ggdy2pb2avlbtjwq.onion",
"hahhloezyfqh3hci.onion",
"ihdv6bzz2gx72fs7.onion",
"in7r5ieo7ogkxbne.onion",
"kvd44sw7skb5folw.onion",
"mn744hbioayn3ojs.onion",
"ms4ntrrisfxzpvmy.onion",
"n5lqwpjabqg62ihx.onion",
"o4sl5na6jeqgi3l6.onion",
"omjv24nbck4k5ud6.onion",
"po3j2hfkmf7sh36o.onion",
"psco6bxjewljrczx.onion",
"qi5yr6lvlckzffor.onion",
"qlv6py6hdtzipntn.onion",
"qynmpgdbp23xyfnj.onion",
"rhtawcs7xak4gi3t.onion",
"rjacws757ai66lre.onion",
"rjlnp3hwvrsmap6e.onion",
"rkdvqcrtfv6yt4oy.onion",
"rlafimkctvz63llg.onion",
"rlj4ppok4dnsdu5n.onion",
"seoskudzk6vn6mqz.onion",
"tayqi57tfiy7x3vk.onion",
"tchop676j6yppwwm.onion",
"trrtyp3sirmwttyu.onion",
"tx4zd7d5exonnblh.onion",
"u4ecb7txxi6l3gix.onion",
"umcxcmfycvejw264.onion",
"v7xqd42ocemalurd.onion",
"vb267mt3lnwfdmdb.onion",
"vev3n5fxfrtqj6e5.onion",
"visevrizz3quyagj.onion",
"vpg6p5e5ln33dqtp.onion",
"vr2ruasinafoy3fl.onion",
"x6pthvd5x6abyfo7.onion",
"xbwbzrspvav7u5ie.onion",
"xfcevnql2chnawko.onion",
"ycivnom44dmxx4ob.onion",
"yzdvlv5daitafekn.onion"
};
}
/**
* returns .onion nodes available on testnet3
*/
private String[] testNet3Seeds() {
// this list copied from bitcoin-core on 2017-01-19
// https://github.com/bitcoin/bitcoin/blob/57b34599b2deb179ff1bd97ffeab91ec9f904d85/contrib/seeds/nodes_test.txt
return new String[]{
"thfsmmn2jbitcoin.onion",
"it2pj4f7657g3rhi.onion",
"nkf5e6b7pl4jfd4a.onion",
"4zhkir2ofl7orfom.onion",
"t6xj6wilh4ytvcs7.onion",
"i6y6ivorwakd7nw3.onion",
"ubqj4rsu3nqtxmtp.onion"
};
}
/**
* Returns an array containing all the Bitcoin nodes within the list.
*/
@Override
public InetSocketAddress[] getPeers(long services, long timeoutValue, TimeUnit timeoutUnit) throws PeerDiscoveryException {
if (services != 0)
throw new PeerDiscoveryException("DNS seeds cannot filter by services: " + services);
return seedAddrs;
}
/**
* Converts an array of hostnames to array of unresolved InetSocketAddress
*/
private InetSocketAddress[] convertAddrsString(String[] addrs, int port) {
InetSocketAddress[] list = new InetSocketAddress[addrs.length];
for (int i = 0; i < addrs.length; i++) {
list[i] = InetSocketAddress.createUnresolved(addrs[i], port);
}
return list;
}
@Override
public void shutdown() {
//TODO should we add a DnsLookupTor.shutdown() ?
}
}