Linguagem
(Clique para alterar)
Português
*Traduzido automaticamente
Moeda
(Clique para alterar)
$
Compartilhe:
Compartilhe esta página no Facebook Compartilhe esta página no Twitter
3 Mar 2024 2:10:59 UTC

VALIDAçãO DE LOTERIA

Como é gerado o Número Vencedor?

Lottocryptos usa um sistema "Provably Fair" para as suas lotarias para alcançar transparência na geração de números vencedores.

A semente da geração do número aleatório vencedor é composta de quatro partes:

  • A - Número aleatório até 128 dígitos. É gerado semanalmente quando a lotaria começa e é diferente para cada moeda criptográfica.
  • B - O ID da transacção do último jogador. O ID da transacção do último jogador verificado da lotaria.
  • C - O número total de bilhetes de lotaria vendidos na lotaria.
  • D - O número de jogadores verificados na lotaria.
  • Para obter a semente para a geração aleatória do número vencedor, é seguido o seguinte processo.

    Cada parte é encriptada com SHA512 e concatenada. Depois é novamente encriptada com SHA512 e os seus caracteres são convertidos para o seu valor ASCII correspondente. A semente utilizada para a geração do número aleatório é este valor.

    A fim de podermos fazer todas as verificações consideradas apropriadas, fornecemos aos utilizadores o código fonte utilizado para obter o número aleatório e as ferramentas para realizar um teste de aleatoriedade.

    CóDIGO FONTE
    Arquivo: classes/class.Random.php
    Versão do PHP: 8.2.4
    Última atualização: 17-Setembro-2022 10:57:44 UTC
    Tamanho: 3231 Bytes
    <?php
    function Random_number($length){
        
    $result '';
        
    //Generate random number.    
        
    for($i=0;$i<$length;$i++){
            
    $result $result.random_int(0,9);
        }
        
        
    //Remove leading zeros.    
        
    $result ltrim($result,'0');
        if(
    $result == ''){
            
    $result 0;
        }
    return 
    $result;    
    }

    function 
    Random_string_to_int($string){
        
    $result '';
        
    //Count characters.
        
    $length strlen($string);
        
        
    //Ord ->Convert a character to its ASCII decimal value.
        
    for($i=0;$i<$length;$i++){
            
    $result $result.ord($string[$i]); 
        }
    return 
    $result;    
    }

    function 
    Random_int_to_string($number){
        
    //Convert integer to string.    
        
    $result number_format($number,0,'','');
    return 
    $result;    
    }

    function 
    Random_hash($data,$algo){
        
    //Hash string with an algo.    
        
    $result hash($algo,$data);
    return 
    $result;    
    }

    function 
    Random_basic_seed(){
        
    $result Random_number(128);
    return 
    $result;
    }

    function 
    Random_gmp_winner_number($basic_seed,$player_seed,$n_tickets,$n_players){
        
    $result '';
        
    //Convert integer to string.
        
    $n_tickets Random_int_to_string($n_tickets);
        
        
    //Hash all the parts
        
    $basic_seed Random_hash($basic_seed,'sha512');
        
    $player_seed Random_hash($player_seed,'sha512');
        
    $n_tickets_seed Random_hash($n_tickets,'sha512');
        
    $n_players_seed Random_hash($n_players,'sha512');        
        
        
    //Join all parts and hash
        
    $seed Random_hash($basic_seed.$player_seed.$n_tickets_seed.$n_players_seed,'sha512');
        
        
    //Convert letters to numbers.
        
    $seed Random_string_to_int($seed);
        
        
    //Insert seed into number generator. Only integers.
        
    gmp_random_seed($seed);
        
        
    //Generate random number.
        
    $value gmp_random_range(1,$n_tickets);
        
        
    //Convert GMP integer to string.    
        
    $result gmp_strval($value);
    return 
    $result;
    }
    /*
    //WINNER NUMBER
    $basic_seed = Random_basic_seed();
    $player_seed = 'f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16';//Transaction ID
    $n_players = 1;
    $n_tickets = 100000000;
    echo Random_gmp_winner_number($basic_seed,$player_seed,$n_tickets,$n_players);

    //RANDOMNESS TEST (Can be CPU intensive with more cycles / rounds)
    $cycles = 1;
    $runs = 1000;
    $tickets = 5;
    $player_seed = 'f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16';//Transaction ID
    $players = 5;

    $n_runs = 0;
    $probs = 0;
    $results = array();
    $results_prob = array();
    for($i=0;$i<$cycles;$i++){
        for($k=0;$k<$runs;$k++){
            $basic_seed = Random_basic_seed();
            $number = Random_gmp_winner_number($basic_seed,$player_seed,$tickets,$players);
            if(array_key_exists($number,$results)){
                $results[$number]++;
            }
            else{
                $results[$number] = 1;
            }
        }
    }
    ksort($results);?>

    <table>
        <thead>
            <td>Number</td>
            <td>Number of Times</td>
            <td>Probability</td>            
        </thead><?php 
    foreach($results as $key => $value){ 
        $n_runs += $value;
        $x = number_format((($value * 100)/($cycles * $runs)),3);
        $probs += $x;?>
        <tr>
            <td><?php echo $key;?></td>
            <td><?php echo $value;?></td>
            <td><?php echo $x.' %';?></td>
        </tr><?php 
    } ?>
        <tfoot>
            <td>Total Numbers: <?php echo count($results);?></td>
            <td>Total Runs: <?php echo $n_runs;?></td>
            <td>Total Prob: <?php echo $probs.' %';?></td>            
        <tfoot>
    </table><?php 
    */
    ?>
    TESTE DE ALEATORIEDADE
    03-Marchar-2024 02:10:58 UTC
    Valores Número de execuções Probabilidade
    1 189 18.900 %
    2 199 19.900 %
    3 196 19.600 %
    4 216 21.600 %
    5 200 20.000 %
    5 1000 100 %