diff --git a/src/net.cpp b/src/net.cpp index 7684877ec35..8885c5dea59 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -211,7 +211,7 @@ static std::vector ConvertSeeds(const std::vector &vSeedsIn) while (!s.eof()) { CService endpoint; s >> endpoint; - CAddress addr{endpoint, SeedsServiceFlags()}; + CAddress addr{endpoint, SeedsAssumedServiceFlags()}; addr.nTime = rng.rand_uniform_delay(Now() - one_week, -one_week); LogDebug(BCLog::NET, "Added hardcoded seed: %s\n", addr.ToStringAddrPort()); vSeedsOut.push_back(addr); @@ -2363,7 +2363,7 @@ void CConnman::ThreadDNSAddressSeed() const auto addresses{LookupHost(host, nMaxIPs, true)}; if (!addresses.empty()) { for (const CNetAddr& ip : addresses) { - CAddress addr = CAddress(CService(ip, m_params.GetDefaultPort()), requiredServiceBits); + CAddress addr = CAddress(CService(ip, m_params.GetDefaultPort()), SeedsAssumedServiceFlags()); addr.nTime = rng.rand_uniform_delay(Now() - 3 * 24h, -4 * 24h); // use a random age between 3 and 7 days old vAdd.push_back(addr); found++; diff --git a/src/protocol.h b/src/protocol.h index 804597b86d8..ca968ab0020 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -353,6 +353,14 @@ std::vector serviceFlagsToStr(uint64_t flags); */ constexpr ServiceFlags SeedsServiceFlags() { return ServiceFlags(NODE_NETWORK | NODE_WITNESS); } +/** + * Service flags we assume for addresses obtained from the DNS seeds and the + * fixed seeds, which don't come with service flags attached. + * BIP324 support can be safely assumed because the vast majority of listening nodes signals NODE_P2P_V2, and if the + * assumption is wrong for a given peer we simply reconnect using v1 transport. + */ +constexpr ServiceFlags SeedsAssumedServiceFlags() { return ServiceFlags(SeedsServiceFlags() | NODE_P2P_V2); } + /** * Checks if a peer with the given service flags may be capable of having a * robust address-storage DB.