Skip to content

Commit

Permalink
Merge #8080: Do not use mempool for GETDATA for tx accepted after the…
Browse files Browse the repository at this point in the history
… last mempool req.

7e908c7 Do not use mempool for GETDATA for tx accepted after the last mempool req. (Gregory Maxwell)
  • Loading branch information
laanwj committed May 31, 2016
2 parents a2df115 + 7e908c7 commit 862fd24
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 2 deletions.
6 changes: 5 additions & 1 deletion src/main.cpp
Expand Up @@ -4513,7 +4513,10 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
}
if (!pushed && inv.type == MSG_TX) {
CTransaction tx;
if (mempool.lookup(inv.hash, tx)) {
int64_t txtime;
// To protect privacy, do not answer getdata using the mempool when
// that TX couldn't have been INVed in reply to a MEMPOOL request.
if (mempool.lookup(inv.hash, tx, txtime) && txtime <= pfrom->timeLastMempoolReq) {
pfrom->PushMessage(NetMsgType::TX, tx);
pushed = true;
}
Expand Down Expand Up @@ -5911,6 +5914,7 @@ bool SendMessages(CNode* pto)
vInv.clear();
}
}
pto->timeLastMempoolReq = GetTime();
}

// Determine transactions to relay
Expand Down
1 change: 1 addition & 0 deletions src/net.cpp
Expand Up @@ -2397,6 +2397,7 @@ CNode::CNode(SOCKET hSocketIn, const CAddress& addrIn, const std::string& addrNa
fRelayTxes = false;
fSentAddr = false;
pfilter = new CBloomFilter();
timeLastMempoolReq = 0;
nPingNonceSent = 0;
nPingUsecStart = 0;
nPingUsecTime = 0;
Expand Down
3 changes: 3 additions & 0 deletions src/net.h
Expand Up @@ -17,6 +17,7 @@
#include "sync.h"
#include "uint256.h"

#include <atomic>
#include <deque>
#include <stdint.h>

Expand Down Expand Up @@ -414,6 +415,8 @@ class CNode
// Used for BIP35 mempool sending, also protected by cs_inventory
bool fSendMempool;

// Last time a "MEMPOOL" request was serviced.
std::atomic<int64_t> timeLastMempoolReq;
// Ping time measurement:
// The pong reply we're expecting, or 0 if no pong expected.
uint64_t nPingNonceSent;
Expand Down
10 changes: 9 additions & 1 deletion src/txmempool.cpp
Expand Up @@ -789,15 +789,23 @@ void CTxMemPool::queryHashes(vector<uint256>& vtxid)
std::sort(vtxid.begin(), vtxid.end(), DepthAndScoreComparator(this));
}

bool CTxMemPool::lookup(uint256 hash, CTransaction& result) const

bool CTxMemPool::lookup(uint256 hash, CTransaction& result, int64_t& time) const
{
LOCK(cs);
indexed_transaction_set::const_iterator i = mapTx.find(hash);
if (i == mapTx.end()) return false;
result = i->GetTx();
time = i->GetTime();
return true;
}

bool CTxMemPool::lookup(uint256 hash, CTransaction& result) const
{
int64_t time;
return CTxMemPool::lookup(hash, result, time);
}

bool CTxMemPool::lookupFeeRate(const uint256& hash, CFeeRate& feeRate) const
{
LOCK(cs);
Expand Down
1 change: 1 addition & 0 deletions src/txmempool.h
Expand Up @@ -602,6 +602,7 @@ class CTxMemPool
}

bool lookup(uint256 hash, CTransaction& result) const;
bool lookup(uint256 hash, CTransaction& result, int64_t& time) const;
bool lookupFeeRate(const uint256& hash, CFeeRate& feeRate) const;

/** Estimate fee rate needed to get into the next nBlocks
Expand Down

0 comments on commit 862fd24

Please sign in to comment.