@ -4421,11 +4421,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
@@ -4421,11 +4421,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 ) ;
@ -4505,13 +4501,20 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
@@ -4505,13 +4501,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 ;