Jovian: Execution Engine

Table of Contents

Minimum Base Fee

Jovian introduces a configurable minimum base fee to reduce the duration of priority-fee auctions on OP Stack chains.

The minimum base fee is configured via SystemConfig (see ./system-config.md) and enforced by the execution engine via the block header extraData encoding and the Engine API PayloadAttributesV3 parameters.

Minimum Base Fee in Block Header

Like Holocene's dynamic EIP-1559 parameters, Jovian encodes fee parameters in the extraData field of each L2 block header. The format is extended to include an additional u64 field for the minimum base fee in wei.

NameTypeByte Offset
minBaseFeeu64 (big-endian)[9, 17)

Constraints:

  • version MUST be 1 (incremented from Holocene's 0).
  • There MUST NOT be any data beyond these 17 bytes.

The minBaseFee field is an absolute minimum expressed in wei. During base fee computation, if the computed baseFee is less than minBaseFee, it MUST be clamped to minBaseFee.

if (baseFee < minBaseFee) {
  baseFee = minBaseFee
}

Note: extraData has a maximum capacity of 32 bytes (to fit the L1 beacon-chain extraData type) and may be extended by future upgrades.

Minimum Base Fee in PayloadAttributesV3

The Engine API PayloadAttributesV3 is extended in Jovian with a new field minBaseFee. The existing eip1559Params remains 8 bytes (Holocene format).

PayloadAttributesV3: {
    timestamp: QUANTITY
    prevRandao: DATA (32 bytes)
    suggestedFeeRecipient: DATA (20 bytes)
    withdrawals: array of WithdrawalV1
    parentBeaconBlockRoot: DATA (32 bytes)
    transactions: array of DATA
    noTxPool: bool
    gasLimit: QUANTITY or null
    eip1559Params: DATA (8 bytes) or null
    minBaseFee: QUANTITY or null
}

Rationale

As with Holocene's dynamic EIP-1559 parameters, placing the minimum base fee in the block header allows us to avoid reaching into the state during block sealing. This retains the purity of the function that computes the next block's base fee from its parent block header, while still allowing them to be dynamically configured. Dynamic configuration is handled similarly to gasLimit, with the derivation pipeline providing the appropriate SystemConfig contract values to the block builder via PayloadAttributesV3 parameters.