import type { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types'; import type { Fr } from '@aztec/foundation/curves/bn254'; import type { LoggerBindings } from '@aztec/foundation/log'; import type { L2Block } from '../block/l2_block.js'; import type { ChainConfig, SequencerConfig } from '../config/chain-config.js'; import type { L1RollupConstants } from '../epoch-helpers/index.js'; import type { Gas } from '../gas/gas.js'; import type { BlockHeader } from '../tx/block_header.js'; import type { CheckpointGlobalVariables, GlobalVariables } from '../tx/global_variables.js'; import type { FailedTx, ProcessedTx } from '../tx/processed_tx.js'; import { Tx } from '../tx/tx.js'; import type { TxValidator } from '../tx/validator/tx_validator.js'; import type { MerkleTreeWriteOperations } from './merkle_tree_operations.js'; import type { ProcessedTxHandler } from './processed-tx-handler.js'; /** The interface to a block builder. Generates an L2 block out of a set of processed txs. */ export interface IBlockFactory extends ProcessedTxHandler { /** * Prepares to build a new block. Updates the L1 to L2 message tree. * @param globalVariables - The global variables for this block. * @param l1ToL2Messages - The set of L1 to L2 messages to be included in this block. */ startNewBlock(globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise; /** * Adds all processed txs to the block. Updates world state with the effects from this tx. * @param txs - The transactions to be added. */ addTxs(txs: ProcessedTx[]): Promise; /** * Assembles the block and updates the archive tree. */ setBlockCompleted(expectedBlockHeader?: BlockHeader): Promise; } /** Limits passed to the public processor for tx processing within a block. */ export type PublicProcessorLimits = { /** Maximum number of txs to process. */ maxTransactions?: number; /** L2 and DA gas limits. */ maxBlockGas?: Gas; /** Maximum number of blob fields allowed. */ maxBlobFields?: number; /** Deadline for processing the txs. Processor will stop as soon as it hits this time. */ deadline?: Date; /** Whether this processor is building a proposal (as opposed to re-executing one). Skipping txs due to gas or blob limits is only done during proposal building. */ isBuildingProposal?: boolean; }; /** Base fields shared by both proposer and validator block builder options. */ type BlockBuilderOptionsBase = PublicProcessorLimits & { /** Minimum number of successfully processed txs required. Block is rejected if fewer succeed. */ minValidTxs: number; }; /** Proposer mode: redistribution params are required. */ type ProposerBlockBuilderOptions = BlockBuilderOptionsBase & { isBuildingProposal: true; /** Maximum number of blocks per checkpoint, derived from the timetable. */ maxBlocksPerCheckpoint: number; /** Per-block gas budget multiplier. Budget = (remaining / remainingBlocks) * multiplier. */ perBlockAllocationMultiplier: number; }; /** Validator mode: no redistribution params needed. */ type ValidatorBlockBuilderOptions = BlockBuilderOptionsBase & { isBuildingProposal: false; }; /** Options for building a block within a checkpoint. When proposing, redistribution params are required. */ export type BlockBuilderOptions = ProposerBlockBuilderOptions | ValidatorBlockBuilderOptions; export interface PublicProcessorValidator { preprocessValidator?: TxValidator; nullifierCache?: { addNullifiers: (nullifiers: Buffer[]) => void; }; } export type FullNodeBlockBuilderConfig = Pick & Pick & Pick; export declare const FullNodeBlockBuilderConfigKeys: (keyof FullNodeBlockBuilderConfig)[]; /** Thrown when the number of successfully processed transactions is below the required minimum. */ export declare class InsufficientValidTxsError extends Error { readonly processedCount: number; readonly minRequired: number; readonly failedTxs: FailedTx[]; constructor(processedCount: number, minRequired: number, failedTxs: FailedTx[]); } /** Result of building a block within a checkpoint. */ export type BuildBlockInCheckpointResult = { block: L2Block; publicProcessorDuration: number; numTxs: number; failedTxs: FailedTx[]; usedTxs: Tx[]; }; /** Interface for building blocks within a checkpoint context. */ export interface ICheckpointBlockBuilder { /** Builds a single block within this checkpoint. Throws InsufficientValidTxsError if fewer than minValidTxs succeed. */ buildBlock(pendingTxs: Iterable | AsyncIterable, blockNumber: BlockNumber, timestamp: bigint, opts: BlockBuilderOptions): Promise; } /** Interface for creating checkpoint builders. */ export interface ICheckpointsBuilder { getFork(blockNumber: BlockNumber): Promise; startCheckpoint(checkpointNumber: CheckpointNumber, constants: CheckpointGlobalVariables, feeAssetPriceModifier: bigint, l1ToL2Messages: Fr[], previousCheckpointOutHashes: Fr[], fork: MerkleTreeWriteOperations, bindings?: LoggerBindings): Promise; } export {}; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stYnVpbGRlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVyZmFjZXMvYmxvY2stYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRixPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RCxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUYsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXBFLDZGQUE2RjtBQUM3RixNQUFNLFdBQVcsYUFBYyxTQUFRLGtCQUFrQjtJQUN2RDs7OztP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