This feels like it could have potential for double-spends worse than in Bitcoin. In Bitcoin, when the block-chain forks, both forks can contain the same transactions so most transactions are unaffected by a fork. In TaPoS, as I understand it, a fork means a lot of transactions will be reverted, and will have to be re-broadcast with a new nominated block. If the sender does nothing, the receiver will never get paid, so double-spending becomes the default result of a fork rather than something that only happens if a sender is actively criminal.
To avoid nominating a wrong block, a transaction would like to nominate a really old block, ideally the genesis block, so it can be included in either/both sides of the fork. Presumably the protocol disallows that by enforcing "recent". If so, does that mean that transactions expire? If "recent" means within 5 blocks, a transaction that fails to be included for 6 blocks can never be accepted. Transactions seem to be in a bit of a bind. They want to nominate a young block to minimise their risk of expiring, and an old block to minimise their risk of being discarded by a fork.
Is there anything to stop the same transaction (ie, same inputs/outputs) being issued multiple times, each time nominating a different block, to minimise the chances of it being orphaned? At most one of the versions will be accepted into the longest chain, so it would seem to be free. If so, isn't that the rational thing for a client to do (supposing it genuinely wants its transactions to be executed), and doesn't it make the "Transactions as Proof of Stake" thing pointless? Every transaction will vote for every block, just in case that block wins.
Is there a thread where these issues are discussed? I'm probably mis-understanding or re-inventing wheels.