Commit a612452
authored
fix(archiver): prune blocks without proposed checkpoint by end of build slot (#23606)
When the previous proposer sent some block proposals but failed to send
the corresponding checkpoint proposal, the current proposer would assume
there was no proposed checkpoint to build on top of, but would still use
the proposed blocks as chain tip. This meant a failed `canPropose` check
against the Rollup contract as soon as it started its slot, since the
proposed blocks from the previous proposer meant the proposer had a
wrong chain tip.
To fix, the sequencer is now aware that there may be proposed blocks
without the corresponding checkpoints, and it can't start building until
that's resolved. Also, the archiver now prunes proposed blocks without a
checkpoint when the corresponding _build_ slot is over.
---
## Motivation
Under proposer pipelining a node can receive and reexecute the
block-only proposals for a checkpoint before (or without ever) receiving
the enclosing proposed checkpoint. This leaves the local tip one
checkpoint ahead of the checkpointed tip with no proposed checkpoint
backing it. A sequencer that then builds the next checkpoint on top of
that orphan tip forks the chain off a parent no other node can follow,
which was the root cause behind the sentinel CI flake.
## Approach
Two complementary defenses. The sequencer's `checkSync` refuses to
proceed when the synced block's checkpoint is ahead of the checkpointed
tip and no matching proposed checkpoint exists, holding the line during
the window before cleanup. The archiver adds a wall-clock orphan prune
that, shortly after a block's build slot ends, removes a block-only tip
whose checkpoint was never proposed, restoring liveness even while L1 is
quiet.
## Changes
- **sequencer-client**: `checkSync` rejects syncing onto a proposed
block with no matching proposed-checkpoint tip/data, logging a
descriptive warning.
- **archiver**: new `pruneOrphanProposedBlocks` on the L1 synchronizer,
run from `Archiver.sync()` after the inbound queue drains and before L1
sync; prunes after `start(blockSlot) + grace` using the epoch-cache
pipelining offset and emits `L2PruneUncheckpointed`. The existing
L1-sync prune is preserved (shared prune/emit helper).
- **archiver/stdlib/foundation config**: new
`orphanProposedBlockPruneGraceSeconds` in `ArchiverSpecificConfig`,
archiver config mappings
(`ARCHIVER_ORPHAN_PROPOSED_BLOCK_PRUNE_GRACE_SECONDS`),
`mapArchiverConfig`, the synchronizer/archiver config types, and a new
`EnvVar`.
- **aztec-node**: defaults the grace window from `blockDurationMs /
1000` when unset, falling back to `MIN_EXECUTION_TIME`; the archiver
factory also defaults to `MIN_EXECUTION_TIME`.
- **sequencer-client (tests)**: orphan tip returns `undefined` and
warns; matching proposed checkpoint proceeds.
- **archiver (tests)**: no prune before grace; prune + event after
grace; no prune when a matching proposed checkpoint exists; queued
proposed checkpoint is processed before the prune.1 parent 5fbc956 commit a612452
19 files changed
Lines changed: 838 additions & 15 deletions
File tree
- yarn-project
- archiver
- src
- modules
- test
- aztec-node/src/aztec-node
- end-to-end/src/e2e_epochs
- foundation/src/config
- sequencer-client/src
- sequencer
- stdlib/src/interfaces
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
29 | | - | |
| 29 | + | |
| 30 | + | |
30 | 31 | | |
31 | | - | |
32 | | - | |
| 32 | + | |
| 33 | + | |
33 | 34 | | |
34 | | - | |
| 35 | + | |
35 | 36 | | |
36 | 37 | | |
37 | 38 | | |
| |||
100 | 101 | | |
101 | 102 | | |
102 | 103 | | |
| 104 | + | |
103 | 105 | | |
104 | | - | |
| 106 | + | |
105 | 107 | | |
106 | 108 | | |
107 | 109 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| 11 | + | |
11 | 12 | | |
12 | 13 | | |
13 | 14 | | |
| |||
57 | 58 | | |
58 | 59 | | |
59 | 60 | | |
| 61 | + | |
60 | 62 | | |
61 | 63 | | |
62 | 64 | | |
| |||
78 | 80 | | |
79 | 81 | | |
80 | 82 | | |
81 | | - | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
82 | 89 | | |
83 | 90 | | |
84 | 91 | | |
| |||
87 | 94 | | |
88 | 95 | | |
89 | 96 | | |
| 97 | + | |
| 98 | + | |
90 | 99 | | |
91 | 100 | | |
92 | 101 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
| |||
63 | 64 | | |
64 | 65 | | |
65 | 66 | | |
| 67 | + | |
66 | 68 | | |
67 | 69 | | |
68 | 70 | | |
| |||
98 | 100 | | |
99 | 101 | | |
100 | 102 | | |
| 103 | + | |
101 | 104 | | |
102 | 105 | | |
103 | 106 | | |
| |||
120 | 123 | | |
121 | 124 | | |
122 | 125 | | |
| 126 | + | |
| 127 | + | |
123 | 128 | | |
124 | 129 | | |
125 | 130 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
| |||
92 | 93 | | |
93 | 94 | | |
94 | 95 | | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
95 | 99 | | |
96 | 100 | | |
97 | 101 | | |
| |||
118 | 122 | | |
119 | 123 | | |
120 | 124 | | |
| 125 | + | |
121 | 126 | | |
122 | 127 | | |
123 | 128 | | |
| |||
162 | 167 | | |
163 | 168 | | |
164 | 169 | | |
| 170 | + | |
| 171 | + | |
165 | 172 | | |
166 | 173 | | |
167 | 174 | | |
| |||
2143 | 2150 | | |
2144 | 2151 | | |
2145 | 2152 | | |
| 2153 | + | |
| 2154 | + | |
| 2155 | + | |
| 2156 | + | |
| 2157 | + | |
| 2158 | + | |
| 2159 | + | |
| 2160 | + | |
| 2161 | + | |
| 2162 | + | |
| 2163 | + | |
| 2164 | + | |
| 2165 | + | |
| 2166 | + | |
| 2167 | + | |
| 2168 | + | |
| 2169 | + | |
| 2170 | + | |
| 2171 | + | |
| 2172 | + | |
| 2173 | + | |
| 2174 | + | |
| 2175 | + | |
| 2176 | + | |
| 2177 | + | |
| 2178 | + | |
| 2179 | + | |
| 2180 | + | |
| 2181 | + | |
| 2182 | + | |
| 2183 | + | |
| 2184 | + | |
| 2185 | + | |
| 2186 | + | |
| 2187 | + | |
| 2188 | + | |
| 2189 | + | |
| 2190 | + | |
| 2191 | + | |
| 2192 | + | |
| 2193 | + | |
| 2194 | + | |
| 2195 | + | |
| 2196 | + | |
| 2197 | + | |
| 2198 | + | |
| 2199 | + | |
| 2200 | + | |
| 2201 | + | |
| 2202 | + | |
| 2203 | + | |
| 2204 | + | |
| 2205 | + | |
| 2206 | + | |
| 2207 | + | |
| 2208 | + | |
| 2209 | + | |
| 2210 | + | |
| 2211 | + | |
| 2212 | + | |
| 2213 | + | |
| 2214 | + | |
| 2215 | + | |
| 2216 | + | |
| 2217 | + | |
| 2218 | + | |
| 2219 | + | |
| 2220 | + | |
| 2221 | + | |
| 2222 | + | |
| 2223 | + | |
| 2224 | + | |
| 2225 | + | |
| 2226 | + | |
| 2227 | + | |
| 2228 | + | |
| 2229 | + | |
| 2230 | + | |
| 2231 | + | |
| 2232 | + | |
| 2233 | + | |
| 2234 | + | |
| 2235 | + | |
| 2236 | + | |
| 2237 | + | |
| 2238 | + | |
| 2239 | + | |
| 2240 | + | |
| 2241 | + | |
| 2242 | + | |
| 2243 | + | |
| 2244 | + | |
| 2245 | + | |
| 2246 | + | |
| 2247 | + | |
| 2248 | + | |
| 2249 | + | |
| 2250 | + | |
| 2251 | + | |
| 2252 | + | |
| 2253 | + | |
| 2254 | + | |
| 2255 | + | |
| 2256 | + | |
| 2257 | + | |
| 2258 | + | |
| 2259 | + | |
| 2260 | + | |
| 2261 | + | |
| 2262 | + | |
| 2263 | + | |
| 2264 | + | |
| 2265 | + | |
| 2266 | + | |
| 2267 | + | |
| 2268 | + | |
| 2269 | + | |
| 2270 | + | |
| 2271 | + | |
| 2272 | + | |
| 2273 | + | |
| 2274 | + | |
| 2275 | + | |
| 2276 | + | |
| 2277 | + | |
| 2278 | + | |
| 2279 | + | |
| 2280 | + | |
| 2281 | + | |
| 2282 | + | |
| 2283 | + | |
| 2284 | + | |
| 2285 | + | |
| 2286 | + | |
| 2287 | + | |
| 2288 | + | |
| 2289 | + | |
| 2290 | + | |
| 2291 | + | |
| 2292 | + | |
| 2293 | + | |
| 2294 | + | |
| 2295 | + | |
| 2296 | + | |
| 2297 | + | |
| 2298 | + | |
| 2299 | + | |
| 2300 | + | |
| 2301 | + | |
| 2302 | + | |
| 2303 | + | |
| 2304 | + | |
| 2305 | + | |
2146 | 2306 | | |
0 commit comments