Change mapRelay to store CTransactions

This commit is contained in:
Pieter Wuille 2016-04-14 16:04:50 +02:00
parent 97d0b9889f
commit 38c310299c
3 changed files with 8 additions and 21 deletions

View File

@ -4456,7 +4456,7 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
bool pushed = false; bool pushed = false;
{ {
LOCK(cs_mapRelay); LOCK(cs_mapRelay);
map<CInv, CDataStream>::iterator mi = mapRelay.find(inv); map<uint256, CTransaction>::iterator mi = mapRelay.find(inv.hash);
if (mi != mapRelay.end()) { if (mi != mapRelay.end()) {
pfrom->PushMessage(inv.GetCommand(), (*mi).second); pfrom->PushMessage(inv.GetCommand(), (*mi).second);
pushed = true; pushed = true;
@ -4465,10 +4465,7 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
if (!pushed && inv.type == MSG_TX) { if (!pushed && inv.type == MSG_TX) {
CTransaction tx; CTransaction tx;
if (mempool.lookup(inv.hash, tx)) { if (mempool.lookup(inv.hash, tx)) {
CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); pfrom->PushMessage(NetMsgType::TX, tx);
ss.reserve(1000);
ss << tx;
pfrom->PushMessage(NetMsgType::TX, ss);
pushed = true; pushed = true;
} }
} }

View File

@ -90,8 +90,8 @@ std::string strSubVersion;
vector<CNode*> vNodes; vector<CNode*> vNodes;
CCriticalSection cs_vNodes; CCriticalSection cs_vNodes;
map<CInv, CDataStream> mapRelay; map<uint256, CTransaction> mapRelay;
deque<pair<int64_t, CInv> > vRelayExpiration; deque<pair<int64_t, uint256> > vRelayExpiration;
CCriticalSection cs_mapRelay; CCriticalSection cs_mapRelay;
limitedmap<uint256, int64_t> mapAlreadyAskedFor(MAX_INV_SZ); limitedmap<uint256, int64_t> mapAlreadyAskedFor(MAX_INV_SZ);
@ -2054,14 +2054,6 @@ instance_of_cnetcleanup;
void RelayTransaction(const CTransaction& tx, CFeeRate feerate) void RelayTransaction(const CTransaction& tx, CFeeRate feerate)
{
CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);
ss.reserve(10000);
ss << tx;
RelayTransaction(tx, feerate, ss);
}
void RelayTransaction(const CTransaction& tx, CFeeRate feerate, const CDataStream& ss)
{ {
CInv inv(MSG_TX, tx.GetHash()); CInv inv(MSG_TX, tx.GetHash());
{ {
@ -2073,9 +2065,8 @@ void RelayTransaction(const CTransaction& tx, CFeeRate feerate, const CDataStrea
vRelayExpiration.pop_front(); vRelayExpiration.pop_front();
} }
// Save original serialized message so newer versions are preserved mapRelay.insert(std::make_pair(inv.hash, tx));
mapRelay.insert(std::make_pair(inv, ss)); vRelayExpiration.push_back(std::make_pair(GetTime() + 15 * 60, inv.hash));
vRelayExpiration.push_back(std::make_pair(GetTime() + 15 * 60, inv));
} }
LOCK(cs_vNodes); LOCK(cs_vNodes);
BOOST_FOREACH(CNode* pnode, vNodes) BOOST_FOREACH(CNode* pnode, vNodes)

View File

@ -161,8 +161,8 @@ extern int nMaxConnections;
extern std::vector<CNode*> vNodes; extern std::vector<CNode*> vNodes;
extern CCriticalSection cs_vNodes; extern CCriticalSection cs_vNodes;
extern std::map<CInv, CDataStream> mapRelay; extern std::map<uint256, CTransaction> mapRelay;
extern std::deque<std::pair<int64_t, CInv> > vRelayExpiration; extern std::deque<std::pair<int64_t, uint256> > vRelayExpiration;
extern CCriticalSection cs_mapRelay; extern CCriticalSection cs_mapRelay;
extern limitedmap<uint256, int64_t> mapAlreadyAskedFor; extern limitedmap<uint256, int64_t> mapAlreadyAskedFor;
@ -773,7 +773,6 @@ public:
class CTransaction; class CTransaction;
void RelayTransaction(const CTransaction& tx, CFeeRate feerate); void RelayTransaction(const CTransaction& tx, CFeeRate feerate);
void RelayTransaction(const CTransaction& tx, CFeeRate feerate, const CDataStream& ss);
/** Access to the (IP) address database (peers.dat) */ /** Access to the (IP) address database (peers.dat) */
class CAddrDB class CAddrDB