@ -256,10 +256,11 @@ void PushNodeVersion(CNode *pnode, CConnman& connman, int64_t nTime)
connman . PushMessage ( pnode , CNetMsgMaker ( INIT_PROTO_VERSION ) . Make ( NetMsgType : : VERSION , PROTOCOL_VERSION , ( uint64_t ) nLocalNodeServices , nTime , addrYou , addrMe ,
connman . PushMessage ( pnode , CNetMsgMaker ( INIT_PROTO_VERSION ) . Make ( NetMsgType : : VERSION , PROTOCOL_VERSION , ( uint64_t ) nLocalNodeServices , nTime , addrYou , addrMe ,
nonce , strSubVersion , nNodeStartingHeight , : : fRelayTxes ) ) ;
nonce , strSubVersion , nNodeStartingHeight , : : fRelayTxes ) ) ;
if ( fLogIPs )
if ( fLogIPs ) {
LogPrint ( " net " , " send version message: version %d, blocks=%d, us=%s, them=%s, peer=%d \n " , PROTOCOL_VERSION , nNodeStartingHeight , addrMe . ToString ( ) , addrYou . ToString ( ) , nodeid ) ;
LogPrint ( BCLog : : NET , " send version message: version %d, blocks=%d, us=%s, them=%s, peer=%d \n " , PROTOCOL_VERSION , nNodeStartingHeight , addrMe . ToString ( ) , addrYou . ToString ( ) , nodeid ) ;
else
} else {
LogPrint ( " net " , " send version message: version %d, blocks=%d, us=%s, peer=%d \n " , PROTOCOL_VERSION , nNodeStartingHeight , addrMe . ToString ( ) , nodeid ) ;
LogPrint ( BCLog : : NET , " send version message: version %d, blocks=%d, us=%s, peer=%d \n " , PROTOCOL_VERSION , nNodeStartingHeight , addrMe . ToString ( ) , nodeid ) ;
}
}
}
void InitializeNode ( CNode * pnode , CConnman & connman ) {
void InitializeNode ( CNode * pnode , CConnman & connman ) {
@ -619,7 +620,7 @@ bool AddOrphanTx(const CTransactionRef& tx, NodeId peer) EXCLUSIVE_LOCKS_REQUIRE
unsigned int sz = GetTransactionWeight ( * tx ) ;
unsigned int sz = GetTransactionWeight ( * tx ) ;
if ( sz > = MAX_STANDARD_TX_WEIGHT )
if ( sz > = MAX_STANDARD_TX_WEIGHT )
{
{
LogPrint ( " mempool " , " ignoring large orphan tx (size: %u, hash: %s) \n " , sz , hash . ToString ( ) ) ;
LogPrint ( BCLog : : MEMPOOL , " ignoring large orphan tx (size: %u, hash: %s) \n " , sz , hash . ToString ( ) ) ;
return false ;
return false ;
}
}
@ -631,7 +632,7 @@ bool AddOrphanTx(const CTransactionRef& tx, NodeId peer) EXCLUSIVE_LOCKS_REQUIRE
AddToCompactExtraTransactions ( tx ) ;
AddToCompactExtraTransactions ( tx ) ;
LogPrint ( " mempool " , " stored orphan tx %s (mapsz %u outsz %u) \n " , hash . ToString ( ) ,
LogPrint ( BCLog : : MEMPOOL , " stored orphan tx %s (mapsz %u outsz %u) \n " , hash . ToString ( ) ,
mapOrphanTransactions . size ( ) , mapOrphanTransactionsByPrev . size ( ) ) ;
mapOrphanTransactions . size ( ) , mapOrphanTransactionsByPrev . size ( ) ) ;
return true ;
return true ;
}
}
@ -666,7 +667,7 @@ void EraseOrphansFor(NodeId peer)
nErased + = EraseOrphanTx ( maybeErase - > second . tx - > GetHash ( ) ) ;
nErased + = EraseOrphanTx ( maybeErase - > second . tx - > GetHash ( ) ) ;
}
}
}
}
if ( nErased > 0 ) LogPrint ( " mempool " , " Erased %d orphan tx from peer=%d \n " , nErased , peer ) ;
if ( nErased > 0 ) LogPrint ( BCLog : : MEMPOOL , " Erased %d orphan tx from peer=%d \n " , nErased , peer ) ;
}
}
@ -691,7 +692,7 @@ unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans) EXCLUSIVE_LOCKS_REQUIRE
}
}
// Sweep again 5 minutes after the next entry that expires in order to batch the linear scan.
// Sweep again 5 minutes after the next entry that expires in order to batch the linear scan.
nNextSweep = nMinExpTime + ORPHAN_TX_EXPIRE_INTERVAL ;
nNextSweep = nMinExpTime + ORPHAN_TX_EXPIRE_INTERVAL ;
if ( nErased > 0 ) LogPrint ( " mempool " , " Erased %d orphan tx due to expiration \n " , nErased ) ;
if ( nErased > 0 ) LogPrint ( BCLog : : MEMPOOL , " Erased %d orphan tx due to expiration \n " , nErased ) ;
}
}
while ( mapOrphanTransactions . size ( ) > nMaxOrphans )
while ( mapOrphanTransactions . size ( ) > nMaxOrphans )
{
{
@ -767,7 +768,7 @@ void PeerLogicValidation::SyncTransaction(const CTransaction& tx, const CBlockIn
BOOST_FOREACH ( uint256 & orphanHash , vOrphanErase ) {
BOOST_FOREACH ( uint256 & orphanHash , vOrphanErase ) {
nErased + = EraseOrphanTx ( orphanHash ) ;
nErased + = EraseOrphanTx ( orphanHash ) ;
}
}
LogPrint ( " mempool " , " Erased %d orphan tx included or conflicted by block \n " , nErased ) ;
LogPrint ( BCLog : : MEMPOOL , " Erased %d orphan tx included or conflicted by block \n " , nErased ) ;
}
}
}
}
@ -808,7 +809,7 @@ void PeerLogicValidation::NewPoWValidBlock(const CBlockIndex *pindex, const std:
if ( state . fPreferHeaderAndIDs & & ( ! fWitnessEnabled | | state . fWantsCmpctWitness ) & &
if ( state . fPreferHeaderAndIDs & & ( ! fWitnessEnabled | | state . fWantsCmpctWitness ) & &
! PeerHasHeader ( & state , pindex ) & & PeerHasHeader ( & state , pindex - > pprev ) ) {
! PeerHasHeader ( & state , pindex ) & & PeerHasHeader ( & state , pindex - > pprev ) ) {
LogPrint ( " net " , " %s sending header-and-ids %s to peer=%d \n " , " PeerLogicValidation::NewPoWValidBlock " ,
LogPrint ( BCLog : : NET , " %s sending header-and-ids %s to peer=%d \n " , " PeerLogicValidation::NewPoWValidBlock " ,
hashBlock . ToString ( ) , pnode - > id ) ;
hashBlock . ToString ( ) , pnode - > id ) ;
connman - > PushMessage ( pnode , msgMaker . Make ( NetMsgType : : CMPCTBLOCK , * pcmpctblock ) ) ;
connman - > PushMessage ( pnode , msgMaker . Make ( NetMsgType : : CMPCTBLOCK , * pcmpctblock ) ) ;
state . pindexBestHeaderSent = pindex ;
state . pindexBestHeaderSent = pindex ;
@ -1024,7 +1025,7 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
static const int nOneWeek = 7 * 24 * 60 * 60 ; // assume > 1 week = historical
static const int nOneWeek = 7 * 24 * 60 * 60 ; // assume > 1 week = historical
if ( send & & connman . OutboundTargetReached ( true ) & & ( ( ( pindexBestHeader ! = NULL ) & & ( pindexBestHeader - > GetBlockTime ( ) - mi - > second - > GetBlockTime ( ) > nOneWeek ) ) | | inv . type = = MSG_FILTERED_BLOCK ) & & ! pfrom - > fWhitelisted )
if ( send & & connman . OutboundTargetReached ( true ) & & ( ( ( pindexBestHeader ! = NULL ) & & ( pindexBestHeader - > GetBlockTime ( ) - mi - > second - > GetBlockTime ( ) > nOneWeek ) ) | | inv . type = = MSG_FILTERED_BLOCK ) & & ! pfrom - > fWhitelisted )
{
{
LogPrint ( " net " , " historical block serving limit reached, disconnect peer=%d \n " , pfrom - > GetId ( ) ) ;
LogPrint ( BCLog : : NET , " historical block serving limit reached, disconnect peer=%d \n " , pfrom - > GetId ( ) ) ;
//disconnect node
//disconnect node
pfrom - > fDisconnect = true ;
pfrom - > fDisconnect = true ;
@ -1168,7 +1169,7 @@ inline void static SendBlockTransactions(const CBlock& block, const BlockTransac
bool static ProcessMessage ( CNode * pfrom , const std : : string & strCommand , CDataStream & vRecv , int64_t nTimeReceived , const CChainParams & chainparams , CConnman & connman , const std : : atomic < bool > & interruptMsgProc )
bool static ProcessMessage ( CNode * pfrom , const std : : string & strCommand , CDataStream & vRecv , int64_t nTimeReceived , const CChainParams & chainparams , CConnman & connman , const std : : atomic < bool > & interruptMsgProc )
{
{
LogPrint ( " net " , " received: %s (%u bytes) peer=%d \n " , SanitizeString ( strCommand ) , vRecv . size ( ) , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " received: %s (%u bytes) peer=%d \n " , SanitizeString ( strCommand ) , vRecv . size ( ) , pfrom - > id ) ;
if ( IsArgSet ( " -dropmessagestest " ) & & GetRand ( GetArg ( " -dropmessagestest " , 0 ) ) = = 0 )
if ( IsArgSet ( " -dropmessagestest " ) & & GetRand ( GetArg ( " -dropmessagestest " , 0 ) ) = = 0 )
{
{
LogPrintf ( " dropmessagestest DROPPING RECV MESSAGE \n " ) ;
LogPrintf ( " dropmessagestest DROPPING RECV MESSAGE \n " ) ;
@ -1192,7 +1193,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
if ( strCommand = = NetMsgType : : REJECT )
if ( strCommand = = NetMsgType : : REJECT )
{
{
if ( fDebug ) {
if ( LogAcceptCategory ( BCLog : : NET ) ) {
try {
try {
std : : string strMsg ; unsigned char ccode ; std : : string strReason ;
std : : string strMsg ; unsigned char ccode ; std : : string strReason ;
vRecv > > LIMITED_STRING ( strMsg , CMessageHeader : : COMMAND_SIZE ) > > ccode > > LIMITED_STRING ( strReason , MAX_REJECT_MESSAGE_LENGTH ) ;
vRecv > > LIMITED_STRING ( strMsg , CMessageHeader : : COMMAND_SIZE ) > > ccode > > LIMITED_STRING ( strReason , MAX_REJECT_MESSAGE_LENGTH ) ;
@ -1206,10 +1207,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
vRecv > > hash ;
vRecv > > hash ;
ss < < " : hash " < < hash . ToString ( ) ;
ss < < " : hash " < < hash . ToString ( ) ;
}
}
LogPrint ( " net " , " Reject %s \n " , SanitizeString ( ss . str ( ) ) ) ;
LogPrint ( BCLog : : NET , " Reject %s \n " , SanitizeString ( ss . str ( ) ) ) ;
} catch ( const std : : ios_base : : failure & ) {
} catch ( const std : : ios_base : : failure & ) {
// Avoid feedback loops by preventing reject messages from triggering a new reject message.
// Avoid feedback loops by preventing reject messages from triggering a new reject message.
LogPrint ( " net " , " Unparseable reject message received \n " ) ;
LogPrint ( BCLog : : NET , " Unparseable reject message received \n " ) ;
}
}
}
}
}
}
@ -1247,7 +1248,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
}
}
if ( pfrom - > nServicesExpected & ~ nServices )
if ( pfrom - > nServicesExpected & ~ nServices )
{
{
LogPrint ( " net " , " peer=%d does not offer the expected services (%08x offered, %08x expected); disconnecting \n " , pfrom - > id , nServices , pfrom - > nServicesExpected ) ;
LogPrint ( BCLog : : NET , " peer=%d does not offer the expected services (%08x offered, %08x expected); disconnecting \n " , pfrom - > id , nServices , pfrom - > nServicesExpected ) ;
connman . PushMessage ( pfrom , CNetMsgMaker ( INIT_PROTO_VERSION ) . Make ( NetMsgType : : REJECT , strCommand , REJECT_NONSTANDARD ,
connman . PushMessage ( pfrom , CNetMsgMaker ( INIT_PROTO_VERSION ) . Make ( NetMsgType : : REJECT , strCommand , REJECT_NONSTANDARD ,
strprintf ( " Expected to offer services %08x " , pfrom - > nServicesExpected ) ) ) ;
strprintf ( " Expected to offer services %08x " , pfrom - > nServicesExpected ) ) ) ;
pfrom - > fDisconnect = true ;
pfrom - > fDisconnect = true ;
@ -1335,11 +1336,11 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
FastRandomContext insecure_rand ;
FastRandomContext insecure_rand ;
if ( addr . IsRoutable ( ) )
if ( addr . IsRoutable ( ) )
{
{
LogPrint ( " net " , " ProcessMessages: advertising address %s \n " , addr . ToString ( ) ) ;
LogPrint ( BCLog : : NET , " ProcessMessages: advertising address %s \n " , addr . ToString ( ) ) ;
pfrom - > PushAddress ( addr , insecure_rand ) ;
pfrom - > PushAddress ( addr , insecure_rand ) ;
} else if ( IsPeerAddrLocalGood ( pfrom ) ) {
} else if ( IsPeerAddrLocalGood ( pfrom ) ) {
addr . SetIP ( addrMe ) ;
addr . SetIP ( addrMe ) ;
LogPrint ( " net " , " ProcessMessages: advertising address %s \n " , addr . ToString ( ) ) ;
LogPrint ( BCLog : : NET , " ProcessMessages: advertising address %s \n " , addr . ToString ( ) ) ;
pfrom - > PushAddress ( addr , insecure_rand ) ;
pfrom - > PushAddress ( addr , insecure_rand ) ;
}
}
}
}
@ -1541,7 +1542,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
return true ;
return true ;
bool fAlreadyHave = AlreadyHave ( inv ) ;
bool fAlreadyHave = AlreadyHave ( inv ) ;
LogPrint ( " net " , " got inv: %s %s peer=%d \n " , inv . ToString ( ) , fAlreadyHave ? " have " : " new " , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " got inv: %s %s peer=%d \n " , inv . ToString ( ) , fAlreadyHave ? " have " : " new " , pfrom - > id ) ;
if ( inv . type = = MSG_TX ) {
if ( inv . type = = MSG_TX ) {
inv . type | = nFetchFlags ;
inv . type | = nFetchFlags ;
@ -1556,17 +1557,18 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
// we now only provide a getheaders response here. When we receive the headers, we will
// we now only provide a getheaders response here. When we receive the headers, we will
// then ask for the blocks we need.
// then ask for the blocks we need.
connman . PushMessage ( pfrom , msgMaker . Make ( NetMsgType : : GETHEADERS , chainActive . GetLocator ( pindexBestHeader ) , inv . hash ) ) ;
connman . PushMessage ( pfrom , msgMaker . Make ( NetMsgType : : GETHEADERS , chainActive . GetLocator ( pindexBestHeader ) , inv . hash ) ) ;
LogPrint ( " net " , " getheaders (%d) %s to peer=%d \n " , pindexBestHeader - > nHeight , inv . hash . ToString ( ) , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " getheaders (%d) %s to peer=%d \n " , pindexBestHeader - > nHeight , inv . hash . ToString ( ) , pfrom - > id ) ;
}
}
}
}
else
else
{
{
pfrom - > AddInventoryKnown ( inv ) ;
pfrom - > AddInventoryKnown ( inv ) ;
if ( fBlocksOnly )
if ( fBlocksOnly ) {
LogPrint ( " net " , " transaction (%s) inv sent in violation of protocol peer=%d \n " , inv . hash . ToString ( ) , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " transaction (%s) inv sent in violation of protocol peer=%d \n " , inv . hash . ToString ( ) , pfrom - > id ) ;
else if ( ! fAlreadyHave & & ! fImporting & & ! fReindex & & ! IsInitialBlockDownload ( ) )
} else if ( ! fAlreadyHave & & ! fImporting & & ! fReindex & & ! IsInitialBlockDownload ( ) ) {
pfrom - > AskFor ( inv ) ;
pfrom - > AskFor ( inv ) ;
}
}
}
// Track requests for our stuff
// Track requests for our stuff
GetMainSignals ( ) . Inventory ( inv . hash ) ;
GetMainSignals ( ) . Inventory ( inv . hash ) ;
@ -1588,11 +1590,11 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
return error ( " message getdata size() = % u " , vInv.size()) ;
return error ( " message getdata size() = % u " , vInv.size()) ;
}
}
if ( fDebug | | ( vInv . size ( ) ! = 1 ) )
LogPrint ( BCLog : : NET , " received getdata (%u invsz) peer=%d \n " , vInv . size ( ) , pfrom - > id ) ;
LogPrint ( " net " , " received getdata (%u invsz) peer=%d \n " , vInv . size ( ) , pfrom - > id ) ;
if ( ( fDebug & & vInv . size ( ) > 0 ) | | ( vInv . size ( ) = = 1 ) )
if ( vInv . size ( ) > 0 ) {
LogPrint ( " net " , " received getdata for: %s peer=%d \n " , vInv [ 0 ] . ToString ( ) , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " received getdata for: %s peer=%d \n " , vInv [ 0 ] . ToString ( ) , pfrom - > id ) ;
}
pfrom - > vRecvGetData . insert ( pfrom - > vRecvGetData . end ( ) , vInv . begin ( ) , vInv . end ( ) ) ;
pfrom - > vRecvGetData . insert ( pfrom - > vRecvGetData . end ( ) , vInv . begin ( ) , vInv . end ( ) ) ;
ProcessGetData ( pfrom , chainparams . GetConsensus ( ) , connman , interruptMsgProc ) ;
ProcessGetData ( pfrom , chainparams . GetConsensus ( ) , connman , interruptMsgProc ) ;
@ -1631,12 +1633,12 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
if ( pindex )
if ( pindex )
pindex = chainActive . Next ( pindex ) ;
pindex = chainActive . Next ( pindex ) ;
int nLimit = 500 ;
int nLimit = 500 ;
LogPrint ( " net " , " getblocks %d to %s limit %d from peer=%d \n " , ( pindex ? pindex - > nHeight : - 1 ) , hashStop . IsNull ( ) ? " end " : hashStop . ToString ( ) , nLimit , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " getblocks %d to %s limit %d from peer=%d \n " , ( pindex ? pindex - > nHeight : - 1 ) , hashStop . IsNull ( ) ? " end " : hashStop . ToString ( ) , nLimit , pfrom - > id ) ;
for ( ; pindex ; pindex = chainActive . Next ( pindex ) )
for ( ; pindex ; pindex = chainActive . Next ( pindex ) )
{
{
if ( pindex - > GetBlockHash ( ) = = hashStop )
if ( pindex - > GetBlockHash ( ) = = hashStop )
{
{
LogPrint ( " net " , " getblocks stopping at %d %s \n " , pindex - > nHeight , pindex - > GetBlockHash ( ) . ToString ( ) ) ;
LogPrint ( BCLog : : NET , " getblocks stopping at %d %s \n " , pindex - > nHeight , pindex - > GetBlockHash ( ) . ToString ( ) ) ;
break ;
break ;
}
}
// If pruning, don't inv blocks unless we have on disk and are likely to still have
// If pruning, don't inv blocks unless we have on disk and are likely to still have
@ -1644,7 +1646,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
const int nPrunedBlocksLikelyToHave = MIN_BLOCKS_TO_KEEP - 3600 / chainparams . GetConsensus ( ) . nPowTargetSpacing ;
const int nPrunedBlocksLikelyToHave = MIN_BLOCKS_TO_KEEP - 3600 / chainparams . GetConsensus ( ) . nPowTargetSpacing ;
if ( fPruneMode & & ( ! ( pindex - > nStatus & BLOCK_HAVE_DATA ) | | pindex - > nHeight < = chainActive . Tip ( ) - > nHeight - nPrunedBlocksLikelyToHave ) )
if ( fPruneMode & & ( ! ( pindex - > nStatus & BLOCK_HAVE_DATA ) | | pindex - > nHeight < = chainActive . Tip ( ) - > nHeight - nPrunedBlocksLikelyToHave ) )
{
{
LogPrint ( " net " , " getblocks stopping, pruned or too old block at %d %s \n " , pindex - > nHeight , pindex - > GetBlockHash ( ) . ToString ( ) ) ;
LogPrint ( BCLog : : NET , " getblocks stopping, pruned or too old block at %d %s \n " , pindex - > nHeight , pindex - > GetBlockHash ( ) . ToString ( ) ) ;
break ;
break ;
}
}
pfrom - > PushInventory ( CInv ( MSG_BLOCK , pindex - > GetBlockHash ( ) ) ) ;
pfrom - > PushInventory ( CInv ( MSG_BLOCK , pindex - > GetBlockHash ( ) ) ) ;
@ -1652,7 +1654,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
{
{
// When this block is requested, we'll send an inv that'll
// When this block is requested, we'll send an inv that'll
// trigger the peer to getblocks the next batch of inventory.
// trigger the peer to getblocks the next batch of inventory.
LogPrint ( " net " , " getblocks stopping at limit %d %s \n " , pindex - > nHeight , pindex - > GetBlockHash ( ) . ToString ( ) ) ;
LogPrint ( BCLog : : NET , " getblocks stopping at limit %d %s \n " , pindex - > nHeight , pindex - > GetBlockHash ( ) . ToString ( ) ) ;
pfrom - > hashContinue = pindex - > GetBlockHash ( ) ;
pfrom - > hashContinue = pindex - > GetBlockHash ( ) ;
break ;
break ;
}
}
@ -1693,7 +1695,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
// might maliciously send lots of getblocktxn requests to trigger
// might maliciously send lots of getblocktxn requests to trigger
// expensive disk reads, because it will require the peer to
// expensive disk reads, because it will require the peer to
// actually receive all the data read from disk over the network.
// actually receive all the data read from disk over the network.
LogPrint ( " net " , " Peer %d sent us a getblocktxn for a block > %i deep " , pfrom - > id , MAX_BLOCKTXN_DEPTH ) ;
LogPrint ( BCLog : : NET , " Peer %d sent us a getblocktxn for a block > %i deep " , pfrom - > id , MAX_BLOCKTXN_DEPTH ) ;
CInv inv ;
CInv inv ;
inv . type = State ( pfrom - > GetId ( ) ) - > fWantsCmpctWitness ? MSG_WITNESS_BLOCK : MSG_BLOCK ;
inv . type = State ( pfrom - > GetId ( ) ) - > fWantsCmpctWitness ? MSG_WITNESS_BLOCK : MSG_BLOCK ;
inv . hash = req . blockhash ;
inv . hash = req . blockhash ;
@ -1718,7 +1720,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
LOCK ( cs_main ) ;
LOCK ( cs_main ) ;
if ( IsInitialBlockDownload ( ) & & ! pfrom - > fWhitelisted ) {
if ( IsInitialBlockDownload ( ) & & ! pfrom - > fWhitelisted ) {
LogPrint ( " net " , " Ignoring getheaders from peer=%d because node is in initial block download \n " , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " Ignoring getheaders from peer=%d because node is in initial block download \n " , pfrom - > id ) ;
return true ;
return true ;
}
}
@ -1743,7 +1745,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
// we must use CBlocks, as CBlockHeaders won't include the 0x00 nTx count at the end
// we must use CBlocks, as CBlockHeaders won't include the 0x00 nTx count at the end
std : : vector < CBlock > vHeaders ;
std : : vector < CBlock > vHeaders ;
int nLimit = MAX_HEADERS_RESULTS ;
int nLimit = MAX_HEADERS_RESULTS ;
LogPrint ( " net " , " getheaders %d to %s from peer=%d \n " , ( pindex ? pindex - > nHeight : - 1 ) , hashStop . IsNull ( ) ? " end " : hashStop . ToString ( ) , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " getheaders %d to %s from peer=%d \n " , ( pindex ? pindex - > nHeight : - 1 ) , hashStop . IsNull ( ) ? " end " : hashStop . ToString ( ) , pfrom - > id ) ;
for ( ; pindex ; pindex = chainActive . Next ( pindex ) )
for ( ; pindex ; pindex = chainActive . Next ( pindex ) )
{
{
vHeaders . push_back ( pindex - > GetBlockHeader ( ) ) ;
vHeaders . push_back ( pindex - > GetBlockHeader ( ) ) ;
@ -1773,7 +1775,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
// We are in blocks only mode and peer is either not whitelisted or whitelistrelay is off
// We are in blocks only mode and peer is either not whitelisted or whitelistrelay is off
if ( ! fRelayTxes & & ( ! pfrom - > fWhitelisted | | ! GetBoolArg ( " -whitelistrelay " , DEFAULT_WHITELISTRELAY ) ) )
if ( ! fRelayTxes & & ( ! pfrom - > fWhitelisted | | ! GetBoolArg ( " -whitelistrelay " , DEFAULT_WHITELISTRELAY ) ) )
{
{
LogPrint ( " net " , " transaction sent in violation of protocol peer=%d \n " , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " transaction sent in violation of protocol peer=%d \n " , pfrom - > id ) ;
return true ;
return true ;
}
}
@ -1805,7 +1807,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
pfrom - > nLastTXTime = GetTime ( ) ;
pfrom - > nLastTXTime = GetTime ( ) ;
LogPrint ( " mempool " , " AcceptToMemoryPool: peer=%d: accepted %s (poolsz %u txn, %u kB) \n " ,
LogPrint ( BCLog : : MEMPOOL , " AcceptToMemoryPool: peer=%d: accepted %s (poolsz %u txn, %u kB) \n " ,
pfrom - > id ,
pfrom - > id ,
tx . GetHash ( ) . ToString ( ) ,
tx . GetHash ( ) . ToString ( ) ,
mempool . size ( ) , mempool . DynamicMemoryUsage ( ) / 1000 ) ;
mempool . size ( ) , mempool . DynamicMemoryUsage ( ) / 1000 ) ;
@ -1835,7 +1837,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
if ( setMisbehaving . count ( fromPeer ) )
if ( setMisbehaving . count ( fromPeer ) )
continue ;
continue ;
if ( AcceptToMemoryPool ( mempool , stateDummy , porphanTx , true , & fMissingInputs2 , & lRemovedTxn ) ) {
if ( AcceptToMemoryPool ( mempool , stateDummy , porphanTx , true , & fMissingInputs2 , & lRemovedTxn ) ) {
LogPrint ( " mempool " , " accepted orphan tx %s \n " , orphanHash . ToString ( ) ) ;
LogPrint ( BCLog : : MEMPOOL , " accepted orphan tx %s \n " , orphanHash . ToString ( ) ) ;
RelayTransaction ( orphanTx , connman ) ;
RelayTransaction ( orphanTx , connman ) ;
for ( unsigned int i = 0 ; i < orphanTx . vout . size ( ) ; i + + ) {
for ( unsigned int i = 0 ; i < orphanTx . vout . size ( ) ; i + + ) {
vWorkQueue . emplace_back ( orphanHash , i ) ;
vWorkQueue . emplace_back ( orphanHash , i ) ;
@ -1850,11 +1852,11 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
// Punish peer that gave us an invalid orphan tx
// Punish peer that gave us an invalid orphan tx
Misbehaving ( fromPeer , nDos ) ;
Misbehaving ( fromPeer , nDos ) ;
setMisbehaving . insert ( fromPeer ) ;
setMisbehaving . insert ( fromPeer ) ;
LogPrint ( " mempool " , " invalid orphan tx %s \n " , orphanHash . ToString ( ) ) ;
LogPrint ( BCLog : : MEMPOOL , " invalid orphan tx %s \n " , orphanHash . ToString ( ) ) ;
}
}
// Has inputs but not accepted to mempool
// Has inputs but not accepted to mempool
// Probably non-standard or insufficient fee
// Probably non-standard or insufficient fee
LogPrint ( " mempool " , " removed orphan tx %s \n " , orphanHash . ToString ( ) ) ;
LogPrint ( BCLog : : MEMPOOL , " removed orphan tx %s \n " , orphanHash . ToString ( ) ) ;
vEraseQueue . push_back ( orphanHash ) ;
vEraseQueue . push_back ( orphanHash ) ;
if ( ! orphanTx . HasWitness ( ) & & ! stateDummy . CorruptionPossible ( ) ) {
if ( ! orphanTx . HasWitness ( ) & & ! stateDummy . CorruptionPossible ( ) ) {
// Do not use rejection cache for witness transactions or
// Do not use rejection cache for witness transactions or
@ -1892,10 +1894,11 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
// DoS prevention: do not allow mapOrphanTransactions to grow unbounded
// DoS prevention: do not allow mapOrphanTransactions to grow unbounded
unsigned int nMaxOrphanTx = ( unsigned int ) std : : max ( ( int64_t ) 0 , GetArg ( " -maxorphantx " , DEFAULT_MAX_ORPHAN_TRANSACTIONS ) ) ;
unsigned int nMaxOrphanTx = ( unsigned int ) std : : max ( ( int64_t ) 0 , GetArg ( " -maxorphantx " , DEFAULT_MAX_ORPHAN_TRANSACTIONS ) ) ;
unsigned int nEvicted = LimitOrphanTxSize ( nMaxOrphanTx ) ;
unsigned int nEvicted = LimitOrphanTxSize ( nMaxOrphanTx ) ;
if ( nEvicted > 0 )
if ( nEvicted > 0 ) {
LogPrint ( " mempool " , " mapOrphan overflow, removed %u tx \n " , nEvicted ) ;
LogPrint ( BCLog : : MEMPOOL , " mapOrphan overflow, removed %u tx \n " , nEvicted ) ;
}
} else {
} else {
LogPrint ( " mempool " , " not keeping orphan with rejected parents %s \n " , tx . GetHash ( ) . ToString ( ) ) ;
LogPrint ( BCLog : : MEMPOOL , " not keeping orphan with rejected parents %s \n " , tx . GetHash ( ) . ToString ( ) ) ;
// We will continue to reject this tx since it has rejected
// We will continue to reject this tx since it has rejected
// parents so avoid re-requesting it from other peers.
// parents so avoid re-requesting it from other peers.
recentRejects - > insert ( tx . GetHash ( ) ) ;
recentRejects - > insert ( tx . GetHash ( ) ) ;
@ -1939,7 +1942,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
int nDoS = 0 ;
int nDoS = 0 ;
if ( state . IsInvalid ( nDoS ) )
if ( state . IsInvalid ( nDoS ) )
{
{
LogPrint ( " mempoolrej " , " %s from peer=%d was not accepted: %s \n " , tx . GetHash ( ) . ToString ( ) ,
LogPrint ( BCLog : : MEMPOOLREJ , " %s from peer=%d was not accepted: %s \n " , tx . GetHash ( ) . ToString ( ) ,
pfrom - > id ,
pfrom - > id ,
FormatStateMessage ( state ) ) ;
FormatStateMessage ( state ) ) ;
if ( state . GetRejectCode ( ) < REJECT_INTERNAL ) // Never send AcceptToMemoryPool's internal codes over P2P
if ( state . GetRejectCode ( ) < REJECT_INTERNAL ) // Never send AcceptToMemoryPool's internal codes over P2P
@ -2046,7 +2049,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
( * queuedBlockIt ) - > partialBlock . reset ( new PartiallyDownloadedBlock ( & mempool ) ) ;
( * queuedBlockIt ) - > partialBlock . reset ( new PartiallyDownloadedBlock ( & mempool ) ) ;
else {
else {
// The block was already in flight using compact blocks from the same peer
// The block was already in flight using compact blocks from the same peer
LogPrint ( " net " , " Peer sent us compact block we were already syncing! \n " ) ;
LogPrint ( BCLog : : NET , " Peer sent us compact block we were already syncing! \n " ) ;
return true ;
return true ;
}
}
}
}
@ -2161,7 +2164,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
std : : map < uint256 , std : : pair < NodeId , std : : list < QueuedBlock > : : iterator > > : : iterator it = mapBlocksInFlight . find ( resp . blockhash ) ;
std : : map < uint256 , std : : pair < NodeId , std : : list < QueuedBlock > : : iterator > > : : iterator it = mapBlocksInFlight . find ( resp . blockhash ) ;
if ( it = = mapBlocksInFlight . end ( ) | | ! it - > second . second - > partialBlock | |
if ( it = = mapBlocksInFlight . end ( ) | | ! it - > second . second - > partialBlock | |
it - > second . first ! = pfrom - > GetId ( ) ) {
it - > second . first ! = pfrom - > GetId ( ) ) {
LogPrint ( " net " , " Peer %d sent us block transactions for block we weren't expecting \n " , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " Peer %d sent us block transactions for block we weren't expecting \n " , pfrom - > id ) ;
return true ;
return true ;
}
}
@ -2254,7 +2257,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
if ( mapBlockIndex . find ( headers [ 0 ] . hashPrevBlock ) = = mapBlockIndex . end ( ) & & nCount < MAX_BLOCKS_TO_ANNOUNCE ) {
if ( mapBlockIndex . find ( headers [ 0 ] . hashPrevBlock ) = = mapBlockIndex . end ( ) & & nCount < MAX_BLOCKS_TO_ANNOUNCE ) {
nodestate - > nUnconnectingHeaders + + ;
nodestate - > nUnconnectingHeaders + + ;
connman . PushMessage ( pfrom , msgMaker . Make ( NetMsgType : : GETHEADERS , chainActive . GetLocator ( pindexBestHeader ) , uint256 ( ) ) ) ;
connman . PushMessage ( pfrom , msgMaker . Make ( NetMsgType : : GETHEADERS , chainActive . GetLocator ( pindexBestHeader ) , uint256 ( ) ) ) ;
LogPrint ( " net " , " received header %s: missing prev block %s, sending getheaders (%d) to end (peer=%d, nUnconnectingHeaders=%d) \n " ,
LogPrint ( BCLog : : NET , " received header %s: missing prev block %s, sending getheaders (%d) to end (peer=%d, nUnconnectingHeaders=%d) \n " ,
headers [ 0 ] . GetHash ( ) . ToString ( ) ,
headers [ 0 ] . GetHash ( ) . ToString ( ) ,
headers [ 0 ] . hashPrevBlock . ToString ( ) ,
headers [ 0 ] . hashPrevBlock . ToString ( ) ,
pindexBestHeader - > nHeight ,
pindexBestHeader - > nHeight ,
@ -2296,7 +2299,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
LOCK ( cs_main ) ;
LOCK ( cs_main ) ;
CNodeState * nodestate = State ( pfrom - > GetId ( ) ) ;
CNodeState * nodestate = State ( pfrom - > GetId ( ) ) ;
if ( nodestate - > nUnconnectingHeaders > 0 ) {
if ( nodestate - > nUnconnectingHeaders > 0 ) {
LogPrint ( " net " , " peer=%d: resetting nUnconnectingHeaders (%d -> 0) \n " , pfrom - > id , nodestate - > nUnconnectingHeaders ) ;
LogPrint ( BCLog : : NET , " peer=%d: resetting nUnconnectingHeaders (%d -> 0) \n " , pfrom - > id , nodestate - > nUnconnectingHeaders ) ;
}
}
nodestate - > nUnconnectingHeaders = 0 ;
nodestate - > nUnconnectingHeaders = 0 ;
@ -2307,7 +2310,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
// Headers message had its maximum size; the peer may have more headers.
// Headers message had its maximum size; the peer may have more headers.
// TODO: optimize: if pindexLast is an ancestor of chainActive.Tip or pindexBestHeader, continue
// TODO: optimize: if pindexLast is an ancestor of chainActive.Tip or pindexBestHeader, continue
// from there instead.
// from there instead.
LogPrint ( " net " , " more getheaders (%d) to end to peer=%d (startheight:%d) \n " , pindexLast - > nHeight , pfrom - > id , pfrom - > nStartingHeight ) ;
LogPrint ( BCLog : : NET , " more getheaders (%d) to end to peer=%d (startheight:%d) \n " , pindexLast - > nHeight , pfrom - > id , pfrom - > nStartingHeight ) ;
connman . PushMessage ( pfrom , msgMaker . Make ( NetMsgType : : GETHEADERS , chainActive . GetLocator ( pindexLast ) , uint256 ( ) ) ) ;
connman . PushMessage ( pfrom , msgMaker . Make ( NetMsgType : : GETHEADERS , chainActive . GetLocator ( pindexLast ) , uint256 ( ) ) ) ;
}
}
@ -2332,7 +2335,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
// the main chain -- this shouldn't really happen. Bail out on the
// the main chain -- this shouldn't really happen. Bail out on the
// direct fetch and rely on parallel download instead.
// direct fetch and rely on parallel download instead.
if ( ! chainActive . Contains ( pindexWalk ) ) {
if ( ! chainActive . Contains ( pindexWalk ) ) {
LogPrint ( " net " , " Large reorg, won't direct fetch to %s (%d) \n " ,
LogPrint ( BCLog : : NET , " Large reorg, won't direct fetch to %s (%d) \n " ,
pindexLast - > GetBlockHash ( ) . ToString ( ) ,
pindexLast - > GetBlockHash ( ) . ToString ( ) ,
pindexLast - > nHeight ) ;
pindexLast - > nHeight ) ;
} else {
} else {
@ -2346,11 +2349,11 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
uint32_t nFetchFlags = GetFetchFlags ( pfrom , pindex - > pprev , chainparams . GetConsensus ( ) ) ;
uint32_t nFetchFlags = GetFetchFlags ( pfrom , pindex - > pprev , chainparams . GetConsensus ( ) ) ;
vGetData . push_back ( CInv ( MSG_BLOCK | nFetchFlags , pindex - > GetBlockHash ( ) ) ) ;
vGetData . push_back ( CInv ( MSG_BLOCK | nFetchFlags , pindex - > GetBlockHash ( ) ) ) ;
MarkBlockAsInFlight ( pfrom - > GetId ( ) , pindex - > GetBlockHash ( ) , chainparams . GetConsensus ( ) , pindex ) ;
MarkBlockAsInFlight ( pfrom - > GetId ( ) , pindex - > GetBlockHash ( ) , chainparams . GetConsensus ( ) , pindex ) ;
LogPrint ( " net " , " Requesting block %s from peer=%d \n " ,
LogPrint ( BCLog : : NET , " Requesting block %s from peer=%d \n " ,
pindex - > GetBlockHash ( ) . ToString ( ) , pfrom - > id ) ;
pindex - > GetBlockHash ( ) . ToString ( ) , pfrom - > id ) ;
}
}
if ( vGetData . size ( ) > 1 ) {
if ( vGetData . size ( ) > 1 ) {
LogPrint ( " net " , " Downloading blocks toward %s (%d) via headers direct fetch \n " ,
LogPrint ( BCLog : : NET , " Downloading blocks toward %s (%d) via headers direct fetch \n " ,
pindexLast - > GetBlockHash ( ) . ToString ( ) , pindexLast - > nHeight ) ;
pindexLast - > GetBlockHash ( ) . ToString ( ) , pindexLast - > nHeight ) ;
}
}
if ( vGetData . size ( ) > 0 ) {
if ( vGetData . size ( ) > 0 ) {
@ -2370,7 +2373,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
std : : shared_ptr < CBlock > pblock = std : : make_shared < CBlock > ( ) ;
std : : shared_ptr < CBlock > pblock = std : : make_shared < CBlock > ( ) ;
vRecv > > * pblock ;
vRecv > > * pblock ;
LogPrint ( " net " , " received block %s peer=%d \n " , pblock - > GetHash ( ) . ToString ( ) , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " received block %s peer=%d \n " , pblock - > GetHash ( ) . ToString ( ) , pfrom - > id ) ;
// Process all blocks from whitelisted peers, even if not requested,
// Process all blocks from whitelisted peers, even if not requested,
// unless we're still syncing with the network.
// unless we're still syncing with the network.
@ -2402,14 +2405,14 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
// Making nodes which are behind NAT and can only make outgoing connections ignore
// Making nodes which are behind NAT and can only make outgoing connections ignore
// the getaddr message mitigates the attack.
// the getaddr message mitigates the attack.
if ( ! pfrom - > fInbound ) {
if ( ! pfrom - > fInbound ) {
LogPrint ( " net " , " Ignoring \" getaddr \" from outbound connection. peer=%d \n " , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " Ignoring \" getaddr \" from outbound connection. peer=%d \n " , pfrom - > id ) ;
return true ;
return true ;
}
}
// Only send one GetAddr response per connection to reduce resource waste
// Only send one GetAddr response per connection to reduce resource waste
// and discourage addr stamping of INV announcements.
// and discourage addr stamping of INV announcements.
if ( pfrom - > fSentAddr ) {
if ( pfrom - > fSentAddr ) {
LogPrint ( " net " , " Ignoring repeated \" getaddr \" . peer=%d \n " , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " Ignoring repeated \" getaddr \" . peer=%d \n " , pfrom - > id ) ;
return true ;
return true ;
}
}
pfrom - > fSentAddr = true ;
pfrom - > fSentAddr = true ;
@ -2426,14 +2429,14 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
{
{
if ( ! ( pfrom - > GetLocalServices ( ) & NODE_BLOOM ) & & ! pfrom - > fWhitelisted )
if ( ! ( pfrom - > GetLocalServices ( ) & NODE_BLOOM ) & & ! pfrom - > fWhitelisted )
{
{
LogPrint ( " net " , " mempool request with bloom filters disabled, disconnect peer=%d \n " , pfrom - > GetId ( ) ) ;
LogPrint ( BCLog : : NET , " mempool request with bloom filters disabled, disconnect peer=%d \n " , pfrom - > GetId ( ) ) ;
pfrom - > fDisconnect = true ;
pfrom - > fDisconnect = true ;
return true ;
return true ;
}
}
if ( connman . OutboundTargetReached ( false ) & & ! pfrom - > fWhitelisted )
if ( connman . OutboundTargetReached ( false ) & & ! pfrom - > fWhitelisted )
{
{
LogPrint ( " net " , " mempool request with bandwidth limit reached, disconnect peer=%d \n " , pfrom - > GetId ( ) ) ;
LogPrint ( BCLog : : NET , " mempool request with bandwidth limit reached, disconnect peer=%d \n " , pfrom - > GetId ( ) ) ;
pfrom - > fDisconnect = true ;
pfrom - > fDisconnect = true ;
return true ;
return true ;
}
}
@ -2509,7 +2512,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
}
}
if ( ! ( sProblem . empty ( ) ) ) {
if ( ! ( sProblem . empty ( ) ) ) {
LogPrint ( " net " , " pong peer=%d: %s, %x expected, %x received, %u bytes \n " ,
LogPrint ( BCLog : : NET , " pong peer=%d: %s, %x expected, %x received, %u bytes \n " ,
pfrom - > id ,
pfrom - > id ,
sProblem ,
sProblem ,
pfrom - > nPingNonceSent ,
pfrom - > nPingNonceSent ,
@ -2587,7 +2590,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
LOCK ( pfrom - > cs_feeFilter ) ;
LOCK ( pfrom - > cs_feeFilter ) ;
pfrom - > minFeeFilter = newFeeFilter ;
pfrom - > minFeeFilter = newFeeFilter ;
}
}
LogPrint ( " net " , " received: feefilter of %s from peer=%d \n " , CFeeRate ( newFeeFilter ) . ToString ( ) , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " received: feefilter of %s from peer=%d \n " , CFeeRate ( newFeeFilter ) . ToString ( ) , pfrom - > id ) ;
}
}
}
}
@ -2598,7 +2601,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
else {
else {
// Ignore unknown commands for extensibility
// Ignore unknown commands for extensibility
LogPrint ( " net " , " Unknown command \" %s \" from peer=%d \n " , SanitizeString ( strCommand ) , pfrom - > id ) ;
LogPrint ( BCLog : : NET , " Unknown command \" %s \" from peer=%d \n " , SanitizeString ( strCommand ) , pfrom - > id ) ;
}
}
@ -2876,7 +2879,7 @@ bool SendMessages(CNode* pto, CConnman& connman, const std::atomic<bool>& interr
got back an empty response . */
got back an empty response . */
if ( pindexStart - > pprev )
if ( pindexStart - > pprev )
pindexStart = pindexStart - > pprev ;
pindexStart = pindexStart - > pprev ;
LogPrint ( " net " , " initial getheaders (%d) to peer=%d (startheight:%d) \n " , pindexStart - > nHeight , pto - > id , pto - > nStartingHeight ) ;
LogPrint ( BCLog : : NET , " initial getheaders (%d) to peer=%d (startheight:%d) \n " , pindexStart - > nHeight , pto - > id , pto - > nStartingHeight ) ;
connman . PushMessage ( pto , msgMaker . Make ( NetMsgType : : GETHEADERS , chainActive . GetLocator ( pindexStart ) , uint256 ( ) ) ) ;
connman . PushMessage ( pto , msgMaker . Make ( NetMsgType : : GETHEADERS , chainActive . GetLocator ( pindexStart ) , uint256 ( ) ) ) ;
}
}
}
}
@ -2960,7 +2963,7 @@ bool SendMessages(CNode* pto, CConnman& connman, const std::atomic<bool>& interr
if ( vHeaders . size ( ) = = 1 & & state . fPreferHeaderAndIDs ) {
if ( vHeaders . size ( ) = = 1 & & state . fPreferHeaderAndIDs ) {
// We only send up to 1 block as header-and-ids, as otherwise
// We only send up to 1 block as header-and-ids, as otherwise
// probably means we're doing an initial-ish-sync or they're slow
// probably means we're doing an initial-ish-sync or they're slow
LogPrint ( " net " , " %s sending header-and-ids %s to peer=%d \n " , __func__ ,
LogPrint ( BCLog : : NET , " %s sending header-and-ids %s to peer=%d \n " , __func__ ,
vHeaders . front ( ) . GetHash ( ) . ToString ( ) , pto - > id ) ;
vHeaders . front ( ) . GetHash ( ) . ToString ( ) , pto - > id ) ;
int nSendFlags = state . fWantsCmpctWitness ? 0 : SERIALIZE_TRANSACTION_NO_WITNESS ;
int nSendFlags = state . fWantsCmpctWitness ? 0 : SERIALIZE_TRANSACTION_NO_WITNESS ;
@ -2988,12 +2991,12 @@ bool SendMessages(CNode* pto, CConnman& connman, const std::atomic<bool>& interr
state . pindexBestHeaderSent = pBestIndex ;
state . pindexBestHeaderSent = pBestIndex ;
} else if ( state . fPreferHeaders ) {
} else if ( state . fPreferHeaders ) {
if ( vHeaders . size ( ) > 1 ) {
if ( vHeaders . size ( ) > 1 ) {
LogPrint ( " net " , " %s: %u headers, range (%s, %s), to peer=%d \n " , __func__ ,
LogPrint ( BCLog : : NET , " %s: %u headers, range (%s, %s), to peer=%d \n " , __func__ ,
vHeaders . size ( ) ,
vHeaders . size ( ) ,
vHeaders . front ( ) . GetHash ( ) . ToString ( ) ,
vHeaders . front ( ) . GetHash ( ) . ToString ( ) ,
vHeaders . back ( ) . GetHash ( ) . ToString ( ) , pto - > id ) ;
vHeaders . back ( ) . GetHash ( ) . ToString ( ) , pto - > id ) ;
} else {
} else {
LogPrint ( " net " , " %s: sending header %s to peer=%d \n " , __func__ ,
LogPrint ( BCLog : : NET , " %s: sending header %s to peer=%d \n " , __func__ ,
vHeaders . front ( ) . GetHash ( ) . ToString ( ) , pto - > id ) ;
vHeaders . front ( ) . GetHash ( ) . ToString ( ) , pto - > id ) ;
}
}
connman . PushMessage ( pto , msgMaker . Make ( NetMsgType : : HEADERS , vHeaders ) ) ;
connman . PushMessage ( pto , msgMaker . Make ( NetMsgType : : HEADERS , vHeaders ) ) ;
@ -3015,14 +3018,14 @@ bool SendMessages(CNode* pto, CConnman& connman, const std::atomic<bool>& interr
// This should be very rare and could be optimized out.
// This should be very rare and could be optimized out.
// Just log for now.
// Just log for now.
if ( chainActive [ pindex - > nHeight ] ! = pindex ) {
if ( chainActive [ pindex - > nHeight ] ! = pindex ) {
LogPrint ( " net " , " Announcing block %s not on main chain (tip=%s) \n " ,
LogPrint ( BCLog : : NET , " Announcing block %s not on main chain (tip=%s) \n " ,
hashToAnnounce . ToString ( ) , chainActive . Tip ( ) - > GetBlockHash ( ) . ToString ( ) ) ;
hashToAnnounce . ToString ( ) , chainActive . Tip ( ) - > GetBlockHash ( ) . ToString ( ) ) ;
}
}
// If the peer's chain has this block, don't inv it back.
// If the peer's chain has this block, don't inv it back.
if ( ! PeerHasHeader ( & state , pindex ) ) {
if ( ! PeerHasHeader ( & state , pindex ) ) {
pto - > PushInventory ( CInv ( MSG_BLOCK , hashToAnnounce ) ) ;
pto - > PushInventory ( CInv ( MSG_BLOCK , hashToAnnounce ) ) ;
LogPrint ( " net " , " %s: sending inv peer=%d hash=%s \n " , __func__ ,
LogPrint ( BCLog : : NET , " %s: sending inv peer=%d hash=%s \n " , __func__ ,
pto - > id , hashToAnnounce . ToString ( ) ) ;
pto - > id , hashToAnnounce . ToString ( ) ) ;
}
}
}
}
@ -3201,13 +3204,13 @@ bool SendMessages(CNode* pto, CConnman& connman, const std::atomic<bool>& interr
uint32_t nFetchFlags = GetFetchFlags ( pto , pindex - > pprev , consensusParams ) ;
uint32_t nFetchFlags = GetFetchFlags ( pto , pindex - > pprev , consensusParams ) ;
vGetData . push_back ( CInv ( MSG_BLOCK | nFetchFlags , pindex - > GetBlockHash ( ) ) ) ;
vGetData . push_back ( CInv ( MSG_BLOCK | nFetchFlags , pindex - > GetBlockHash ( ) ) ) ;
MarkBlockAsInFlight ( pto - > GetId ( ) , pindex - > GetBlockHash ( ) , consensusParams , pindex ) ;
MarkBlockAsInFlight ( pto - > GetId ( ) , pindex - > GetBlockHash ( ) , consensusParams , pindex ) ;
LogPrint ( " net " , " Requesting block %s (%d) peer=%d \n " , pindex - > GetBlockHash ( ) . ToString ( ) ,
LogPrint ( BCLog : : NET , " Requesting block %s (%d) peer=%d \n " , pindex - > GetBlockHash ( ) . ToString ( ) ,
pindex - > nHeight , pto - > id ) ;
pindex - > nHeight , pto - > id ) ;
}
}
if ( state . nBlocksInFlight = = 0 & & staller ! = - 1 ) {
if ( state . nBlocksInFlight = = 0 & & staller ! = - 1 ) {
if ( State ( staller ) - > nStallingSince = = 0 ) {
if ( State ( staller ) - > nStallingSince = = 0 ) {
State ( staller ) - > nStallingSince = nNow ;
State ( staller ) - > nStallingSince = nNow ;
LogPrint ( " net " , " Stall started peer=%d \n " , staller ) ;
LogPrint ( BCLog : : NET , " Stall started peer=%d \n " , staller ) ;
}
}
}
}
}
}
@ -3220,8 +3223,7 @@ bool SendMessages(CNode* pto, CConnman& connman, const std::atomic<bool>& interr
const CInv & inv = ( * pto - > mapAskFor . begin ( ) ) . second ;
const CInv & inv = ( * pto - > mapAskFor . begin ( ) ) . second ;
if ( ! AlreadyHave ( inv ) )
if ( ! AlreadyHave ( inv ) )
{
{
if ( fDebug )
LogPrint ( BCLog : : NET , " Requesting %s peer=%d \n " , inv . ToString ( ) , pto - > id ) ;
LogPrint ( " net " , " Requesting %s peer=%d \n " , inv . ToString ( ) , pto - > id ) ;
vGetData . push_back ( inv ) ;
vGetData . push_back ( inv ) ;
if ( vGetData . size ( ) > = 1000 )
if ( vGetData . size ( ) > = 1000 )
{
{