mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-26 11:13:23 -03:00
net: Deserialize hardcoded seeds from BIP155 blob
Switch from IPv6 slot-based format to more compact and flexible BIP155 format.
This commit is contained in:
parent
9b29d5df7f
commit
b2ee8b207d
4 changed files with 1211 additions and 1192 deletions
|
@ -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
17
src/net.cpp
17
src/net.cpp
|
@ -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…
Add table
Reference in a new issue