Bitcoin Stack Exchange is a question and answer site for Bitcoin crypto-currency enthusiasts. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am trying to study the locktime feature of transactions ( ). 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?

share|improve this question
up vote 4 down vote accepted

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.

share|improve this answer
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... – halftimepad Dec 26 '12 at 22:07
Done. I was using a wrong locktime. It must be an absolute time with UNIX timestamp format. – halftimepad Jan 6 '13 at 23:35

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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