EIP-7928: Block-Level Access Lists

Discussion topic for EIP-7928: https://github.com/ethereum/EIPs/pull/9580

Update Log

External Reviews

TBD

Outstanding Issues

TBD

3 Likes

We ran some initial benchmarks using a block-level access list (providing only account addresses and storage keys, without balance diffs or post-execution write values) on Geth. After introducing BAL, Geth’s live sync performance improved by approximately 30%.

2 Likes

I wish the Specification wasn’t entirely code.

The BAL MUST be complete and accurate. It MUST NOT contain too few entries (missing accesses) or too many entries (spurious accesses).

The access list should be complete, but this may be impossible because of PREVRANDAO.

I like this spec a lot. It should also deprecate transaction-level access lists and remove the warm/cold distinction.

Is the code used for this experiment available somewhere? Would love to see it!

2 Likes

Why “The access list should be complete”? Why not “The access list must be complete”?

The BAL should be generated during block building. The verifier should then re-run the block and then verify that the BAL is complete (nothing misses, and there is nothing added which is not accessed).

Note that the contents of the BAL do not influence execution paths, so the EVM execution itself has no knowledge of the BAL. This is possible with tx-level access lists and in particular the divergence in gas costs if a slot/address is warm or cold, which could yield situations where it is impossible to generate a complete access list (which is also why eth_createAccessList has a retry-limit, because otherwise you could find yourself in an infinite loop :smile: )

I thought must was impossible because I misremembered PREVRANDAO. It’s less random (and useful) than I remembered.

1 Like

yeah, we will publish a full post on the code, core ideas and basic benchmarks next week

1 Like