aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.cpp9
-rw-r--r--src/net.cpp3
-rw-r--r--src/net.h6
3 files changed, 9 insertions, 9 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 901a34bdec..5e39c31bd0 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -4138,8 +4138,7 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
// however we MUST always provide at least what the remote peer needs
typedef std::pair<unsigned int, uint256> PairType;
BOOST_FOREACH(PairType& pair, merkleBlock.vMatchedTxn)
- if (!pfrom->setInventoryKnown.count(CInv(MSG_TX, pair.second)))
- pfrom->PushMessage("tx", block.vtx[pair.first]);
+ pfrom->PushMessage("tx", block.vtx[pair.first]);
}
// else
// no response
@@ -5511,7 +5510,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
vInvWait.reserve(pto->vInventoryToSend.size());
BOOST_FOREACH(const CInv& inv, pto->vInventoryToSend)
{
- if (pto->setInventoryKnown.count(inv))
+ if (pto->setInventoryKnown.contains(inv.hash))
continue;
// trickle out tx inv to protect privacy
@@ -5532,9 +5531,9 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
}
}
- // returns true if wasn't already contained in the set
- if (pto->setInventoryKnown.insert(inv).second)
+ if (!pto->setInventoryKnown.contains(inv.hash))
{
+ pto->setInventoryKnown.insert(inv.hash);
vInv.push_back(inv);
if (vInv.size() >= 1000)
{
diff --git a/src/net.cpp b/src/net.cpp
index abc7cbb8f4..fc8fa30eee 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -2342,7 +2342,7 @@ unsigned int SendBufferSize() { return 1000*GetArg("-maxsendbuffer", DEFAULT_MAX
CNode::CNode(SOCKET hSocketIn, const CAddress& addrIn, const std::string& addrNameIn, bool fInboundIn) :
ssSend(SER_NETWORK, INIT_PROTO_VERSION),
addrKnown(5000, 0.001),
- setInventoryKnown(SendBufferSize() / 1000)
+ setInventoryKnown(50000, 0.000001)
{
nServices = 0;
hSocket = hSocketIn;
@@ -2369,6 +2369,7 @@ CNode::CNode(SOCKET hSocketIn, const CAddress& addrIn, const std::string& addrNa
nSendOffset = 0;
hashContinue = uint256();
nStartingHeight = -1;
+ setInventoryKnown.reset();
fGetAddr = false;
fRelayTxes = false;
pfilter = new CBloomFilter();
diff --git a/src/net.h b/src/net.h
index fb299fb0b4..b0be3e6523 100644
--- a/src/net.h
+++ b/src/net.h
@@ -386,7 +386,7 @@ public:
std::set<uint256> setKnown;
// inventory based relay
- mruset<CInv> setInventoryKnown;
+ CRollingBloomFilter setInventoryKnown;
std::vector<CInv> vInventoryToSend;
CCriticalSection cs_inventory;
std::multimap<int64_t, CInv> mapAskFor;
@@ -494,7 +494,7 @@ public:
{
{
LOCK(cs_inventory);
- setInventoryKnown.insert(inv);
+ setInventoryKnown.insert(inv.hash);
}
}
@@ -502,7 +502,7 @@ public:
{
{
LOCK(cs_inventory);
- if (!setInventoryKnown.count(inv))
+ if (!setInventoryKnown.contains(inv.hash))
vInventoryToSend.push_back(inv);
}
}