| 857 | |
| 858 | |
| 859 | bool ProcessBlockFinalityMessage(CNode *pFrom, CDataStream &vRecv) { |
| 860 | |
| 861 | |
| 862 | if(SysCfg().IsReindex()|| GetTime()-chainActive.Tip()->GetBlockTime()>600) |
| 863 | return false; |
| 864 | |
| 865 | CPBFTMessageMan<CBlockFinalityMessage>& msgMan = pbftContext.finalityMessageMan; |
| 866 | CBlockFinalityMessage message; |
| 867 | vRecv >> message; |
| 868 | |
| 869 | LogPrint(BCLog::NET, "received Block FinalityMessage: block=%s, miner=%s, signature=%s \n", |
| 870 | message.GetBlockId(), message.miner.ToString(), HexStr(message.vSignature)); |
| 871 | |
| 872 | pFrom->AddBlockFinalityMessageKnown(message); |
| 873 | |
| 874 | if(msgMan.IsKnown(message)){ |
| 875 | LogPrint(BCLog::NET, "duplicate finality message, miner=%s, block=%s \n", |
| 876 | message.miner.ToString(), message.GetBlockId()); |
| 877 | return false; |
| 878 | } |
| 879 | |
| 880 | if(!CheckPBFTMessage(PBFTMsgType::FINALITY_BLOCK, message)){ |
| 881 | LogPrint(BCLog::NET, "finality block message check failed, miner=%s, block=%s \n", |
| 882 | message.miner.ToString(), message.GetBlockId()); |
| 883 | return false; |
| 884 | } |
| 885 | |
| 886 | msgMan.AddMessageKnown(message); |
| 887 | int messageCount = msgMan.SaveMessageByBlock(message.blockHash, message); |
| 888 | pbftMan.UpdateGlobalFinBlock(message, messageCount); |
| 889 | |
| 890 | if(CheckPBFTMessageSigner(message)){ |
| 891 | RelayBlockFinalityMessage(message); |
| 892 | } |
| 893 | |
| 894 | |
| 895 | return true; |
| 896 | } |
| 897 | void ProcessRejectMessage(CNode *pFrom, CDataStream &vRecv) { |
| 898 | if (SysCfg().IsDebug()) { |
| 899 | string message; |
no test coverage detected