The Provably Fair process we use:


1. We create a server 'seed' to generate our random numbers.

2. We add 20 symbol secret (which doesn't participate in the draw of the number, its sole purpose is to secure the server seed) with the server seed, and we show you a SHA256 hash of the server seed before the beginning of the game.

3. The initial array of 16 outcomes of the Wheel is randomized.

4. The server then randomizes the initial array with a server generated seed. This is the server array.

5. The initial array order is made public before the spin as an encrypted SHA256 hash of the server seed and the initial array.

6. We then add the selected by you (or client-side generated) client seed once the spin button is pressed. This seed directly effects the outcome of the spin.

7. The server array is randomized with the client seed. The first item of the array is the outcome.


Use the following .NET script to verify the outcome was indeed random:

Dim ServerSeed As Integer = 1234567
Dim ServerSecret As String = "ABCDEFG12345"
Dim ServerArray As String = Me.ArrayShuffle(ServerSeed, "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15")
Dim ServerSHA256 As String = Me.SHA256(ServerSeed.ToString & ServerArray & "-" & ServerSecret)
Dim ClientSeed As Integer = 7654321
Dim ClientArray As String = Me.ArrayShuffle(ClientSeed, ServerArray)
Dim ClientNumber As String = ClientArray.Split(",").GetValue(0).ToString

Function ArrayShuffle(ByVal SeedData As UInteger, ByVal ArrayData As String) As String
    Dim i, n, f, t As Integer
    Dim s, l As String
    Dim a As String() = ArrayData.Split(",")
    Dim r As New MersenneTwister.MTRandom(SeedData)
    ' ###########
    ' # Shuffle #
    ' ###########
    f = 0
    t = (a.Length - 1)
    For i = t To (f + 1) Step -1
        n = Int((i - f + 1) * r.genrand_real1 + f)
        s = a.GetValue(i).ToString
        a.SetValue(a.GetValue(n), i)
        a.SetValue(s, n)
    Next
    ' ##########
    ' # Result #
    ' ##########
    l = ""
    For Each s In a
        l = (l & "," & s)
    Next
    Return l
End Function

Function SHA256(ByVal value As String) As String
    Dim v() As Byte = System.Text.Encoding.UTF8.GetBytes(value)
    Dim p As New System.Security.Cryptography.SHA256CryptoServiceProvider
    Dim h() as Byte = p.ComputeHash(v)
    Dim s As String = ""
    For Each b As Byte In h
        s = (s & b.ToString("x2"))
    Next
    Return s
End Function