Skip to content

Commit cd0c513

Browse files
committed
Merge #8083: Add support for dnsseeds with option to filter by servicebits
2d83013 Add support for dnsseeds with option to filter by servicebits (Jonas Schnelli)
2 parents 66ed450 + 2d83013 commit cd0c513

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

src/chainparams.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@
1616

1717
#include "chainparamsseeds.h"
1818

19+
std::string CDNSSeedData::getHost(uint64_t requiredServiceBits) const {
20+
//use default host for non-filter-capable seeds or if we use the default service bits (NODE_NETWORK)
21+
if (!supportsServiceBitsFiltering || requiredServiceBits == NODE_NETWORK)
22+
return host;
23+
24+
return strprintf("x%x.%s", requiredServiceBits, host);
25+
}
26+
1927
static CBlock CreateGenesisBlock(const char* pszTimestamp, const CScript& genesisOutputScript, uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount& genesisReward)
2028
{
2129
CMutableTransaction txNew;
@@ -197,6 +205,8 @@ class CTestNetParams : public CChainParams {
197205

198206
vFixedSeeds.clear();
199207
vSeeds.clear();
208+
// nodes with support for servicebits filtering should be at the top
209+
vSeeds.push_back(CDNSSeedData("testnetbitcoin.jonasschnelli.ch", "testnet-seed.bitcoin.jonasschnelli.ch", true));
200210
vSeeds.push_back(CDNSSeedData("bitcoin.petertodd.org", "testnet-seed.bitcoin.petertodd.org"));
201211
vSeeds.push_back(CDNSSeedData("bluematt.me", "testnet-seed.bluematt.me"));
202212
vSeeds.push_back(CDNSSeedData("bitcoin.schildbach.de", "testnet-seed.bitcoin.schildbach.de"));

src/chainparams.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@
1313

1414
#include <vector>
1515

16-
struct CDNSSeedData {
16+
class CDNSSeedData {
17+
public:
1718
std::string name, host;
18-
CDNSSeedData(const std::string &strName, const std::string &strHost) : name(strName), host(strHost) {}
19+
bool supportsServiceBitsFiltering;
20+
std::string getHost(uint64_t requiredServiceBits) const;
21+
CDNSSeedData(const std::string &strName, const std::string &strHost, bool supportsServiceBitsFilteringIn = false) : name(strName), host(strHost), supportsServiceBitsFiltering(supportsServiceBitsFilteringIn) {}
1922
};
2023

2124
struct SeedSpec6 {

src/net.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1464,12 +1464,13 @@ void ThreadDNSAddressSeed()
14641464
} else {
14651465
std::vector<CNetAddr> vIPs;
14661466
std::vector<CAddress> vAdd;
1467-
if (LookupHost(seed.host.c_str(), vIPs, 0, true))
1467+
uint64_t requiredServiceBits = NODE_NETWORK;
1468+
if (LookupHost(seed.getHost(requiredServiceBits).c_str(), vIPs, 0, true))
14681469
{
14691470
BOOST_FOREACH(const CNetAddr& ip, vIPs)
14701471
{
14711472
int nOneDay = 24*3600;
1472-
CAddress addr = CAddress(CService(ip, Params().GetDefaultPort()));
1473+
CAddress addr = CAddress(CService(ip, Params().GetDefaultPort()), requiredServiceBits);
14731474
addr.nTime = GetTime() - 3*nOneDay - GetRand(4*nOneDay); // use a random age between 3 and 7 days old
14741475
vAdd.push_back(addr);
14751476
found++;

0 commit comments

Comments
 (0)