Commit 13f6840
fix(archiver): handle duplicate checkpoint from L1 reorg (#22252)
## Summary
Fixes a mainnet issue where an L1 reorg moved a checkpoint to a
different L1 block, causing the archiver to re-discover it and crash
with `InitialCheckpointNumberNotSequentialError` in an infinite loop.
When `addCheckpoints` receives a checkpoint that's already stored, it
now:
- **Accepts it** if the archive root matches (same content, just
different L1 block)
- **Updates the L1 metadata** (block number, timestamp, hash) and
attestations
- **Throws** if the archive root doesn't match (content mismatch —
genuine conflict)
## Changes
- **`block_store.ts`**: Added `skipOrUpdateAlreadyStoredCheckpoints`
method that handles duplicate checkpoints at the start of a batch.
Verifies archive roots match and updates L1 info.
- **`fake_l1_state.ts`**: Added `moveCheckpointToL1Block` helper for
simulating L1 reorgs that move checkpoints.
- **`archiver-sync.test.ts`**: Added e2e test `handles L1 reorg that
moves a checkpoint to a later L1 block` in the reorg handling suite.
- **`kv_archiver_store.test.ts`**: Added unit tests for accepting
matching duplicates with updated L1 info, accepting fully-duplicate
batches, and rejecting mismatching duplicates.
## Test plan
- [x] Unit tests: 207 passed in `kv_archiver_store.test.ts`
- [x] Sync tests: 37 passed in `archiver-sync.test.ts`
- [x] Build, format, lint all pass
ClaudeBox log: https://claudebox.work/s/e5247344b8df94ca?run=2
Co-authored-by: PhilWindle <60546371+PhilWindle@users.noreply.github.com>1 parent 04f1d9a commit 13f6840
4 files changed
Lines changed: 177 additions & 9 deletions
File tree
- yarn-project/archiver/src
- store
- test
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1245 | 1245 | | |
1246 | 1246 | | |
1247 | 1247 | | |
| 1248 | + | |
| 1249 | + | |
| 1250 | + | |
| 1251 | + | |
| 1252 | + | |
| 1253 | + | |
| 1254 | + | |
| 1255 | + | |
| 1256 | + | |
| 1257 | + | |
| 1258 | + | |
| 1259 | + | |
| 1260 | + | |
| 1261 | + | |
| 1262 | + | |
| 1263 | + | |
| 1264 | + | |
| 1265 | + | |
| 1266 | + | |
| 1267 | + | |
| 1268 | + | |
| 1269 | + | |
| 1270 | + | |
| 1271 | + | |
| 1272 | + | |
| 1273 | + | |
| 1274 | + | |
| 1275 | + | |
| 1276 | + | |
| 1277 | + | |
| 1278 | + | |
| 1279 | + | |
| 1280 | + | |
| 1281 | + | |
| 1282 | + | |
| 1283 | + | |
| 1284 | + | |
| 1285 | + | |
| 1286 | + | |
| 1287 | + | |
| 1288 | + | |
| 1289 | + | |
| 1290 | + | |
| 1291 | + | |
| 1292 | + | |
| 1293 | + | |
| 1294 | + | |
| 1295 | + | |
| 1296 | + | |
| 1297 | + | |
1248 | 1298 | | |
1249 | 1299 | | |
1250 | 1300 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
262 | 262 | | |
263 | 263 | | |
264 | 264 | | |
265 | | - | |
266 | 265 | | |
267 | 266 | | |
268 | 267 | | |
269 | | - | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
270 | 282 | | |
271 | 283 | | |
272 | 284 | | |
273 | 285 | | |
274 | | - | |
| 286 | + | |
275 | 287 | | |
276 | 288 | | |
277 | 289 | | |
| |||
322 | 334 | | |
323 | 335 | | |
324 | 336 | | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
325 | 381 | | |
326 | 382 | | |
327 | 383 | | |
| |||
Lines changed: 53 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
| 64 | + | |
64 | 65 | | |
65 | 66 | | |
66 | 67 | | |
| |||
138 | 139 | | |
139 | 140 | | |
140 | 141 | | |
141 | | - | |
142 | | - | |
143 | | - | |
144 | | - | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
145 | 192 | | |
146 | 193 | | |
147 | 194 | | |
| |||
278 | 325 | | |
279 | 326 | | |
280 | 327 | | |
281 | | - | |
| 328 | + | |
282 | 329 | | |
283 | 330 | | |
284 | 331 | | |
| |||
307 | 354 | | |
308 | 355 | | |
309 | 356 | | |
310 | | - | |
| 357 | + | |
311 | 358 | | |
312 | 359 | | |
313 | 360 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
332 | 332 | | |
333 | 333 | | |
334 | 334 | | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
335 | 350 | | |
336 | 351 | | |
337 | 352 | | |
| |||
0 commit comments