@@ -426,8 +426,6 @@ proc forkchoice_updated(state: bellatrix.BeaconState,
426426 fee_recipient: ethtypes.Address ,
427427 execution_engine: Eth1Monitor ):
428428 Future [Option [bellatrix.PayloadID ]] {.async .} =
429- const web3Timeout = 3 .seconds
430-
431429 let
432430 timestamp = compute_timestamp_at_slot (state, state.slot)
433431 random = get_randao_mix (state, get_current_epoch (state))
@@ -436,7 +434,7 @@ proc forkchoice_updated(state: bellatrix.BeaconState,
436434 execution_engine.forkchoiceUpdated (
437435 head_block_hash, finalized_block_hash, timestamp, random.data,
438436 fee_recipient),
439- web3Timeout ):
437+ FORKCHOICEUPDATED_TIMEOUT ):
440438 info " forkchoice_updated: forkchoiceUpdated timed out"
441439 default (ForkchoiceUpdatedResponse )
442440 payloadId = forkchoiceResponse.payloadId
@@ -473,6 +471,9 @@ proc getExecutionPayload(node: BeaconNode, proposalState: auto):
473471 # Minimize window for Eth1 monitor to shut down connection
474472 await node.consensusManager.eth1Monitor.ensureDataProvider ()
475473
474+ # https://github.com/ethereum/execution-apis/blob/2c3dffa1ad301a5b1d46212e1bd65e918265cd6f/src/engine/specification.md#request-2
475+ const GETPAYLOAD_TIMEOUT = 1 .seconds
476+
476477 let
477478 feeRecipient =
478479 if node.config.suggestedFeeRecipient.isSome:
@@ -488,11 +489,17 @@ proc getExecutionPayload(node: BeaconNode, proposalState: auto):
488489 payload_id = (await forkchoice_updated (
489490 proposalState.bellatrixData.data, latestHead, latestFinalized,
490491 feeRecipient, node.consensusManager.eth1Monitor))
491- payload = await get_execution_payload (
492- payload_id, node.consensusManager.eth1Monitor)
492+ payload = awaitWithTimeout (
493+ get_execution_payload (payload_id, node.consensusManager.eth1Monitor),
494+ GETPAYLOAD_TIMEOUT ):
495+ info " getExecutionPayload: getPayload timed out; using empty execution payload"
496+ empty_execution_payload
493497 executionPayloadStatus =
494- await node.consensusManager.eth1Monitor.newExecutionPayload (
495- payload)
498+ awaitWithTimeout (
499+ node.consensusManager.eth1Monitor.newExecutionPayload (payload),
500+ NEWPAYLOAD_TIMEOUT ):
501+ info " getExecutionPayload: newPayload timed out"
502+ PayloadExecutionStatus .syncing
496503
497504 if executionPayloadStatus != PayloadExecutionStatus .valid:
498505 info " getExecutionPayload: newExecutionPayload not valid; using empty execution payload" ,
0 commit comments