diff --git a/process/block/baseProcess.go b/process/block/baseProcess.go index e2b53abe93..45ab3688c5 100644 --- a/process/block/baseProcess.go +++ b/process/block/baseProcess.go @@ -1224,7 +1224,12 @@ func (bp *baseProcessor) checkMiniBlockWithMiniBlockHeaderProposal(mbHash []byte if err != nil { return err } - return bp.checkConstructionStateProcessingTypeAndIndexesCorrectnessProposal(mbHdr) + err = bp.checkConstructionStateProcessingTypeAndIndexesCorrectnessProposal(mbHdr) + if err != nil { + return err + } + + return process.CheckMiniBlock(miniBlock, bp.shardCoordinator) } func (bp *baseProcessor) checkMiniBlockWithMiniBlockHeader(mbHash []byte, mbHdr data.MiniBlockHeaderHandler, miniBlock *block.MiniBlock, blockShardID uint32) error { diff --git a/process/block/baseProcess_test.go b/process/block/baseProcess_test.go index 3032f7f202..da362d74e3 100644 --- a/process/block/baseProcess_test.go +++ b/process/block/baseProcess_test.go @@ -18,6 +18,7 @@ import ( "github.com/multiversx/mx-chain-core-go/core" "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/core/keyValStorage" + "github.com/multiversx/mx-chain-core-go/core/sharding" "github.com/multiversx/mx-chain-core-go/data" "github.com/multiversx/mx-chain-core-go/data/block" "github.com/multiversx/mx-chain-core-go/data/rewardTx" @@ -4555,7 +4556,9 @@ func TestCheckHeaderBodyCorrelationProposal(t *testing.T) { }) t.Run("should work", func(t *testing.T) { - arguments := CreateMockArguments(createComponentHolderMocks()) + coreComponents, dataComponents, bootstrapComponents, statusComponents := createComponentHolderMocks() + bootstrapComponents.Coordinator, _ = sharding.NewMultiShardCoordinator(3, 0) + arguments := CreateMockArguments(coreComponents, dataComponents, bootstrapComponents, statusComponents) bp, _ := blproc.NewShardProcessor(arguments) miniBlock := &block.MiniBlock{ diff --git a/process/coordinator/process.go b/process/coordinator/process.go index b5a27f108c..728084ccc1 100644 --- a/process/coordinator/process.go +++ b/process/coordinator/process.go @@ -439,13 +439,14 @@ func (tc *transactionCoordinator) processMiniBlocksFromMe( body *block.Body, haveTime func() bool, ) error { + selfId := tc.shardCoordinator.SelfId() for _, mb := range body.MiniBlocks { err := process.CheckMiniBlock(mb, tc.shardCoordinator) if err != nil { return err } - if mb.SenderShardID != tc.shardCoordinator.SelfId() { + if mb.SenderShardID != selfId { return process.ErrMiniBlocksInWrongOrder } } @@ -484,40 +485,6 @@ func (tc *transactionCoordinator) processMiniBlocksFromMe( return nil } -// TODO consider calling this from VerifyBlockProposal instead of ProcessBlockProposal -func (tc *transactionCoordinator) checkMiniBlock( - miniBlock *block.MiniBlock, -) error { - // there are checks for non existing shard id at interceptors level - - if miniBlock.SenderShardID != tc.shardCoordinator.SelfId() && miniBlock.GetReceiverShardID() != tc.shardCoordinator.SelfId() && miniBlock.GetReceiverShardID() != core.AllShardId { - return fmt.Errorf("%w - not valid shard ids: block type: %s, sender shard id: %d, receiver shard id: %d", - process.ErrInvalidShardId, - miniBlock.Type, - miniBlock.SenderShardID, - miniBlock.ReceiverShardID) - } - - if miniBlock.GetType() == block.PeerBlock && - (miniBlock.GetSenderShardID() != core.MetachainShardId || miniBlock.GetReceiverShardID() != core.AllShardId) { - return fmt.Errorf("%w - peer blocks: block type: %s, sender shard id: %d, receiver shard id: %d", - process.ErrInvalidShardId, - miniBlock.Type, - miniBlock.SenderShardID, - miniBlock.ReceiverShardID) - } - - if miniBlock.GetType() != block.PeerBlock && miniBlock.GetReceiverShardID() == core.AllShardId { - return fmt.Errorf("%w - invalid all shard ids: block type: %s, sender shard id: %d, receiver shard id: %d", - process.ErrInvalidShardId, - miniBlock.Type, - miniBlock.SenderShardID, - miniBlock.ReceiverShardID) - } - - return nil -} - func (tc *transactionCoordinator) processMiniBlocksToMe( header data.HeaderHandler, body *block.Body, @@ -537,6 +504,7 @@ func (tc *transactionCoordinator) processMiniBlocksToMe( // processing has to be done in order, as the order of different type of transactions over the same account is strict // processing destination ME miniblocks first mbIndex := 0 + selfId := tc.shardCoordinator.SelfId() for mbIndex = 0; mbIndex < len(body.MiniBlocks); mbIndex++ { miniBlock := body.MiniBlocks[mbIndex] @@ -545,7 +513,7 @@ func (tc *transactionCoordinator) processMiniBlocksToMe( return mbIndex, err } - if miniBlock.SenderShardID == tc.shardCoordinator.SelfId() { + if miniBlock.SenderShardID == selfId { return mbIndex, nil }