What does block time mean?
I always thought that the timestamp on a block represented the moment the block was discovered.
But it’s not very accurate. The protocol allows for a span of approximately 3 hours around that timestamp (1 hour in the past, 2 hours in the future).
For this to be true, it looks like the time header field would have to be modified along with the Nonce and other fields in the mining loop.
In practice, miners do this, but not actually inside the mining loop. Modern mining chips can stir things up. 232 The nonce space of a given block candidate must receive a new operation from the controller within 1 second. New operations can mean external changes (internal to Coinbase transactions), rolling timestamps, etc.
But I don’t see anything forcing miners to do this.
The only consensus rule is that the timestamp of a block is strictly greater than the median of the timestamps of the 11 blocks preceding it. Under normal circumstances, this means that the timestamp can be up to an hour old.
There are additions accept Rule, nodes do not accept blocks with timestamps more than 2 hours in the future. Compare with local clock at time of reception. Because the local clock is subjective, it is not a consensus rule per se, and violating this rule does not result in a block being permanently rejected. Temporarily not allowed. Nonetheless, this means that it is generally not beneficial for miners to intentionally set timestamps in the future (unless perhaps there are many miners doing so at the same time, making this similar to a selfish mining attack).
Can anyone explain succinctly what the block time time field actually represents?
The time (in hours) the block was mined. It is usually more accurate than this, but may not be reliable.