@lodestar/beacon-node
Version:
A Typescript implementation of the beacon chain
30 lines • 1.51 kB
JavaScript
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