Block #821740 has a timestamp of 2023-12-18 07:52:26 UTC.
Block #821741 has a timestamp of 2023-12-18 07:52:30 UTC.
So they were apparently four seconds apart. That's usually not enough time to fully load the previous block in order to see what transactions in the mempool are still valid. Rather than shutting down all their hardware, miners often just mine on an empty block during that time, as that is always valid and gives them a chance to at least get the block subsidy.
Interestingly, though, in this case both blocks were mined by AntPool, so in theory they could have prepared the transactions for their second block in advance while mining on the first block, thus earning a lot more in fees.
The increase would be, for a block thar AntPool mines just after their own,
(Block total fees) * (AntPool share of total hashrate)^2 * (time to get new block and prepare new template) / (10 minutes)
And that would always be a template that is valid.
For any previous block whatsoever (not mined by AntPool) we remove the "^2". But then, it's not a guarantee that we try to include already included TX. In this scenario they should try and mine TX that are further down in the mempool queue and thus have a higher probability not to be included in the block just mined.
Anyway, for the first scenario the number is around (I'm guessing some numbers)
Per block (all blocks even the ones they don't find)
Now that I calculated it... It's actually very significant.. why don't they do this? I guess they will start doing it now that the fees are so high. It will take some work but seems definitely worth it to get a 200k * 1/.25^2 = 0.032 btc increase in revenue from blocks that they do find
this is because stratum v1 pools send empty blocks containing the new prevhash, as this arrives faster than a message containing a full block.
oh and the fix is already here, with stratumv2. sv2 pools eliminate the empty block incentive by making full-block propagation equally efficient to empty block propagation