Skip to content

Commit

Permalink
Validate header timestamp in engine_forkchoiceUpdated
Browse files Browse the repository at this point in the history
  • Loading branch information
jangko committed Jun 1, 2024
1 parent 1565c57 commit 439d976
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions nimbus/beacon/api_handler/api_forkchoice.nim
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,24 @@ template validateVersion(attr, com, apiVersion) =
raise invalidParams("if timestamp is earlier than Shanghai," &
" payloadAttributes must be PayloadAttributesV1")

template validateHeaderTimestamp(header, com, apiVersion) =
# See fCUV3 specification No.2 bullet iii
# https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/cancun.md#specification-1
if com.isCancunOrLater(header.timestamp):
if apiVersion != Version.V3:
raise invalidAttr("forkChoiceUpdated" & $apiVersion &
" doesn't support head block with Cancun timestamp")
# See fCUV2 specification No.2 bullet 1
# https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/shanghai.md#specification-1
elif com.isShanghaiOrLater(header.timestamp):
if apiVersion != Version.V2:
raise invalidAttr("forkChoiceUpdated" & $apiVersion &
" doesn't support head block with Shanghai timestamp")
else:
if apiVersion != Version.V1:
raise invalidAttr("forkChoiceUpdated" & $apiVersion &
" doesn't support head block with timestamp earlier than Shanghai")

proc forkchoiceUpdated*(ben: BeaconEngineRef,
apiVersion: Version,
update: ForkchoiceStateV1,
Expand Down Expand Up @@ -100,6 +118,8 @@ proc forkchoiceUpdated*(ben: BeaconEngineRef,
com.syncReqNewHead(header)
return simpleFCU(PayloadExecutionStatus.syncing)

validateHeaderTimestamp(header, com, apiVersion)

# Block is known locally, just sanity check that the beacon client does not
# attempt to push us back to before the merge.
#
Expand Down

0 comments on commit 439d976

Please sign in to comment.