diff --git a/process/block/baseProcess.go b/process/block/baseProcess.go index 944441e7af1..19970b91d7f 100644 --- a/process/block/baseProcess.go +++ b/process/block/baseProcess.go @@ -2232,3 +2232,12 @@ func (bp *baseProcessor) addPrevProofIfNeeded(header data.HeaderHandler) error { header.SetPreviousProof(prevBlockProof) return nil } + +func (bp *baseProcessor) getHeaderHash(header data.HeaderHandler) ([]byte, error) { + marshalledHeader, errMarshal := bp.marshalizer.Marshal(header) + if errMarshal != nil { + return nil, errMarshal + } + + return bp.hasher.Compute(string(marshalledHeader)), nil +} diff --git a/process/block/metablock.go b/process/block/metablock.go index 7339ead876a..951efe49747 100644 --- a/process/block/metablock.go +++ b/process/block/metablock.go @@ -1904,7 +1904,7 @@ func (mp *metaProcessor) checkShardHeadersValidity(metaHdr *block.MetaBlock) (ma } if mp.enableEpochsHandler.IsFlagEnabledInEpoch(common.EquivalentMessagesFlag, shardHdr.GetEpoch()) { if shardData.Epoch != shardHdr.GetEpoch() { - return nil, process.ErrEpochMissmatch + return nil, process.ErrEpochMismatch } } @@ -1987,22 +1987,18 @@ func (mp *metaProcessor) checkShardHeadersFinality( continue } + isNotarizedBasedOnProofs, errCheckProof := mp.checkShardHeaderFinalityBasedOnProofs(lastVerifiedHdr, shardId) + if isNotarizedBasedOnProofs { + if errCheckProof != nil { + return errCheckProof + } + + continue + } + // verify if there are "K" block after current to make this one final nextBlocksVerified := uint32(0) - isNotarizedBasedOnProofs := false for _, shardHdr := range finalityAttestingShardHdrs[shardId] { - var errCheckProof error - isNotarizedBasedOnProofs, errCheckProof = mp.checkShardHeaderFinalityBasedOnProofs(shardHdr, shardId) - // if the header is notarized based on proofs and there is no error, break the loop - // if there is any error, forward it, header is not final - if isNotarizedBasedOnProofs { - if errCheckProof != nil { - return err - } - - break - } - if nextBlocksVerified >= mp.shardBlockFinality { break } @@ -2016,6 +2012,15 @@ func (mp *metaProcessor) checkShardHeadersFinality( continue } + isNotarizedBasedOnProofs, errCheckProof = mp.checkShardHeaderFinalityBasedOnProofs(shardHdr, shardId) + if isNotarizedBasedOnProofs { + if errCheckProof != nil { + return errCheckProof + } + + break + } + lastVerifiedHdr = shardHdr nextBlocksVerified += 1 } diff --git a/process/block/shardblock.go b/process/block/shardblock.go index e3539ac4634..830a4f46d3c 100644 --- a/process/block/shardblock.go +++ b/process/block/shardblock.go @@ -640,15 +640,6 @@ func (sp *shardProcessor) checkMetaHdrFinality(header data.HeaderHandler) error return nil } -func (sp *shardProcessor) getHeaderHash(header data.HeaderHandler) ([]byte, error) { - marshalledHeader, errMarshal := sp.marshalizer.Marshal(header) - if errMarshal != nil { - return nil, errMarshal - } - - return sp.hasher.Compute(string(marshalledHeader)), nil -} - func (sp *shardProcessor) checkAndRequestIfMetaHeadersMissing() { orderedMetaBlocks, _ := sp.blockTracker.GetTrackedHeaders(core.MetachainShardId) diff --git a/process/errors.go b/process/errors.go index 728ec6348c6..ded117ecb7e 100644 --- a/process/errors.go +++ b/process/errors.go @@ -1275,5 +1275,5 @@ var ErrInvalidHeaderProof = errors.New("invalid equivalent proof") // ErrUnexpectedHeaderProof signals that a header proof has been provided unexpectedly var ErrUnexpectedHeaderProof = errors.New("unexpected header proof") -// ErrEpochMissmatch signals that the epoch do not match -var ErrEpochMissmatch = errors.New("epoch missmatch") +// ErrEpochMismatch signals that the epoch do not match +var ErrEpochMismatch = errors.New("epoch mismatch") diff --git a/process/track/blockProcessor.go b/process/track/blockProcessor.go index f006f4db4ec..5ce30a09889 100644 --- a/process/track/blockProcessor.go +++ b/process/track/blockProcessor.go @@ -316,7 +316,11 @@ func (bp *blockProcessor) checkHeaderFinality( if bp.enableEpochsHandler.IsFlagEnabledInEpoch(common.EquivalentMessagesFlag, header.GetEpoch()) { // the index in argument is for the next block after header - if bp.proofsPool.HasProof(header.GetShardID(), sortedHeadersHashes[index-1]) { + hashIndex := index + if index > 0 { + hashIndex = index - 1 + } + if bp.proofsPool.HasProof(header.GetShardID(), sortedHeadersHashes[hashIndex]) { return nil } @@ -339,7 +343,7 @@ func (bp *blockProcessor) checkHeaderFinality( // if the currentHeader(the one that should confirm the finality of the prev) // is the epoch start block of equivalent messages, we must check for its proof as well if bp.enableEpochsHandler.IsFlagEnabledInEpoch(common.EquivalentMessagesFlag, currHeader.GetEpoch()) { - if bp.proofsPool.HasProof(currHeader.GetShardID(), sortedHeadersHashes[index]) { + if bp.proofsPool.HasProof(currHeader.GetShardID(), sortedHeadersHashes[i]) { return nil }