The coinbase transaction’s nLockTime field must be set to the height of the block minus 1 and its nSequence field must not be equal to 0xffffffff.
Additionally, the BIP encourages:
mining pools to update their software to craft coinbase transactions that are forward-compatible with the changes proposed in this BIP.
I’ve set up a mainnet-observer chart for this: BIP-54 Coinbase Locktime set - but it seems as of writing no pool sets their coinbase locktime to be forward-compatible with BIP-54.
Additionally, it’s interesting to look at the pools that set their coinbase locktime to a non-zero value, which might reveal incompatibilities. This is done in Coinbase Locktime set.
Querying the mainnet-observer database revealed that currently, F2Pool is setting locktimes of their coinbase transactions, and pools like MaraPool and Poolin did so historically.
Recent usage of the nLockTime field is by MARA and f2pool (as your graph shows). They use(d) it to store metadata about jobs, to make sure a disconnected miner can resubmit its shares upon reconnection. Following my email to the bitcoinminingdev list last year, MARA updated their software to use the coinbase’s nVersion in place of nLockTime. F2pool could do the same but my takeaway from personal exchanges with them is that they don’t want to bother until BIP 54 is further along the way toward activation. (Which, of course, is a nice catch-22 in itself.)
But as far as incompatibilities go, all pools are currently incompatible (modulo one recent change –see next post), and i am more concerned about the swarm of tiny pools that currently hardcode their nLockTime to 0, than about easily updated practices from a few more easily reachable big pools.
Whitepool, a small mining pool, just upgraded their coinbase transactions to be BIP 54 compatible! I think block 937,650 is the first ever BIP54-compatible block.
I think this is encouraging as far as getting smaller pools to upgrade goes, which was one of my main concerns with BIP 54.