| 814 | } |
| 815 | |
| 816 | bool ProcessBlockConfirmMessage(CNode *pFrom, CDataStream &vRecv) { |
| 817 | |
| 818 | if(SysCfg().IsReindex()|| GetTime()-chainActive.Tip()->GetBlockTime()>600){ |
| 819 | LogPrint(BCLog::NET, "local tip's height is too low,drop the confirm message "); |
| 820 | return false; |
| 821 | } |
| 822 | |
| 823 | CPBFTMessageMan<CBlockConfirmMessage>& msgMan = pbftContext.confirmMessageMan; |
| 824 | CBlockConfirmMessage message; |
| 825 | vRecv >> message; |
| 826 | |
| 827 | LogPrint(BCLog::NET, "received Block confirmedMessage: blockHeight=%d, blockHash=%s, minerid =%s, signature=%s \n", |
| 828 | message.height, message.blockHash.GetHex(), message.miner.ToString(), HexStr<vector<unsigned char>>(message.vSignature)); |
| 829 | |
| 830 | pFrom->AddBlockConfirmMessageKnown(message); |
| 831 | |
| 832 | if(msgMan.IsKnown(message)){ |
| 833 | LogPrint(BCLog::NET, "duplicate confirm message,miner_id=%s, blockhash=%s \n",message.miner.ToString(), message.blockHash.GetHex()); |
| 834 | return false; |
| 835 | } |
| 836 | |
| 837 | if(!CheckPBFTMessage(PBFTMsgType::CONFIRM_BLOCK,message)){ |
| 838 | LogPrint(BCLog::NET, "confirm message check failed,miner_id=%s, blockhash=%s \n",message.miner.ToString(), message.blockHash.GetHex()); |
| 839 | return false; |
| 840 | } |
| 841 | |
| 842 | msgMan.AddMessageKnown(message); |
| 843 | int messageCount = msgMan.SaveMessageByBlock(message.blockHash, message); |
| 844 | |
| 845 | bool updateFinalitySuccess = pbftMan.UpdateLocalFinBlock(message, messageCount); |
| 846 | |
| 847 | |
| 848 | if(CheckPBFTMessageSigner(message)) |
| 849 | RelayBlockConfirmMessage(message); |
| 850 | |
| 851 | if(updateFinalitySuccess){ |
| 852 | BroadcastBlockFinality(pbftMan.GetLocalFinIndex()); |
| 853 | } |
| 854 | |
| 855 | return true; |
| 856 | } |
| 857 | |
| 858 | |
| 859 | bool ProcessBlockFinalityMessage(CNode *pFrom, CDataStream &vRecv) { |
no test coverage detected