Beispiel #1
0
 static function getMrklroot($binary_data, $variables, $first = false)
 {
     if ($first) {
         debug_print('$first=true', __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
     }
     $tx_size = 0;
     // [error] парсим после вызова функции
     if ($binary_data) {
         debug_print('$binary_data=' . bin2hex($binary_data) . "\nstrlen=" . strlen($binary_data), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
         do {
             // чтобы исключить атаку на переполнение памяти, выделенной для php
             if (!$first) {
                 if ($tx_size > $variables['max_tx_size']) {
                     return '[error] MAX_TX_SIZE';
                 }
             }
             $tx_size = self::decode_length($binary_data);
             //print '$tx_size='.$tx_size."\n";
             // отчекрыжим одну транзакцию от списка транзакций
             if ($tx_size) {
                 $transaction_binary_data = self::string_shift($binary_data, $tx_size);
                 $mrkl_array[] = self::dsha256($transaction_binary_data);
             }
             ////print 'strle($transaction_data)='.strlen($transaction_binary_data)."\n";
             ////print '($transaction_data)='.$transaction_binary_data."\n";
             //print_r($mrkl_array);
             // чтобы исключить атаку на переполнение памяти, выделенной для php
             if (!$first) {
                 if (sizeof($mrkl_array) > $variables['max_tx_count']) {
                     return '[error] MAX_TX_COUNT';
                 }
             }
         } while ($binary_data);
     } else {
         $mrkl_array[] = 0;
     }
     debug_print('$mrkl_array:' . print_r_hex($mrkl_array), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
     return testblock::merkle_tree_root($mrkl_array);
 }