The Problem
EIP-1559 will introduce a protocol fee on Ethereum transactions and allow the block size to be dynamically adjusted in response to congestion. Charging a protocol fee when the chain is congested is an efficient way to shift MEV from miners to ETH holders without hurting the users. Also, a flexible block size makes the allocation of block space more efficient. However, under the current fee structure, the wrong people can end up paying for congestion.
Suppose there are two blocks, and we target an average block size of one transaction per block. There are two users, Alice and Bob. Normally, Alice sends one transaction in Block 1, and Bob sends one transaction in Block 2.
Now, suppose Alice receives a shock and wants to send two transactions in Block 1. EIP-1559 allows her to do so; as long as she pays enough to compensate for the increased uncle risk, the miner will include both of her transactions in Block 1. This is great for Alice. However, because Block 1 was larger than the target size, the base fee is increased in Block 2. This means that Bob either has to pay the higher base fee or wait a block to send his transaction. Bob ends up paying for the congestion that Alice caused.
In general, when users congest a block, it is users of the subsequent blocks that pay for the congestion. This is undesirable for a couple of reasons.
1. It is unfair.
It is not fair that Bob should pay to allow Alice to send an extra transaction.
2. It increases congestion.
Because Alice does not care whether Bob pays more, she will congest her block whenever she has the slightest need to do so. In economics jargon, congesting a block exerts a negative externality on the users of future blocks. Because users do not pay for congesting their block, they will congest it too much relative to what is socially optimal.
3. It intensifies gas auctions.
Let us change our example and assume that Alice and Bob are competing to include their transactions in Block 1, which is expected to be congested. If Bob loses, he will not only have his transaction delayed, he will also pay a higher base fee in Block 2. So outbidding Alice becomes even more important. The same will hold for Alice, and as a result, the gas auction will become more intense. Users will pay larger tips to miners to avoid paying higher base fees to the protocol.
A Solution
I propose that when a block is congested, the users of that same block pay for the congestion. We can implement this by charging the miner a fee based on how much gas is used in his block. For example, a miner who uses x gas in his block might be required to pay f(x)=kx^2 gwei where k>0 is some constant. The marginal cost of including one additional gas is 2kx gwei, so the miner will include all transactions that pay him at least 2kx+\epsilon gwei per gas until he reaches the block limit, where \epsilon is compensation for uncle risk.
We can think of 2kx as a Pigouvian tax on block space. When the demand for block space is high, x will be large (block size will be large), kx^2 will be large (the protocol fee will be large), and 2kx will be high (users will have to pay more to be included). Hence block space will adjust to demand, and we can calibrate the fee function f(x) to target the average block size that we want.
Technical Asides
It should not matter in theory whether we charge the miner or the users. But charging the miner may be easier to implement.
To choose f(x), we could use a supply and demand model of block space where the social cost of centralization risk is an increasing function of the average block size. We would solve for f(x) that makes the agents internalize the social cost, while ensuring that users do not bear too much of the tax burden.