mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 14:38:29 +01:00
Merge bitcoin/bitcoin#24697: refactor address relay time
fa64dd6673refactor: Use type-safe std::chrono for addrman time (MarcoFalke)fa2ae373f3Add type-safe AdjustedTime() getter to timedata (MarcoFalke)fa5103a9f5Add ChronoFormatter to serialize (MarcoFalke)fa253d385futil: Add HoursDouble (MarcoFalke)fa21fc60c2scripted-diff: Rename addrman time symbols (MarcoFalke)fa9284c3e9refactor: Remove not needed std::max (MacroFake) Pull request description: Those refactors are overlapping with, but otherwise largely unrelated to #24662. ACKs for top commit: naumenkogs: utACKfa64dd6673dergoegge: Code review ACKfa64dd6673Tree-SHA512: a50625e78036e7220a11997e6d9b6c6b317cb38ce02b1835fb41cbee2d8bfb1faf29b29d8990be78d6b5e15e9a9d8dec33bf25fa439b47610ef708950969724b
This commit is contained in:
19
src/net.cpp
19
src/net.cpp
@@ -187,7 +187,7 @@ static std::vector<CAddress> ConvertSeeds(const std::vector<uint8_t> &vSeedsIn)
|
||||
// it'll get a pile of addresses with newer timestamps.
|
||||
// Seed nodes are given a random 'last seen time' of between one and two
|
||||
// weeks ago.
|
||||
const int64_t nOneWeek = 7*24*60*60;
|
||||
const auto one_week{7 * 24h};
|
||||
std::vector<CAddress> vSeedsOut;
|
||||
FastRandomContext rng;
|
||||
CDataStream s(vSeedsIn, SER_NETWORK, PROTOCOL_VERSION | ADDRV2_FORMAT);
|
||||
@@ -195,7 +195,7 @@ static std::vector<CAddress> ConvertSeeds(const std::vector<uint8_t> &vSeedsIn)
|
||||
CService endpoint;
|
||||
s >> endpoint;
|
||||
CAddress addr{endpoint, GetDesirableServiceFlags(NODE_NONE)};
|
||||
addr.nTime = GetTime() - rng.randrange(nOneWeek) - nOneWeek;
|
||||
addr.nTime = rng.rand_uniform_delay(Now<NodeSeconds>() - one_week, -one_week);
|
||||
LogPrint(BCLog::NET, "Added hardcoded seed: %s\n", addr.ToString());
|
||||
vSeedsOut.push_back(addr);
|
||||
}
|
||||
@@ -452,10 +452,9 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo
|
||||
}
|
||||
}
|
||||
|
||||
/// debug print
|
||||
LogPrintLevel(BCLog::NET, BCLog::Level::Debug, "trying connection %s lastseen=%.1fhrs\n",
|
||||
pszDest ? pszDest : addrConnect.ToString(),
|
||||
pszDest ? 0.0 : (double)(GetAdjustedTime() - addrConnect.nTime) / 3600.0);
|
||||
pszDest ? pszDest : addrConnect.ToString(),
|
||||
Ticks<HoursDouble>(pszDest ? 0h : AdjustedTime() - addrConnect.nTime));
|
||||
|
||||
// Resolve
|
||||
const uint16_t default_port{pszDest != nullptr ? Params().GetDefaultPort(pszDest) :
|
||||
@@ -1469,9 +1468,8 @@ void CConnman::ThreadDNSAddressSeed()
|
||||
unsigned int nMaxIPs = 256; // Limits number of IPs learned from a DNS seed
|
||||
if (LookupHost(host, vIPs, nMaxIPs, true)) {
|
||||
for (const CNetAddr& ip : vIPs) {
|
||||
int nOneDay = 24*3600;
|
||||
CAddress addr = CAddress(CService(ip, Params().GetDefaultPort()), requiredServiceBits);
|
||||
addr.nTime = GetTime() - 3*nOneDay - rng.randrange(4*nOneDay); // use a random age between 3 and 7 days old
|
||||
addr.nTime = rng.rand_uniform_delay(Now<NodeSeconds>() - 3 * 24h, -4 * 24h); // use a random age between 3 and 7 days old
|
||||
vAdd.push_back(addr);
|
||||
found++;
|
||||
}
|
||||
@@ -1737,7 +1735,7 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect)
|
||||
|
||||
addrman.ResolveCollisions();
|
||||
|
||||
int64_t nANow = GetAdjustedTime();
|
||||
const auto nANow{AdjustedTime()};
|
||||
int nTries = 0;
|
||||
while (!interruptNet)
|
||||
{
|
||||
@@ -1760,7 +1758,7 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect)
|
||||
break;
|
||||
|
||||
CAddress addr;
|
||||
int64_t addr_last_try{0};
|
||||
NodeSeconds addr_last_try{0s};
|
||||
|
||||
if (fFeeler) {
|
||||
// First, try to get a tried table collision address. This returns
|
||||
@@ -1800,8 +1798,9 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect)
|
||||
continue;
|
||||
|
||||
// only consider very recently tried nodes after 30 failed attempts
|
||||
if (nANow - addr_last_try < 600 && nTries < 30)
|
||||
if (nANow - addr_last_try < 10min && nTries < 30) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// for non-feelers, require all the services we'll want,
|
||||
// for feelers, only require they be a full node (only because most
|
||||
|
||||
Reference in New Issue
Block a user