# Proof of stake fork problem

I have a doubt with Proof of Stake. As I have watched some tutorial videos and websites, there is information that: with Proof of Stake, in order to make a double spending attack, a node has to own at least 51% stake of all the network.

Because with pure Proof of Stake, only a single miner can append a block at the same time. So what I wonder here is: with Proof of Stake, how can fork happen to make the double spending attack?

a node has to own at least 51% stake of all the network.

This is correct. Note: you should own 51% of network, not 51% of emission.

only a single miner can append a block at the same time

Not true, but it does not matter.

how can fork happen to make the double spending attack?

Assume you have large stack.

• backup your database at some checkpoint
• sell your stack for "anything else"
• restore from backup and create a private network which is not connected to main network
• leave your chain mining until the cumulative difficulty become larger than in main network
• connect your network to main net and force it to reorganize mainchain to your chain where you still have your funds and 100% mining rewards

voila

• Thank you for your answer, but could you explain for me that without connecting to the internet, how can I know how much is owned by all the network? For example, with nxtcoin, you have to know all the coins owned by the network, so you can choose the next miner by picking a random coin among all the coins. Commented Nov 16, 2017 at 17:02
• Mining blocks in PoS is not "picking (voting for?) a random coin and its respective owner". Sorry, I can not explain PoS here in few words in good English. Commented Nov 16, 2017 at 18:55

Forking in proof of stake. Like the algorithm outlines, one particular validator is pseudo randomly selected for block addition. But yet there can be forks because:

Say a particular block A is present as root. Now a validator X adds block B. Now Block X has the chain A->B. But if there is network problem in X, the block B might not reach other nodes. So all other nodes have only A. But X only gets the chance to add block for a specified time interval. If the block is not added in that time interval, its chance lapses. So since all the nodes didn't receive B because of the network failure at X, they think the chance of X lapsed and another validator Y now adds block C.

Thus all other nodes except X have A->C where as X has A->B. Later when the network restores, B is found and you have a fork.