Browse Source

Add support for dnsseeds with option to filter by servicebits

tags/v0.15.1
Jonas Schnelli 4 years ago
parent
commit
2d83013dc5
No account linked to committer's email address
3 changed files with 18 additions and 4 deletions
  1. 10
    0
      src/chainparams.cpp
  2. 5
    2
      src/chainparams.h
  3. 3
    2
      src/net.cpp

+ 10
- 0
src/chainparams.cpp View File

@@ -16,6 +16,14 @@

#include "chainparamsseeds.h"

std::string CDNSSeedData::getHost(uint64_t requiredServiceBits) const {
//use default host for non-filter-capable seeds or if we use the default service bits (NODE_NETWORK)
if (!supportsServiceBitsFiltering || requiredServiceBits == NODE_NETWORK)
return host;
return strprintf("x%x.%s", requiredServiceBits, host);
}

static CBlock CreateGenesisBlock(const char* pszTimestamp, const CScript& genesisOutputScript, uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount& genesisReward)
{
CMutableTransaction txNew;
@@ -197,6 +205,8 @@ public:

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

+ 5
- 2
src/chainparams.h View File

@@ -13,9 +13,12 @@

#include <vector>

struct CDNSSeedData {
class CDNSSeedData {
public:
std::string name, host;
CDNSSeedData(const std::string &strName, const std::string &strHost) : name(strName), host(strHost) {}
bool supportsServiceBitsFiltering;
std::string getHost(uint64_t requiredServiceBits) const;
CDNSSeedData(const std::string &strName, const std::string &strHost, bool supportsServiceBitsFilteringIn = false) : name(strName), host(strHost), supportsServiceBitsFiltering(supportsServiceBitsFilteringIn) {}
};

struct SeedSpec6 {

+ 3
- 2
src/net.cpp View File

@@ -1466,12 +1466,13 @@ void ThreadDNSAddressSeed()
} else {
std::vector<CNetAddr> vIPs;
std::vector<CAddress> vAdd;
if (LookupHost(seed.host.c_str(), vIPs, 0, true))
uint64_t requiredServiceBits = NODE_NETWORK;
if (LookupHost(seed.getHost(requiredServiceBits).c_str(), vIPs, 0, true))
{
BOOST_FOREACH(const CNetAddr& ip, vIPs)
{
int nOneDay = 24*3600;
CAddress addr = CAddress(CService(ip, Params().GetDefaultPort()));
CAddress addr = CAddress(CService(ip, Params().GetDefaultPort()), requiredServiceBits);
addr.nTime = GetTime() - 3*nOneDay - GetRand(4*nOneDay); // use a random age between 3 and 7 days old
vAdd.push_back(addr);
found++;

Loading…
Cancel
Save