diff --git a/doc/release-notes.md b/doc/release-notes.md --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -9,3 +9,5 @@ is similar to `listunspent` but does not use a wallet, meaning that the wallet can be disabled at compile or run time. This call is experimental, as such, is subject to changes or removal in future releases. + - Seeder now filters out nodes that are not following the BCH chain according + to chainparams. diff --git a/src/seeder/bitcoin.h b/src/seeder/bitcoin.h --- a/src/seeder/bitcoin.h +++ b/src/seeder/bitcoin.h @@ -6,6 +6,7 @@ #define BITCOIN_SEEDER_BITCOIN_H #include +#include #include #include @@ -52,7 +53,9 @@ void PushVersion(); - void GotVersion(); + void GotChainParams(); + + void RequestChainParams(); bool ProcessMessages(); diff --git a/src/seeder/bitcoin.cpp b/src/seeder/bitcoin.cpp --- a/src/seeder/bitcoin.cpp +++ b/src/seeder/bitcoin.cpp @@ -93,7 +93,7 @@ EndMessage(); } -void CSeederNode::GotVersion() { +void CSeederNode::GotChainParams() { // fprintf(stdout, "\n%s: version %i\n", ToString(you).c_str(), // nVersion); if (vAddr) { @@ -105,6 +105,22 @@ } } +void CSeederNode::RequestChainParams() { + // Create a getheaders message + BeginMessage("getheaders"); + // Locator hash + uint256 seederAssumeValid = + fTestNet ? ChainParamsConstants::TESTNET_DEFAULT_ASSUME_VALID + : ChainParamsConstants::MAINNET_DEFAULT_ASSUME_VALID; + std::vector hashStop(32, 0); + uint8_t numberOfLocatorHashes = 1; + vSend << PROTOCOL_VERSION << numberOfLocatorHashes << seederAssumeValid + << uint256(hashStop); + EndMessage(); + // Update timeout + doneAfter = time(nullptr) + GetTimeout(); +} + bool CSeederNode::ProcessMessage(std::string strCommand, CDataStream &recv) { // fprintf(stdout, "%s: RECV %s\n", ToString(you).c_str(), // strCommand.c_str()); @@ -128,14 +144,14 @@ vSend.SetVersion(std::min(nVersion, PROTOCOL_VERSION)); if (nVersion < 209) { vRecv.SetVersion(std::min(nVersion, PROTOCOL_VERSION)); - GotVersion(); + RequestChainParams(); } return false; } if (strCommand == "verack") { vRecv.SetVersion(std::min(nVersion, PROTOCOL_VERSION)); - GotVersion(); + RequestChainParams(); return false; } @@ -182,7 +198,7 @@ } // fprintf(stderr, "Peer (%s) found seeder assume valid.\n", // ToString(you.c_str()); - GotVersion(); + GotChainParams(); return false; }