From aa533dade6ccd3ada4397657c79ff97e67106f24 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Wed, 7 Aug 2024 18:23:34 +0200 Subject: [PATCH] docs: add spec docs and todo for OP (#10171) --- crates/engine/tree/src/tree/mod.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/crates/engine/tree/src/tree/mod.rs b/crates/engine/tree/src/tree/mod.rs index 1d8da2c8f8..c8ef4ce117 100644 --- a/crates/engine/tree/src/tree/mod.rs +++ b/crates/engine/tree/src/tree/mod.rs @@ -764,7 +764,19 @@ where // 3. check if the head is already part of the canonical chain if let Ok(Some(canonical_header)) = self.find_canonical_header(state.head_block_hash) { debug!(target: "engine", head = canonical_header.number, "fcu head block is already canonical"); - // the head block is already canonical + + // TODO(mattsse): for optimism we'd need to trigger a build job as well because on + // Optimism, the proposers are allowed to reorg their own chain at will. + + // 2. Client software MAY skip an update of the forkchoice state and MUST NOT begin a + // payload build process if `forkchoiceState.headBlockHash` references a `VALID` + // ancestor of the head of canonical chain, i.e. the ancestor passed payload + // validation process and deemed `VALID`. In the case of such an event, client + // software MUST return `{payloadStatus: {status: VALID, latestValidHash: + // forkchoiceState.headBlockHash, validationError: null}, payloadId: null}` + + // the head block is already canonical, so we're not triggering a payload job and can + // return right away return Ok(valid_outcome(state.head_block_hash)) }