I have real issue with provably fair. I'm not a mathematician or a programmer though...
But with any of the dice games, how can you tell if the winning seed was generated before or after your bet and roll? Or how can you tell if the first seed generated (which might have been a win) wasn't discarded and regenerated until your roll would create a loss instead ? As long as in the long term the payout matches what the house odds claim to be, how would you tell that that the long odd bets were performing as promised? If the stated odds are 1 in 1000, but after 200,000 roles, only 900 wins occurred , how would one know if that was the luck of the house, or a random number generator or other logic wasn't subtly altered to benefit the house?
The first thing you can do when you visit any site that is actually provably fair is check for your user seed and the hash of the secret seed. If you have this information you can be sure the seed was generated before any roll, so you can be sure the situation you describe cannot happen. You should also be able to set your own user seed AFTER the system has picked a secret seed. Please take some time to understand how it works, and remember that each site employs its own custom method.
Basically, a secret seed is generated, then the hash of this secret seed is shown, then a user picks its own seed. If the secret seed is modified during the rolls, then when you ask to reveal it you won't be able get the same hash you received earlier. So the system cannot change this seed. If the user seed is changed during the rolls, then the results you get won't match the ones you can generate after the secret seed is released. So the system cannot change this seed either. If you modify any of them for any of the rolls, you won't be able to verify the results either. If you understand all of this, can you explain how the situation you describe is possible ?
OK.
So, the site generates its winning seed, sends it through a hash generator and shows you the hash? You then "roll" your dice, where a new number is generated. The system then shows you the original number so you can compare?
If the roll is done via javascript, the client generate 10,000 rolls, send the results through the same hash function and discard 9,999 of the non-winning results, no? So client side wouldn't seem to work.
So, if its done on the server side - you see the hash you're aiming for, the server the makes 50 dice "rolls" and then returns to you one of the losing rolls. It doesn't happen everytime. Just enough to add, say, another 1 or 2% to the house odds.
Or am I missing a piece somewhere?
First of all there is no thing called "winning seed", it is just a secret seed. To describe this concretely, I will use the method employed by ggdice.
So let's say this secret seed is "ABC", and we will use SHA3-256. So the hash you would get would be e1629b9dda060bb30c7908346f6af189c16773fa148d3366701fbaa35d54f3c8 (you can check this using
python2.7 -c "import keccak; print(keccak.sha3_256('ABC').hexdigest())"
). Now, after you know this information, you send your seed, let's say it is "DEF". Now when you do a roll, there is also a thing called nonce which starts at 1 and is incremented after each bet.
All the client does is ask the server for a roll at a given win chance, with a certain amount, and whether you will believe the result will be greater or lower than the rolled number. The server knows the current seeds for the user as well the nonce. So for your first roll, the server concatenates the secret seed ABC, the nonce 1, and the user seed DEF. Then it performs the equivalent to
python2.7 -c "import keccak; print(int(keccak.sha3_256('ABC:1:DEF').hexdigest(), 16) % 1000000)"
. For the first roll, this results in the number 439654, displayed as "43.9654". For your second roll, the same is done using nonce 2, which gives 51395. And so on.
The roll cannot be done in the client because you do not have access to the secret seed yet. Now, when you reveal the secret (whenever you want to), you get the value 'ABC'. If you apply the same hashing function as before, you should get e1629b9dda060bb30c7908346f6af189c16773fa148d3366701fbaa35d54f3c8 that was revealed earlier to you. So now you can regenerate all the rolls, by incrementing the nonce starting from 1 with the now known secret seed. It should be clear that the system cannot skip rolls, because it wouldn't match what you can now verify. Is this clear ?