diff --git a/genesis/process/metaGenesisBlockCreator.go b/genesis/process/metaGenesisBlockCreator.go index 12cdf5b7fbb..81ad249b44f 100644 --- a/genesis/process/metaGenesisBlockCreator.go +++ b/genesis/process/metaGenesisBlockCreator.go @@ -161,6 +161,11 @@ func CreateMetaGenesisBlock( return nil, nil, nil, err } + err = arg.Data.Datapool().Transactions().OnExecutedBlock(header, rootHash) + if err != nil { + return nil, nil, nil, err + } + return header, make([][]byte, 0), indexingData, nil } diff --git a/genesis/process/shardGenesisBlockCreator.go b/genesis/process/shardGenesisBlockCreator.go index da92c3058db..afac04d4244 100644 --- a/genesis/process/shardGenesisBlockCreator.go +++ b/genesis/process/shardGenesisBlockCreator.go @@ -179,6 +179,11 @@ func CreateShardGenesisBlock( return nil, nil, nil, err } + err = arg.Data.Datapool().Transactions().OnExecutedBlock(headerHandler, rootHash) + if err != nil { + return nil, nil, nil, err + } + return headerHandler, scAddresses, indexingData, nil } diff --git a/integrationTests/consensus/consensus_test.go b/integrationTests/consensus/consensus_test.go index 9f1a5a85277..c87e7dd3d29 100644 --- a/integrationTests/consensus/consensus_test.go +++ b/integrationTests/consensus/consensus_test.go @@ -162,11 +162,23 @@ func TestConsensusBLSWithFullProcessing_TransitionWithEquivalentProofs(t *testin testConsensusBLSWithFullProcessing(t, testParams) } +// func outputLogToFile(logPath string) error { +// logFile, err := os.OpenFile(logPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644) +// if err != nil { +// return err +// } +// return logger.AddLogObserver(logFile, &logger.PlainFormatter{}) +// } + func TestConsensusBLSWithFullProcessing_WithEquivalentProofs_MultiKeys(t *testing.T) { if testing.Short() { t.Skip("this is not a short test") } + // err := outputLogToFile("testLog") + // require.Nil(t, err) + // _ = logger.SetLogLevel("*:DEBUG") + enableEpochsConfig := integrationTests.CreateEnableEpochsConfig() enableEpochsConfig.AndromedaEnableEpoch = uint32(0) enableEpochsConfig.SupernovaEnableEpoch = integrationTests.UnreachableEpoch diff --git a/integrationTests/testProcessorNode.go b/integrationTests/testProcessorNode.go index 7f90968d2bf..56f9be419c2 100644 --- a/integrationTests/testProcessorNode.go +++ b/integrationTests/testProcessorNode.go @@ -772,11 +772,23 @@ func (tpn *TestProcessorNode) initGenesisBlocks(args ArgTestProcessorNode) { tpn.SmartContractParser, tpn.EnableEpochs, ) + shardID := tpn.ShardCoordinator.SelfId() + if shardID == core.MetachainShardId { + return + } + genesisBlock := tpn.GenesisBlocks[shardID] + _ = tpn.DataPool.Transactions().OnExecutedBlock(genesisBlock, genesisBlock.GetRootHash()) return } if args.WithSync { tpn.GenesisBlocks = CreateSimpleGenesisBlocks(tpn.ShardCoordinator) + shardID := tpn.ShardCoordinator.SelfId() + if shardID == core.MetachainShardId { + return + } + genesisBlock := tpn.GenesisBlocks[shardID] + _ = tpn.DataPool.Transactions().OnExecutedBlock(genesisBlock, genesisBlock.GetRootHash()) return } @@ -797,6 +809,12 @@ func (tpn *TestProcessorNode) initGenesisBlocks(args ArgTestProcessorNode) { tpn.EnableEpochs, tpn.ChainParametersHandler, ) + shardID := tpn.ShardCoordinator.SelfId() + if shardID == core.MetachainShardId { + return + } + genesisBlock := tpn.GenesisBlocks[shardID] + _ = tpn.DataPool.Transactions().OnExecutedBlock(genesisBlock, genesisBlock.GetRootHash()) } func (tpn *TestProcessorNode) initTestNodeWithArgs(args ArgTestProcessorNode) { diff --git a/process/block/metablock.go b/process/block/metablock.go index d87166cd307..b6daad83c35 100644 --- a/process/block/metablock.go +++ b/process/block/metablock.go @@ -955,6 +955,20 @@ func (mp *metaProcessor) createMiniBlocks( ) } + rootHash := mp.blockChain.GetCurrentBlockRootHash() + if len(rootHash) == 0 { + genesisBlock := mp.blockChain.GetGenesisHeader() + rootHash = genesisBlock.GetRootHash() + } + + log.Debug("REMOVE: settingRootHash before creating miniblocks", "rootHash", rootHash) + + rh := holders.NewDefaultRootHashesHolder(rootHash) + err = mp.accountsProposal.RecreateTrieIfNeeded(rh) + if err != nil { + return nil, err + } + mbsFromMe := mp.txCoordinator.CreateMbsAndProcessTransactionsFromMe(haveTime, randomness) if len(mbsFromMe) > 0 { miniBlocks = append(miniBlocks, mbsFromMe...) @@ -1276,6 +1290,10 @@ func (mp *metaProcessor) CommitBlock( } mp.blockChain.SetCurrentBlockHeaderHash(headerHash) + err = mp.dataPool.Transactions().OnExecutedBlock(headerHandler, committedRootHash) + if err != nil { + return err + } if !check.IfNil(finalMetaBlock) && finalMetaBlock.IsStartOfEpochBlock() { mp.blockTracker.CleanupInvalidCrossHeaders(header.Epoch, header.Round) diff --git a/process/block/preprocess/transactions.go b/process/block/preprocess/transactions.go index a949c3bd2d4..ee356607914 100644 --- a/process/block/preprocess/transactions.go +++ b/process/block/preprocess/transactions.go @@ -1475,7 +1475,7 @@ func (txs *transactions) selectTransactionsFromTxPool( } session, err := NewSelectionSession(ArgsSelectionSession{ - AccountsAdapter: txs.accounts, + AccountsAdapter: txs.accountsProposal, TransactionsProcessor: txs.txProcessor, }) if err != nil { diff --git a/process/block/shardblock.go b/process/block/shardblock.go index 55bcc2ea558..cbdc2ab1066 100644 --- a/process/block/shardblock.go +++ b/process/block/shardblock.go @@ -2159,6 +2159,13 @@ func (sp *shardProcessor) createMiniBlocks(haveTime func() bool, randomness []by } startTime = time.Now() + rootHash := sp.blockChain.GetCurrentBlockRootHash() + rh := holders.NewDefaultRootHashesHolder(rootHash) + err = sp.accountsProposal.RecreateTrieIfNeeded(rh) + if err != nil { + return nil, nil, err + } + mbsFromMe := sp.txCoordinator.CreateMbsAndProcessTransactionsFromMe(haveTime, randomness) elapsedTime = time.Since(startTime) log.Debug("elapsed time to create mbs from me", "time", elapsedTime)