I was directed here by someone asking questions about the darts game and after looking it over I have adjusted the game to calculate the winning hash ahead of time (in the same random fashion as before) and along with the address to send the bet to it will show the hash of the winning hash for that transaction, so that after the transaction is complete and the winning hash is revealed you can (if you want to, no extra requirements to play) check that it matches.
Still doesn't necessarily give any verification of the randomness of the hashes generated, but should be enough to show that the outcome isn't dependent on the size of the bet without revealing bet sizes in the history.
I'll try that, thks. Indeed if you don't show the hash before the player bets, there's nothing preventing you from chosing a losing outcome after the player has bet.
Edit.
I've tried again, and I still don't understand. Sure, it gives me a hash before I send money. But that doesn't prove anything. It doesn't even tell what hash function has been used. It doesn't prevent you from chosing the lose/win ratio you want.
Edit #2.
Here is what I suggest.
First, you chose a random string and you keep it secret for now. Let's call it $s
You then show the sha256sum of this string.
Then you ask the player for an integer $n. Once the player has given you this number,
you can show him $s, and everything that you will do next doesn't have to be secret.
You compute n successive hashes of $s. You have to use a different hashfunction that the one used previously, otherwise the player could chose $n in order to obtain a winning outcome. So let's use sha224 here instead of sha256.
$ f() { sha224sum <<< "$1" |cut -d' ' -f1; }
$ while ((n--)); do h=$(f "$h"); done
Once this is done, you compute two more hashes, and you build your two coordinates with them :
$ x=$(f h); y=$(f x)
$ x=0.${x//[a-f]/}
$ y=0.${y//[a-f]/}
Finally you can use those coordinates for your dart game.