Skip to content

Commit 829ab14

Browse files
joanestebanrStefan-Ethernal
authored andcommitted
fix 0xPolygon#3598 update GER when closing batch (0xPolygon#3599)
* fix 0xPolygon#3598 update GER when closing batch
1 parent 276259d commit 829ab14

File tree

2 files changed

+74
-7
lines changed

2 files changed

+74
-7
lines changed

synchronizer/l2_sync/l2_sync_etrog/executor_trusted_batch_sync.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,12 @@ func (b *SyncTrustedBatchExecutorForEtrog) IncrementalProcess(ctx context.Contex
219219
log.Errorf("%s error batchResultSanityCheck. Error: %s", data.DebugPrefix, err.Error())
220220
return nil, err
221221
}
222+
log.Debugf("%s updateWIPBatch ", data.DebugPrefix)
223+
err = b.updateWIPBatch(ctx, data, processBatchResp.NewStateRoot, dbTx)
224+
if err != nil {
225+
log.Errorf("%s error updateWIPBatch. Error: ", data.DebugPrefix, err)
226+
return nil, err
227+
}
222228

223229
if data.BatchMustBeClosed {
224230
log.Debugf("%s Closing batch", data.DebugPrefix)
@@ -227,13 +233,6 @@ func (b *SyncTrustedBatchExecutorForEtrog) IncrementalProcess(ctx context.Contex
227233
log.Errorf("%s error closing batch. Error: ", data.DebugPrefix, err)
228234
return nil, err
229235
}
230-
} else {
231-
log.Debugf("%s updateWIPBatch", data.DebugPrefix)
232-
err = b.updateWIPBatch(ctx, data, processBatchResp.NewStateRoot, dbTx)
233-
if err != nil {
234-
log.Errorf("%s error updateWIPBatch. Error: ", data.DebugPrefix, err)
235-
return nil, err
236-
}
237236
}
238237

239238
updatedBatch := *data.StateBatch

synchronizer/l2_sync/l2_sync_etrog/executor_trusted_batch_sync_test.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,74 @@ func TestIncrementalProcessUpdateBatchL2DataOnCache(t *testing.T) {
8989
require.Equal(t, false, res.ClearCache)
9090
}
9191

92+
// This test check that if you process incrementally a batch that need to be close
93+
// the GER is update because we call UpdateWIPBatch
94+
// NOTE: CloseBatch() doesnt update GER
95+
func TestIncrementalProcessUpdateBatchL2DataAndGER(t *testing.T) {
96+
// Arrange
97+
stateMock := mock_l2_sync_etrog.NewStateInterface(t)
98+
syncMock := mock_syncinterfaces.NewSynchronizerFlushIDManager(t)
99+
100+
sut := SyncTrustedBatchExecutorForEtrog{
101+
state: stateMock,
102+
sync: syncMock,
103+
}
104+
ctx := context.Background()
105+
106+
stateBatchL2Data, _ := hex.DecodeString(codedL2BlockHeader + codedRLP2Txs1)
107+
trustedBatchL2Data, _ := hex.DecodeString(codedL2BlockHeader + codedRLP2Txs1 + codedL2BlockHeader + codedRLP2Txs1)
108+
expectedStateRoot := common.HexToHash("0x723e5c4c7ee7890e1e66c2e391d553ee792d2204ecb4fe921830f12f8dcd1a92")
109+
//deltaBatchL2Data := []byte{4}
110+
batchNumber := uint64(123)
111+
data := l2_shared.ProcessData{
112+
BatchNumber: batchNumber,
113+
OldStateRoot: common.Hash{},
114+
BatchMustBeClosed: true,
115+
TrustedBatch: &types.Batch{
116+
Number: 123,
117+
BatchL2Data: trustedBatchL2Data,
118+
StateRoot: expectedStateRoot,
119+
Closed: true,
120+
},
121+
StateBatch: &state.Batch{
122+
BatchNumber: batchNumber,
123+
BatchL2Data: stateBatchL2Data,
124+
GlobalExitRoot: common.HexToHash("0x9c8fa7ce2e197f9f1b3c30de9f93de3c1cb290e6c118a18446f47a9e1364c3ab"),
125+
},
126+
}
127+
expectedUpdate := state.ProcessingReceipt{
128+
BatchNumber: 123,
129+
StateRoot: expectedStateRoot,
130+
LocalExitRoot: data.TrustedBatch.LocalExitRoot,
131+
GlobalExitRoot: data.TrustedBatch.GlobalExitRoot,
132+
AccInputHash: data.TrustedBatch.AccInputHash,
133+
BatchL2Data: trustedBatchL2Data,
134+
}
135+
136+
stateMock.EXPECT().UpdateWIPBatch(ctx, expectedUpdate, mock.Anything).Return(nil).Once()
137+
stateMock.EXPECT().GetL1InfoTreeDataFromBatchL2Data(ctx, mock.Anything, mock.Anything).Return(map[uint32]state.L1DataV2{}, expectedStateRoot, common.Hash{}, nil).Once()
138+
stateMock.EXPECT().GetForkIDByBatchNumber(batchNumber).Return(uint64(7)).Once()
139+
140+
processBatchResp := &state.ProcessBatchResponse{
141+
NewStateRoot: expectedStateRoot,
142+
}
143+
stateMock.EXPECT().ProcessBatchV2(ctx, mock.Anything, true).Return(processBatchResp, nil).Once()
144+
145+
syncMock.EXPECT().PendingFlushID(mock.Anything, mock.Anything).Once()
146+
syncMock.EXPECT().CheckFlushID(mock.Anything).Return(nil).Maybe()
147+
expectedUpdateClosed := expectedUpdate
148+
expectedUpdateClosed.GlobalExitRoot = common.Hash{}
149+
expectedUpdateClosed.ClosingReason = state.SyncL2TrustedBatchClosingReason
150+
stateMock.EXPECT().CloseBatch(ctx, expectedUpdateClosed, mock.Anything).Return(nil).Once()
151+
// Act
152+
res, err := sut.IncrementalProcess(ctx, &data, nil)
153+
// Assert
154+
log.Info(res)
155+
require.NoError(t, err)
156+
require.Equal(t, trustedBatchL2Data, res.UpdateBatch.BatchL2Data)
157+
require.Equal(t, false, res.ClearCache)
158+
}
159+
92160
func newTestData(t *testing.T) testDataForBathExecutor {
93161
stateMock := mock_l2_sync_etrog.NewStateInterface(t)
94162
syncMock := mock_syncinterfaces.NewSynchronizerFlushIDManager(t)

0 commit comments

Comments
 (0)