Esempio n. 1
0
    $my_miner_id = get_my_miner_id($db);
    // если юзер уже майнер, то у него должно быть настроено точное время
    if ($my_miner_id) {
        $diff = intval(ntp_time());
        if ($diff > $variables_['alert_error_time']) {
            $lng['alert_time'] = str_ireplace('[sec]', $diff, $lng['alert_time']);
            echo "\n\t\t\t\t\t <div class=\"alert alert-danger alert-dismissable\" style='margin-top: 30px'><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">×</button>\n\t\t\t\t     <h4>Warning!</h4>\n\t\t\t\t     <div>{$lng['alert_time']}</div>\n\t\t\t\t     </div>\n\t\t\t\t     ";
        }
    }
}
if (empty($_SESSION['restricted'])) {
    // после обнуления таблиц my_node_key будет пуст
    // получим время из последнего блока
    $last_block_bin = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT `data`\n\t\t\tFROM `" . DB_PREFIX . "block_chain`\n\t\t\tORDER BY `id` DESC\n\t\t\tLIMIT 1\n\t\t\t", 'fetch_one');
    ParseData::string_shift($last_block_bin, 5);
    $block_time = ParseData::binary_dec_string_shift($last_block_bin, 4);
    // дождемся загрузки свежих блоков
    // if (time() - $block_time < 600) { закомменчено, т.к. при ручном откате до какого-то блока время будет старое
    $my_node_key = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT `private_key`\n\t\t\t\tFROM `" . DB_PREFIX . MY_PREFIX . "my_node_keys`\n\t\t\t\tWHERE `block_id` > 0\n\t\t\t\tLIMIT 1\n\t\t\t\t", 'fetch_one');
    $my_miner_id = get_my_miner_id($db);
    if (!$my_node_key && $my_miner_id > 0) {
        echo "\n\t\t\t\t\t <div class=\"alert alert-danger alert-dismissable\" style='margin-top: 30px'><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">×</button>\n\t\t\t\t     <h4>Warning!</h4>\n\t\t\t\t     <div>{$lng['alert_change_node_key']}</div>\n\t\t\t\t     </div>\n\t\t\t\t     ";
    }
    //}
}
// просто информируем, что в данном разделе у юзера нет прав
$skip_community = array('node_config', 'nulling', 'start_stop');
$skip_restricted_users = array('node_config', 'change_node_key', 'nulling', 'start_stop', 'cash_requests_in', 'cash_requests_out', 'upgrade', 'notifications', 'interface');
if (!node_admin_access($db) && in_array($tpl_name, $skip_community) || !empty($_SESSION['restricted']) && in_array($tpl_name, $skip_restricted_users)) {
    echo "\n\t\t\t  <div class=\"alert alert-danger alert-dismissable\" style='margin-top: 30px'><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">×</button>\n\t\t\t  <h4>Warning!</h4>\n\t\t\t  <div>{$lng['permission_denied']}</div>\n\t\t\t  </div>\n\t\t\t  ";
}
Esempio n. 2
0
 curl_close($ch);
 /*
 в ответ получаем:
 BLOCK_ID   				       4
 TIME       					       4
 USER_ID                         5
 SIGN                               от 128 до 512 байт. Подпись от TYPE, BLOCK_ID, PREV_BLOCK_HASH, TIME, USER_ID, LEVEL, MRKL_ROOT
 Размер всех тр-ий, размер 1 тр-ии, тело тр-ии.
 Хэши три-ий (порядок тр-ий)
 */
 debug_print('$send_data=' . $send_data, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
 debug_print('$binary_data=' . $binary_data, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
 // Разбираем полученные бинарные данные.
 $new_testblock['block_id'] = ParseData::binary_dec_string_shift($binary_data, 4);
 $new_testblock['time'] = ParseData::binary_dec_string_shift($binary_data, 4);
 $new_testblock['user_id'] = ParseData::binary_dec_string_shift($binary_data, 5);
 $sign_size = ParseData::decode_length($binary_data);
 $new_testblock['signature'] = ParseData::string_shift($binary_data, $sign_size);
 $new_testblock['signature_hex'] = bin2hex($new_testblock['signature']);
 debug_print($new_testblock, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
 // недостающие тр-ии
 $length = ParseData::decode_length($binary_data);
 // размер всех тр-ий
 $tr_binary = ParseData::string_shift($binary_data, $length);
 do {
     // берем по одной тр-ии
     $length = ParseData::decode_length($tr_binary);
     print '$length=' . $length . "\n";
     if ($length == 0) {
         break;
     }
Esempio n. 3
0
debug_print('$encrypted_data=' . $encrypted_data, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
debug_print('$encrypted_data=' . bin2hex($encrypted_data), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
// извлечем ключ, декодируем его и декодируем им данные
$binary_tx = decrypt_data($encrypted_data, $db);
if (substr($binary_tx, 0, 7) == '[error]') {
    die($binary_tx);
}
//debug_print('$binary_tx='.$binary_tx, __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__);
list(, $tx_hex) = unpack("H*", $binary_tx);
$tx_hash = md5($binary_tx);
$variables = ParseData::get_variables($db, array('max_tx_size'));
// проверим размер
if (strlen($binary_tx) > $variables['max_tx_size']) {
    die("error tx size");
}
$block_data['type'] = ParseData::binary_dec_string_shift($binary_tx, 1);
$block_data['time'] = ParseData::binary_dec_string_shift($binary_tx, 4);
$size = ParseData::decode_length($binary_tx);
$block_data['user_id'] = ParseData::string_shift($binary_tx, $size);
if ($block_data['user_id'] == 1) {
    $high_rate = 1;
} else {
    $high_rate = 0;
}
// заливаем тр-ию в БД
$data = "{$tx_hash}\t{$high_rate}\t{$tx_hex}";
debug_print("data={$data}", __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
$file = save_tmp_644('FTB', $data);
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tLOAD DATA LOCAL INFILE  '{$file}'\n\t\t\tIGNORE INTO TABLE `" . DB_PREFIX . "queue_tx`\n\t\t\tFIELDS TERMINATED BY '\t'\n\t\t\t(@hash, `high_rate`, @data)\n\t\t\tSET  `hash` = UNHEX(@hash),\n\t\t\t\t    `data` = UNHEX(@data)\n\t\t\t");
unlink($file);
//debug_print($db->printsql()."\ngetAffectedRows=".$db->getAffectedRows(),  __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__);
Esempio n. 4
0
function get_my_notice_data()
{
    global $db, $lng;
    if (empty($_SESSION['restricted'])) {
        $data = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, '
				SELECT `user_id`,
							 `miner_id`,
							 `status`
				FROM `' . DB_PREFIX . MY_PREFIX . 'my_table`
				', 'fetch_array');
        if (!$data['user_id']) {
            $tpl['account_status'] = 'searching';
        } else {
            if ($data['status'] == 'bad_key') {
                $tpl['account_status'] = 'bad_key';
            } else {
                if ($data['miner_id']) {
                    $tpl['account_status'] = 'miner';
                } else {
                    if ($data['user_id']) {
                        $tpl['account_status'] = 'user';
                    }
                }
            }
        }
    } else {
        // user_id уже есть, т.к. мы смогли зайти в урезанном режиме по паблик-кею
        // проверим, может есть что-то в miners_data
        $user_id = intval($_SESSION['user_id']);
        $status = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT `status`\n\t\t\t\tFROM `" . DB_PREFIX . "miners_data`\n\t\t\t\tWHERE `user_id` = {$user_id}\n\t\t\t\tLIMIT 1\n\t\t\t\t", 'fetch_one');
        if ($status) {
            $tpl['account_status'] = $status;
        } else {
            $tpl['account_status'] = 'user';
        }
    }
    $tpl['account_status'] = $lng['status_' . $tpl['account_status']];
    $confirmed_block_id = get_confirmed_block_id($db);
    $confirmed_block_id = $confirmed_block_id ? $confirmed_block_id : 1;
    // получим время из последнего подвержденного блока
    $last_block_bin = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT `data`\n\t\t\tFROM `" . DB_PREFIX . "block_chain`\n\t\t\tWHERE `id` = {$confirmed_block_id}\n\t\t\tLIMIT 1\n\t\t\t", 'fetch_one');
    ParseData::string_shift($last_block_bin, 1);
    // уберем тип
    $block_id = ParseData::binary_dec_string_shift($last_block_bin, 4);
    $block_time = ParseData::binary_dec_string_shift($last_block_bin, 4);
    $tpl['time_last_block'] = date('d-m-Y H:i:s', $block_time);
    $tpl['time_last_block_int'] = $block_time;
    $tpl['cur_block_id'] = $block_id;
    $tpl['connections'] = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT count(*)\n\t\t\tFROM `" . DB_PREFIX . "nodes_connection`\n\t\t\t", 'fetch_one');
    if (time() - $block_time > 1800) {
        $tpl['main_status'] = $lng['downloading_blocks'];
        $tpl['main_status_complete'] = 0;
    } else {
        $tpl['main_status'] = $lng['downloading_complete'];
        $tpl['main_status_complete'] = 1;
    }
    return $tpl;
}