rpc: warn that nodes ignore requests for old stale blocks

This is an anti-fingerprinting measure. See BlockRequestAllowed in net_processing.

It has been around since 2014, but alternative clients might still serve these blocks.

See also: d8b4b49667, 85da07a5a0, a2be3b66b5, 3788a8479b
This commit is contained in:
Sjors Provoost 2022-02-01 14:41:36 +01:00
parent 5291933fed
commit f39d9269eb
No known key found for this signature in database
GPG key ID: 57FF9BDBCC301009
2 changed files with 5 additions and 1 deletions

View file

@ -1738,6 +1738,8 @@ std::optional<std::string> PeerManagerImpl::FetchBlock(NodeId peer_id, const CBl
LOCK(cs_main);
// Mark block as in-flight unless it already is (for this peer).
// If the peer does not send us a block, vBlocksInFlight remains non-empty,
// causing us to timeout and disconnect.
// If a block was already in-flight for a different peer, its BLOCKTXN
// response will be dropped.
if (!BlockRequested(peer_id, block_index)) return "Already requested from this peer";

View file

@ -428,7 +428,9 @@ static RPCHelpMan getblockfrompeer()
"getblockfrompeer",
"Attempt to fetch block from a given peer.\n\n"
"We must have the header for this block, e.g. using submitheader.\n"
"Subsequent calls for the same block and a new peer will cause the response from the previous peer to be ignored.\n\n"
"Subsequent calls for the same block and a new peer will cause the response from the previous peer to be ignored.\n"
"Peers generally ignore requests for a stale block that they never fully verified, or one that is more than a month old.\n"
"When a peer does not respond with a block, we will disconnect.\n\n"
"Returns an empty JSON object if the request was successfully scheduled.",
{
{"blockhash", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "The block hash to try to fetch"},