|
|
|
@ -4610,11 +4610,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
@@ -4610,11 +4610,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
|
|
|
|
|
|
|
|
|
mapAlreadyAskedFor.erase(inv); |
|
|
|
|
|
|
|
|
|
// Check for recently rejected (and do other quick existence checks)
|
|
|
|
|
if (AlreadyHave(inv)) |
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
if (AcceptToMemoryPool(mempool, state, tx, true, &fMissingInputs)) |
|
|
|
|
if (!AlreadyHave(inv) && AcceptToMemoryPool(mempool, state, tx, true, &fMissingInputs)) |
|
|
|
|
{ |
|
|
|
|
mempool.check(pcoinsTip); |
|
|
|
|
RelayTransaction(tx); |
|
|
|
@ -4694,13 +4690,20 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
@@ -4694,13 +4690,20 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
|
|
|
|
|
|
|
|
|
if (pfrom->fWhitelisted && GetBoolArg("-whitelistalwaysrelay", DEFAULT_WHITELISTALWAYSRELAY)) { |
|
|
|
|
// Always relay transactions received from whitelisted peers, even
|
|
|
|
|
// if they were rejected from the mempool, allowing the node to
|
|
|
|
|
// function as a gateway for nodes hidden behind it.
|
|
|
|
|
// if they were already in the mempool or rejected from it due
|
|
|
|
|
// to policy, allowing the node to function as a gateway for
|
|
|
|
|
// nodes hidden behind it.
|
|
|
|
|
//
|
|
|
|
|
// FIXME: This includes invalid transactions, which means a
|
|
|
|
|
// whitelisted peer could get us banned! We may want to change
|
|
|
|
|
// that.
|
|
|
|
|
// Never relay transactions that we would assign a non-zero DoS
|
|
|
|
|
// score for, as we expect peers to do the same with us in that
|
|
|
|
|
// case.
|
|
|
|
|
int nDoS = 0; |
|
|
|
|
if (!state.IsInvalid(nDoS) || nDoS == 0) { |
|
|
|
|
LogPrintf("Force relaying tx %s from whitelisted peer=%d\n", tx.GetHash().ToString(), pfrom->id); |
|
|
|
|
RelayTransaction(tx); |
|
|
|
|
} else { |
|
|
|
|
LogPrintf("Not relaying invalid transaction %s from whitelisted peer=%d (%s)\n", tx.GetHash().ToString(), pfrom->id, FormatStateMessage(state)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
int nDoS = 0; |
|
|
|
|