My question is in a couple parts: Is this in the roadmap for getting implemented in the future or is this simply an idea that hasn't really been completely thought through? What kind of security issues are there in terms of a 3rd party "changing" the transaction information and simply updating to a new transaction version? Or is this a "no later than" type of notification where the transaction expires after a certain block number has been created?
It is an interesting feature to Bitcoins if it could be pulled off. Apparently most miners are not paying attention to this attribute as well, and it may be something to reconsider.
A transaction can't be included in a block if its lock time is in the future. Even now blocks breaking this rule will be rejected.
The feature is designed to work with in-memory transaction replacement, which is currently disabled (it was enabled in older versions):
// Disable replacement feature for now
return false;
// Allow replacing with a newer version of the same transaction
if (i != 0)
return false;
ptxOld = mapNextTx[outpoint].ptx;
if (!IsNewerThan(*ptxOld))
return false;
for (int i = 0; i < vin.size(); i++)
{
COutPoint outpoint = vin[i].prevout;
if (!mapNextTx.count(outpoint) || mapNextTx[outpoint].ptx != ptxOld)
return false;
}
break;
IsNewerThan() checks that the input's sequence number is lower than the other version. Lower sequence=newer.
This disabled feature is not network-enforced in any way, so it could be enabled at any time.
You can't replace a transaction unless you can sign it. So it should be safe. It might be unsafe if you're using inputs that can be redeemed by more than one person: the other person could make your transaction invalid (but not steal your other inputs).
It was probably disabled because it makes accepting transactions with 0 confirmations really unsafe. It could be safely re-enabled if transactions were only replaceable if they actually specify a non-zero lock time, and this was marked in the UI.
nTimeLock does the reverse. It's an open transaction that can be replaced with new versions until the deadline. It can't be recorded until it locks. The highest version when the deadline hits gets recorded. It could be used, for example, to write an escrow transaction that will automatically permanently lock and go through unless it is revoked before the deadline. The feature isn't enabled or used yet, but the support is there so it could be implemented later.