Engine API sequence

Block validation

Canonical chain

Created with Raphaël 2.2.0CLCLELELBlock B arrivesstate_transition(state: pre_state, block: B)engine_newPayload(B.payload)runs full payload validation{status: VALID}engine_forkchoiceUpdated(head: B.payload.hash){payloadStatus: {status: VALID}}

Non-canonical chain

Deep-state EL client

Created with Raphaël 2.2.0CLCLELELBlock B arrivesstate_transition(state: pre_state, block: B)engine_newPayload(B.payload)runs full payload validation{status: VALID}Chain re-orgs to Bengine_forkchoiceUpdated(head: B.payload.hash){payloadStatus: {status: VALID}}

Shallow-state EL client

Created with Raphaël 2.2.0CLCLELELBlock B arrivesstate_transition(state: pre_state, block: B)engine_newPayload(B.payload)validates payload is from a well-formed chain{status: ACCEPTED}Chain re-orgs to Bengine_forkchoiceUpdated(head: B.payload.hash)runs full payload validation{payloadStatus: {status: VALID}}

Block proposal

Created with Raphaël 2.2.0CLCLELELBlock B arrivesstate_transition(state: pre_state, block: B)engine_newPayload(B.payload)runs full payload validation{status: VALID}engine_forkchoiceUpdated(head: B.payload.hash, payloadAttributes: {...}){payloadStatus: {status: VALID}, payloadId: buildProcessId}slot ticksengine_getPayload(payloadId: buildProcessId)builtExecutionPayloadproposes B', a child of B with builtExecutionPayload payload