I've been thinking about ways to secure POS against "Nothing at stake" type of attacks. I don't think that Nothing at stake problem kills all POS coins off. Reality shows they are relatively fine, albeit with various tricks, which in a way do not make them completely decentralized.
As far as I understand the science behind distributed consensus POS coins cannot guarantee asynchronous consensus, that is there's a possibility of successful fork. It manifests itself in so-called "Nothing at stake" argument, which states that since it costs nothing to generate a block for a POS miner to hedge his bets he would mine on all the competing chains that he can find. He just does not loose anything by mining on all the chains, but if he prefers to stay on the main chain he could loose mining fees if the competing chain wins, so it makes sense for him to mine on both.
Bitcoin and POW coins solve this by bringing an external factor into the game, namely computational power the miners possess.
Miner can't afford to mine on the wrong chain since he looses money he paid for his ASIC and electricity. So there's something at stake for him, which makes POW coins inherently more stable.
This is a serious theoretical argument and it has to be probably dealt with.
So, what could be at stake for a POS miner? In real world systems such as NXT a rogue miner would be penalized if he chooses to mine on a fork, the main chain wouldn't allow him to mine on it. Could we dig deeper and make the miner actually pay for his mining with the coin he mines? That would be in a way analogous to investing in ASIC's and electricity when dealing with Bitcoin, with the difference of paying for everything with the coin to be mined.
If we somehow manage to do that we will obtain a self-contained cryptocurrency with a very low energy consumption and no need for fancy asic's, which prevents miners from mining on all forks they can find by its construction.
One way to do it would be the following:
- The miner pays a mining "initiation" fee ("Bet") by sending a payment to a special "initiation" address.
- Miner address is selected from the miners' pool, that is from the addresses who made initiation payments
The probability for the miner to generate a block is equal to SHA256(prevhash + address + timestamp) <= Bet / diff,
where prevhash is the hash of the previous block, address is the miner address, Bet is the fee the miner paid to participate, diff is current adjustable difficulty
- Let's suppose that mining is for transaction fees only, that is the miner gets to collect the transaction fees. So his mining profit depends on the bet he made and the fees collected in the block. If the miner chooses not to mine due to his bet being less than he profit he collects from the fees, he is penalized by the network, and is unable to mine. The bet is considered to be spent.
- If the miner decides to do make another bet he has to make a new initiation payment.
Network is able to understand when a given miner has to produce a new block, the system is deterministic (check NXT cryptocurrency forging algo for example). So if in due time there's no block generated by the miner his bet is considered to be spent. So he'd better mine a block even if the bonus he collects is less than the bet he made.
So the average bet miners make turns out to be dependent on average block size, average transaction value and average time between blocks, which is adjustable the usual way through varying difficulty. We obtain a network of gambling miners, where bets they make prevent them from mining on forks, since if a fork doesn't beat the main chain his fee (which has been made on the main chain) is lost.
TLTR:POS system is proposed where a miner has to make a bet before being eligible to generate a block; miner's profit is equal to (fees generated in the block - miner's bet); miners who choose not to mine a block are penalized and their bet is considered to be spent.