Glossary / Developer reference
PP expires
- Definition
- PP expires was the optional Unix timestamp in a BIP70 PaymentDetails message that told a wallet to stop honoring the request once that moment had passed.
Specified in BIP-70.
Every fixed-price bitcoin invoice needs a deadline, because the price moves while the customer is deciding. BIP70 gave merchants one field for it, a 64-bit Unix timestamp, and left it optional. The habit survived the protocol: the countdown on an instant-buy screen or a bitcoin ATM is doing exactly the same job.
How it works
Status: historical. expires was field 4 of the PaymentDetails message, and Bitcoin Core deprecated BIP70 in version 0.19 before deleting it in 0.20.0 on June 3, 2020. Nothing implements the field today.
Two clocks sat next to each other in the message. time was required and recorded when the merchant built the request; expires was optional and recorded when it should stop being valid. Both counted seconds since January 1, 1970, and both were unsigned 64-bit integers, which quietly avoided the January 19, 2038 wall that a signed 32-bit counter runs into.
Enforcement lived entirely in the payer's software. A wallet compared the timestamp against its own system clock and refused to build a transaction once the deadline had gone, which means a device with a wrong clock either paid a dead invoice or rejected a live one. Nothing about the field touched the blockchain. A transaction paying an expired request is as valid as any other, and whether the merchant credits it, refunds it, or quietly keeps it was never a protocol matter.
Short windows carried a specific trap. Bitcoin targets one block every ten minutes on average, so a five-minute expiry could lapse before a single confirmation existed, leaving a customer who had genuinely paid and an invoice the merchant's software had already written off.
Where you see it
Fixed-price quotes are everywhere in bitcoin buying, and every one of them has an expiry behind it.
An instant-buy screen at an exchange shows a rate next to a countdown, usually somewhere between a few seconds and a couple of minutes. Let it run out and the quote is rebuilt at the current price. A bitcoin ATM does the same thing over a longer window, which is part of why its spread is wider: the operator is absorbing the price risk of however long you spend at the machine.
Lightning made the deadline mandatory rather than optional. A BOLT11 invoice carries an x field for expiry, and when it is absent the default is 3600 seconds, one hour. Pay later than that and a well-behaved node rejects the payment instead of leaving it in limbo.
The practical advice for a payer is unglamorous: when a deadline is attached, do not economize on the fee. Underpaying to save a few hundred satoshis is the most common way to miss a window, and a transaction that lands late is precisely the case that turns into a support ticket rather than an order.
PP expires vs locktime
An expiry was a merchant's request that wallet software chose to respect; locktime is a rule that every node on the network enforces. The two run in opposite directions as well as at different strengths. expires marked a moment after which a payment should no longer be made, and no miner ever checked it. Locktime, written into the transaction itself, names a block height or a time before which the transaction cannot be included in a block at all. One closes a window; the other opens one.