Skip to content

Commit

Permalink
fix: enforce strict timeout for builder to provide bid (#7151)
Browse files Browse the repository at this point in the history
* fix: enforce strict timeout for builder to provide bid

* Use math.round
  • Loading branch information
nflaig authored Oct 15, 2024
1 parent 4e853d6 commit 5adb4ef
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
4 changes: 2 additions & 2 deletions packages/beacon-node/src/api/impl/validator/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ import {computeSubnetForCommitteesAtSlot, getPubkeysForIndices, selectBlockProdu
export const SYNC_TOLERANCE_EPOCHS = 1;

/**
* Cutoff time to wait for execution and builder block production apis to resolve
* Cutoff time to wait from start of the slot for execution and builder block production apis to resolve
* Post this time, race execution and builder to pick whatever resolves first
*
* Empirically the builder block resolves in ~1.5+ seconds, and execution should resolve <1 sec.
Expand Down Expand Up @@ -637,7 +637,7 @@ export function getValidatorApi(
: Promise.reject(new Error("Engine disabled"));

const [builder, engine] = await resolveOrRacePromises([builderPromise, enginePromise], {
resolveTimeoutMs: BLOCK_PRODUCTION_RACE_CUTOFF_MS,
resolveTimeoutMs: Math.max(0, BLOCK_PRODUCTION_RACE_CUTOFF_MS - Math.round(chain.clock.secFromSlot(slot) * 1000)),
raceTimeoutMs: BLOCK_PRODUCTION_RACE_TIMEOUT_MS,
signal: controller.signal,
});
Expand Down
10 changes: 9 additions & 1 deletion packages/beacon-node/src/execution/builder/http.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,12 @@ export const defaultExecutionBuilderHttpOpts: ExecutionBuilderHttpOpts = {
timeout: 12000,
};

/**
* Duration given to the builder to provide a `SignedBuilderBid` before the deadline
* is reached, aborting the external builder flow in favor of the local build process.
*/
const BUILDER_PROPOSAL_DELAY_TOLERANCE = 1000;

export class ExecutionBuilderHttp implements IExecutionBuilder {
readonly api: BuilderApi;
readonly config: ChainForkConfig;
Expand Down Expand Up @@ -115,7 +121,9 @@ export class ExecutionBuilderHttp implements IExecutionBuilder {
executionPayloadValue: Wei;
blobKzgCommitments?: deneb.BlobKzgCommitments;
}> {
const signedBuilderBid = (await this.api.getHeader({slot, parentHash, proposerPubkey})).value();
const signedBuilderBid = (
await this.api.getHeader({slot, parentHash, proposerPubkey}, {timeoutMs: BUILDER_PROPOSAL_DELAY_TOLERANCE})
).value();

if (!signedBuilderBid) {
throw Error("No bid received");
Expand Down

0 comments on commit 5adb4ef

Please sign in to comment.