This is a write-up on an idea first suggested by Mark on Discord here. Key considerations in ePBS are the time allowed for block execution and the time allowed for propagation. Positioning the payload timeliness committee (PTC) vote earlier allows more time for execution and positioning it later allows more time for propagation. A short time for propagation of blobs is particularly unfortunate, given the amount of data that must be propagated before the deadline. However, it turns out that we actually do not need to strictly compromise between either propagation or execution, because the PTC can be instructed to have dual deadlines. The PTC first observes the timeliness of the payload, ensuring it arrives early in the slot, allowing time for more execution. At a later point in the slot, the PTC also checks if the blob data is available (for example in custodied columns, depending on the state of DAS), and casts a positive vote if both deadlines were met. Figure 1 illustrates the design. Note that time indications are tentative and subject to change. Figure 1. A dual-deadline PTC vote in ePBS. The design enforces that the payload is available early in the slot to allow time for execution, but leaves room for blob data to propagate over a longer time. As shown in Figure 1, by staggering the deadlines, the majority of the slot can be used for: execution of the payload, propagation of blobs,
6/27/2025During the discussion phase for EIP-7918, Ben Adams has suggested that we compute the minimum blob base fee from the cost of POINT_EVALUATION_PRECOMPILE_GAS, as opposed to using TX_BASE_COST with amortization across blobs. The design seems worthwhile, and I will here analyze it, based on discussion with—and feedback from—Ben, Francesco D'Amato, Justin Traglia, Toni Wahrstätter and Marius Van Der Wijden. Summary The threshold in the if-clause is changed by switching constants, but EIP-7918 remains two lines of spec code. The original constants establish a low minimum blob base fee that still ensures a functioning fee market. The suggested new constants would raise the minimum blob base fee by charging closer to the workload that blobs impose on nodes, still also ensuring a functioning fee market. The rest of this document simply discusses the underlying rationale and implications, illustrating the total workload imposed by blobs on nodes relative to the workload of one point evaluation. Background EIP-4844 (Dencun) EIP-4844 introduced the first phase of Ethereum's data availability sampling (DAS) roadmap. Validators on the consensus layer (CL) verify that the KZG commitments in the payload correspond to the provided blobs by cryptographically verifying the accompanying KZG proofs. Furthermore, execution layer (EL) nodes must also validate the tx_payload_body and verify the wrapped data (blobs, commitments, and proofs) for every blob entering a node's tx pool. MEV-boost also performs similar checks on blobs via the flashbots_validateBuilderSubmission endpoint when they are included in the payload (at least in Nethermind). The computational requirements for verifying a KZG proof for an entire blob are slightly higher than those for verifying a KZG proof for a single point on that blob; the latter is the specific operation covered by the POINT_EVALUATION_PRECOMPILE_GAS (50000) charged to smart contracts. While blobs arriving directly via MEV-boost do not subject EL nodes to the burden of this p2p verification, MEV-boost is an out-of-protocol solution. The protocol should ideally charge users according to the regular (worst-case) scenario of blob txs propagating p2p. This is also the most common behavior today given limited MEV in blobs.
5/26/2025When the if-clause in EIP-7918 evaluates to true, the fee update is operating in the thresholded regime, and should not decrease the blob base fee further. The function then returns: return parent.excess_blob_gas + parent.blob_gas_used // 3 This produces a positive linear response in blob_gas_used that has the same maximum increase as when the if-clause evaluates to false. Two alternatives will be outlined here. Incorporating max blobs in the equation As previously mentioned, computing // 3 ensures that the maximum increase stays the same as in the regular update. Specifically, // 3 compensates for the fact that 1/3 of the max blob gas remains after subtracting TARGET_BLOB_GAS_PER_BLOCK. This is expressed as the equation: (max - target) / max = 1/3. It would be convenient to encode the relationship, which is easily achieved if the EL has access to blobSchedule.target and blobSchedule.max from EIP-7892. In this case, the return statement can be modified to: return parent.excess_blob_gas + parent.blob_gas_used * (blobSchedule.max - blobSchedule.target) // blobSchedule.max If EIP-7892 is confirmed for Fusaka with accessible constants, this return statement could be pursued.
5/20/2025Apples of the Infinite Garden: A Children's Book on EIP-7918 Audrey the Auctioneer, Pontus the Ponderer and Therese the Tree Tender have just started an apple orchard in a huge garden. The friends have a vision: feeding the world with apples. Their orchard currently produces an average of 6 fresh apples every 12 seconds. To set the price, Audrey counts how many apples are sold in each 12-second round and keeps the price fixed if exactly 6 apples are sold. She increases the price by around 10% if more than 6 apples are sold (Pontus sells up to 9 apples when working the fastest he can), and decreases it similarly if none or just a few apples are sold. This is generally a sound approach. The apples are tasty and the friends are sure there will always be demand if the price becomes low enough. The first day, everything runs smoothly and the price rises and falls as expected with changes in apple demand. You hear Audrey announcing "Apples for $16!", and 12 seconds later "Get your apples for $15!", etc. However, the next day a very strange thing happens: when Audrey lowers the price, there is no increase in demand. You hear her calling "Apples for $0.01!", a few hours later, "Apples for $0.0001!", and the next morning "Apples for $0.000000001!". The friends are stunned, they were sure thousands of people would want apples at these giveaway prices. They know they're selling prime apples, and at this price, millions upon millions of apples could be bought for just a dollar. Later that day, demand picks up. Customers swarm the stand, waving money to secure an apple. But Audrey follows the same rule as always, raising the price by 10% per round. It takes seven rounds for the price to increase from $0.000000001 to $0.000000002, and this does not seem to have any effect on demand. Customers try to tip extra to jump the queue, but it's difficult to run the stand that way; things were easier when Audrey had control over apple demand.
4/25/2025