Two independent Core EIPs.
Standards Track · Core
Charlie Noyes, Dan Robinson, Justin Drake, Toni Wahrstätter
Header carries the previous block's post-state root. No new fields.
Cost: light clients +1 slot for proofs; reorgs recompute the root
class BlockChain: last_computed_state_root: Root # tracked across blocks def validate_header(chain, header): if header.state_root != chain.last_computed_state_root: # delayed root raise InvalidBlock def state_transition(chain, block): validate_header(chain, block.header) block_output = apply_body(...) chain.last_computed_state_root = state_root(block_env.state) # for NEXT block
F
F-1
F+1
Toni Wahrstätter, Raúl Kripalani · requires 7732, 7928
BAL leaves the ExecutionPayloadEnvelope, ships as an independent sidecar.
ExecutionPayloadEnvelope
Overhead: same bytes, one hash_tree_root
hash_tree_root
Containers
# ExecutionPayload: BAL removed # ExecutionPayloadBid: block_access_list_root: Root # PayloadAttestationData: block_access_list_present: boolean
New sidecar
class BlockAccessListSidecar: beacon_block_root: Root slot: Slot block_access_list: BlockAccessList
P2P
block_access_list_sidecar
by_range
by_root
Engine API
getPayloadV6
notifyBlockAccessListV1
newPayloadV5
Verify htr(sidecar.bal) == bid.bal_root
htr(sidecar.bal) == bid.bal_root
Include EIP-7862 and EIP-8146.
More time for builders/provers. More scale through earlier BAL arrival.
7862: ethereum-magicians.org/t/22559 8146: ethereum-magicians.org/t/27757