I am trying to study the locktime feature of transactions ( https://en.bitcoin.it/wiki/Protocol_specification#tx ). I have created some raw transactions in the testnet with different locktimes, but, when I send them, they are confirmed as usual. I have also been able to spend the just sent coins immediately. When I dump the block, the locktime field looks correct.

How is the locktime checked when confirming a transaction? Can someone point me to the piece of the code that does the checking?

Or am I wrong and locktime is really not implemented?

1 Answer 1


It's checked in the IsFinal() method of CTransaction. A non-final transaction cannot be included in blocks.

A transaction is final if either:

  • The lock time is in the past.
  • All of the inputs have sequence numbers equal to UINT_MAX.

The second one is probably what confused you.

  • Thank you! I hadn't checked that. Still, I have just sent a transaction with both sequence number smaller than UINT_MAX and a locktime greater than 0 and spent it right away. I will revise IsFinal() to check what is wrong... Dec 26, 2012 at 22:07
  • Done. I was using a wrong locktime. It must be an absolute time with UNIX timestamp format. Jan 6, 2013 at 23:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.