Skip to content

Commit

Permalink
proper fix for attesting headers
Browse files Browse the repository at this point in the history
  • Loading branch information
sstanculeanu committed Feb 7, 2025
1 parent ce10695 commit 1ecff9a
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 4 deletions.
5 changes: 3 additions & 2 deletions process/block/metablock.go
Original file line number Diff line number Diff line change
Expand Up @@ -2211,10 +2211,11 @@ func (mp *metaProcessor) computeExistingAndRequestMissingShardHeaders(metaBlock
}

shouldConsiderProofsForNotarization := mp.enableEpochsHandler.IsFlagEnabledInEpoch(common.EquivalentMessagesFlag, hdr.GetEpoch())
if shouldConsiderProofsForNotarization && !mp.proofsPool.HasProof(core.MetachainShardId, shardData.HeaderHash) {
hasProofForShardHeader := mp.proofsPool.HasProof(shardData.ShardID, shardData.HeaderHash)
if shouldConsiderProofsForNotarization && !hasProofForShardHeader {
// if there is no proof for current shard header, request the next one that holds this proof
mp.hdrsForCurrBlock.missingFinalityAttestingHdrs++
go mp.requestHandler.RequestMetaHeaderByNonce(hdr.GetNonce() + 1)
go mp.requestHandler.RequestShardHeaderByNonce(hdr.GetShardID(), hdr.GetNonce()+1)
}

mp.updateLastNotarizedBlockForShard(hdr, shardData.HeaderHash)
Expand Down
17 changes: 15 additions & 2 deletions process/block/shardblock.go
Original file line number Diff line number Diff line change
Expand Up @@ -1821,6 +1821,8 @@ func (sp *shardProcessor) computeExistingAndRequestMissingMetaHeaders(header dat
defer sp.hdrsForCurrBlock.mutHdrsForBlock.Unlock()

metaBlockHashes := header.GetMetaBlockHashes()
lastMetablockNonce := uint64(0)
hasProofForLastMetablock := false
for i := 0; i < len(metaBlockHashes); i++ {
hdr, err := process.GetMetaHeaderFromPool(
metaBlockHashes[i],
Expand All @@ -1847,15 +1849,26 @@ func (sp *shardProcessor) computeExistingAndRequestMissingMetaHeaders(header dat
}

shouldConsiderProofsForNotarization := sp.enableEpochsHandler.IsFlagEnabledInEpoch(common.EquivalentMessagesFlag, hdr.GetEpoch())
if shouldConsiderProofsForNotarization && !sp.proofsPool.HasProof(core.MetachainShardId, metaBlockHashes[i]) {
hasProofForMetablock := sp.proofsPool.HasProof(core.MetachainShardId, metaBlockHashes[i])
if !shouldConsiderProofsForNotarization {
continue
}

if !hasProofForMetablock {
// if there is no proof for current metablock hash, request the next one that holds this proof
sp.hdrsForCurrBlock.missingFinalityAttestingHdrs++
go sp.requestHandler.RequestMetaHeaderByNonce(hdr.GetNonce() + 1)
continue
}

if hdr.GetNonce() > lastMetablockNonce {
lastMetablockNonce = hdr.GetNonce()
hasProofForLastMetablock = hasProofForMetablock
}
}

requestedFinalityAttestingBasedOnProofs := sp.hdrsForCurrBlock.missingFinalityAttestingHdrs > 0
if sp.hdrsForCurrBlock.missingHdrs == 0 && !requestedFinalityAttestingBasedOnProofs {
if sp.hdrsForCurrBlock.missingHdrs == 0 && !requestedFinalityAttestingBasedOnProofs && !hasProofForLastMetablock {
sp.hdrsForCurrBlock.missingFinalityAttestingHdrs = sp.requestMissingFinalityAttestingHeaders(
core.MetachainShardId,
sp.metaBlockFinality,
Expand Down

0 comments on commit 1ecff9a

Please sign in to comment.