예제 #1
0
<?php

if (!defined('DC')) {
    die("!defined('DC')");
}
$tpl['data']['type'] = 'change_geolocation';
$tpl['data']['type_id'] = ParseData::findType($tpl['data']['type']);
$tpl['data']['time'] = time();
$tpl['data']['user_id'] = $user_id;
// уведомления
$tpl['alert'] = @$_REQUEST['parameters']['alert'];
if (empty($_SESSION['restricted'])) {
    $tpl['geolocation'] = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, '
			SELECT `geolocation`
			FROM `' . DB_PREFIX . MY_PREFIX . 'my_table`
			 ', 'fetch_one');
}
if (!$tpl['geolocation']) {
    $tpl['geolocation'] = '39.94887, -75.15005';
}
$x = explode(', ', $tpl['geolocation']);
$tpl['geolocation_lat'] = $x[0];
$tpl['geolocation_lon'] = $x[1];
$tpl['country'] = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `country`\n\t\tFROM `" . DB_PREFIX . "miners_data`\n\t\tWHERE `user_id` = {$user_id}\n\t\t", 'fetch_one');
$tpl['countries'] = $countries;
$tpl['variables'] = ParseData::get_variables($db, array('limit_change_geolocation', 'limit_change_geolocation_period'));
$tpl['limits_text'] = str_ireplace(array('[limit]', '[period]'), array($tpl['variables']['limit_change_geolocation'], $tpl['periods'][$tpl['variables']['limit_change_geolocation_period']]), $lng['geolocation_limits_text']);
require_once ABSPATH . 'templates/geolocation.tpl';
예제 #2
0
            print '0';
        }
        print "</td>";
        //print "<td><div style=\"width: 300px; height: 40px; overflow: auto; background-color: #f2dede\">{$block_data['sign']}</div></td>";
        print "</tr>";
    }
    print '</table>';
} else {
    if ($block_id) {
        print '<table class="table">';
        $row = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT `data`,\n\t\t\t\t\t\t `hash`\n\t\t\tFROM `" . DB_PREFIX . "block_chain`\n\t\t\tWHERE `id` = {$block_id}\n\t\t\tLIMIT 1\n\t\t\t", 'fetch_array');
        $bin_to_hex_array = array('sign', 'public_key', 'encrypted_message', 'comment', 'bin_public_keys');
        //$hash = substr(bin2hex($row['hash']), 0, 8);
        $hash = bin2hex($row['hash']);
        $binary_data = $row['data'];
        $parsedata = new ParseData($binary_data, $db);
        $parsedata->ParseData_tmp();
        $block_data = $parsedata->block_data;
        $tx_array = $parsedata->tx_array;
        $block_data['sign'] = bin2hex($block_data['sign']);
        print "<tr><td><strong>Block_id</strong></strong></td><td>{$block_data['block_id']}</td></tr>";
        print "<tr><td><strong>Hash</strong></td><td>{$hash}</td></tr>";
        print "<tr><td><strong>Time</strong></td><td>" . date('d-m-Y H:i:s', $block_data['time']) . " / {$block_data['time']}</td></tr>";
        print "<tr><td><strong>User_id</strong></td><td>{$block_data['user_id']}</td></tr>";
        print "<tr><td><strong>Level</strong></td><td>{$block_data['level']}</td></tr>";
        print "<tr><td><strong>Sign</strong></td><td>" . chunk_split($block_data['sign'], 130) . "</td></tr>";
        if ($tx_array) {
            //print sizeof($tx_array);
            print "<tr><td><strong>Transactions</strong></td><td><div><pre>";
            for ($i = 0; $i < sizeof($tx_array); $i++) {
                foreach ($tx_array[$i] as $k => $v) {
예제 #3
0
     // хосты могут еще не успеть набраться
     if (!$hosts) {
         sleep(1);
         continue;
     }
 } else {
     // защищеннй режим
     $node_data = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT `node_public_key`,\n\t\t\t\t\t\t\t  `host`\n\t\t\t\tFROM `" . DB_PREFIX . "miners_data`\n\t\t\t\tWHERE `user_id` = {$my_config['static_node_user_id']}\n\t\t\t\t", 'fetch_array');
     $hosts[] = array('host' => $my_config['local_gate_ip'], 'node_public_key' => $node_data['node_public_key'], 'user_id' => $my_config['static_node_user_id']);
 }
 debug_print($hosts, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
 $my_users_ids = get_my_users_ids($db);
 $my_miners_ids = get_my_miners_ids($db, $my_users_ids);
 // если среди тр-ий есть смена нодовского ключа, то слать через отправку хэшей с последющей отдачей данных может не получиться
 // т.к. при некорректном нодовском ключе придет зашифрованый запрос на отдачу данных, а мы его не сможем расшифровать т.к. ключ у нас неверный
 $change_node_key = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT count(*)\n\t\t\tFROM `" . DB_PREFIX . "transactions`\n\t\t\tWHERE `type` = " . ParseData::findType('change_node_key') . " AND\n\t\t\t\t\t\t `user_id` IN (" . implode(',', $my_users_ids) . ")\n\t\t\t", 'fetch_one');
 // если я майнер и работаю в обычном режиме, то должен слать хэши
 if ($my_miners_ids && !$my_config['local_gate_ip'] && !$change_node_key) {
     // опредлим, от кого будем слать
     $r = array_rand($my_miners_ids);
     $my_miner_id = $my_miners_ids[$r];
     $my_user_id = $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` = {$my_miner_id}\n\t\t\t\t", 'fetch_one');
     for ($i = 0; $i < sizeof($hosts); $i++) {
         $urls[$i] = array('url' => $hosts[$i]['host'] . 'gate_hashes.php', 'node_public_key' => $hosts[$i]['node_public_key'], 'user_id' => $hosts[$i]['user_id']);
     }
     //main_lock();
     // //возьмем хэш текущего блока и номер блока
     // //для теста ролбеков отключим на время
     $data = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT `block_id`,\n\t\t\t\t\t\t\t `hash`,\n\t\t\t\t\t\t\t `head_hash`\n\t\t\t\tFROM `" . DB_PREFIX . "info_block`\n\t\t\t\tWHERE `sent` = 0\n\t\t\t\t", 'fetch_array');
     debug_print($data, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
     //$data = ''; // //для тестов
예제 #4
0
curl_setopt($ch, CURLOPT_POSTFIELDS, 'data=' . urlencode($encrypted_data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$encrypted_tx_set = curl_exec($ch);
curl_close($ch);
debug_print('$encrypted_tx_set=' . $encrypted_tx_set, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
debug_print('$my_key=' . $my_key, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
$aes = new Crypt_AES();
$aes->setKey($my_key);
// теперь в $binary_tx будут обычные тр-ии
$binary_tx = $aes->decrypt($encrypted_tx_set);
unset($aes);
debug_print('$binary_tx=' . $binary_tx, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
// разберем полученные тр-ии
do {
    $tx_size = ParseData::decode_length($binary_tx);
    $tx_binary_data = ParseData::string_shift($binary_tx, $tx_size);
    debug_print('$tx_binary_data=' . $tx_binary_data, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    list(, $tx_hex) = unpack("H*", $tx_binary_data);
    if (!$tx_binary_data) {
        continue;
    }
    // проверим размер
    if (strlen($tx_binary_data) > $variables['max_tx_size']) {
        debug_print('strlen($binary_tx) > $variables[max_tx_size]', __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
        die("error tx size");
    }
    // точно ли выдали то
    /*if ( md5($tx_binary_data) != $new_data['tx_hash'] ) {
    		debug_print("error tx_hash (".md5($tx_binary_data)."!={$new_data['tx_hash']})", __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__);
    		die ("error tx_hash (".md5($tx_binary_data)."!={$new_data['tx_hash']})");
    	}*/
예제 #5
0
파일: get_tx.php 프로젝트: scuba323/dcoin
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
require_once ABSPATH . 'includes/errors.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
$encrypted_data = $_REQUEST['data'];
//debug_print("encrypted_data={$encrypted_data}", __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__);
$binary_tx_hashes = decrypt_data($encrypted_data, $db, $decrypted_key);
if (substr($binary_tx_hashes, 0, 7) == '[error]') {
    die($binary_tx_hashes);
}
//debug_print("binary_tx_hashes={$binary_tx_hashes}", __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__);
$binary_tx = '';
// Разбираем список транзакций
do {
    list(, $tx_hash) = unpack("H*", string_shift($binary_tx_hashes, 16));
    if (!$tx_hash) {
        continue;
    }
    $tx = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT `data`\n\t\t\tFROM `" . DB_PREFIX . "transactions`\n\t\t\tWHERE `hash` = 0x{$tx_hash}\n\t\t\t", 'fetch_one');
    if ($tx) {
        $binary_tx .= ParseData::encode_length_plus_data($tx);
    }
} while ($binary_tx_hashes);
// шифруем тр-ии
$aes = new Crypt_AES();
$aes->setKey($decrypted_key);
$encrypted_data = $aes->encrypt($binary_tx);
unset($aes);
//debug_print("decrypted_key={$decrypted_key}", __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__);
//debug_print("encrypted_data={$encrypted_data}", __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__);
print $encrypted_data;
예제 #6
0
//require_once( ABSPATH . 'includes/errors.php' );
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
$user_id = intval($_REQUEST['user_id']);
if (!check_input_data($user_id, 'int')) {
    die('error user_id');
}
$lang = get_lang();
require_once ABSPATH . 'lang/' . $lang . '.php';
$sec = 3600 * 24 * 365;
$prognosis = array();
$counters_ids = array();
$miners_data = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT *\n\t\tFROM `" . DB_PREFIX . "miners_data`\n\t\tWHERE `user_id` = {$user_id}\n\t\tLIMIT 1\n\t\t", 'fetch_array');
// получим ID майнеров, у которых лежат фото нужного нам юзера
$miners_ids = ParseData::get_miners_keepers($miners_data['photo_block_id'], $miners_data['photo_max_miner_id'], $miners_data['miners_keepers'], true);
$hosts = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `host`\n\t\tFROM `" . DB_PREFIX . "miners_data`\n\t\tWHERE `miner_id` IN (" . implode(',', $miners_ids) . ")\n\t\t", 'array');
$currency_list = get_currency_list($db);
/*
 * Обещанные
 * */
get_promised_amounts($user_id);
if (!empty($tpl['promised_amount_list_gen'][72])) {
    $data = $tpl['promised_amount_list_gen'][72];
} else {
    if (!empty($tpl['promised_amount_list_gen'][72])) {
        $data = $tpl['promised_amount_list_gen'][72];
    } else {
        if (!empty($tpl['promised_amount_list_gen'][23])) {
            $data = $tpl['promised_amount_list_gen'][23];
        } else {
예제 #7
0
<?php

if (!defined('DC')) {
    die("!defined('DC')");
}
// уведомления
$tpl['alert'] = @$_REQUEST['parameters']['alert'];
$tpl['currency_list'] = get_currency_list($db);
$tpl['currency_id'] = intval(@$_REQUEST['parameters']['currency_id']);
if (!$tpl['currency_id']) {
    $tpl['currency_id'] = 150;
}
if (empty($_SESSION['restricted'])) {
    // то, что еще не попало в блоки.
    $res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, '
			SELECT *
			FROM `' . DB_PREFIX . MY_PREFIX . 'my_promised_amount`
			');
    while ($row = $db->fetchArray($res)) {
        $tpl['promised_amount_list']['my_pending'][] = $row;
    }
}
$tpl['variables'] = ParseData::get_all_variables($db);
get_promised_amounts($user_id);
$tpl['limits_text'] = str_ireplace(array('[limit]', '[period]'), array($tpl['variables']['limit_promised_amount'], $tpl['periods'][$tpl['variables']['limit_promised_amount_period']]), $lng['limits_text']);
$tpl['last_tx'] = get_last_tx($user_id, types_to_ids(array('new_promised_amount', 'change_promised_amount', 'del_promised_amount', 'for_repaid_fix', 'actualization_promised_amounts', 'mining')));
if (!empty($tpl['last_tx'])) {
    $tpl['last_tx_formatted'] = make_last_txs($tpl['last_tx']);
}
require_once ABSPATH . 'templates/promised_amount_list.tpl';
예제 #8
0
             $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\t\tUPDATE `" . DB_PREFIX . "my_table`\n\t\t\t\t\t\tSET `user_id`={$user_id},\n\t\t\t\t\t\t\t   `status` = 'user'\n\t\t\t\t\t\t");
         } else {
             $error = 1;
         }
     } else {
         $error = 1;
     }
 } else {
     $ini_array = parse_ini_file(ABSPATH . "config.ini", true);
     if ($ini_array['main']['sign_hash'] == 'ip') {
         $hash = md5($_SERVER['REMOTE_ADDR']);
     } else {
         $hash = md5($_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']);
     }
     $for_sign = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\tSELECT `data`\n\t\t\t\t\tFROM `" . DB_PREFIX . "authorization`\n\t\t\t\t\tWHERE `hash` = 0x{$hash}\n\t\t\t\t\t", 'fetch_one');
     $error = ParseData::checkSign($public_key, $for_sign, $sign, true);
 }
 if ($error) {
     $result = 0;
 } else {
     session_start();
     define('MY_PREFIX', '');
     $my_user_id = get_my_user_id($db);
     unset($_SESSION['restricted']);
     // убираем ограниченный режим
     $_SESSION['user_id'] = $my_user_id;
     if (!$_SESSION['user_id']) {
         $_SESSION['user_id'] = 'wait';
     } else {
         $_SESSION['public_key'] = get_user_public_key2($my_user_id);
     }
예제 #9
0
         //debug_print($db->printsql(), __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__);
         $LOG_MARKER = "Вилка на {$block_id}. Откатываем по фронту все свежие тр-ии. [{$current_block_id}]";
         // откатываем по фронту все свежие тр-ии
         $parsedata = new ParseData($transactions, $db);
         $parsedata->ParseDataRollbackFront();
         unset($parsedata);
     }
     $LOG_MARKER = "Вилка на {$block_id}";
     rollback_transactions_testblock($db, true);
     $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\tTRUNCATE TABLE `" . DB_PREFIX . "testblock`\n\t\t\t\t\t");
 }
 //print '$binary_block_full='.$binary_block_full."\n";
 // теперь у нас в таблицах всё тоже самое, что у нода, у которого качаем блок
 // и можем этот блок проверить и занести в нашу БД
 $LOG_MARKER = "new block_id = " . $block_id;
 $parsedata = new ParseData($binary_block_full, $db);
 $error = $parsedata->ParseDataFull();
 debug_print("parsedata->block_data " . print_r_hex($parsedata->block_data), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
 if (!$error) {
     $parsedata->insert_into_blockchain();
 }
 unset($parsedata);
 //main_unlock();
 // начинаем всё с начала уже с другими нодами. Но у нас уже могут быть новые блоки до $block_id, взятые от нода, которого с в итоге мы баним
 if ($error) {
     //$block_id--;
     nodes_ban($db, $max_block_id_user_id, '$block_id=' . $block_id . "\n" . $error . "\n" . __FILE__ . ', ' . __LINE__ . ', ' . __FUNCTION__ . ', ' . __CLASS__ . ', ' . __METHOD__);
     debug_print("[[error]] ## пробуем взять этот же блок у другого нода ParseDataFull error={$error}", __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
     //ob_save();
     main_unlock();
     sleep(1);
예제 #10
0
    TYPE (0-блок, 1-тр-я)     1
    BLOCK_ID   				       4
    TIME       					       4
    USER_ID                         5
    LEVEL                              1
    SIGN                               от 128 до 512 байт. Подпись от TYPE, BLOCK_ID, PREV_BLOCK_HASH, TIME, USER_ID, LEVEL, MRKL_ROOT
    Далее - тело блока (Тр-ии)
    */
    //$merkle_root = $testBlock->merkle_tree_root($merkle_array);
    //$merkle_root_binary = pack( "H*", $merkle_root);
    $new_block_id_binary = dec_binary($new_testblock['block_id'], 4);
    //$prev_block_hash_binary = $testBlock->block_info['hash'];
    $time_binary = dec_binary($new_testblock['time'], 4);
    $user_id_binary = dec_binary($new_testblock['user_id'], 5);
    $level_binary = dec_binary($testBlock->level, 1);
    $new_block_header = dec_binary(0, 1) . $new_block_id_binary . $time_binary . $user_id_binary . $level_binary . ParseData::encode_length_plus_data($new_testblock['signature']);
    $new_block = $new_block_header . $transactions;
    list(, $new_block_hex) = unpack("H*", $new_block);
    //testblock_lock();
    // и передаем блок для обратотки через скрипт queue_parser_testblock.php
    // т.к. есть запросы к log_time_, а их можно выполнять только по очереди
    $file = save_tmp_644('FQT', "{$new_header_hash}\t{$new_block_hex}");
    $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\tLOAD DATA LOCAL INFILE  '{$file}'\n\t\t\t\t\tREPLACE INTO TABLE `" . DB_PREFIX . "queue_testblock`\n\t\t\t\t\tFIELDS TERMINATED BY '\t'\n\t\t\t\t\t(@head_hash, @data)\n\t\t\t\t\tSET `head_hash` = UNHEX(@head_hash),\n\t\t\t\t\t\t   `data` = UNHEX(@data)\n\t\t\t\t\t");
    unlink($file);
    //debug_print($db->printsql()."\nAffectedRows=".$db->getAffectedRows() , __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__);
    //main_unlock();
} else {
    //testblock_lock();
    // если всё нормально, то пишем в таблу testblock новые данные
    $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tUPDATE `" . DB_PREFIX . "testblock`\n\t\t\tSET\n\t\t\t\t\t`time` = {$new_testblock['time']},\n\t\t\t\t\t`user_id` = {$new_testblock['user_id']},\n\t\t\t\t\t`header_hash`= 0x{$new_header_hash},\n\t\t\t\t\t`signature` = 0x{$new_testblock['signature_hex']}\n\t\t\t\t");
    //debug_print($db->printsql()."\nAffectedRows=".$db->getAffectedRows() , __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__);
예제 #11
0
        $for_user_id = $_REQUEST['for_user_id'];
        $new_public_key = hextobin($_REQUEST['new_public_key']);
        $data = dec_binary($type, 1) . dec_binary($time, 4) . ParseData::encode_length_plus_data($user_id) . ParseData::encode_length_plus_data($for_user_id) . ParseData::encode_length_plus_data($new_public_key) . $bin_signatures;
        break;
    case 'change_arbitrator_list':
        $data = dec_binary($type, 1) . dec_binary($time, 4) . ParseData::encode_length_plus_data($user_id) . ParseData::encode_length_plus_data($_REQUEST['arbitration_trust_list']) . $bin_signatures;
        break;
    case 'money_back_request':
        $data = dec_binary($type, 1) . dec_binary($time, 4) . ParseData::encode_length_plus_data($user_id) . ParseData::encode_length_plus_data($_REQUEST['order_id']) . ParseData::encode_length_plus_data(hextobin($_REQUEST['arbitrator_enc_text'][0])) . ParseData::encode_length_plus_data(hextobin($_REQUEST['arbitrator_enc_text'][1])) . ParseData::encode_length_plus_data(hextobin($_REQUEST['arbitrator_enc_text'][2])) . ParseData::encode_length_plus_data(hextobin($_REQUEST['arbitrator_enc_text'][3])) . ParseData::encode_length_plus_data(hextobin($_REQUEST['arbitrator_enc_text'][4])) . ParseData::encode_length_plus_data(hextobin($_REQUEST['seller_enc_text'])) . $bin_signatures;
        break;
    case 'change_seller_hold_back':
        $data = dec_binary($type, 1) . dec_binary($time, 4) . ParseData::encode_length_plus_data($user_id) . ParseData::encode_length_plus_data($_REQUEST['arbitration_days_refund']) . ParseData::encode_length_plus_data($_REQUEST['hold_back_pct']) . $bin_signatures;
        break;
    case 'money_back':
        $data = dec_binary($type, 1) . dec_binary($time, 4) . ParseData::encode_length_plus_data($user_id) . ParseData::encode_length_plus_data($_REQUEST['order_id']) . ParseData::encode_length_plus_data($_REQUEST['amount']) . $bin_signatures;
        break;
    case 'change_arbitrator_conditions':
        $data = dec_binary($type, 1) . dec_binary($time, 4) . ParseData::encode_length_plus_data($user_id) . ParseData::encode_length_plus_data($_REQUEST['conditions']) . ParseData::encode_length_plus_data($_REQUEST['url']) . $bin_signatures;
        break;
    case 'change_money_back_time':
        $data = dec_binary($type, 1) . dec_binary($time, 4) . ParseData::encode_length_plus_data($user_id) . ParseData::encode_length_plus_data($_REQUEST['order_id']) . ParseData::encode_length_plus_data($_REQUEST['days']) . $bin_signatures;
        break;
}
$hash = md5($data);
if (!in_array($_REQUEST['type'], array('new_pct', 'new_max_promised_amounts', 'new_reduction', 'votes_node_new_miner', 'new_max_other_currencies'))) {
    $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tINSERT INTO `" . DB_PREFIX . "transactions_status` (\n\t\t\t\t`hash`,\n\t\t\t\t`time`,\n\t\t\t\t`type`,\n\t\t\t\t`user_id`\n\t\t\t)\n\t\t\tVALUES (\n\t\t\t\t0x{$hash},\n\t\t\t\t" . time() . ",\n\t\t\t\t{$type},\n\t\t\t\t{$user_id}\n\t\t\t)");
}
$data = bin2hex($data);
$file = save_tmp_644('FSQ', "{$hash}\t{$data}");
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tLOAD DATA LOCAL INFILE  '{$file}' IGNORE INTO TABLE `" . DB_PREFIX . "queue_tx`\n\t\tFIELDS TERMINATED BY '\t'\n\t\t(@hash, @data)\n\t\tSET `data` = UNHEX(@data),\n\t\t\t   `hash` = UNHEX(@hash)\n\t\t");
unlink($file);
예제 #12
0
파일: fns-main.php 프로젝트: scuba323/dcoin
function types_to_ids($array)
{
    $new = array();
    for ($i = 0; $i < sizeof($array); $i++) {
        $new[] = ParseData::findType($array[$i]);
    }
    return $new;
}
}
$res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, '
		SELECT *
		FROM `' . DB_PREFIX . 'currency`
		');
while ($row = $db->fetchArray($res)) {
    if (isset($my_commission[$row['id']])) {
        $tpl['commission'][$row['id']] = $my_commission[$row['id']];
    } else {
        $tpl['commission'][$row['id']] = array(0.1, $tpl['currency_min'][$row['id']], 0);
    }
}
// для CF-проектов
$tpl['currency_list'][1000] = 'Crowdfunding';
if (isset($my_commission[1000])) {
    $tpl['commission'][1000] = $my_commission[1000];
} else {
    $tpl['commission'][1000] = array(0.1, 0.01, 0);
}
$tpl['conditions'] = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `conditions`\n\t\tFROM `" . DB_PREFIX . "arbitrator_conditions`\n\t\tWHERE `user_id` = {$user_id}\n\t\tLIMIT 1\n\t\t", 'fetch_one');
$tpl['conditions'] = json_decode($tpl['conditions'], true);
if (!$tpl['conditions']) {
    $tpl['conditions'][72] = array('0.01', '0', '0.01', '0', '0.1');
    $tpl['conditions'][23] = array('0.01', '0', '0.01', '0', '0.1');
}
$tpl['last_tx'] = get_last_tx($user_id, types_to_ids(array('change_arbitrator_conditions')), 3);
if (!empty($tpl['last_tx'])) {
    $tpl['last_tx_formatted'] = make_last_txs($tpl['last_tx']);
}
$tpl['pending_tx'] = @$pending_tx[ParseData::findType('change_arbitrator_conditions')];
require_once ABSPATH . 'templates/change_arbitrator_conditions.tpl';
예제 #14
0
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
// чтобы этот скрипт вызывался раз в 5 минут
upd_deamon_time($db);
// пишем свежие блоки в резервный блокчейн
$end_block_id = get_end_block_id();
$cur_block_id = get_block_id($db);
print $end_block_id . ' / ' . $cur_block_id;
if ($cur_block_id - 30 > $end_block_id) {
    $res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, '
			SELECT `id`, `data`
			FROM `' . DB_PREFIX . 'block_chain`
			WHERE `id` > ' . $end_block_id . ' AND `id` <= ' . ($cur_block_id - 30) . '
			ORDER BY `id`
			');
    while ($row = $db->fetchArray($res)) {
        $data = dec_binary($row['id'], 5) . ParseData::encode_length_plus_data($row['data']);
        $size_and_data = dec_binary(strlen($data), 5) . $data;
        file_put_contents(ABSPATH . 'public/blockchain', $size_and_data . dec_binary(strlen($size_and_data), 5), FILE_APPEND | LOCK_EX);
    }
}
$auto_reload = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `auto_reload`\n\t\tFROM `" . DB_PREFIX . "config`\n\t\t", 'fetch_one');
if ($auto_reload < 60) {
    exit;
}
// если main_lock висит более x минут, значит был какой-то сбой
$main_lock = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `lock_time`\n\t\tFROM `" . DB_PREFIX . "main_lock`\n\t\tWHERE `script_name` NOT IN ('my_lock', 'cleaning_db')\n\t\t", 'fetch_one');
if ($main_lock && time() - $auto_reload > $main_lock) {
    // на всякий случай пометим, что работаем
    $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tUPDATE `" . DB_PREFIX . "main_lock`\n\t\t\tSET `script_name` = 'cleaning_db'\n\t\t\t");
    $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tUPDATE `" . DB_PREFIX . "config`\n\t\t\tSET `pool_tech_works` = 1\n\t\t\t");
    $tables_array = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSHOW TABLES\n\t\t\t", 'array');
예제 #15
0
define('ABSPATH', dirname(__FILE__) . '/');
set_time_limit(0);
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
require_once ABSPATH . 'includes/errors.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
$data = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT *\n\t\t\tFROM `" . DB_PREFIX . "testblock`\n\t\t\tLIMIT 1\n\t\t\t", 'fetch_array');
$response_binary_data = dec_binary($data['block_id'], 4) . dec_binary($data['time'], 4) . dec_binary($data['user_id'], 5) . encode_length(strlen($data['signature'])) . $data['signature'];
// разбираем присланные данные
$binary_data = $_POST['data'];
$add_sql = '';
if ($binary_data) {
    $tr_array = array();
    // получим хэши тр-ий, которые надо исключить
    do {
        list(, $tr) = unpack("H*", ParseData::string_shift($binary_data, 16));
        // проверим
        if (!check_input_data($tr, 'md5')) {
            die('error md5 (' . $tr . ')');
        }
        $add_sql .= $tr . ',';
    } while ($binary_data);
    $add_sql = substr($add_sql, 0, -1);
    $add_sql = "WHERE `id` NOT IN ({$add_sql})";
}
// сами тр-ии
$transactions = '';
$res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `data`\n\t\tFROM `" . DB_PREFIX . "transactions_testblock`\n\t\t{$add_sql}\n\t\t");
while ($row = $db->fetchArray($res)) {
    $length = encode_length(strlen($row['data']));
    $transactions .= $length . $row['data'];
예제 #16
0
파일: points.php 프로젝트: scuba323/dcoin
<?php

if (!defined('DC')) {
    die("!defined('DC')");
}
$res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT *\n\t\tFROM `" . DB_PREFIX . "points_status`\n\t\tWHERE `user_id` = {$user_id}\n\t\tORDER BY `time_start` DESC\n\t\t");
while ($row = $db->fetchArray($res)) {
    $tpl['points_status'][] = $row;
}
$tpl['my_points'] = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `points`\n\t\tFROM `" . DB_PREFIX . "points`\n\t\tWHERE `user_id` = {$user_id}\n\t\t", 'fetch_one');
$tpl['my_points'] = intval($tpl['my_points']);
$tpl['variables'] = ParseData::get_variables($db, array('points_factor', 'limit_votes_complex_period'));
// среднее значение
$tpl['mean'] = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT sum(`points`)/count(`points`)\n\t\tFROM `" . DB_PREFIX . "points`\n\t\tWHERE `points` > 0\n\t\t", 'fetch_one');
$tpl['mean'] = round($tpl['mean'] * $tpl['variables']['points_factor']);
// есть ли тр-ия с голосованием votes_complex за послдение 4 недели
$count = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT count(`user_id`)\n\t\tFROM `" . DB_PREFIX . "votes_miner_pct`\n\t\tWHERE `user_id` = {$user_id} AND\n\t\t\t\t\t `time` > " . (time() - $tpl['variables']['limit_votes_complex_period'] * 2) . "\n\t\tLIMIT  1\n\t\t", 'fetch_one');
if ($count > 0) {
    $tpl['votes_ok'] = 'YES';
} else {
    $tpl['votes_ok'] = 'NO';
}
require_once ABSPATH . 'templates/points.tpl';
        main_unlock();
        exit;
    }
    debug_print($max_other_currencies_votes, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    $total_count_currencies = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT count(`id`)\n\t\t\tFROM `" . DB_PREFIX . "currency`\n\t\t\t", 'fetch_one');
    foreach ($max_other_currencies_votes as $currency_id => $count_and_votes) {
        $new_max_other_currencies[$currency_id] = get_max_vote($count_and_votes, 0, $total_count_currencies, 10);
    }
    if (get_community_users($db)) {
        $my_prefix = $testBlock->user_id . '_';
    } else {
        $my_prefix = '';
    }
    $node_private_key = get_node_private_key($db, $my_prefix);
    $json_data = json_encode($new_max_other_currencies);
    // подписываем нашим нод-ключем данные транзакции
    $data_for_sign = ParseData::findType('new_max_other_currencies') . ",{$time},{$my_user_id},{$json_data}";
    $rsa = new Crypt_RSA();
    $rsa->loadKey($node_private_key);
    $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
    $signature = $rsa->sign($data_for_sign);
    debug_print('$data_for_sign=' . $data_for_sign . "\n", __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    // создаем тр-ию. пишем $block_id, на момент которого были актуальны голоса в табле 'pct'
    $data = dec_binary(ParseData::findType('new_max_other_currencies'), 1) . dec_binary($time, 4) . ParseData::encode_length_plus_data($my_user_id) . ParseData::encode_length_plus_data($json_data) . ParseData::encode_length_plus_data($signature);
    $hash = ParseData::dsha256($data);
    insert_tx($data, $db);
    $new_tx_data['data'] = $data;
    $new_tx_data['hash'] = hextobin(md5($data));
    tx_parser($new_tx_data, true);
}
main_unlock();
예제 #18
0
$res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, '
		SELECT `id`,
					 `name`,
					 `full_name`,
					 `max_other_currencies`
		FROM `' . DB_PREFIX . 'currency`
		ORDER BY `full_name`
		');
while ($row = $db->fetchArray($res)) {
    $tpl['currency_list'][$row['id']] = $row;
    $tpl['currency_list_name'][$row['id']] = $row['name'];
}
$tpl['payment_systems'] = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, '
		SELECT `id`,
					 `name`
		FROM `' . DB_PREFIX . 'payment_systems`
		ORDER BY `name`
		', 'list', array('id', 'name'));
$res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `currency_id`,\n\t\t\t\t\t `amount`\n\t\tFROM `" . DB_PREFIX . "max_promised_amounts`\n\t\tWHERE `block_id` = 1\n\t\t");
while ($row = $db->fetchArray($res)) {
    $tpl['max_promised_amounts'][$row['currency_id']] = $row['amount'];
}
$res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `currency_id`,\n\t\t\t\t\t `amount`\n\t\tFROM `" . DB_PREFIX . "max_promised_amounts`\n\t\tWHERE `block_id` = (SELECT max(`block_id`) FROM `" . DB_PREFIX . "max_promised_amounts` ) OR `block_id` = 0\n\t\t");
while ($row = $db->fetchArray($res)) {
    $tpl['max_promised_amounts'][$row['currency_id']] = $row['amount'];
}
$tpl['variables'] = ParseData::get_variables($db, array('limit_promised_amount', 'limit_promised_amount_period'));
$tpl['limits_text'] = str_ireplace(array('[limit]', '[period]'), array($tpl['variables']['limit_promised_amount'], $tpl['periods'][$tpl['variables']['limit_promised_amount_period']]), $lng['limits_text']);
// валюта, которая выбрана с селект-боксе
$tpl['currency_id'] = 72;
require_once ABSPATH . 'templates/promised_amount_add.tpl';
예제 #19
0
파일: abuse.php 프로젝트: scuba323/dcoin
<?php

if (!defined('DC')) {
    die("!defined('DC')");
}
$tpl['data']['type'] = 'abuses';
$tpl['data']['type_id'] = ParseData::findType($tpl['data']['type']);
$tpl['data']['time'] = time();
$tpl['data']['user_id'] = $user_id;
$tpl['variables'] = ParseData::get_variables($db, array('limit_abuses', 'limit_abuses_period'));
$tpl['limits_text'] = str_ireplace(array('[limit]', '[period]'), array($tpl['variables']['limit_abuses'], $tpl['periods'][$tpl['variables']['limit_abuses_period']]), $lng['abuses_limits_text']);
require_once ABSPATH . 'templates/abuse.tpl';
예제 #20
0
        continue;
    }
    //print "id майнеров, которые на нашем уровне\n";
    debug_print($nodes_ids, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    $add_sql = '';
    for ($i = 0; $i < sizeof($nodes_ids); $i++) {
        $add_sql .= "{$nodes_ids[$i]},";
    }
    $add_sql = substr($add_sql, 0, strlen($add_sql) - 1);
    if (!$add_sql) {
        debug_print("continue", __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
        sleep(1);
        continue;
    }
    // получим хосты майнеров, которые на нашем уровне
    $res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\tSELECT `host`\n\t\t\t\t\tFROM `" . DB_PREFIX . "miners_data`\n\t\t\t\t\tWHERE `user_id` IN ({$add_sql})\n\t\t\t\t\t");
    while ($row = $db->fetchArray($res)) {
        $urls[]['url'] = $row['host'] . 'gate_testblock.php';
    }
    // шлем block_id, user_id, mrkl_root, signature
    $data = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT `block_id`,  `time`, `user_id`, `mrkl_root`, `signature`\n\t\t\tFROM `" . DB_PREFIX . "testblock`\n\t\t\tWHERE `status` = 'active'\n\t\t\t", 'fetch_array');
    //print_r($data);
    //print_R($urls);
    if ($data) {
        $data_binary = dec_binary($data['block_id'], 4) . dec_binary($data['time'], 4) . dec_binary($data['user_id'], 5) . $data['mrkl_root'] . ParseData::encode_length_plus_data($data['signature']);
        m_curl($urls, $data_binary, '', 'data', 30);
    }
    //else
    debug_print("END", __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    sleep(1);
} while (true);
예제 #21
0
파일: clear.php 프로젝트: scuba323/dcoin
if (!$argv) {
    die('browser');
}
define('DC', true);
// ****************************************************************************
// Чистим таблы
// ****************************************************************************
define('ABSPATH', dirname(dirname(__FILE__)) . '/');
set_time_limit(0);
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
require_once ABSPATH . 'includes/errors.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
main_lock();
$variables = ParseData::get_all_variables($db);
$current_block_id = get_block_id($db);
if (!$current_block_id) {
    main_unlock();
    exit;
}
// чистим log_transactions каждые 15 минут. Удаляем данные, которые старше 36 часов.
// Можно удалять и те, что старше rollback_blocks_2 + погрешность для времени транзакции (5-15 мин),
// но пусть будет 36 ч. - с хорошим запасом.
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tDELETE FROM `" . DB_PREFIX . "log_transactions`\n\t\tWHERE `time` < " . (time() - 86400 * 3) . "\n\t\t");
// через rollback_blocks_2 с запасом 1440 блоков чистим таблу log_votes где есть del_block_id
// при этом, если проверяющих будет мало, то табла может захламиться незаконченными голосованиями
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tDELETE FROM `" . DB_PREFIX . "log_votes`\n\t\tWHERE `del_block_id` < " . ($current_block_id - $variables['rollback_blocks_2'] - 1440) . " AND\n\t\t\t\t\t `del_block_id` > 0\n\t\t");
// через 1440 блоков чистим таблу wallets_buffer где есть del_block_id
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tDELETE FROM `" . DB_PREFIX . "wallets_buffer`\n\t\tWHERE `del_block_id` < " . ($current_block_id - $variables['rollback_blocks_2'] - 1440) . " AND\n\t\t\t\t\t `del_block_id` > 0\n\t\t");
// чистим все _log_time_
예제 #22
0
파일: gate_tx.php 프로젝트: scuba323/dcoin
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__);
예제 #23
0
<?php

if (!defined('DC')) {
    die("!defined('DC')");
}
$tpl['data']['credit_part_type'] = 'money_back_request';
$tpl['data']['credit_part_type_id'] = ParseData::findType($tpl['data']['credit_part_type']);
$tpl['data']['time'] = time();
$tpl['data']['user_id'] = $user_id;
$tpl['my_orders'] = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT *\n\t\tFROM `" . DB_PREFIX . "orders`\n\t\tWHERE `buyer` = {$user_id}\n\t\tORDER BY `time` DESC\n\t\tLIMIT 20\n\t\t", 'all_data');
$tpl['currency_list'] = get_currency_list($db);
$tpl['last_tx'] = get_last_tx($user_id, types_to_ids(array('change_seller_hold_back', 'money_back')), 3);
if (!empty($tpl['last_tx'])) {
    $tpl['last_tx_formatted'] = make_last_txs($tpl['last_tx']);
}
require_once ABSPATH . 'templates/arbitration_buyer.tpl';
예제 #24
0
if (!defined('DC')) {
    die("!defined('DC')");
}
$tpl['data']['type'] = 'change_seller_hold_back';
$tpl['data']['type_id'] = ParseData::findType($tpl['data']['type']);
$tpl['data']['time'] = time();
$tpl['data']['user_id'] = $user_id;
$tpl['hold_back'] = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `arbitration_days_refund`,\n\t\t\t\t\t `seller_hold_back_pct`\n\t\tFROM `" . DB_PREFIX . "users`\n\t\tWHERE `user_id` = {$user_id}\n\t\t", 'fetch_array');
$res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT *\n\t\tFROM `" . DB_PREFIX . "orders`\n\t\tWHERE `seller` = {$user_id}\n\t\tORDER BY `time` DESC\n\t\tLIMIT 20\n\t\t");
while ($row = $db->fetchArray($res)) {
    if ($row['status'] == 'refund') {
        if (empty($_SESSION['restricted'])) {
            $data = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\tSELECT `comment`,\n\t\t\t\t\t\t\t\t `comment_status`\n\t\t\t\t\tFROM `" . DB_PREFIX . MY_PREFIX . "my_comments`\n\t\t\t\t\tWHERE `id` = {$row['id']} AND\n\t\t\t\t\t\t\t\t `type` = 'seller'\n\t\t\t\t\tLIMIT 1\n\t\t\t\t\t", 'fetch_array');
            $row['comment'] = $data['comment'];
            $row['comment_status'] = $data['comment_status'];
        }
    }
    $tpl['my_orders'][] = $row;
}
if (empty($_SESSION['restricted'])) {
    $tpl['shop_data'] = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `shop_secret_key`,\n\t\t\t\t\t `shop_callback_url`\n\t\tFROM  `" . DB_PREFIX . MY_PREFIX . "my_table`\n\t\t", 'fetch_array');
}
$tpl['currency_list'] = get_currency_list($db);
$tpl['miner_id'] = (int) $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `miner_id`\n\t\tFROM `" . DB_PREFIX . "miners_data`\n\t\tWHERE `user_id` = {$user_id}\n\t\tLIMIT 1\n\t\t", 'fetch_one');
$tpl['last_tx'] = get_last_tx($user_id, types_to_ids(array('change_seller_hold_back', 'money_back')), 3);
if (!empty($tpl['last_tx'])) {
    $tpl['last_tx_formatted'] = make_last_txs($tpl['last_tx']);
}
$tpl['pending_tx'] = @$pending_tx[ParseData::findType('change_seller_hold_back')];
require_once ABSPATH . 'templates/arbitration_seller.tpl';
예제 #25
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  ";
}
예제 #26
0
main_lock();
$my_user_id = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\tSELECT `user_id`\n\t\t\t\t\tFROM `" . DB_PREFIX . MY_PREFIX . "my_table`\n\t\t\t\t\t", 'fetch_one');
$node_private_key = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\tSELECT `private_key`\n\t\t\t\t\tFROM `" . DB_PREFIX . MY_PREFIX . "my_node_keys`\n\t\t\t\t\tWHERE `block_id` = (SELECT max(`block_id`) FROM `" . DB_PREFIX . MY_PREFIX . "my_node_keys` )\n\t\t\t\t\t", 'fetch_one');
if (!$my_user_id || !$node_private_key) {
    main_unlock();
    exit;
}
require_once ABSPATH . 'phpseclib/Math/BigInteger.php';
require_once ABSPATH . 'phpseclib/Crypt/Random.php';
require_once ABSPATH . 'phpseclib/Crypt/Hash.php';
require_once ABSPATH . 'phpseclib/Crypt/RSA.php';
$rsa = new Crypt_RSA();
extract($rsa->createKey(1024));
$publickey = clear_public_key($publickey);
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tINSERT INTO  `" . DB_PREFIX . MY_PREFIX . "my_node_keys` (\n\t\t\t\t`public_key`,\n\t\t\t\t`private_key`\n\t\t\t)\n\t\t\tVALUES (\n\t\t\t\t0x{$publickey},\n\t\t\t\t'{$privatekey}'\n\t\t\t)");
$time = time();
// подписываем нашим нод-ключем данные транзакции
$data_for_sign = ParseData::findType('change_node_key') . ",{$time},{$my_user_id},{$publickey}";
$rsa = new Crypt_RSA();
$rsa->loadKey($node_private_key);
$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
$signature = $rsa->sign($data_for_sign);
print '$node_private_key=' . $node_private_key . "\n";
print '$data_for_sign=' . $data_for_sign . "\n";
print 'strlen($signature)=' . strlen($signature) . "\n";
print 'strlen($publickey)=' . strlen($publickey) . "\n";
// создаем новую транзакцию
$bin_public_key = hextobin($publickey);
$data = dec_binary(ParseData::findType('change_node_key'), 1) . dec_binary($time, 4) . encode_length(strlen($my_user_id)) . $my_user_id . encode_length(strlen($bin_public_key)) . $bin_public_key . encode_length(strlen($signature)) . $signature;
insert_tx($data, $db);
main_unlock();
예제 #27
0
<?php

if (!defined('DC')) {
    die("!defined('DC')");
}
$tpl['data']['type'] = 'change_key_close';
$tpl['data']['type_id'] = ParseData::findType($tpl['data']['type']);
$tpl['data']['time'] = time();
$tpl['data']['user_id'] = $user_id;
require_once ABSPATH . 'templates/change_key_close.tpl';
예제 #28
0
<?php

if (!defined('DC')) {
    die("!defined('DC')");
}
$tpl['data']['type'] = 'change_host';
$tpl['data']['type_id'] = ParseData::findType($tpl['data']['type']);
$tpl['data']['time'] = time();
$tpl['data']['user_id'] = $user_id;
$tpl['variables'] = ParseData::get_variables($db, array('limit_change_host', 'limit_change_host_period'));
if (empty($_SESSION['restricted'])) {
    $data = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, '
			SELECT `host`, `host_status`
			FROM `' . DB_PREFIX . MY_PREFIX . 'my_table`
			', 'fetch_array');
}
$status_array = array('my_pending' => $lng['local_pending'], 'approved' => $lng['status_approved']);
$tpl['host'] = $data['host'];
$tpl['host_status'] = $status_array[$data['host_status']];
$tpl['limits_text'] = str_ireplace(array('[limit]', '[period]'), array($tpl['variables']['limit_change_host'], $tpl['periods'][$tpl['variables']['limit_change_host_period']]), $lng['change_host_limits_text']);
require_once ABSPATH . 'templates/change_host.tpl';
예제 #29
0
 SIGN                               от 128 байта до 512 байт. Подпись от TYPE, BLOCK_ID, PREV_BLOCK_HASH, TIME, USER_ID, LEVEL, MRKL_ROOT
 Далее - тело блока (Тр-ии)
 */
 // подписываем нашим нод-ключем заголовок блока
 $rsa = new Crypt_RSA();
 $rsa->loadKey($node_private_key);
 $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
 //$rsa->setHash('sha256');
 $for_sign = "0,{$new_block_id},{$testBlock->prev_block['hash']},{$time},{$my_user_id},{$testBlock->level},{$mrkl_root}";
 debug_print('$for_sign=' . $for_sign, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
 $signature = $rsa->sign($for_sign);
 unset($rsa);
 list(, $signature_hex) = unpack("H*", $signature);
 debug_print('$signature_hex = ' . $signature_hex, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
 // хэш шапки блока. нужен для сравнивания с другими и у кого будет меньше - у того блок круче
 $header_hash = ParseData::dsha256("{$my_user_id},{$new_block_id},{$prev_head_hash}");
 debug_print("header_hash={$header_hash}", __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
 $data = "{$new_block_id}\t{$time}\t{$testBlock->level}\t{$my_user_id}\t{$header_hash}\t{$signature_hex}\t{$mrkl_root}";
 debug_print($data, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
 $file = save_tmp_644('FTB', $data);
 // для тестов получим что там есть
 $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
예제 #30
0
                debug_print('VOTE = NO', __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
            }
            // проходимся по всем нашим майнерам, если это пул и по одному, если это сингл-мод
            foreach ($intersect_my_miners as $my_miner_id) {
                $my_user_id = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\t\tSELECT `user_id`\n\t\t\t\t\t\tFROM `" . DB_PREFIX . "miners_data`\n\t\t\t\t\t\tWHERE `miner_id` = {$my_miner_id}\n\t\t\t\t\t\t", 'fetch_one');
                $community = get_community_users($db);
                if ($community) {
                    $my_prefix = $my_user_id . '_';
                } else {
                    $my_prefix = '';
                }
                $node_private_key = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\t\tSELECT `private_key`\n\t\t\t\t\t\tFROM `" . DB_PREFIX . "{$my_prefix}my_node_keys`\n\t\t\t\t\t\tWHERE `block_id` = (SELECT max(`block_id`) FROM `" . DB_PREFIX . "{$my_prefix}my_node_keys` )\n\t\t\t\t\t\t", 'fetch_one');
                $time = time();
                // подписываем нашим нод-ключем данные транзакции
                $data_for_sign = ParseData::findType('votes_node_new_miner') . ",{$time},{$my_user_id},{$row['vote_id']},{$vote}";
                $rsa = new Crypt_RSA();
                $rsa->loadKey($node_private_key);
                $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
                $signature = $rsa->sign($data_for_sign);
                debug_print('$data_for_sign=' . $data_for_sign, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
                // создаем новую транзакцию - подверждение, что фото скопировано и проверено.
                $data = dec_binary(30, 1) . dec_binary($time, 4) . ParseData::encode_length_plus_data($my_user_id) . ParseData::encode_length_plus_data($row['vote_id']) . ParseData::encode_length_plus_data($vote) . ParseData::encode_length_plus_data($signature);
                insert_tx($data, $db);
            }
        }
        // отмечаем, чтобы больше не брать эту строку
        $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tUPDATE `" . DB_PREFIX . "votes_miners`\n\t\t\t\tSET `cron_checked_time` = " . time() . "\n\t\t\t\tWHERE `id` = {$row['vote_id']}\n\t\t\t\t");
    }
    main_unlock();
    sleep(1);
} while (true);