Here's a toy example of a game: the player is presented with N slot machines. They can click on each slot machine once, and when they do so, the slot machine rolls a random outcome (based on a predetermined set of outcomes and probabilities).
If the slot machine outcomes are rolled on the server, there is obviously no opportunity for the client to cheat: the server has full information to arbitrate which slot machines have already been rolled and what their outcomes were.
Suppose the client and server communicate only twice: once before the game starts, and once after the game ends. Is there any kind of protocol that can guarantee that the client cannot cheat?
Obviously, the client cannot simply report to the server what rolls the player achieved on all the machines; the client simply reports N jackpots.
Better would be for the client and server to agree on a method of determining the slot machine outcome, based on the image of a one-way function of the time stamp when the client clicks the slot machine. The client reports to the server the (time stamp, outcome) pairs for each slot machine, and the server can verify that the outcomes are correct given the time stamp.
But this protocol is still not secure; it may not be tractable for the client to invert the mapping from time stamp to jackpot, but it can try many possible time stamps and report to the server the N most favorable outcomes.
Is there any protocol that can guarantee (perhaps given additional assumptions about the computational power available to the client) that an untrusted client cannot cheat at this game? If not, is there an argument proving impossibility?