Currently, finalized Gloas payload envelopes are never pruned. prune_finalized_payloads in the background migrator only emits DeleteExecutionPayload for canonical finalized blocks. There is no corresponding DeletePayloadEnvelope. DeletePayloadEnvelope is only emitted today for non-canonical blocks that are being purged.
As a result, full SignedExecutionPayloadEnvelopes persist on disk indefinitely for canonical finalized blocks.
The spec only requires serving envelopes over [current_epoch - compute_min_epochs_for_block_requests(), current_epoch] (the WS window), so anything beyond that can be dropped. Within the WS window, a blinded representation is likely sufficient.
To serve the payloads until the WS period, we need to be able to reconstruct the full SignedExecutionPayloadEnvelope. We get the actual payload from the EL with the engine_getPayloadBodies,
The blinded representation could be something like
pub struct ExecutionPayloadEnvelopeBlinded<E: EthSpec> {
pub payload_hash: Hash256,
pub execution_requests: ExecutionRequests<E>,
#[serde(with = "serde_utils::quoted_u64")]
pub builder_index: u64,
pub beacon_block_root: Hash256,
pub parent_beacon_block_root: Hash256,
}
and be able to convert from an blinded envelope to a full envelope if the payload is provided. I would prefer not to go through the AbstractExecPayload path if possible since I find it very confusing.
Currently, finalized Gloas payload envelopes are never pruned.
prune_finalized_payloadsin the background migrator only emitsDeleteExecutionPayloadfor canonical finalized blocks. There is no correspondingDeletePayloadEnvelope.DeletePayloadEnvelopeis only emitted today for non-canonical blocks that are being purged.As a result, full
SignedExecutionPayloadEnvelopes persist on disk indefinitely for canonical finalized blocks.The spec only requires serving envelopes over
[current_epoch - compute_min_epochs_for_block_requests(), current_epoch](the WS window), so anything beyond that can be dropped. Within the WS window, a blinded representation is likely sufficient.To serve the payloads until the WS period, we need to be able to reconstruct the full
SignedExecutionPayloadEnvelope. We get the actual payload from the EL with the engine_getPayloadBodies,The blinded representation could be something like
and be able to convert from an blinded envelope to a full envelope if the payload is provided. I would prefer not to go through the
AbstractExecPayloadpath if possible since I find it very confusing.