I will post a followup explaining my own idea for a pure PoS scheme.
I'm in the possibly advantageous position of knowing that PoS is a respectable way to secure a blockchain, but not actually knowing how anyone does it. Therefore I'm starting with a blank mental slate, but approaching it from a mindset that says "how can I make this work?" rather than "can this be made to work?"
My idea is that, instead of having the PoS miners compete to find a hash that meets a particular target, said target being easier for large stakeholders than for smaller ones, why not just award the block to the PoS miner with the largest stake value? Of course, the "stake value" cannot just be the account balance, otherwise the same account would win block after block after block, until spent or until another account achieved a higher value. Moreover the winning miner could prevent that from happening simply by refusing to include in his blocks any transaction that would put a competing account over the value of his own.
I propose that "stake value" of an account be the time integral of the account balance since the last time that account won a PoS block, or the from the time of its creation, if it never has. In addition to keeping track of an account's balance, therefore, we would also have to keep track of it's stake value. We would not have to recalculate it every block, instead we could just record the block number when it was last recalculated, and recalculate every time the balance changes.
In order to generate one block per minute, quite regularly, I propose the following process.
At time x minutes and 00 seconds, each node will have (tentatively) chosen the previous block winner. Let's assume for the sake of arguement that every node has chosen the same block. This would be the situation after the first genesis block.
The next 40 seconds I call the refectory period. No blocks timestamped during this period will ever be accepted by any node. (Also no node will judge any block the winner, if it receives that block before its timestamp, though it might
accept if it is otherwise acceptable, just in case the rest of the network decides to choose it anyway, which they might, if they receive it later. A node could accept multiple competing blocks)
The next 20 seconds is the bidding period. During this period, any account holder may generate and sign a block, (or start distributing a block generated earlier, though there will be no advantage in doing this). Other nodes will accept it if its stake value is greater than any other block already received. They may also accept it if it is lower, but it is still high enough that the node believes that it might win the global contest anyway. (It can never win the local contest because it doesn't have the greatest stake value known to the node.) Nodes may also choose to reject (i.e. delete from memory) previously accepted blocks which it judges to no longer have a chance to win the contest. However, nodes will only ever attempt to distribute the highest scoring block they know about.
At the end of the bidding period, each node chooses the winner. Most likely every node will have chosen the same block, the one which globally has the highest stake value, and the next refectory period can begin like the last, only this time, that account will have a stake value of zero. Sometimes the highest value block may not have reached every node, and on rare occasions, for example if the highest stake-value block was released close to the end of bidding, another block might be judged the winner on the majority of nodes, Call this block the global winner.
After another refectory period, the next round of bidding begins. Each node submitting a block will chain it from what it thinks the winner of the last round was, but each accepting node will accept high scoring blocks from the other last round contestants. The next block winner (as judged by each node) will be the highest scoring block across all the competing chains.
Because most submitted blocks will extend the chain of the previous global winner, it is likely that the next global winner will extend that chain. Over time, the side chains will be extended by fewer and fewer blocks until no node considers them to be a winner, at which point they die.
Because this system doesn't care what the hash value is, there is no way to turn it into PoW. It is pure PoS. Thoughts? Comments? Criticisms?