diff --git a/eth/stagedsync/exec3.go b/eth/stagedsync/exec3.go index 8dcb4c669..85177a2b8 100644 --- a/eth/stagedsync/exec3.go +++ b/eth/stagedsync/exec3.go @@ -149,6 +149,7 @@ func ExecV3(ctx context.Context, parallel bool, logPrefix string, maxBlockNum uint64, logger log.Logger, + initialCycle bool, ) error { batchSize := cfg.batchSize chainDb := cfg.db @@ -503,6 +504,8 @@ func ExecV3(ctx context.Context, slowDownLimit := time.NewTicker(time.Second) defer slowDownLimit.Stop() + stateStream := !initialCycle && cfg.stateStream && maxBlockNum-block < stateStreamLimit + var b *types.Block var blockNum uint64 var err error @@ -560,6 +563,14 @@ Loop: } } }() + } else { + if !initialCycle && stateStream { + txs, err := blockReader.RawTransactions(context.Background(), applyTx, b.NumberU64(), b.NumberU64()) + if err != nil { + return err + } + cfg.accumulator.StartChange(b.NumberU64(), b.Hash(), txs, false) + } } rules := chainConfig.Rules(blockNum, b.Time()) diff --git a/eth/stagedsync/stage_execute.go b/eth/stagedsync/stage_execute.go index 912404b1a..433a08c8d 100644 --- a/eth/stagedsync/stage_execute.go +++ b/eth/stagedsync/stage_execute.go @@ -277,7 +277,7 @@ func ExecBlockV3(s *StageState, u Unwinder, tx kv.RwTx, toBlock uint64, ctx cont } parallel := initialCycle && tx == nil if err := ExecV3(ctx, s, u, workersCount, cfg, tx, parallel, logPrefix, - to, logger); err != nil { + to, logger, initialCycle); err != nil { return fmt.Errorf("ExecV3: %w", err) } return nil