| 695 | } |
| 696 | |
| 697 | void ProcessBlockMessage(CNode *pFrom, CDataStream &vRecv) { |
| 698 | CBlock block; |
| 699 | vRecv >> block; |
| 700 | |
| 701 | LogPrint(BCLog::NET, "recv block! time_ms=%lld, hash=%s, peer=%s\n", GetTimeMillis(), |
| 702 | block.GetHash().ToString(), pFrom->addr.ToString()); |
| 703 | // block.Print(); |
| 704 | |
| 705 | CInv inv(MSG_BLOCK, block.GetHash()); |
| 706 | pFrom->AddInventoryKnown(inv); |
| 707 | |
| 708 | { |
| 709 | // Remember who we got this block from. |
| 710 | LOCK(cs_mapNodeState); |
| 711 | mapBlockSource[inv.hash] = pFrom->GetId(); |
| 712 | MarkBlockAsReceived(inv.hash, pFrom->GetId()); |
| 713 | } |
| 714 | |
| 715 | LOCK(cs_main); |
| 716 | CValidationState state; |
| 717 | |
| 718 | std::pair<int32_t ,uint256> globalfinblock = std::make_pair(0,uint256()); |
| 719 | pCdMan->pBlockCache->ReadGlobalFinBlock(globalfinblock); |
| 720 | if (block.GetHeight() < (uint32_t)globalfinblock.first) { |
| 721 | LogPrint(BCLog::NET,"[%d] this inbound block is irrreversible (%d)\n", |
| 722 | block.GetHeight(), globalfinblock.first); |
| 723 | } else { |
| 724 | ProcessBlock(state, pFrom, &block); |
| 725 | } |
| 726 | |
| 727 | } |
| 728 | |
| 729 | void ProcessMempoolMessage(CNode *pFrom, CDataStream &vRecv) { |
| 730 | LOCK2(cs_main, pFrom->cs_filter); |
no test coverage detected