If I understand correctly, plasma is moving contract execution to the child chains, this means that not every node will execute every contract, but if so, how can nodes that did not execute a contract trust that whoever did execute the contract did not cheat? The Whitepaper refers to fraud proofs many times, but it’s unclear how these fraud proofs would actually work. How can you prove that the eyes of a CryptoKittie just generated on a deeply nested child chain are of the wrong color without actually executing the contract? At some point the fraud proof is mentioned as a transaction by itself, I assume it is submitted to the root chain, but then again how all nodes will validate it without actually running the contract and tracking the latest state of this child chain? And what prevents someone from flooding the network with spam fraud proofs that all nodes will need to validate?
Another weakness seems to be that since not every node is required to execute a contract, who promises that the contract will be executed at all and not just lock the user’s funds? I think this is what the whitepaper refers to as block withholding attack. But this means that users will need to be on constant alert to see if the contract they triggered actually executed which will sometimes become very difficult to tell given that its unknown which node executes which contract on which child chain. Also, I have to admit I don’t like the mass exit idea, the ability of users to move their tokens freely between chains which use different consensus creates endless possibilities for manipulation.
Just my 0.02$