From 1c98b686c5ced7d63d53b09b4e28fd3aca3e30be Mon Sep 17 00:00:00 2001 From: Julian Meyer Date: Fri, 29 May 2026 13:06:16 -0700 Subject: [PATCH] fix: disable post-Jovian DA footprint cap in benchmark The hardcoded DAFootprintGasScalar=400 caused the builder's per-block DA footprint cap (base/crates/builder/core/src/execution.rs::is_tx_over_limits) to fire before the gas cap on cheap-tx workloads. Effective rule: cumulative_da_bytes * 400 <= block_gas_limit => max DA bytes/block = block_gas_limit / 400 With transferonly txs averaging ~100 bytes DA, the predicted vs observed tx counts match to within 0.03% across three gas limits in run test-1779411190779930: 150M limit: 3750 predicted / 3751 observed 200M limit: 5000 predicted / 5000 observed 250M limit: 6250 predicted / 6251 observed This capped gas/per_block at exactly 52.6% of the configured gas limit for transfer-only and account-create-full-block workloads, regardless of EL capacity. storage-create-full-block was unaffected (heavy gas/tx, light DA/tx) and correctly filled to ~98%. Setting the scalar to 0 makes the check 'tx_da_footprint = cumulative_da_bytes * 0 = 0 <= limit' always pass, restoring the gas limit as the sole per-block cap. The scalar is serialized into the L1 attributes deposit tx and written to L2 state at 0x4200...0015; the builder reads it via fetch_da_footprint_gas_scalar per block. Setup blocks propagate the new value before benchmark blocks start, so the first real benchmark block already sees scalar=0. The benchmark's purpose is measuring EL gas throughput; L1 DA capacity is a separate concern that should not artificially cap these tests. --- runner/network/consensus/sequencer_consensus.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/runner/network/consensus/sequencer_consensus.go b/runner/network/consensus/sequencer_consensus.go index f5ca8ac..f1eda93 100644 --- a/runner/network/consensus/sequencer_consensus.go +++ b/runner/network/consensus/sequencer_consensus.go @@ -158,7 +158,11 @@ func (f *SequencerConsensusClient) generatePayloadAttributes(sequencerTxs [][]by BlobBaseFeeScalar: 1, OperatorFeeScalar: 0, OperatorFeeConstant: 0, - DAFootprintGasScalar: 400, + // Intentionally 0: disables the post-Jovian DA footprint cap so + // the benchmark measures raw EL gas throughput rather than L1 DA + // budget. With a non-zero scalar, cheap-tx workloads plateau at + // ~50% of the configured gas limit regardless of EL capacity. + DAFootprintGasScalar: 0, } source := derive.L1InfoDepositSource{