The usual way of measuring time in Solidity contracts on Ethereum is to use block height, relying on the fact that rate of block production in near-constant, which is true for Ethereum.

That is an anti-pattern on Avalanche, because there is no set block rate, as Avalanche does not need constant block production to secure the chain. So if there are no transactions, there will be no blocks produced, and if there is a great number of transactions published, block rate will be very high. As a consequence, if your contract relies on block rate for timing, it can be "fast-forwarded" via spamming the network with a lot of empty transactions, which can lead to inaccurate results, or even exploitation.

Instead of relying on block height and rate of block production, on Avalanche it is best practice to use block timestamps to measure time. Timestamps are guaranteed to be accurate to within 30s of the real time, and guaranteed to be increasing (a child block will never have a timestamp lower than the parent block's timestamp).

Did this answer your question?