Available currencies:

BTC ETH BTG BCH ZEC DOGE LTC DASH
Affiliate program:

• 50% from faucet
• 5% from the purchase of a cloud contract
Fairness

BitcoinTrain uses a provably fair cryptographic system which means you don’t have to trust us blindly, each roll is cryptographically fair and can be verified to be manipulation free.

### Randomization

In order to allow players to verify their bets, a pair of Server Secret and Client Secret is used to calculate a roll number.

A process of creating a new pair of Server Secret and Client Secret is called randomization. It's possible to make randomization anytime.

Knowing Server Secret, Client Secret and Nonce it's possible to calculate bet result. To prevent a player from result prediction, Server Secret is hidden, and a SHA-256 hash of the secret is shown instead. After next randomization, previous Server Secret is revealed and a player is able to verify the bet. Also, players can make sure that Server Secret wasn't changed by comparing their hashes before and after randomization.

### Roll Numbers

To generate a roll number between 0 and 9,999 we combine your Server Secret, your Client Secret and your Nonce (bet number):

`combination = Server Secret + Client Secret + Nonce`

Then, we calculate a SHA-512 hash of that combination. That gives us a 128 character hex string:

`hash = SHA512(combination)`

We then take the first 5 characters of that hash and convert them to a decimal number ranging from 0 to 1,048,575 (16 ^ 5 - 1). If it is less than 1 million, we divide it by 10,000 and use it as your roll outcome. Otherwise, we repeat using the next five characters. We are able to repeat the process up to 25 times.

In the very rare case ((48,576 / 1,000,000) ^ 25) that none of the 25 trials are lower than 1 million when converted to decimal, we use the remaining 3 characters and convert them to your roll number.

### Code Example

The following code example can be used to verify a bet:

```function getRoll(serverSeed, clientSeed, nonce) {
var hash = sha512(serverSeed + clientSeed + nonce);
var index = 0;
do {
var lucky = parseInt(hash.substr(index, 5), 16);
index += 5;
} while (lucky >= 1000000);
return lucky % 10000;
}```
Please also check our online bet verifier.