net: Deserialize hardcoded seeds from BIP155 blob

Switch from IPv6 slot-based format to more compact and flexible BIP155
format.
pull/826/head
W. J. van der Laan 4 years ago
parent 9b29d5df7f
commit b2ee8b207d

@ -134,7 +134,7 @@ public:
bech32_hrp = "bc"; bech32_hrp = "bc";
vFixedSeeds = std::vector<SeedSpec6>(std::begin(pnSeed6_main), std::end(pnSeed6_main)); vFixedSeeds = std::vector<uint8_t>(std::begin(chainparams_seed_main), std::end(chainparams_seed_main));
fDefaultConsistencyChecks = false; fDefaultConsistencyChecks = false;
fRequireStandard = true; fRequireStandard = true;
@ -239,7 +239,7 @@ public:
bech32_hrp = "tb"; bech32_hrp = "tb";
vFixedSeeds = std::vector<SeedSpec6>(std::begin(pnSeed6_test), std::end(pnSeed6_test)); vFixedSeeds = std::vector<uint8_t>(std::begin(chainparams_seed_test), std::end(chainparams_seed_test));
fDefaultConsistencyChecks = false; fDefaultConsistencyChecks = false;
fRequireStandard = false; fRequireStandard = false;

@ -14,11 +14,6 @@
#include <memory> #include <memory>
#include <vector> #include <vector>
struct SeedSpec6 {
uint8_t addr[16];
uint16_t port;
};
typedef std::map<int, uint256> MapCheckpoints; typedef std::map<int, uint256> MapCheckpoints;
struct CCheckpointData { struct CCheckpointData {
@ -108,7 +103,7 @@ public:
const std::vector<std::string>& DNSSeeds() const { return vSeeds; } const std::vector<std::string>& DNSSeeds() const { return vSeeds; }
const std::vector<unsigned char>& Base58Prefix(Base58Type type) const { return base58Prefixes[type]; } const std::vector<unsigned char>& Base58Prefix(Base58Type type) const { return base58Prefixes[type]; }
const std::string& Bech32HRP() const { return bech32_hrp; } const std::string& Bech32HRP() const { return bech32_hrp; }
const std::vector<SeedSpec6>& FixedSeeds() const { return vFixedSeeds; } const std::vector<uint8_t>& FixedSeeds() const { return vFixedSeeds; }
const CCheckpointData& Checkpoints() const { return checkpointData; } const CCheckpointData& Checkpoints() const { return checkpointData; }
//! Get allowed assumeutxo configuration. //! Get allowed assumeutxo configuration.
@ -130,7 +125,7 @@ protected:
std::string bech32_hrp; std::string bech32_hrp;
std::string strNetworkID; std::string strNetworkID;
CBlock genesis; CBlock genesis;
std::vector<SeedSpec6> vFixedSeeds; std::vector<uint8_t> vFixedSeeds;
bool fDefaultConsistencyChecks; bool fDefaultConsistencyChecks;
bool fRequireStandard; bool fRequireStandard;
bool m_is_test_chain; bool m_is_test_chain;

File diff suppressed because it is too large Load Diff

@ -141,8 +141,8 @@ bool GetLocal(CService& addr, const CNetAddr *paddrPeer)
return nBestScore >= 0; return nBestScore >= 0;
} }
//! Convert the pnSeed6 array into usable address objects. //! Convert the serialized seeds into usable address objects.
static std::vector<CAddress> convertSeed6(const std::vector<SeedSpec6> &vSeedsIn) static std::vector<CAddress> ConvertSeeds(const std::vector<uint8_t> &vSeedsIn)
{ {
// It'll only connect to one or two seed nodes because once it connects, // It'll only connect to one or two seed nodes because once it connects,
// it'll get a pile of addresses with newer timestamps. // it'll get a pile of addresses with newer timestamps.
@ -150,13 +150,14 @@ static std::vector<CAddress> convertSeed6(const std::vector<SeedSpec6> &vSeedsIn
// weeks ago. // weeks ago.
const int64_t nOneWeek = 7*24*60*60; const int64_t nOneWeek = 7*24*60*60;
std::vector<CAddress> vSeedsOut; std::vector<CAddress> vSeedsOut;
vSeedsOut.reserve(vSeedsIn.size());
FastRandomContext rng; FastRandomContext rng;
for (const auto& seed_in : vSeedsIn) { CDataStream s(vSeedsIn, SER_NETWORK, PROTOCOL_VERSION | ADDRV2_FORMAT);
struct in6_addr ip; while (!s.eof()) {
memcpy(&ip, seed_in.addr, sizeof(ip)); CService endpoint;
CAddress addr(CService(ip, seed_in.port), GetDesirableServiceFlags(NODE_NONE)); s >> endpoint;
CAddress addr{endpoint, GetDesirableServiceFlags(NODE_NONE)};
addr.nTime = GetTime() - rng.randrange(nOneWeek) - nOneWeek; addr.nTime = GetTime() - rng.randrange(nOneWeek) - nOneWeek;
LogPrint(BCLog::NET, "Added hardcoded seed: %s\n", addr.ToString());
vSeedsOut.push_back(addr); vSeedsOut.push_back(addr);
} }
return vSeedsOut; return vSeedsOut;
@ -1840,7 +1841,7 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect)
if (add_fixed_seeds_now) { if (add_fixed_seeds_now) {
CNetAddr local; CNetAddr local;
local.SetInternal("fixedseeds"); local.SetInternal("fixedseeds");
addrman.Add(convertSeed6(Params().FixedSeeds()), local); addrman.Add(ConvertSeeds(Params().FixedSeeds()), local);
add_fixed_seeds = false; add_fixed_seeds = false;
} }
} }

Loading…
Cancel
Save