VALIDACIóN DE LOTERíA
¿Cómo se genera el número ganador?
Lottocryptos utiliza un sistema "Provably Fair" para sus loterías con el fin de lograr la transparencia en la generación de los números ganadores.
La semilla de la generación de números aleatorios ganadores se compone de cuatro partes:
Para obtener la semilla para la generación aleatoria del número ganador, se sigue el siguiente proceso.
[Cada parte se cifra con SHA512 y se concatena. Después se vuelve a encriptar con SHA512 y se convierten sus caracteres a su correspondiente valor ASCII. La semilla utilizada para la generación del número aleatorio es este valor.
Para poder realizar todas las comprobaciones que se consideren oportunas, ponemos a disposición de los usuarios el código fuente utilizado para obtener el número aleatorio y las herramientas para realizar una prueba de aleatoriedad.
<?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
*/
?>
TEST DE ALEATORIEDAD
06-My-2024 03:11:03 UTC
|
||
---|---|---|
Valores | Número de Rondas | Probabilidad |
1 | 203 | 20.300 % |
2 | 209 | 20.900 % |
3 | 197 | 19.700 % |
4 | 198 | 19.800 % |
5 | 193 | 19.300 % | 5 | 1000 | 100 % |