From 8c03fe3e9688d243ad3d3784a9d0d4e345cff3ad Mon Sep 17 00:00:00 2001 From: AdoAdoAdo Date: Wed, 16 Mar 2022 12:49:54 +0200 Subject: [PATCH] add check for headers with scheduled miniBlocks --- data/block/block.go | 5 +++++ data/block/blockV2.go | 17 +++++++++++++++++ data/block/metaBlock.go | 17 +++++++++++++++++ data/interface.go | 1 + 4 files changed, 40 insertions(+) diff --git a/data/block/block.go b/data/block/block.go index 3c230e102..69833a5ab 100644 --- a/data/block/block.go +++ b/data/block/block.go @@ -561,6 +561,11 @@ func (h *Header) HasScheduledSupport() bool { return false } +// HasScheduledMiniBlocks returns false as v1 Header has no support for scheduled data +func (h *Header) HasScheduledMiniBlocks() bool { + return false +} + // GetAdditionalData gets the additional version-related data for the header func (h *Header) GetAdditionalData() headerVersionData.HeaderAdditionalData { // no extra data for the initial version of shard block header diff --git a/data/block/blockV2.go b/data/block/blockV2.go index 923b08076..4aa1ec3b6 100644 --- a/data/block/blockV2.go +++ b/data/block/blockV2.go @@ -473,6 +473,23 @@ func (hv2 *HeaderV2) HasScheduledSupport() bool { return true } +// HasScheduledMiniBlocks returns true if the header has scheduled miniBlock headers +func (hv2 *HeaderV2) HasScheduledMiniBlocks() bool { + if hv2 == nil { + return false + } + + mbHeaderHandlers := hv2.GetMiniBlockHeaderHandlers() + for _, mbHeader := range mbHeaderHandlers { + processingType := ProcessingType(mbHeader.GetProcessingType()) + if processingType == Scheduled { + return true + } + } + + return false +} + // SetScheduledRootHash sets the scheduled root hash func (hv2 *HeaderV2) SetScheduledRootHash(rootHash []byte) error { if hv2 == nil { diff --git a/data/block/metaBlock.go b/data/block/metaBlock.go index 9ff547d02..041dc9010 100644 --- a/data/block/metaBlock.go +++ b/data/block/metaBlock.go @@ -397,6 +397,23 @@ func (m *MetaBlock) HasScheduledSupport() bool { return false } +// HasScheduledMiniBlocks returns true if the metaBlock holds scheduled miniBlocks +func (m *MetaBlock) HasScheduledMiniBlocks() bool { + if m == nil { + return false + } + + mbHeaderHandlers := m.GetMiniBlockHeaderHandlers() + for _, mbHeader := range mbHeaderHandlers { + processingType := ProcessingType(mbHeader.GetProcessingType()) + if processingType == Scheduled { + return true + } + } + + return false +} + // SetMiniBlockHeaderHandlers sets the miniBlock headers from the given miniBlock header handlers func (m *MetaBlock) SetMiniBlockHeaderHandlers(mbHeaderHandlers []data.MiniBlockHeaderHandler) error { if m == nil { diff --git a/data/interface.go b/data/interface.go index b2e24f881..1ef3280e5 100644 --- a/data/interface.go +++ b/data/interface.go @@ -56,6 +56,7 @@ type HeaderHandler interface { GetMiniBlockHeaderHandlers() []MiniBlockHeaderHandler HasScheduledSupport() bool GetAdditionalData() headerVersionData.HeaderAdditionalData + HasScheduledMiniBlocks() bool SetAccumulatedFees(value *big.Int) error SetDeveloperFees(value *big.Int) error