Vyper theorytheory 0/50 · 0%
Web3 integration · medium

33. Escrow and time-locks with block.timestamp

Gating logic on block time.

`block.timestamp` (seconds since epoch, set by the block producer) is commonly used to gate release logic in escrows, vesting schedules and auctions. It has some producer-controlled slack (usually a few seconds), so avoid using it for anything requiring sub-minute precision.

release_time: public(uint256)

@deploy
def __init__(lock_seconds: uint256):
    self.release_time = block.timestamp + lock_seconds

@external
def withdraw():
    assert block.timestamp >= self.release_time, "still locked"
    send(self.owner, self.balance)

For anything where precise timing is safety-critical (e.g. auction end), prefer block-number-based windows or accept the timestamp's small manipulable margin explicitly in your threat model.

Check your understanding

  1. 1. What does block.timestamp represent?

  2. 2. Why should timestamp not be trusted to sub-minute precision?

  3. 3. What is block.timestamp commonly used for?