@lodestar/beacon-node
Version:
A Typescript implementation of the beacon chain
149 lines • 6.65 kB
TypeScript
import { CONSOLIDATION_REQUEST_TYPE, DEPOSIT_REQUEST_TYPE, ForkName, WITHDRAWAL_REQUEST_TYPE } from "@lodestar/params";
import { ExecutionPayload, ExecutionRequests, Root, RootHex, Wei, capella } from "@lodestar/types";
import { Blob, BlobAndProof, KZGCommitment, KZGProof } from "@lodestar/types/deneb";
import { DATA } from "../../eth1/provider/utils.js";
import { PayloadId, PayloadIdCache, WithdrawalV1 } from "./payloadIdCache.js";
import { ExecutionPayloadBody } from "./types.js";
export { PayloadIdCache, type PayloadId, type WithdrawalV1 };
export declare enum ExecutionPayloadStatus {
/** given payload is valid */
VALID = "VALID",
/** given payload is invalid */
INVALID = "INVALID",
/** sync process is in progress */
SYNCING = "SYNCING",
/**
* blockHash is valid, but payload is not part of canonical chain and hasn't been fully
* validated
*/
ACCEPTED = "ACCEPTED",
/** blockHash is invalid */
INVALID_BLOCK_HASH = "INVALID_BLOCK_HASH",
/** EL error */
ELERROR = "ELERROR",
/** EL unavailable */
UNAVAILABLE = "UNAVAILABLE",
/** EL replied with SYNCING or ACCEPTED when its not safe to import optimistic blocks */
UNSAFE_OPTIMISTIC_STATUS = "UNSAFE_OPTIMISTIC_STATUS"
}
export declare enum ExecutionEngineState {
ONLINE = "ONLINE",
OFFLINE = "OFFLINE",
SYNCING = "SYNCING",
SYNCED = "SYNCED",
AUTH_FAILED = "AUTH_FAILED"
}
/**
* Client code as defined in https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/identification.md#clientcode
* ClientCode.XX is dedicated to other clients which do not have their own code
*/
export declare enum ClientCode {
BU = "BU",// besu
EJ = "EJ",// ethereumJS
EG = "EG",// erigon
GE = "GE",// go-ethereum
GR = "GR",// grandine
LH = "LH",// lighthouse
LS = "LS",// lodestar
NM = "NM",// nethermind
NB = "NB",// nimbus
TK = "TK",// teku
PM = "PM",// prysm
RH = "RH",// reth
XX = "XX"
}
export type ExecutionRequestType = typeof DEPOSIT_REQUEST_TYPE | typeof WITHDRAWAL_REQUEST_TYPE | typeof CONSOLIDATION_REQUEST_TYPE;
export declare function isExecutionRequestType(type: number): type is ExecutionRequestType;
export type ExecutePayloadResponse = {
status: ExecutionPayloadStatus.SYNCING | ExecutionPayloadStatus.ACCEPTED;
latestValidHash: null;
validationError: null;
} | {
status: ExecutionPayloadStatus.VALID;
latestValidHash: RootHex;
validationError: null;
} | {
status: ExecutionPayloadStatus.INVALID;
latestValidHash: RootHex | null;
validationError: string | null;
} | {
status: ExecutionPayloadStatus.INVALID_BLOCK_HASH | ExecutionPayloadStatus.ELERROR | ExecutionPayloadStatus.UNAVAILABLE;
latestValidHash: null;
validationError: string;
};
export type ForkChoiceUpdateStatus = ExecutionPayloadStatus.VALID | ExecutionPayloadStatus.INVALID | ExecutionPayloadStatus.SYNCING;
export type PayloadAttributes = {
timestamp: number;
prevRandao: Uint8Array;
suggestedFeeRecipient: string;
withdrawals?: capella.Withdrawal[];
parentBeaconBlockRoot?: Uint8Array;
};
export type BlobsBundle = {
/**
* Execution payload `blockHash` for the caller to sanity-check the consistency with the `engine_getPayload` call
* https://github.com/protolambda/execution-apis/blob/bf44a8d08ab34b861ef97fa9ef5c5e7806194547/src/engine/blob-extension.md?plain=1#L49
*/
commitments: KZGCommitment[];
blobs: Blob[];
proofs: KZGProof[];
};
export type ClientVersion = {
code: ClientCode;
name: string;
version: string;
commit: string;
};
export type VersionedHashes = Uint8Array[];
/**
* Execution engine represents an abstract protocol to interact with execution clients. Potential transports include:
* - JSON RPC over network
* - IPC
* - Integrated code into the same binary
*/
export interface IExecutionEngine {
readonly state: ExecutionEngineState;
readonly clientVersion?: ClientVersion | null;
payloadIdCache: PayloadIdCache;
/**
* A state transition function which applies changes to the self.execution_state.
* Returns ``True`` iff ``execution_payload`` is valid with respect to ``self.execution_state``.
*
* Required for block processing in the beacon state transition function.
* https://github.com/ethereum/consensus-specs/blob/0eb0a934a3/specs/merge/beacon-chain.md#on_payload
*
* Should be called in advance before, after or in parallel to block processing
*/
notifyNewPayload(fork: ForkName, executionPayload: ExecutionPayload, versionedHashes?: VersionedHashes, parentBeaconBlockRoot?: Root, executionRequests?: ExecutionRequests): Promise<ExecutePayloadResponse>;
/**
* Signal fork choice updates
* This function performs two actions atomically:
* - Re-organizes the execution payload chain and corresponding state to make head_block_hash the head.
* - Applies finality to the execution state: it irreversibly persists the chain of all execution payloads and
* corresponding state, up to and including finalized_block_hash.
*
* The call of the notify_forkchoice_updated function maps on the POS_FORKCHOICE_UPDATED event defined in the EIP-3675.
* https://github.com/ethereum/consensus-specs/blob/dev/specs/merge/fork-choice.md#notify_forkchoice_updated
*
* Should be called in response to fork-choice head and finalized events
*/
notifyForkchoiceUpdate(fork: ForkName, headBlockHash: RootHex, safeBlockHash: RootHex, finalizedBlockHash: RootHex, payloadAttributes?: PayloadAttributes): Promise<PayloadId | null>;
/**
* Given the payload_id, get_payload returns the most recent version of the execution payload that has been built
* since the corresponding call to prepare_payload method.
*
* Required for block producing
* https://github.com/ethereum/consensus-specs/blob/dev/specs/merge/validator.md#get_payload
*/
getPayload(fork: ForkName, payloadId: PayloadId): Promise<{
executionPayload: ExecutionPayload;
executionPayloadValue: Wei;
blobsBundle?: BlobsBundle;
executionRequests?: ExecutionRequests;
shouldOverrideBuilder?: boolean;
}>;
getPayloadBodiesByHash(fork: ForkName, blockHash: DATA[]): Promise<(ExecutionPayloadBody | null)[]>;
getPayloadBodiesByRange(fork: ForkName, start: number, count: number): Promise<(ExecutionPayloadBody | null)[]>;
getBlobs(fork: ForkName, versionedHashes: VersionedHashes): Promise<(BlobAndProof | null)[]>;
}
//# sourceMappingURL=interface.d.ts.map