Skip to content
This repository was archived by the owner on Feb 17, 2025. It is now read-only.

Commit 281409d

Browse files
committed
avoid execute batch twice
1 parent 4290228 commit 281409d

File tree

5 files changed

+44
-31
lines changed

5 files changed

+44
-31
lines changed

state/state.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -775,24 +775,24 @@ func (s *State) ProcessAndStoreClosedBatch(
775775
encodedTxs []byte,
776776
dbTx pgx.Tx,
777777
caller CallerLabel,
778-
) error {
778+
) (*pb.ProcessBatchResponse, error) {
779779
// Decode transactions
780780
decodedTransactions, _, err := DecodeTxs(encodedTxs)
781781
if err != nil && !errors.Is(err, InvalidData) {
782782
log.Debugf("error decoding transactions: %v", err)
783-
return err
783+
return nil, err
784784
}
785785

786786
// Open the batch and process the txs
787787
if dbTx == nil {
788-
return ErrDBTxNil
788+
return nil, ErrDBTxNil
789789
}
790790
if err := s.OpenBatch(ctx, processingCtx, dbTx); err != nil {
791-
return err
791+
return nil, err
792792
}
793793
processed, err := s.processBatch(ctx, processingCtx.BatchNumber, encodedTxs, caller, dbTx)
794794
if err != nil {
795-
return err
795+
return nil, err
796796
}
797797

798798
// Sanity check
@@ -823,19 +823,19 @@ func (s *State) ProcessAndStoreClosedBatch(
823823

824824
processedBatch, err := s.convertToProcessBatchResponse(decodedTransactions, processed)
825825
if err != nil {
826-
return err
826+
return nil, err
827827
}
828828

829829
if len(processedBatch.Responses) > 0 {
830830
// Store processed txs into the batch
831831
err = s.StoreTransactions(ctx, processingCtx.BatchNumber, processedBatch.Responses, dbTx)
832832
if err != nil {
833-
return err
833+
return nil, err
834834
}
835835
}
836836

837837
// Close batch
838-
return s.closeBatch(ctx, ProcessingReceipt{
838+
return processed, s.closeBatch(ctx, ProcessingReceipt{
839839
BatchNumber: processingCtx.BatchNumber,
840840
StateRoot: processedBatch.NewStateRoot,
841841
LocalExitRoot: processedBatch.NewLocalExitRoot,

synchronizer/interfaces.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ type stateInterface interface {
3737
// GetNextForcedBatches returns the next forcedBatches in FIFO order
3838
GetNextForcedBatches(ctx context.Context, nextForcedBatches int, dbTx pgx.Tx) ([]state.ForcedBatch, error)
3939
AddVerifiedBatch(ctx context.Context, verifiedBatch *state.VerifiedBatch, dbTx pgx.Tx) error
40-
ProcessAndStoreClosedBatch(ctx context.Context, processingCtx state.ProcessingContext, encodedTxs []byte, dbTx pgx.Tx, caller state.CallerLabel) error
40+
ProcessAndStoreClosedBatch(ctx context.Context, processingCtx state.ProcessingContext, encodedTxs []byte, dbTx pgx.Tx, caller state.CallerLabel) (*pb.ProcessBatchResponse, error)
4141
SetGenesis(ctx context.Context, block state.Block, genesis state.Genesis, dbTx pgx.Tx) ([]byte, error)
4242
OpenBatch(ctx context.Context, processingContext state.ProcessingContext, dbTx pgx.Tx) error
4343
CloseBatch(ctx context.Context, receipt state.ProcessingReceipt, dbTx pgx.Tx) error

synchronizer/mock_state.go

Lines changed: 14 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

synchronizer/synchronizer.go

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -660,26 +660,15 @@ func (s *ClientSynchronizer) processSequenceBatches(sequencedBatches []etherman.
660660
ForcedBatchNum: batch.ForcedBatchNum,
661661
}
662662

663-
// Reprocess batch to compare the stateRoot with tBatch.StateRoot and get accInputHash
664-
p, err := s.state.ExecuteBatch(s.ctx, batch, false, dbTx)
665-
if err != nil {
666-
log.Errorf("error executing L1 batch: %+v, error: %v", batch, err)
667-
rollbackErr := dbTx.Rollback(s.ctx)
668-
if rollbackErr != nil {
669-
log.Fatalf("error rolling back state. BatchNumber: %d, BlockNumber: %d, rollbackErr: %s, error : %v", batch.BatchNumber, blockNumber, rollbackErr.Error(), err)
670-
}
671-
log.Fatalf("error executing L1 batch: %+v, error: %v", batch, err)
672-
}
673-
newRoot := common.BytesToHash(p.NewStateRoot)
674-
accumulatedInputHash := common.BytesToHash(p.NewAccInputHash)
663+
var newRoot common.Hash
675664

676665
// First get trusted batch from db
677666
tBatch, err := s.state.GetBatchByNumber(s.ctx, batch.BatchNumber, dbTx)
678667
if err != nil {
679668
if errors.Is(err, state.ErrNotFound) || errors.Is(err, state.ErrStateNotSynchronized) {
680669
log.Debugf("BatchNumber: %d, not found in trusted state. Storing it...", batch.BatchNumber)
681670
// If it is not found, store batch
682-
err = s.state.ProcessAndStoreClosedBatch(s.ctx, processCtx, batch.BatchL2Data, dbTx, state.SynchronizerCallerLabel)
671+
p, err := s.state.ProcessAndStoreClosedBatch(s.ctx, processCtx, batch.BatchL2Data, dbTx, state.SynchronizerCallerLabel)
683672
if err != nil {
684673
log.Errorf("error storing trustedBatch. BatchNumber: %d, BlockNumber: %d, error: %v", batch.BatchNumber, blockNumber, err)
685674
rollbackErr := dbTx.Rollback(s.ctx)
@@ -690,6 +679,7 @@ func (s *ClientSynchronizer) processSequenceBatches(sequencedBatches []etherman.
690679
log.Errorf("error storing batch. BatchNumber: %d, BlockNumber: %d, error: %v", batch.BatchNumber, blockNumber, err)
691680
return err
692681
}
682+
newRoot = common.BytesToHash(p.NewStateRoot)
693683
tBatch = &batch
694684
tBatch.StateRoot = newRoot
695685
} else {
@@ -702,6 +692,20 @@ func (s *ClientSynchronizer) processSequenceBatches(sequencedBatches []etherman.
702692
return err
703693
}
704694
} else {
695+
// Reprocess batch to compare the stateRoot with tBatch.StateRoot and get accInputHash
696+
p, err := s.state.ExecuteBatch(s.ctx, batch, false, dbTx)
697+
if err != nil {
698+
log.Errorf("error executing L1 batch: %+v, error: %v", batch, err)
699+
rollbackErr := dbTx.Rollback(s.ctx)
700+
if rollbackErr != nil {
701+
log.Errorf("error rolling back state. BatchNumber: %d, BlockNumber: %d, rollbackErr: %s, error : %v", batch.BatchNumber, blockNumber, rollbackErr.Error(), err)
702+
return rollbackErr
703+
}
704+
return err
705+
}
706+
newRoot = common.BytesToHash(p.NewStateRoot)
707+
accumulatedInputHash := common.BytesToHash(p.NewAccInputHash)
708+
705709
//AddAccumulatedInputHash
706710
err = s.state.AddAccumulatedInputHash(s.ctx, batch.BatchNumber, accumulatedInputHash, dbTx)
707711
if err != nil {
@@ -744,7 +748,7 @@ func (s *ClientSynchronizer) processSequenceBatches(sequencedBatches []etherman.
744748
log.Errorf("error resetting trusted state. BatchNumber: %d, BlockNumber: %d, error: %v", batch.BatchNumber, blockNumber, err)
745749
return err
746750
}
747-
err = s.state.ProcessAndStoreClosedBatch(s.ctx, processCtx, batch.BatchL2Data, dbTx, state.SynchronizerCallerLabel)
751+
_, err = s.state.ProcessAndStoreClosedBatch(s.ctx, processCtx, batch.BatchL2Data, dbTx, state.SynchronizerCallerLabel)
748752
if err != nil {
749753
log.Errorf("error storing trustedBatch. BatchNumber: %d, BlockNumber: %d, error: %v", batch.BatchNumber, blockNumber, err)
750754
rollbackErr := dbTx.Rollback(s.ctx)
@@ -868,7 +872,7 @@ func (s *ClientSynchronizer) processSequenceForceBatch(sequenceForceBatch []ethe
868872
ForcedBatchNum: &forcedBatches[i].ForcedBatchNumber,
869873
}
870874
// Process batch
871-
err := s.state.ProcessAndStoreClosedBatch(s.ctx, batch, forcedBatches[i].RawTxsData, dbTx, state.SynchronizerCallerLabel)
875+
_, err := s.state.ProcessAndStoreClosedBatch(s.ctx, batch, forcedBatches[i].RawTxsData, dbTx, state.SynchronizerCallerLabel)
872876
if err != nil {
873877
log.Errorf("error processing batch in processSequenceForceBatch. BatchNumber: %d, BlockNumber: %d, error: %v", batch.BatchNumber, block.BlockNumber, err)
874878
rollbackErr := dbTx.Rollback(s.ctx)

synchronizer/synchronizer_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ func TestTrustedStateReorg(t *testing.T) {
218218

219219
m.State.
220220
On("ProcessAndStoreClosedBatch", ctx, processingContext, sequencedBatch.Transactions, m.DbTx, state.SynchronizerCallerLabel).
221-
Return(nil).
221+
Return(&pb.ProcessBatchResponse{NewStateRoot: trustedBatch.StateRoot.Bytes()},nil).
222222
Once()
223223

224224
virtualBatch := &state.VirtualBatch{
@@ -727,7 +727,7 @@ func TestSequenceForcedBatch(t *testing.T) {
727727

728728
m.State.
729729
On("ProcessAndStoreClosedBatch", ctx, processingContext, sequencedForceBatch.Transactions, m.DbTx, state.SynchronizerCallerLabel).
730-
Return(nil).
730+
Return(&pb.ProcessBatchResponse{},nil).
731731
Once()
732732

733733
virtualBatch := &state.VirtualBatch{

0 commit comments

Comments
 (0)