Transaction pooling in 4844

How to not go boom, in theory


15 April 2023

ETHTokyo



Péter Szilágyi

Go Ethereum Lead

What the heck is 4844?

Before 4844: Layer-2 chains on top of Ethereum

Layer-2s are semi-independent blockchains

Layer-2 chains potentially scale Ethereum

After 4844: Layer-2 chains on top of Ethereum... cheaper

Data lives forever on Ethereum ⇒ adding new data is expensive

Commitments don't need to live forever ⇒ archiving them is insanity

EIP-4844 introduces transactions with 128KB ephemeral data blobs

EIP-4844: Preferential treatment of layer-2s...

Ethereum users and layer-2 operators are separated

Is is fair that layer-2s can transact cheaper?

EIP-4844 enables layer-2s while reducing costs for others

Blob-transaction pooling

Transaction size

propagations/sec on mainnet, 50 peers, 24h

Ethereum transactions are small (<1 KB)

Blob transactions are 128KB+ (potentially up to 512KB or 2MB)

Block space

Ethereum blocks fit many transactions (up to 1428 @ 30M gas)

Data blobs per block are aggressively capped (4 or 16)

Artificial churn (i.e. pool wars) must be avoided

Purpose of transactions

Ethereum transactions are supposed to be generic

Layer-2s are meant to use blobs to commit proofs

Cost of replacements

Ethereum transactions can be replaced (1 wei start, 10% fee bump)

Blob transactions are expensive to replace

Replacements must be penalized (1 gwei start, 100% fee bump)

Cost of cancellations

Ethereum transaction can be cancelled

Cancelling a blob transaction is a DoS vector

Relevancy of locality

Ethereum transactions can be tracked as local

Locality is less relevant for blob transactions

Genericity of transactions

Ethereum transactions are always supersets*

Blob transactions should be standalone

Lifecycle of transactions

Ethereum transactions get stored fully on the chain

Blob-transaction blobs are discarded from the chain

Points of entry

Ethereum transactions are fully bundled in a block

Blob transactions are not fully bundled in a block

Why all the constraints?

Geth's prototype benchmarks

Legacy pool is capped at 4K transactions (@ 200MB RAM, no disk usage)

Legacy pool's post-block processing is ~1ms (@ 4K txs, 1D fees)

Everything's a tradeoff. Constraints are good. Metrics are king.

Thank you

Go Ethereum Lead