// Copyright (c) 2026 The Limenka developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include #include #include #include #include #include namespace node { std::optional BlukecoinManager::HeaderLooksBlake2b(const CBlockHeader& header, const Consensus::Params& params) { auto target{DeriveTarget(header.nBits, params.powLimit)}; if (!target) return std::nullopt; // nBits outside mainnet range: a low-work testnet fork return UintToArith256(header.GetHash()) > *target; } void BlukecoinManager::NoteDetected(const CService& addr) { LOCK(m_mutex); if (m_known.insert(addr).second) { LogPrintf("Blukecoin (bitcoin-blake2b) node detected: %s\n", addr.ToStringAddrPort()); } } bool BlukecoinManager::IsKnown(const CService& addr) const { LOCK(m_mutex); return m_known.count(addr) != 0; } std::vector BlukecoinManager::GetKnown() const { LOCK(m_mutex); return {m_known.begin(), m_known.end()}; } } // namespace node