import { ApiClient as BuilderApi } from "@lodestar/api/builder";
import { ChainForkConfig } from "@lodestar/config";
import { Logger } from "@lodestar/logger";
import { ForkPostBellatrix } from "@lodestar/params";
import { BLSPubkey, Epoch, ExecutionPayloadHeader, Root, SignedBlindedBeaconBlock, SignedBlockContents, Slot, Wei, WithOptionalBytes, bellatrix, deneb, electra } from "@lodestar/types";
import { Metrics } from "../../metrics/metrics.js";
import { ValidatorRegistration, ValidatorRegistrationCache } from "./cache.js";
import { IExecutionBuilder } from "./interface.js";
export type ExecutionBuilderHttpOpts = {
    enabled: boolean;
    url: string;
    timeout?: number;
    faultInspectionWindow?: number;
    allowedFaults?: number;
    issueLocalFcUWithFeeRecipient?: string;
    userAgent?: string;
};
export declare const defaultExecutionBuilderHttpOpts: ExecutionBuilderHttpOpts;
export declare enum BuilderStatus {
    /**
     * Builder is enabled and operational
     */
    enabled = "enabled",
    /**
     * Builder is disabled due to failed status check
     */
    disabled = "disabled",
    /**
     * Circuit breaker condition that is triggered when the node determines the chain is unhealthy.
     * When the circuit breaker is fired, proposers **MUST** not utilize the external builder
     * network and exclusively build locally.
     */
    circuitBreaker = "circuit_breaker"
}
/**
 * Expected error if builder does not provide a bid. Most of the time, this
 * is due to `min-bid` setting on the mev-boost side but in rare cases could
 * also happen if there are no bids from any of the connected relayers.
 */
export declare class NoBidReceived extends Error {
    constructor();
}
export declare class ExecutionBuilderHttp implements IExecutionBuilder {
    readonly api: BuilderApi;
    readonly config: ChainForkConfig;
    readonly registrations: ValidatorRegistrationCache;
    readonly issueLocalFcUWithFeeRecipient?: string;
    status: BuilderStatus;
    faultInspectionWindow: number;
    allowedFaults: number;
    /**
     * Determine if SSZ is supported by requesting an SSZ encoded response in the `getHeader` request.
     * The builder responding with a SSZ serialized `SignedBuilderBid` indicates support to handle the
     * `SignedBlindedBeaconBlock` as SSZ serialized bytes instead of JSON when calling `submitBlindedBlock`.
     */
    private sszSupported;
    constructor(opts: ExecutionBuilderHttpOpts, config: ChainForkConfig, metrics?: Metrics | null, logger?: Logger);
    updateStatus(status: BuilderStatus): void;
    checkStatus(): Promise<void>;
    registerValidator(epoch: Epoch, registrations: bellatrix.SignedValidatorRegistrationV1[]): Promise<void>;
    getValidatorRegistration(pubkey: BLSPubkey): ValidatorRegistration | undefined;
    getHeader(_fork: ForkPostBellatrix, slot: Slot, parentHash: Root, proposerPubkey: BLSPubkey): Promise<{
        header: ExecutionPayloadHeader;
        executionPayloadValue: Wei;
        blobKzgCommitments?: deneb.BlobKzgCommitments;
        executionRequests?: electra.ExecutionRequests;
    }>;
    submitBlindedBlock(signedBlindedBlock: WithOptionalBytes<SignedBlindedBeaconBlock>): Promise<SignedBlockContents>;
    submitBlindedBlockNoResponse(signedBlindedBlock: WithOptionalBytes<SignedBlindedBeaconBlock>): Promise<void>;
}
//# sourceMappingURL=http.d.ts.map