Here you have an implemention of a provably fair system:
//the seed pair itself
var clientSeed = "your client seed"; //dont forget to exclude the dash and the nonce!
var serverSeed = "your server seed";
//bet made with seed pair (excluding current bet)
var nonce = 0;
//crypto lib for hmac function
var crypto = require('crypto');
var roll = function(key, text) {
//create HMAC using server seed as key and client seed as message
var hash = crypto.createHmac('sha512', key).update(text).digest('hex');
var index = 0;
var lucky = parseInt(hash.substring(index * 5, index * 5 + 5), 16);
//keep grabbing characters from the hash while greater than
while (lucky >= Math.pow(10, 6)) {
index++;
lucky = parseInt(hash.substring(index * 5, index * 5 + 5), 16);
//if we reach the end of the hash, just default to highest number
if (index * 5 + 5 > 128) {
lucky = 99.99;
break;
}
}
lucky %= Math.pow(10, 4);
lucky /= Math.pow(10, 2);
return lucky;
}
console.log(roll(serverSeed, clientSeed+'-'+nonce));
You can run this script with node.js. This shows how you calculate the outcome of a dice roll. You just have to make sure that as long as your user is playing with a serverSeed you don't reveal it to him only the hash of the seed is revealed. Make sure to use for each user another serverSeed. The clientSeed is chosen by the user.