One of my major bitcoin criticisms remains non-deterministic transaction behavior, from the user PoV. Transactions that are non-standard, or too large for the included fees, will be resent hopelessly, without the user ever having any resolution whatsoever. I call these "zombie transactions."
In the real world, transactions tend to be more binary: they either succeed or fail. They don't sit around in limbo forever.
Therefore, I propose a new network rule:
- Note the current block height, when a TX is received at a node, X.
- When block height increases to X+T, and the TX has not yet been put into a block, remove it from the TX cache. T could be 150 blocks, around 24 hours, but that's open to discussion.
In the short term, this should have little effect, as clients will continue to resend transactions ad infinitum, until they get into a block. And TX cache is flushed in any case, when a bitcoin node restarts.
In the long term, this guarantees predictable behavior for each transaction
. With this network rule in place, a user will know that their TX will probably
either make it into a block, or disappear from TX caches [and thus be eligible for resubmittal]. This should open up the possibility for users to recover spent coins that never made it into a block (never confirmed). The current inability for a user to recover unconfirmed-and-never-will-be money is a flaw that should be corrected, though luckily these are rare cases today.
However... Such unspending is difficult
: a spend potentially creates a change transaction, which itself could then be spent, and so on. Of course, these zombie coins will never confirm, because their originating transaction is a zombie transaction. But it is difficult to unroll a chain of spends reliably.