Nearly there. Hold on!
connecting...

Provably Fair


Let's talk about upgrade.gg...


Ensuring you with fairness

We strive to provide as much information as possible in order to ensure that our upgrades are legit and not preliminated or set in any leniant way in order to benefit our website. A client seed as well as a server seed (SHA256 hash version) is shown before the start of every round. Every final percentage which is generated uses an HMAC SHA256 hash from the client seed, and the server seed is used as a key. The first four bytes of the hash result is converted to an unsigned 32-bit integer, and afterwards, divided by 232.

As a user, you are given the ability to generate a new set of seeds at any time. You can also set a custom value to your your client seed as the server doesn't receive it until you begin your upgrade.

How does it all work?

To ensure all rounds on upgrade.gg are fair we give you as much information as possible before the roll. The information provided after the round can be compared to the information given before the round in order to verify it. Before the round starts, a public 'client seed' as well as a SHA256 hashed version of the 'server seed' is shown. You are given the ability to generate a new set of seeds at any point in time, you may also set your client seed to a totally custom value, as the server does not receive it until you click the upgrade button.

How to verify?

Below is the exact code we use to generate the roll on our server, you can run this code yourself using NodeJS. You can execute NodeJS code straight from your web browser with tools like: https://repl.it/languages/nodejs

const crypto = require('crypto');
class ProvablyFair {
    constructor(server_seed, client_seed) {
        this.server_seed = (server_seed || crypto.randomBytes(16).toString('hex')).toLowerCase();
        this.client_seed = (client_seed || crypto.randomBytes(16).toString('hex')).toLowerCase();
    }
    get server_hash() {
        let hash = crypto.createHash('SHA256');
        hash.write(this.server_seed);
        return hash.digest().toString('hex');
    }
    get round_result() {
        let hmac = crypto.createHmac('SHA512', this.server_seed);
        hmac.write(this.client_seed);

        let buf = hmac.digest();
        return buf.readUInt32BE() / Math.pow(2, 32) * 100;
    }
}

You start a new upgrade. Your client seed is d597c1f72790f244b1bd59e177606dba and your server hash is 3ac3a27e00a3724ab92e99f08f95d6bf309af4ffeb57698980a8414b6fd68db7. You do a 10x upgrade, meaning the server must roll 9.30% or below (without using a name bonus). You win and check your history. The server seed is 3e9b04fb057da725bcce13fc2b021ec8 and the round result is 5.093991%. If you want to verify this round, simply run this code after the code above:

//create a new fair generator with your round's server and client seed
var validator = new ProvablyFair("3e9b04fb057da725bcce13fc2b021ec8", "d597c1f72790f244b1bd59e177606dba");
                        
console.log("Server hash: " + validator.server_hash); //should print the server hash you originally got
console.log("Round result: " + validator.round_result); //should print something like 5.0939911743626
console.log("Success? " + (validator.round_result <= chance));

Want easy credits? Take on a challenge!

Complete website challenges, earn credits and leave with a bag full of awesome skins. Start now! View

228 online