The nSequence
transaction field was originally intended for a replacement logic, but since it was never well thought out, it was never implemented. However, it has been implemented since the beginning that if the nSequence
of all inputs is 0xffffffff
, then the nLocktime
and the absolute time are not activated. Later, some additional features are added like the relative time lock consensus rule by not setting the 32nd bit and the RBF policy rule by setting the value of some nSequence
within a transaction to a value less than 0xffffffff-1
.
However, what I don't understand is why nSequence and nLocktime are made to have any relationship at all? If the nSequence was seen to have no original purpose (back in 2009), why wasn't it simply dropped from the transaction or left for some future purpose (as was eventually done through relative time locking and RBF)? Why did they make any connection between nSequence
and nLocktime
? If you don't want the absolute timelock, then just set it to 0x00000000 and that's it, why would it be disabled by setting all nSequences
to 0xffffffff
. I can not understand. Is there any logical reason behind linking these two?