Would it require a hard fork to disallow empty blocks? I'm surprised this is being allowed.
Well, if all nodes decide they would reject empty blocks, that would take care of it without a fork, however, this would achieve nothing, say I own a pool and I want to deliberately mine empty blocks, I would simply include only my own made up transactions and wala! my blocks are no longer empty and you will have to accept them.
BTC already has a limited capacity (7 tx/sec), so there's no reason to waste blocks (no matter the pool).
Honestly speaking, I wouldn't call this a "waste of blocks." This could turn into a chicken-egg debate. But if you think about it, empty blocks do not have an impact on the chances or speed of your transaction getting confirmed as long as they are not excluded intentionally. Your transaction will always be mined in the next block that includes transactions.
We need to make sure that everybody understands that it was not possible for Ocean to pause that block, include transactions, and then transact it. That block was found empty, and it can't be changed. If Ocean would not propagate or even find that block, none of the pending transactions would have been confirmed anyway. It would only lead to Ocean losing a whole block for nothing good "except avoiding the risk of building on an invalid blockchain." But again, we don't know if they did validate the previous block's transactions or not—it's something we can't know. They can't prove, and thus it's always possible to accuse them of not validating, and they would have no way to prove you wrong.
I really feel like the above needs a lot more explanation for the average person to understand how empty blocks are not a waste of transaction space. Since many of you here know I like to use some weird
analogies, let me use the same bus analogy to try and explain the empty block situation.
Imagine a bus station where people are lining up waiting to be picked up (transactions in mempool). The normal behavior would be many buses waiting at the bus station with their doors open and the crowd of people are lining up (not knowing which bus is going to let them in). None of these buses are allowed to drive unless a pink bird falls on their front glass. When the bird falls, the bus driver or his assistant already know what people they are going to bring in because they sat there long enough to see who has a valid ticket and how much each of them is willing to pay for the seat.
So when the bus drives away, the other buses would now need to see which people took off on that bus so that they can exclude their names from the calling list, or else the next checkpoint would stop the bus and kill the bus driver because his list contains a person's name that isn't on the bus (mining pools clearing their mempool and removing the transactions that were already included in the previous block).
So as long as the time intervals between pink birds falling on a random bus's front glass are long enough, the bus driver will always have the time to entrain those people, and it's all working fine because on average it takes 10 mins for a pink bird to fall, which is enough time for the old bus driver to handle his passenger list. But sometimes, a pink bird would fall into one of the buses right after another pink bird had fallen. So the bus driver doesn't even know which passengers the previous bus took, and he needs to hit the pedal immediately before one of two things happen that would make him lose the ride.
A- Another pink bird falls into another bus (someone else finding a block to propagate it).
B- The pink bird falls on the ground because of gravity (the pool simply didn't propagate the block, threw it away and waited for another block).
The bus driver here would throw away his pen and paper, close his door, and hit the pedal as fast as he can, and the police checkpoint would let him through because he has no list at all (empty blocks are allowed while blocks that contain invalid transactions are not).
Now you can imagine that your transaction is a person sitting in that bus station. Had the second bus driver chosen not to drive away, it doesn't mean he would be able to take you in because, remember, he needs to prepare his list before the pink bird makes it to his front glass.
It's not like he could let you in and he chose not to. He had only two options (drive empty or don't drive at all), which means (mine an empty block or don't mine at all). So to you as a person waiting in the bus station, that bus isn't wasted; it just happened.
Of course, doing so means the second bus is now at risk of reaching that checkpoint only to find that the bus driver before him was shot dead by the police because there is something wrong in his list. He looks in the rearview mirror (right before he is shot dead too) and finds another bus behind him who would also be stopped and killed. Lol, of course, while that isn't the end of the world, it simply means that you contributed to misleading the limited number of buses into taking the wrong route. And now the legit buses are fewer in number, and thus those poor people have to wait even longer because of your greedy behavior, not to mention all the misery you created at the bus station.