Skip to content

Commit

Permalink
EIP-7623: Fix linter issues
Browse files Browse the repository at this point in the history
  • Loading branch information
nerolation committed Feb 18, 2025
1 parent 90ef97b commit a89b74d
Showing 1 changed file with 7 additions and 10 deletions.
17 changes: 7 additions & 10 deletions EIPS/eip-7886.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,24 @@ eip: 7886
title: Delayed execution
description: Make blocks statically verifiable by charging coinbase for inclusion costs upfront
author: Francesco D`Amato (@fradamt), Toni Wahrstätter (@nerolation)
discussions-to: https://ethereum-magicians.org/t/eip-xxxx-delayed-execution/22890
discussions-to: https://ethereum-magicians.org/t/eip-7886-delayed-execution/22890
status: Draft
type: Standards Track
category: Core
created: 2025-02-18
---


## Abstract

This proposal makes (execution) blocks statically verifiable through minimal checks that only require the previous state, but no execution of the block's transactions, allowing validators attest to a block's validity without completing its execution. We allow transactions to be skipped when invalid at execution time, without invalidating the whole block. To ensure that even skipped transactions pay for their resources, the `COINBASE` pays for all inclusion costs upfront (base cost, calldata and blobs), and recovers the costs only when transactions are successfully executed.

## Motivation

A key advantage of the skipping mechanism is that it enables **asynchronous block validation**: a block can be considered valid even if it contains invalid transactions, because those transactions end up skipping execution without invalidating the entire block.
A key advantage of the skipping mechanism is that it enables **asynchronous block validation**: a block can be considered valid even if it contains invalid transactions, because those transactions end up skipping execution without invalidating the entire block. As a result, execution is no longer a bottleneck in the validation process, enabling an earlier attestation deadline and an increase in the block gas limit.

## Overview

Check failure on line 21 in EIPS/eip-7886.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

body has extra section(s)

error[markdown-order-section]: body has extra section(s) --> EIPS/eip-7886.md | 21 | ## Overview | = help: see https://ethereum.github.io/eipw/markdown-order-section/

Enabling delayed execution by making the block's validity statically verifiable requires two things:

1. **Deferred execution outputs**: all header fields that commit to execution outputs are deferred by one slot. For example `state_root` and `receipt_root` become `pre_state_root` (similarly to [EIP-7862](./eip-7862.md)) and `parent_receipt_root`, the root of the state and receipt trie obtained after executing the block's parent. The same applies to the General Purpose Execution Layer Requests from [EIP-7685](./eip-7685.md): the requests are deferred by one slot and the requests in the CL must correspond to the `parent_requests_hash` in the EL header. However, this alone would only defer the computation of these execution outputs (mainly of the state root) rather than the actual execution, because verifying transaction validity would still require executing.

Check failure on line 24 in EIPS/eip-7886.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Lists should be surrounded by blank lines [Context: "1. **Deferred execution output..."]

EIPS/eip-7886.md:24 MD032/blanks-around-lists Lists should be surrounded by blank lines [Context: "1. **Deferred execution output..."]
2. **Upfront payment of inclusion costs by `COINBASE`**: in addition, we need to be able to skip (no-op) invalid transactions without invalidating the whole block. Right now, this is not possible because of the free-DA problem: as soon as we include a transaction into a block, it must pay for its data footprint. By charging the inclusion cost of all transactions upfront from the block's `COINBASE`, it is possible to skip transactions that are found to be invalid at execution time, because the protocol has already been compensated for the inclusion.

Expand Down Expand Up @@ -247,8 +245,8 @@ This logic is implemented into the ethereum/execution-specs, in `apply_body`.

#### Coinbase Pays Inclusion Cost Upfront

- The block's `COINBASE` is charged `inclusion_cost = 21000 + max_calldata_fee + blob_fee` for each transaction at the start of block execution. The `inclusion_cost` is determined by adding up the blob fee and the floor cost of [EIP-7623](./eip-7623.md), itself comprising the 21k base cost and the calldata cost charged at `TOTAL_COST_FLOOR_PER_TOKEN`.
- If the transaction is skipped, **the `COINBASE` loses** these inclusion fees and thereby pays for DA and other base costs like signature verification.
* The block's `COINBASE` is charged `inclusion_cost = 21000 + max_calldata_fee + blob_fee` for each transaction at the start of block execution. The `inclusion_cost` is determined by adding up the blob fee and the floor cost of [EIP-7623](./eip-7623.md), itself comprising the 21k base cost and the calldata cost charged at `TOTAL_COST_FLOOR_PER_TOKEN`.
* If the transaction is skipped, **the `COINBASE` loses** these inclusion fees and thereby pays for DA and other base costs like signature verification.

```python
# The inclusion gas consists of the base cost + the calldata cost
Expand Down Expand Up @@ -331,10 +329,9 @@ def apply_body(
#### Skipped Transactions

**Definition**: A "skipped transaction" is a transaction that:

- Is included in the block (part of the transactions list)
- Is not executed during block execution
- Consumes no gas beyond its inclusion cost, which the block's `COINBASE` pays and **does not get refunded** if the transaction is ultimately skipped.
* Is included in the block (part of the transactions list)

Check failure on line 332 in EIPS/eip-7886.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Lists should be surrounded by blank lines [Context: "* Is included in the block (pa..."]

EIPS/eip-7886.md:332 MD032/blanks-around-lists Lists should be surrounded by blank lines [Context: "* Is included in the block (pa..."]
* Is not executed during block execution
* Consumes no gas beyond its inclusion cost, which the block's `COINBASE` pays and **does not get refunded** if the transaction is ultimately skipped.

Skipping might occur because:

Expand Down

0 comments on commit a89b74d

Please sign in to comment.