Exemplo n.º 1
0
function downloadFile($url, $path)
{
    global $db;
    $newfname = $path;
    $file = fopen($url, "rb");
    if ($file) {
        $newf = fopen($newfname, "wb");
        if ($newf) {
            while (!feof($file)) {
                fwrite($newf, fread($file, 1024 * 8), 1024 * 8);
                upd_deamon_time($db);
                if (check_deamon_restart($db)) {
                    main_unlock();
                    exit;
                }
            }
        }
    }
    if ($file) {
        fclose($file);
    }
    if ($newf) {
        fclose($newf);
    }
}
Exemplo n.º 2
0
    // для тестов получим что там есть
    $tmp_testblock_data = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT *\n\t\t\tFROM `" . DB_PREFIX . "testblock`\n\t\t\t", 'fetch_array');
    debug_print($tmp_testblock_data, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    debug_print("LOAD DATA LOCAL INFILE  '{$file}' REPLACE INTO TABLE `" . DB_PREFIX . "testblock`", __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    // т.к. эти данные создали мы сами, то пишем их сразу в таблицу проверенных данных, которые будут отправлены другим нодам
    $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tLOAD DATA LOCAL INFILE  '{$file}' REPLACE INTO TABLE `" . DB_PREFIX . "testblock`\n\t\t\tFIELDS TERMINATED BY '\t'\n\t\t\t(`block_id`,`time`,`level`,`user_id`, @header_hash, @signature, @mrkl_root)\n\t\t\tSET `header_hash` = UNHEX(@header_hash),\n\t\t\t\t   `signature` = UNHEX(@signature),\n\t\t\t\t   `mrkl_root` = UNHEX(@mrkl_root)\n\t\t\t");
    unlink($file);
    // иногда не вставлялось, т.к. уже что-то было в testblock . добавил REPLACE
    debug_print('AffectedRows=' . $db->getAffectedRows(), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    /// #######################################
    // Отмечаем транзакции, которые попали в transactions_testblock
    // Пока для эксперимента
    // если не отмечать, то получается, что и в transactions_testblock и в transactions будут провернные тр-ии, которые откатятся дважды
    if ($used_transactions) {
        $used_transactions = substr($used_transactions, 0, -1);
        $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tUPDATE `" . DB_PREFIX . "transactions`\n\t\t\t\tSET `used`=1\n\t\t\t\tWHERE `hash` IN ({$used_transactions})\n\t\t\t\t");
        // для теста тупо удаляем, т.к. она уже есть в transactions_testblock
        /*  $db->query( __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__, "
        				DELETE FROM `".DB_PREFIX."transactions`
        				WHERE `hash` IN ({$used_transactions})
        				");*/
    }
    // ############################################
    main_unlock();
    debug_print('end<<<<<<<<<<<<<<<<<<<<<<<', __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    unset($testBlock, $data, $for_sign, $mrkl_root_binary, $mrkl_root, $mrkl_array, $data_hex, $row, $transactions);
    //ob_save();
    sleep(1);
    // временно
    //exit;
} while (true);
Exemplo n.º 3
0
 public function __construct($db, $wo_lock = false)
 {
     if ($wo_lock) {
         $this->wo_lock = true;
     } else {
         $this->wo_lock = false;
     }
     $this->db = $db;
     /*// получаем наш miner_id и приватный ключ нода
     		$this->my_table = $this->db->query( __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__,"
     				SELECT `user_id`,
     							 `miner_id` ,
     							 `private_key`
     				FROM `".DB_PREFIX.MY_PREFIX."my_table`
     				LEFT JOIN `my_node_keys` ON 1=1
     				WHERE `block_id` = (SELECT max(`block_id`) FROM `".DB_PREFIX.MY_PREFIX."my_node_keys`)
     				", 'fetch_array' );*/
     // print 'testblock my_table';
     //print_r($this->my_table);
     if (!$this->wo_lock) {
         main_lock();
     }
     // последний успешно записанный блок
     $this->prev_block = $this->db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT LOWER(HEX(`hash`)) as `hash`,\n\t\t\t\t\t\t\t LOWER(HEX(`head_hash`)) as `head_hash`,\n\t\t\t\t\t\t\t `block_id`,\n\t\t\t\t\t\t\t `time`,\n\t\t\t\t\t\t\t `level`\n\t\t\t\tFROM `" . DB_PREFIX . "info_block`\n\t\t\t\t", 'fetch_array');
     // print 'testblock prev_block';
     //print_r($this->prev_block);
     // общее кол-во майнеров.
     $max_miner_id = $this->db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT max(`miner_id`)\n\t\t\t\tFROM `" . DB_PREFIX . "miners`\n\t\t\t\t", 'fetch_one');
     $i = 0;
     do {
         // если майнера заморозили то у него исчезает miner_id, чтобы не попасть на такой пустой miner_id
         // нужно пербирать энтропию, пока не дойдем до существующего miner_id
         if ($i == 0) {
             $entropy = self::get_entropy($this->prev_block['head_hash']);
         } else {
             $block_id = $this->prev_block['block_id'] - $i;
             if ($block_id < 1) {
                 break;
             }
             // bug fixed
             //if ($this->prev_block['block_id']>10) {
             $new_head_hash = $this->db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\t\t\tSELECT LOWER(HEX(`head_hash`)) as `head_hash`\n\t\t\t\t\t\t\tFROM `" . DB_PREFIX . "block_chain`\n\t\t\t\t\t\t\tWHERE `id` = {$block_id}\n\t\t\t\t\t\t\t", 'fetch_one');
             $entropy = self::get_entropy($new_head_hash);
             /*}
             		else {
             			$entropy = $this->db->query( __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__,"
             				SELECT `head_hash`
             				FROM `".DB_PREFIX."block_chain`
             				WHERE `id` = {$block_id}
             				", 'fetch_one' );
             		}*/
         }
         debug_print('$entropy=' . $entropy, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
         debug_print('$max_miner_id=' . $max_miner_id, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
         $cur_miner_id = self::get_block_generator_miner_id($max_miner_id, $entropy);
         // получим ID юзера по его miner_id
         $this->cur_user_id = $this->db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\tSELECT `user_id`\n\t\t\t\t\tFROM `" . DB_PREFIX . "miners_data`\n\t\t\t\t\tWHERE `miner_id` = {$cur_miner_id}\n\t\t\t\t\t", 'fetch_one');
         $i++;
     } while (!$this->cur_user_id);
     $collective = get_my_users_ids($db, true);
     debug_print('$collective = ' . print_r($collective, true), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
     // в сингл-моде будет только $my_miners_ids[0]
     $my_miners_ids = get_my_miners_ids($this->db, $collective);
     debug_print('$my_miners_ids = ' . print_r($my_miners_ids, true), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
     // есть ли кто-то из нашего пула (или сингл-мода), кто находится на 0-м уровне
     if (in_array($cur_miner_id, $my_miners_ids)) {
         $this->level = 0;
         $this->levels_range[0][1] = $this->levels_range[0][0] = 1;
         $this->miner_id = $cur_miner_id;
     } else {
         $this->levels_range = self::get_block_generator_miner_id_range($cur_miner_id, $max_miner_id);
         debug_print($this->levels_range, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
         if ($my_miners_ids) {
             list($this->miner_id, $this->level) = $this->find_miner_id_level($my_miners_ids, $this->levels_range);
         } else {
             $this->level = 'NULL';
             // у нас нет уровня, т.к. пуст $my_miners_ids, т.е. на сервере нет майнеров
             $this->miner_id = 0;
         }
     }
     $this->user_id = $this->db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT `user_id`\n\t\t\t\tFROM `" . DB_PREFIX . "miners_data`\n\t\t\t\tWHERE `miner_id` = {$this->miner_id}\n\t\t\t\t", 'fetch_one');
     debug_print('$this->level =' . $this->level, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
     debug_print('$this->miner_id =' . $this->miner_id, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
     debug_print('$this->user_id =' . $this->user_id, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
     if (!$this->wo_lock) {
         main_unlock();
     }
     self::$_instance = $this;
 }