言語
(クリックして変更)
やまと
*自動翻訳
通貨
(クリックして変更)
$
共有する:
このページを Facebook で共有する このページを Twitter で共有する
3 Dec 2022 17:12:46 UTC

宝くじの検証

当選番号はどのように生成されるのですか?

ロトクリプトスでは、当選番号の生成に透明性を持たせるため、「プロバブルフェア」システムを採用しています。

当選乱数生成の種は、4つの部分から構成されています:

  • A-乱数。
  • A - 最大128桁の乱数。抽選開始時に毎週生成され、各暗号通貨ごとに異なる
  • B - 最後のプレイヤーのトランザクションID。lottery.
  • の最後の検証されたプレーヤーのトランザクションID。
  • C - lottery.
  • で販売された宝くじの合計枚数。
  • D - lottery.
  • で検証されたプレーヤーの数。

    当選番号のランダム生成のためのシードを取得するには、次のプロセスが実行されます。

    各パーツをSHA512で暗号化し、連結する。その後、再びSHA512で暗号化され、その文字は対応するASCII値に変換されます。乱数の生成に使用されるシードはこの値です。

    乱数の生成に使用されるシードはこの値です。

    適切と思われるすべてのチェックを行えるように、乱数を取得するために使用したソースコードと、ランダム性テストを実行するためのツールをユーザーに提供しています。

    ソースコード
    ファイル: classes/class.Random.php
    PHP バージョン: 8.0.18
    最後の更新: 2022-9月-17 10:57:44 UTC
    サイズ: 3231 バイト
    <?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 
    */
    ?>
    ランダム性テスト
    2022-12月-03 17:12:46 UTC
    実行数 確率
    1 202 20.200 %
    2 196 19.600 %
    3 215 21.500 %
    4 192 19.200 %
    5 195 19.500 %
    5 1000 100 %