UNPKG

@lodestar/beacon-node

Version:

A Typescript implementation of the beacon chain

30 lines 1.51 kB
import { DataAvailabilityStatus } from "@lodestar/state-transition"; // we can now wait for full 12 seconds because sync and reconstruction will try pulling // the data columns from the network anyway while the envelope is being processed export const PAYLOAD_DATA_AVAILABILITY_TIMEOUT = 12_000; /** * Verifies that all payload envelope inputs have their data columns available. * - Waits a max of PAYLOAD_DATA_AVAILABILITY_TIMEOUT for all data to be available * - Returns the time at which all data was available * - Returns the data availability status for each payload input */ export async function verifyPayloadsDataAvailability(payloadInputs, signal) { const promises = []; for (const payloadInput of payloadInputs) { if (!payloadInput.hasAllData()) { promises.push(payloadInput.waitForAllData(PAYLOAD_DATA_AVAILABILITY_TIMEOUT, signal)); } } await Promise.all(promises); const availableTime = Math.max(0, Math.max(...payloadInputs.map((payloadInput) => payloadInput.getTimeComplete()))); const dataAvailabilityStatuses = payloadInputs.map((payloadInput) => { if (payloadInput.daOutOfRange) { return DataAvailabilityStatus.OutOfRange; } return payloadInput.getBlobKzgCommitments().length === 0 ? DataAvailabilityStatus.NotRequired : DataAvailabilityStatus.Available; }); return { dataAvailabilityStatuses, availableTime }; } //# sourceMappingURL=verifyPayloadsDataAvailability.js.map