diff --git a/src/seeder/bitcoin.cpp b/src/seeder/bitcoin.cpp --- a/src/seeder/bitcoin.cpp +++ b/src/seeder/bitcoin.cpp @@ -4,8 +4,10 @@ #include +#include #include #include +#include #include #include #include @@ -59,6 +61,10 @@ // nVersion); if (vAddr) { MessageWriter::WriteMessage(vSend, NetMsgType::GETADDR); + std::vector locatorHash( + 1, Params().Checkpoints().mapCheckpoints.rbegin()->second); + MessageWriter::WriteMessage(vSend, NetMsgType::GETHEADERS, + CBlockLocator(locatorHash), uint256()); doneAfter = GetTime() + GetTimeout(); } else { doneAfter = GetTime() + 1; diff --git a/src/seeder/test/p2p_messaging_tests.cpp b/src/seeder/test/p2p_messaging_tests.cpp --- a/src/seeder/test/p2p_messaging_tests.cpp +++ b/src/seeder/test/p2p_messaging_tests.cpp @@ -99,9 +99,23 @@ // Seeder should respond with an ADDR message const CMessageHeader::MessageMagic netMagic = Params().NetMagic(); CMessageHeader header(netMagic); - testNode->getSendBuffer() >> header; + CDataStream sendBuffer = testNode->getSendBuffer(); + sendBuffer >> header; BOOST_CHECK(header.IsValidWithoutConfig(netMagic)); BOOST_CHECK_EQUAL(header.GetCommand(), NetMsgType::GETADDR); + + // Next message should be GETHEADERS + sendBuffer >> header; + BOOST_CHECK(header.IsValidWithoutConfig(netMagic)); + BOOST_CHECK_EQUAL(header.GetCommand(), NetMsgType::GETHEADERS); + + CBlockLocator locator; + uint256 hashStop; + sendBuffer >> locator >> hashStop; + std::vector expectedLocator = { + Params().Checkpoints().mapCheckpoints.rbegin()->second}; + BOOST_CHECK(locator.vHave == expectedLocator); + BOOST_CHECK(hashStop == uint256()); } static CDataStream CreateAddrMessage(std::vector sendAddrs,