Why is OP_CHECKLOCKTIMEVERIFY disabled by maximum sequence number?
In the code for OP_CHECKLOCKTIMEVERIFY
i noticed that if the txin sequence number is maxxed out then the script will fail to validate. I’m wondering what the point of this is? Why would anybody ever submit a transaction that will fail to verify to the network?
Here is the relevant section of code:
// Finally the nLockTime feature can be disabled and thus
// CHECKLOCKTIMEVERIFY bypassed if every txin has been
// finalized by setting nSequence to maxint. The
// transaction would be allowed into the blockchain, making
// the opcode ineffective.
//
// Testing if this vin is not final is sufficient to
// prevent this condition. Alternatively we could test all
// inputs, but testing just this input minimizes the data
// required to prove correct CHECKLOCKTIMEVERIFY execution.
if (txTo->vin[nIn].IsFinal())
return false;
I’m also confused about the comments in the code for this. They say that every sequence number has to be maxxed out to get the script to fail to validate, but it looks to me like this is not true – it looks like only one sequence number needs to be maxxed out and then the whole transaction (all txins) will fail. And I assume this would mean that the transaction will therefore not be included in the blockchain? But that runs counter to the code comments. It would make sense if there were a !
on the if condition.