finalized: derived from the currently finalized part of the L1 chain
safe: derived from the currently canonical L1 chain
unsafe: not derived from L1
now we are changing it to
finalized: derived from the currently finalized part of the L1 chain && the block is EOTS verified
safe: same
unsafe: same
After studying the OP codebase, we think the only place we need to change is in the EngineQueue::Step() function
It's worth noting we don't need to worry about EngineQueue::Reset() where sync.FindL2Heads() is called. Digging into the code, this calls into op-geth to get the current L2 forkchoice state including the finalized head. Since the data there was also from the derivation pipeline, it should return the correct block.
Summary
context: https://github.com/ethereum-optimism/specs/discussions/218
an L2 block has 3 status:
now we are changing it to
After studying the OP codebase, we think the only place we need to change is in the
EngineQueue::Step()
functionIt's worth noting we don't need to worry about
EngineQueue::Reset()
wheresync.FindL2Heads()
is called. Digging into the code, this calls intoop-geth
to get the current L2 forkchoice state including the finalized head. Since the data there was also from the derivation pipeline, it should return the correct block.