import { CachedBeaconStateFulu } from "../types.js"; /** Verify queued deposit signatures in batches of this size. Also the time-box granularity: the * deadline is checked once per batch, so overrun is bounded to a single batch. Exported for tests. */ export declare const BUILDER_DEPOSIT_BATCH_SIZE = 32; /** * Per-tick cap on builder deposits the prepareForNextSlot scanner will verify. * ~2.7s for 10_000 BLS verifications on a typical server — fits within the slot budget while the * pre-window (see GLOAS_PREVERIFY_WINDOW_EPOCHS) covers up to ~620k deposits over its duration. */ export declare const MAX_BUILDER_DEPOSITS_PER_SLOT = 10000; /** * Number of epochs before GLOAS_FORK_EPOCH during which the prepareForNextSlot scanner pre-verifies * builder-deposit signatures. Two: deposits arriving this late cannot collude with validator * deposits — validator-vs-builder routing is decided at the fork boundary from what is already in * pendingDeposits, so anything submitted inside this window is unambiguous. */ export declare const GLOAS_PREVERIFY_WINDOW_EPOCHS = 2; /** * Summary of a single `preVerifyBuilderDepositsPreGloas` call. */ export type PreVerifyBuilderDepositsResult = { /** Builder-prefix deposit signatures verified valid in this call (cached true). */ validBuilderSignaturesCount: number; /** Builder-prefix deposit signatures verified invalid in this call (cached false, dropped at fork). */ invalidBuilderSignaturesCount: number; /** Validator (builder-pubkey) deposit signatures verified valid in this call. */ validValidatorSignaturesCount: number; /** Validator (builder-pubkey) deposit signatures verified invalid in this call (abuse signal). */ invalidValidatorSignaturesCount: number; /** Pending deposits examined this call (all creds; < pendingDepositsCount ⇒ per-tick cap hit). */ scannedPendingDeposits: number; /** Cumulative deposits verified & cached so far this window (cache size, pass + fail). */ totalCachedDeposits: number; /** Distinct builder pubkeys tracked so far this window. */ totalBuilderPubkeys: number; /** Current `state.pendingDeposits.length` — the full backlog. */ pendingDepositsCount: number; }; /** * Scanner driven by `prepareForNextSlot` over the `GLOAS_PREVERIFY_WINDOW_EPOCHS` epochs before * GLOAS_FORK_EPOCH. Walks `state.pendingDeposits` (as struct values via getAllReadonlyValues) and * queues, for signature verification, the deposits the fork transition will check on its hot path: * - builder-prefix deposits (for onboarding); records each builder pubkey on the cache, and * - validator deposits sharing a builder pubkey (the set `hasPendingValidator` walks at the fork), * but only until one is found valid — `hasPendingValidator` stops at the first valid signature, so * the cache marks the pubkey and the scanner skips that pubkey's remaining validator deposits. * * Bounded by two knobs: at most `maxBuilderDeposits` new deposits are queued per call, and the chunk * verification is **time-boxed** to `maxDurationMs`. */ export declare function preVerifyBuilderDepositsPreGloas(state: CachedBeaconStateFulu, maxBuilderDeposits: number, maxDurationMs: number): PreVerifyBuilderDepositsResult; //# sourceMappingURL=preVerifyBuilderDeposits.d.ts.map