diff --git a/process/block/metablock.go b/process/block/metablock.go index c6bc335fb6..6ec9c2c166 100644 --- a/process/block/metablock.go +++ b/process/block/metablock.go @@ -1257,6 +1257,25 @@ func (mp *metaProcessor) requestShardHeadersIfNeeded( } } +func (mp *metaProcessor) revertEpochStartTrigger( + header data.HeaderHandler, +) { + metaHeader, ok := header.(data.MetaHeaderHandler) + if !ok { + log.Warn("revertEpochStartTrigger: failed to revert", "error", process.ErrWrongTypeAssertion) + return + } + + if metaHeader.IsStartOfEpochBlock() { + log.LogIfError(mp.epochStartTrigger.RevertStateToBlock(metaHeader)) + mp.epochStartTrigger.SetEpochChangeProposed(true) + } + + if metaHeader.IsEpochChangeProposed() { + mp.epochStartTrigger.SetEpochChangeProposed(false) + } +} + // CommitBlock commits the block in the blockchain if everything was checked successfully func (mp *metaProcessor) CommitBlock( headerHandler data.HeaderHandler, @@ -1286,6 +1305,8 @@ func (mp *metaProcessor) CommitBlock( mp.RevertHeaderV3OnCommit(headerHandler) _ = mp.blockChain.SetCurrentBlockHeader(prevBlockHeader) mp.blockChain.SetCurrentBlockHeaderHash(prevBlockHeaderHash) + + mp.revertEpochStartTrigger(headerHandler) } }() } @@ -1480,9 +1501,6 @@ func (mp *metaProcessor) CommitBlock( highestFinalBlockNonce: highestFinalBlockNonce, } - // TODO adjust this method if needed for Supernova - mp.prepareDataForBootStorer(args) - mp.blockSizeThrottler.Succeed(header.GetRound()) mp.displayPoolsInfo() @@ -1492,6 +1510,8 @@ func (mp *metaProcessor) CommitBlock( return err } + mp.prepareDataForBootStorer(args) + errNotCritical = mp.removeTxsFromPools(headerHash, header, body) if errNotCritical != nil { log.Debug("removeTxsFromPools", "error", errNotCritical.Error()) diff --git a/process/block/shardblock.go b/process/block/shardblock.go index 9e43d1140b..0bcb9439e6 100644 --- a/process/block/shardblock.go +++ b/process/block/shardblock.go @@ -964,6 +964,10 @@ func (sp *shardProcessor) CommitBlock( sp.RevertHeaderV3OnCommit(headerHandler) _ = sp.blockChain.SetCurrentBlockHeader(prevBlockHeader) sp.blockChain.SetCurrentBlockHeaderHash(prevBlockHeaderHash) + + if headerHandler.IsStartOfEpochBlock() { + log.LogIfError(sp.epochStartTrigger.RevertStateToBlock(headerHandler)) + } } }() } @@ -1162,9 +1166,6 @@ func (sp *shardProcessor) CommitBlock( epochStartTriggerConfigKey: epochStartKey, } - // TODO adjust this method if needed for Supernova - sp.prepareDataForBootStorer(args) - // write data to log go func() { sp.txCounter.headerExecuted(header) @@ -1188,6 +1189,8 @@ func (sp *shardProcessor) CommitBlock( return err } + sp.prepareDataForBootStorer(args) + errNotCritical = sp.removeTxsFromPools(headerHash, header, body) if errNotCritical != nil { log.Debug("removeTxsFromPools", "error", errNotCritical.Error())