I just started learning about bitcoin scripting and wonder:
- what if the timelock in CLTV is in the past?
- what if the timelock in nLocktime is equal to 500.000?
Bitcoin Stack Exchange is a question and answer site for Bitcoin crypto-currency enthusiasts. It only takes a minute to sign up.Sign up to join this community
nLockTime is less than or equal to the next block height, it can be included in the next block.
To explicitly answer your questions:
CLTVop restricts the
nLockTimefield of the spending transaction, therefore if it is set in the past the condition is already fulfilled.
nLockTimefield of a transaction is set to
500 000it is valid to be included in any block which height is superior or equal to
160 000blocks :).
This mechanism was cleverly used to discourage reorgs. First introduced in the bitcoin-core wallet, but now most wallets set the
nLockTime field of their transactions to the next block.
This prevents, in a future where miners would mainly be compensated for their work by transaction fees, a pernicious incentive to rollback the last block if it included a high fee-paying transaction.
As darosior says you can only impose a timelock such that Bitcoin can be spent after a certain block height. You can't impose a timelock such that Bitcoin can only be spent before a certain block height.
A related question is this one on the possibility of a
not() condition in Miniscript. As Pieter Wuille stated in that answer:
The nSequence and nLocktime fields themselves do observe time, and can only express larger-than constraints. Bitcoin transaction validity should be monotonic: once valid, absent double-spend, they remain valid.
The alternative would be a logistical nightmare. All mempool transactions would need to be reevaluated every block. Reasoning about validity of unconfirmed transactions would be a pain (e.g. what if you're paid using a tx spending the output of a soon-to-be expired tx?)