Skip to content

Описание таблиц

c-darwin edited this page Dec 9, 2015 · 5 revisions

После установки Dcoin создается локальная база данных, которая наполняется данными, получаемыми из блоков, которые берутся из блок-чеина. В данной статье описаны все используемые таблицы.

Table of Contents

abuses

Абузы на майнеров

  • user_id bigint(20)
  • from_user_id bigint(20)
  • comment varchar(255)
  • time int(11)

admin_blog

Блог админа

  • id int(11)
  • time int(10)
  • lng varchar(5)
  • title varchar(255)
  • message text

alert_messages

Сообщения от админа, которые выводятся в интерфейсе софта

  • id int(11)
  • notification tinyint(1)
  • close tinyint(1) - Юзер может закрыть сообщение, и оно больше не появится
  • message text - json. Каждому языку свое сообщение и gen - для тех, на кого языков не хватило
  • currency_list varchar(1024) - Для каких валют выводим сообщение. ALL - всем
  • block_id int(10) - Для откатов

block_chain

Главная таблица. Хранит цепочку блоков

  • id int(11)
  • hash binary(32) - Хэш от полного заголовка блока (new_block_id,prev_block_hash,merkle_root,time,user_id,level). Используется как PREV_BLOCK_HASH
  • head_hash binary(32) - Хэш от заголовка блока (user_id,block_id,prev_head_hash). Используется для обновления head_hash в info_block при восстановлении после вилки в upd_block_info()
  • data longblob

cash_requests

Запросы на обмен DC на наличные

  • id bigint(20)
  • time int(10) - Время создания запроса. От него отсчитываем 48 часов
  • from_user_id bigint(20)
  • to_user_id bigint(20)
  • notification tinyint(1)
  • currency_id tinyint(3)
  • amount decimal(13,2) - На эту сумму должны быть выданы наличные
  • hash_code binary(32) - Хэш от кода, а сам код передается при личной встрече.
  • enum('approved','pending') DEFAULT 'pending' - Если в блоке указан верный код для хэша, то тут будет approved. Rejected нет, т.к. можно и без него понять, что запрос не выполнен, просто посмотрев время
  • for_repaid_del_block_id int(11) - если больше нет for_repaid ни по одной валюте у данного юзера, то нужно проверить, нет ли у него просроченных cash_requests, которым нужно отметить for_repaid_del_block_id, чтобы cash_request_out не переводил более обещанные суммы данного юзера в for_repaid из-за просроченных cash_requests
  • del_block_idint(11) - Во время reduction все текущие cash_requests, т.е. по которым не прошло 2 суток, удаляются

cf_lang

Список языков

  • id` int(11) - ID языка
  • name` varchar(200) - язык

cf_comments

Комментарии к проектам

  • id int(11)
  • user_id int(11)
  • projectid int(11)
  • lang_id` tinyint(4)
  • comment varchar(255)
  • time int(11) - Для того, чтобы можно было отсчитать время до размещения следующего коммента
  • block_id int(11) - Для откатов

cf_funding

  • id int(11)
  • project_id int(11)
  • user_id int(11)
  • amount decimal(15,2)
  • currency_id int(11)
  • time int(11) - DC растут с юзерским %
  • block_id int(11) - Для откатов
  • del_block_id int(11) - Фундер передумал и до завершения проекта вернул деньги
  • checked tinyint(1) - Для определения по крону cf_project.funding и cf_project.funding
  • del_checked tinyint(1) - Для определения по крону cf_project.funding и cf_project.funding

cf_currency

Валюта, которая создается после успешного завершения проекта

  • id bigint(20) - ID идет от 1000, чтобы id CF-валют не пересекались с DC-валютами
  • name char(7)
  • project_id bigint(20)

cf_projects

  • id bigint(20)
  • user_id int(11)
  • currency_id tinyint(4)
  • amount int(11)
  • funding decimal(15,2) - Получаем в кроне. Сколько собрано средств. Нужно для вывода проектов в каталоге, чтобы не дергать cf_funding',
  • funders int(11) - Получаем в кроне. Кол-во инвесторов. Нужно для вывода проектов в каталоге, чтобы не дергать cf_funding',
  • project_currency_name char(7)
  • start_time int(11)
  • end_time int(11)
  • latitude decimal(8,5)
  • longitude decimal(8,5)
  • country varchar(100)
  • city varchar(100)
  • category_id smallint(6)
  • close_block_id int(11) - Чтобы знать, когда проект завершился и можно было бы удалить старые данные из cf_funding. Также используется для определения статус проекта - открыт/закрыт',
  • del_block_id int(11) - Проект был закрыт автором, а средства возвращены инвесторам',
  • block_id int(11) - Для откатов',
  • log_id bigint(20)
  • geo_checked tinyint(1) - По крону превращаем координаты в названия страны и города и отмечаем тут',

cf_projects_data

  • id bigint(20)
  • hide tinyint(1)
  • project_id bigint(20)
  • lang_id tinyint(4)
  • blurb_img varchar(50)
  • head_img varchar(50)
  • description_img varchar(50)
  • picture varchar(50) - Если нет видео, то выводится эта картинка',
  • video_type varchar(10)
  • video_url_id varchar(50)
  • news_img varchar(50)
  • links varchar(512)
  • log_id bigint(20)

currency

  • id tinyint(3)
  • name char(3)
  • full_name varchar(50)
  • max_other_currencies tinyint(3) - Со сколькими валютами данная валюта может майниться
  • tmp_curs double
  • log_id int(11)

log_currency

  • log_id int(11)
  • max_other_currencies tinyint(3)
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id bigint(20)

daemons

Демоны

  • name char(15) - Кодовое обозначение демона
  • script char(40) - Название скрипта
  • param char(5) - Параметры для запуска
  • pid int(11) - Pid демона для детекта дублей
  • time int(11) - Время последней активности демона
  • first tinyint(1)
  • memory int(11)
  • restart tinyint(1) - Команда демону, что нужно выйти

faces

Точки по каждому майнеру

  • user_id bigint(20)
  • race tinyint(1) - Раса. От 1 до 3
  • country tinyint(3)
  • version int(11) - Версия набора точек
  • status enum('pending','used') DEFAULT 'pending' - При new_miner ставим pending, при отрицательном завершении юзерского голосования - pending. used ставится, только если юзерское голосование завершилось положительно' ,
  • f1 float - Отрезок 1
  • f2 float
  • f3 float
  • f4 float
  • f5 float
  • f6 float
  • f7 float
  • f8 float
  • f9 float
  • f10 float
  • f11 float
  • f12 float
  • f13 float
  • f14 float
  • f15 float
  • f16 float
  • f17 float
  • f18 float
  • f19 float
  • f20 float
  • p1 float
  • p2 float
  • p3 float
  • p4 float
  • p5 float
  • p6 float
  • p7 float
  • p8 float
  • p9 float
  • p10 float
  • p11 float
  • p12 float
  • p13 float
  • p14 float
  • p15 float
  • p16 float
  • p17 float
  • p18 float
  • p19 float
  • p20 float
  • log_id bigint(20)

geolocation

Местоположение майнера

  • id bigint(20)
  • user_id int(11)
  • latitude decimal(8,5)
  • longitude decimal(8,5)
  • votes_start_time int(11) - Время начала сбора голосов, т.е. время попадания записи в блок
  • votes_0 int(11) - Голоса за
  • votes_1 int(11) - Голоса против
  • enum('approved','rejected','pending') DEFAULT 'pending' - pending-идет сбор голосов
  • block_id bigint(20) - Блок, в котором была добавлена запись. Для отката, чтобы точно знать, что удалять

holidays

Время, в которое майнер не получает %, т.к. отдыхает

  • id bigint(20)
  • user_id bigint(20)
  • delete tinyint(1) - 1-удалено. нужно для отката
  • start_time int(11)
  • end_time int(11)

info_block

Текущий блок, данные из которого мы уже занесли к себе

  • hash binary(32) - Хэш от полного заголовка блока (new_block_id,prev_block_hash,merkle_root,time,user_id,level). Используется как prev_hash
  • head_hash binary(32) - Хэш от заголовка блока (user_id,block_id,prev_head_hash)
  • block_id int(11)
  • time int(10) - Время создания блока
  • level tinyint(4) - На каком уровне был сгенерирован блок
  • current_version varchar(50) DEFAULT '0.0.1' ,
  • sent tinyint(4) - Был ли блок отправлен нодам, указанным в nodes_connections'

my_new_users

Чтобы после генерации нового юзера не потерять его приватный ключ, можно сохранить его тут

  • user_id int(10)
  • add_time int(11) - для удаления старых my_pending
  • public_key varchar(3096) - Нужен, просто чтобы опознать в блоке зареганного юзера и отметить approved
  • private_key varchar(3096)
  • enum('my_pending','approved') DEFAULT 'my_pending'

promised_amount

  • id bigint(20)
  • del_block_id int(11)
  • user_id bigint(16)
  • amount decimal(13,2) - Обещанная сумма. На неё влияет reduction, и она будет урезаться при обновлении max_promised_amount (очень важно на случай деноминации фиата). Если же статус = repaid, то тут хранится кол-во денег, которые майнер отдал. Нужно хранить, только чтобы знать общую сумму и не превысить max_promised_amount. Для WOC amount не нужен, т.к. WOC полностью зависит от max_promised_amount
  • amount_backup decimal(13,2) - Нужно для откатов при reduction
  • currency_id tinyint(3)
  • ps1 smallint (5) - ID платежной системы, в валюте которой он готов сделать перевод в случае входящего запроса
  • ps2 smallint (5)
  • ps3 smallint (5)
  • ps4 smallint (5)
  • ps5 smallint (5)
  • start_time int(11) - Используется, когда нужно узнать, кто имеет право голосовать за данную валюту, т.е. прошло ли 60 дней с момента получения статуса miner или repaid(учитывая время со статусом miner). Изменяется при каждой смене статуса. Существует только со статусом mining и repaid. Это защита от атаки клонов, когда каким-то образом 100500 майнеров прошли проверку, добавили какую-то валюту и проголосовали за reduction 90%. 90 дней - это время админу, чтобы заметить и среагировать на такую атаку
  • enum('pending','mining','rejected','repaid','change_geo','suspended') DEFAULT 'pending' - pending - при первом добавлении или при повторном запросе. change_geo ставится, когда идет смена местоположения, suspended - когда админ разжаловал майнера в юзеры. TDC набегают, только когда статус mining, repaid с майнерским или же юзерским % (если статус майнера = passive_miner)
  • status_backup *enum('pending','mining','rejected','repaid','change_geo','suspended') DEFAULT - Когда админ банит майнера, то в status пишется suspended, а сюда - статус из *status
  • tdc_amount decimal(13,2) - Набежавшая сумма за счет % роста. Пересчитывается при переводе TDC на кошелек
  • tdc_amount_backup decimal(13,2) - Нужно для откатов при reduction
  • tdc_amount_update int(11) - Время обновления tdc_amount
  • video_type varchar(100)
  • video_url_id varchar(255) - Если пусто, то видео берем по ID юзера.flv. На видео майнер говорит, что хочет майнить выбранную валюту
  • votes_start_time int(11) - При каждой смене местоположения начинается новое голосование. Менять местоположение можно не чаще раза в сутки
  • votes_0 int(11)
  • votes_1 int(11)
  • woc_block_id int(11) - Нужно для отката добавления woc
  • cash_request_out_time int(11) - Любой cash_request_out приводит к появлению данной записи у получателя запроса. Убирается она только после того, как у юзера не остается непогашенных cash_request-ов. Нужно для reduction_generator, чтобы учитывать только те обещанные суммы, которые еще не заморожены невыполенными cash_request-ами
  • cash_request_out_time_backup int(11) - Используется в new_reduction()
  • cash_request_in_block_id int(11) - Нужно для отката cash_request_in
  • del_mining_block_id int(11) - Нужно для отката del_promised_amount
  • log_id bigint(20)

log_cf_projects

  • log_id bigint(20)
  • category_id tinyint(4)
  • block_id int(11)
  • prev_log_id bigint(20)

log_cf_projects_data

  • log_id bigint(20)
  • hide tinyint(1)
  • lang_id tinyint(4)
  • blurb_img varchar(50)
  • head_img varchar(50)
  • description_img varchar(50)
  • picture varchar(50)
  • video_type varchar(10)
  • video_url_id varchar(50)
  • news_img varchar(50)
  • links varchar(512)
  • block_id int(11)
  • prev_log_id bigint(20)

log_promised_amount

  • log_id bigint(20)
  • del_block_id int(11)
  • amount decimal(13,2)
  • amount_backup decimal(13,2)
  • start_time int(11)
  • enum('pending','mining','rejected','repaid','change_geo','suspended')
  • status_backup enum('pending','mining','rejected','repaid','change_geo','suspended',) DEFAULT '
  • tdc_amount decimal(13,2)
  • tdc_amount_update int(11)
  • video_type varchar(100)
  • video_url_id varchar(255) - Если пусто, то видео берем по ID юзера.flv. На видео майнер говорит, что хочет майнить выбранную валюту
  • votes_start_time int(11) - При каждой смене местоположения начинается новое голосование
  • votes_0 int(11)
  • votes_1 int(11)
  • cash_request_out_time int(11)
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id bigint(20)

log_faces

Точки по каждому юзеру

  • log_id bigint(20)
  • user_id bigint(20)
  • race tinyint(1)
  • country tinyint(3)
  • version int(11) - Версия набора точек
  • enum('approved','rejected','pending')
  • f1 float - Отрезок 1
  • f2 float
  • f3 float
  • f4 float
  • f5 float
  • f6 float
  • f7 float
  • f8 float
  • f9 float
  • f10 float
  • f11 float
  • f12 float
  • f13 float
  • f14 float
  • f15 float
  • f16 float
  • f17 float
  • f18 float
  • f19 float
  • f20 float
  • p1 float
  • p2 float
  • p3 float
  • p4 float
  • p5 float
  • p6 float
  • p7 float
  • p8 float
  • p9 float
  • p10 float
  • p11 float
  • p12 float
  • p13 float
  • p14 float
  • p15 float
  • p16 float
  • p17 float
  • p18 float
  • p19 float
  • p20 float
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id bigint(20)

log_miners_data

  • log_id bigint(20)
  • user_id int(11)
  • miner_id int(11)
  • reg_time int(11)
  • enum('miner','user','passive_miner','suspended_miner')
  • node_public_key varbinary(512)
  • face_hash varchar(128)
  • profile_hash varchar(128)
  • photo_block_id int(11)
  • photo_max_miner_id int(11)
  • miners_keepers tinyint(3)
  • face_coords varchar(1024)
  • profile_coords varchar(1024)
  • video_type varchar(100)
  • video_url_id varchar(255)
  • host varchar(255)
  • latitude decimal(8,5)
  • longitude decimal(8,5)
  • country tinyint(3)
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id bigint(20)

log_minute

  • user_id bigint(20)
  • count int(11) - Сколько новых транзакций сделал юзер за минуту

log_minute_invite

Не используется

  • invite char(128)
  • count int(11)

log_pct_votes

  • log_id bigint(20)
  • time int(10)
  • currency_id tinyint(3)
  • miner_pct int(10)
  • user_pct int(10)
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id bigint(20)

log_recycle_bin

  • log_id bigint(20)
  • user_id bigint(20)
  • profile_file_name varchar(64)
  • face_file_name varchar(64)
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id bigint(20)

log_spots_compatibility

  • log_id int(11)
  • version double
  • example_spots text
  • compatibility text
  • segments text
  • tolerances text
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id int(11)

log_time_actualization

  • user_id bigint(20)
  • time int(10)

log_time_abuses

можно создавать только 1 тр-ю с абузами за 24h

  • user_id bigint(20)
  • time int(10)

log_time_for_repaid_fix

  • user_id bigint(20)
  • time int(10)

log_time_commission

  • user_id bigint(20)
  • time int(10)

log_time_promised_amount

Для учета кол-ва запр. на доб. / удал. / изменение promised_amount. Чистим кроном

  • user_id bigint(20)
  • time int(10)

log_time_cash_requests

  • user_id bigint(20)
  • time int(10)

log_time_change_geolocation

  • user_id bigint(20)
  • time int(10)

log_time_holidays

  • user_id bigint(20)
  • time int(10)

log_time_message_to_admin

  • user_id bigint(20)
  • time int(10)

log_time_mining

  • user_id bigint(20)
  • time int(11)

log_time_change_host

  • user_id bigint(20)
  • time int(11)

log_time_new_miner

  • user_id bigint(20)
  • time int(10)

log_time_new_user

  • user_id bigint(20)
  • time int(10)

log_time_node_key

  • user_id bigint(20)
  • time int(10)

log_time_primary_key

  • user_id bigint(20)
  • time int(10)

log_time_votes

Храним данные за 1 сутки

  • user_id bigint(20)
  • time int(10)

log_time_votes_miners

Лимиты для повторых запросов, за которые голосуют ноды

  • user_id bigint(20)
  • time int(10)

log_time_votes_nodes

Голоса от нодов

  • user_id bigint(20)
  • time int(10)

log_time_votes_complex

Набор голосов из miner_pct/user_pct/max_promised_amount/max_other_currencies/reduction. Валюты тут не учитываются. Важен сам факт комплексного голосования

  • user_id bigint(20)
  • time int(10)

log_time_user_avatar

  • user_id bigint(20)
  • time int(10)

log_time_cf_comments

  • user_id bigint(20)
  • time int(10)

log_time_new_cf_project

  • user_id bigint(20)
  • time int(10)

log_time_cf_project_data

  • user_id bigint(20)
  • time int(10)

log_time_cf_send_dc

  • user_id bigint(20)
  • time int(10)

log_transactions

Храним данные за сутки, чтобы избежать дублей.

  • hash binary(16)
  • time int(11)

log_users

  • log_id bigint(20)
  • public_key_0 varbinary(512)
  • public_key_1 varbinary(512)
  • public_key_2 varbinary(512)
  • referral bigint(20)
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id bigint(20)

log_variables

  • log_id int(11)
  • data text

log_votes

Чтобы 1 юзер не смог проголосовать 2 раза за одно и то же

  • user_id bigint(20) - Кто голосует
  • voting_id bigint(20) - За что голосует. Тут может быть id geolocation и пр
  • enum('votes_miners
    'promised_amount') - Нужно для voting_id
  • del_block_id int(11) - В каком блоке было удаление. Нужно для чистки по крону старых данных и для откатов.

log_wallets

Таблица, где будет браться инфа при откате блока

  • log_id bigint(20)
  • amount decimal(15,2)
  • amount_backup decimal(15,2)
  • last_update int(11)
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id bigint(20) - Id предыдщуего log_id, который запишем в wallet

main_lock

Полная блокировка на поступление новых блоков/тр-ий

  • lock_time int(10)
  • script_name varchar(100)
  • uniq tinyint(4)

miners

  • miner_id int(11) AUTO_INCREMENT - Если есть забаненные, то на их место становятся новички, т.о. все miner_id будут заняты без пробелов
  • active tinyint(1) - 1 - активен, 0 - забанен
  • log_id int(11) - Без log_id нельзя определить, был ли апдейт в табле miners или же инсерт, т.к. по AUTO_INCREMENT не понять, т.к. обновление может быть в самой последней строке

log_miners

  • log_id int(11)
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id int(11)

miners_data

  • user_id int(11)
  • miner_id int(11) - Из таблицы miners
  • reg_time int(11) - Время, когда майнер получил miner_id по итогам голосования. Определеяется один раз и не меняется. Нужно, чтобы не давать новым майнерам генерить тр-ии регистрации новых юзеров и исходящих запросов
  • ban_block_id int(11) - В каком блоке майнер был разжалован в suspended_miner. Нужно для исключения пересечения тр-ий разжалованного майнера и самой тр-ии разжалования
  • enum('miner','user','passive_miner','suspended_miner') DEFAULT 'user' - Изменения вызывают пересчет TDC в promised_amount
  • node_public_key varbinary(512)
  • face_hash varchar(128) - Хэш фото юзера
  • profile_hash varchar(128)
  • photo_block_id int(11) - Блок, в котором было добавлено фото
  • photo_max_miner_id bigint(20) - Макс. майнер id в момент добавления фото. Это и photo_block_id *нужны для определения 10-и нодов, где лежат фото
  • miners_keepers tinyint(3) - Скольким майнерам копируем фото юзера. По дефолту = 10
  • face_coords varchar(1024)
  • profile_coords varchar(1024)
  • video_type varchar(100)
  • video_url_id varchar(255) - Если пусто, то видео берем по ID юзера.flv
  • host varchar(255) - адрес хоста или IP, где находится нод майнера
  • latitude decimal(8,5) - Местоположение можно сменить без проблем, но это одновременно ведет запуск голосования у promised_amount по всем валютам, где статус mining или hold
  • longitude decimal(8,5)
  • country tinyint(3)
  • log_id bigint(20)

my_admin_messages

Общение с админом, баг-репорты и пр.

  • id int(11)
  • add_time int(11) - для удаления старых my_pending
  • parent_id int(11)
  • subject varchar(255) - Появляется после расшифровки
  • message text
  • message_type tinyint(1) - 0-баг-репорты
  • message_subtype tinyint(1)
  • encrypted blob
  • decrypted tinyint(1)
  • enum('approved','my_pending') DEFAULT 'my_pending
  • enum('from_admin','to_admin') DEFAULT 'to_admin

my_promised_amount

Просто показываем, какие данные еще не попали в блоки. Те, что уже попали, тут удалены

  • id tinyint(3)
  • add_time int(11) - для удаления старых my_pending
  • amount decimal(13,2)
  • currency_id tinyint(3)

my_cash_requests

  • id bigint(20)
  • add_time int(11) - для удаления старых my_pending
  • time int(11) - Время попадания в блок
  • notification tinyint(1)
  • to_user_id bigint(20)
  • currency_id tinyint(3)
  • amount decimal(13,2)
  • comment text
  • comment_enum('encrypted
    'decrypted') DEFAULT 'decrypted
  • code varchar(64) - Секретный код, который нужно передать тому, кто отдает фиат
  • hash_code varchar(64)
  • enum('my_pending','pending','approved','rejected') DEFAULT 'my_pending
  • cash_request_id bigint(20)

my_cf_funding

Чтобы автор проекта мог узнать, кому какие товары отправлять

  • id` bigint(20)
  • from_user_id` bigint(20)
  • project_id` bigint(20)
  • amount` decimal(15,2)
  • del_block_id` int(11) - Блок, в котором данная транзакция была отменена
  • time` int(10) - Время, когда транзакцию создал юзер
  • block_id` int(10) - Блок, в котором данная транзакция была запечатана. При откате блока все транзакции с таким block_id будут удалены
  • comment` text
  • comment_status` enum('encrypted','decrypted')

my_dc_transactions

Нужно только для отчетов, которые показываются юзеру

  • id bigint(20)
  • enum('pending','approved') DEFAULT 'approved' - pending - только при отправки DC с нашего кошелька, т.к. нужно показать юзеру, что запрос принят
  • notification tinyint(1) - Уведомления по sms и email
  • enum('cash_request
    'from_mining_id
    'from_repaid
    'from_user','node_commission
    'system_commission
    'referral')
  • type_id bigint(20)
  • to_user_id bigint(20)
  • amount decimal(15,2)
  • commission decimal(15,2)
  • del_block_id int(11) - Блок, в котором данная транзакция была отменена
  • time int(10) - Время, когда транзакцию создал юзер
  • block_id int(10) - Блок, в котором данная транзакция была запечатана. При откате блока все транзакции с таким block_id будут удалены
  • currency_id tinyint(3)
  • comment text - Если это перевод средств между юзерами или это комиссия, то тут будет расшифрованный комментарий
  • comment_enum('encrypted
    'decrypted') DEFAULT 'decrypted

my_geolocation

  • id int(11)
  • latitude decimal(8,5)
  • longitude decimal(8,5)
  • current tinyint(1)
  • current_enum('
    'approved','my_pending') DEFAULT - Статус нашей заявки сделать данное местоположение текущим. Не путать со статусом всего geolocation
  • enum('approved','rejected','my_pending','pending') DEFAULT 'my_pending
  • geolocation_id bigint(20) - Нужно при смене текущего местоположения

my_holidays

  • id smallint(6)
  • add_time int(11) - для удаления старых my_pending
  • start_time int(10)
  • end_time int(10)

my_keys

Ключи для авторизации юзера. Используем крайний

  • id int(11)
  • add_time int(11) - для удаления старых my_pending
  • notification tinyint(1)
  • public_key varbinary(512) - Нужно для поиска в users
  • private_key varchar(3096) - Хранят те, кто не боятся
  • password_hash varchar(64) - Хранят те, кто не боятся
  • enum('my_pending','approved') DEFAULT 'my_pending
  • my_time int(10) - Время создания записи
  • time int(10) - Время из блока
  • block_id int(11) - Для откатов и определения крайнего

my_log

Всё, что шлется на мыло, логируется тут

  • id int(11)
  • time int(11)
  • data varchar(1024)

my_node_keys

  • id int(11)
  • add_time int(11) - для удаления старых my_pending
  • public_key varbinary(512)
  • private_key varchar(3096)
  • enum('my_pending','approved') DEFAULT 'my_pending
  • my_time int(11) - Время создания записи
  • time bigint(20)
  • block_id int(11)

my_notifications

  • name varchar(200)
  • email tinyint(1)
  • sms tinyint(1)
  • sort tinyint(3)
  • important tinyint(1)

my_complex_votes

Нужно только для отсылки уведомлений, что пора голосовать

  • last_voting int(11) - Время последнего голосования
  • notification tinyint(1) - Уведомление о том, что со времени последнего голоса прошло более 2 недель

my_votes_reduction

Нужно только для отсылки уведомлений, что пора голосовать

  • last_voting int(11) - Время последнего голосования
  • notification tinyint(1) DEFAULT '0' - Уведомление о том, что со времени последнего голоса прошло более 2 недель

my_table

  • user_id bigint(20)
  • miner_id int(11)
  • enum('bad_key
    'my_pending','miner','user','passive_miner','suspended_miner') DEFAULT 'my_pending' - bad_key - это когда юзер зарегался по чужому ключу, который нашел в паблике, либо если указал старый ключ вместо нового
  • race tinyint(1) - Раса. От 1 до 3
  • country tinyint(3) - Используется только локально для проверки майнеров из нужной страны
  • notification_status tinyint(1) - Уведомления. При смене статуса обнуляется
  • mail_code varchar(100)
  • login_code int(11) - Для подписания при авторизации
  • email varchar(100)
  • notification_email tinyint(1)
  • host varchar(255) - Хост юзера, по которому он доступен извне
  • host_enum('my_pending','approved') DEFAULT 'my_pending
  • geolocation varchar(200) - Текущее местонахождение майнера
  • geolocation_enum('my_pending','approved') DEFAULT 'my_pending
  • location_country tinyint(3)
  • invite char(128)
  • face_coords varchar(1024) - Точки, которые юзер нанес на свое фото
  • node_voting_send_request int(10) - Когда мы отправили запрос в DC-сеть на присвоение нам статуса \"майнер\"
  • profile_coords varchar(1024) - Точки, которые юзер нанес на свое фото
  • video_url_id varchar(255) - Видео, где показывается лицо юзера
  • video_type varchar(100)
  • lang char(2) - Запоминаем язык для юзера
  • use_smtp tinyint(1)
  • smtp_server varchar(100)
  • smtp_port int(11)
  • smtp_ssl tinyint(1)
  • smtp_auth tinyint(1)
  • smtp_username varchar(100)
  • smtp_password varchar(100)
  • miner_pct_id smallint(5)
  • user_pct_id smallint(5)
  • repaid_pct_id smallint(5)
  • api_token_hash varchar(64)
  • sms_http_get_request varchar(255)
  • notification_sms_http_get_request int(11)
  • show_sign_data tinyint(1) - Если 0, тогда не показываем данные для подписи, если у юзера только один праймари ключ
  • uniq set('1') DEFAULT '1

new_version

Сюда пишется новая версия, которая загружена в public

  • version varchar(50)
  • alert tinyint(1)
  • notification tinyint(1)

nodes_ban

Баним на 1 час тех, кто дает нам данные с ошибками

  • user_id int(11)
  • ban_start int(10)
  • info text

nodes_connection

Ноды, которым шлем данные и от которых принимаем данные

  • host varchar(100)
  • user_id int(11) - Чтобы получать открытый ключ, которым шифруем блоки и тр-ии
  • block_id int(11) - ID блока, который есть у данного нода. Чтобы слать ему только >=

pct

% майнера, юзера. На основе pct_votes

  • id int(11)
  • time int(10) - Время блока, в котором были новые %
  • notification tinyint(1)
  • currency_id tinyint(3)
  • miner decimal(13,13)
  • user decimal(13,13)
  • block_id int(10) - Нужно для откатов

max_promised_amounts

На основе votes_max_promised_amount

  • id int(11)
  • time int(10) - Время блока, в котором были новые max_promised_amount
  • notification tinyint(1)
  • currency_id tinyint(3)
  • amount int(11)
  • block_id int(10) - Нужно для откатов

max_other_currencies_time

Время последнего обновления max_other_currencies_time в currency

  • time int(10)

max_other_currencies

На основе votes_max_other_currencies

  • id int(11)
  • time int(10) - Время блока, в котором были новые max_other_currencies
  • notification tinyint(1)
  • currency_id tinyint(3)
  • count int(11)
  • block_id int(10) - Нужно для откатов

reduction

Когда была последняя процедура урезания для конкретной валюты. Чтобы отсчитывать 2 недели до следующей

  • id int(11)
  • time int(10) - Время блока, в котором было произведено уполовинивание
  • notification tinyint(1)
  • currency_id tinyint(3)
  • pct tinyint(2)
  • block_id int(10) - Нужно для откатов

votes_miner_pct

Голосование за %. Каждые 14 дней пересчет

  • user_id bigint(20)
  • time int(11) - Нужно только для того, чтобы определять, голосовал юзер или нет. От этого зависит, будет он получать майнерский или юзерский %
  • currency_id tinyint(3)
  • pct decimal(13,13)
  • log_id bigint(20)

log_votes_miner_pct

  • log_id bigint(20)
  • currency_id tinyint(3)
  • time int(11)
  • pct decimal(13,13)
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id bigint(20)

votes_user_pct

Голосование за %. Каждые 14 дней пересчет

  • user_id bigint(20)
  • currency_id tinyint(3)
  • pct decimal(13,13)
  • log_id bigint(20)

log_votes_user_pct

  • log_id bigint(20)
  • currency_id tinyint(3)
  • pct decimal(13,13)
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id bigint(20)

votes_reduction

Голосование за сокращение объема монет. Каждые 14 дней пересчет

  • user_id bigint(20)
  • time int(11) - Учитываются только свежие голоса, т.е. один голос только за одно урезание
  • currency_id tinyint(3)
  • pct tinyint(2)
  • log_id bigint(20)

log_votes_reduction

  • log_id bigint(20)
  • time int(11)
  • currency_id tinyint(3)
  • pct tinyint(2)
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id bigint(20)



votes_max_promised_amount

Раз в 2 недели на основе этих голосов обновляетя currency.max_promised_amount

  • user_id bigint(20)
  • currency_id tinyint(3)
  • amount int(11) - Возможные варианты задаются в скрипте, иначе будут проблемы с поиском варианта-победителя
  • log_id bigint(20)

log_votes_max_promised_amount

  • log_id bigint(20)
  • currency_id tinyint(3)
  • amount int(11)
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id bigint(20)



votes_max_other_currencies

Раз в 2 недели на основе этих голосов обновляетя currency.max_other_currencies

  • user_id bigint(20)
  • currency_id tinyint(3)
  • count int(11) - Возможные варианты задаются в скрипте, иначе будут проблемы с поиском варианта-победителя
  • log_id bigint(20)

log_votes_max_other_currencies

  • log_id bigint(20)
  • currency_id tinyint(3)
  • count int(11)
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id bigint(20)



points

Баллы майнеров, по которым решается, получат они майнерские % или юзерские

  • user_id bigint(20)
  • time_start int(11) - От какого времени отсчитывается 1 месяц
points int(11) - Баллы, полученные майнером за голосования
  • log_id bigint(20)

log_points

  • log_id int(11)
  • time_start int(11)
  • points int(11)
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id int(11)

points_status

Статусы юзеров на основе подсчета points

  • user_id bigint(20)
  • time_start int(11) - Время начала действия статуса. До какого времени действует данный статус, определяем простым добавлением в массив времени, которое будет через 30 дней
  • enum('user','miner') DEFAULT 'user',
  • block_id int(11) - Нужно для удобного отката'

queue_blocks

Блоки, которые мы должны забрать у указанных нодов

  • head_hash binary(32)
  • hash binary(32)
  • user_id int(10)
  • block_id int(11)

queue_testblock

Очередь на фронтальную проверку соревнующихся блоков

  • head_hash binary(32) - Хэш от заголовка блока (user_id,block_id,prev_head_hash)
  • data longblob

queue_tx

Тр-ии, которые мы должны проверить

  • hash binary(16) - md5 от тр-ии
  • high_rate tinyint(1) DEFAULT '0' - Если 1, значит это админская тр-ия
  • data longblob
  • _tmp_node_user_id VARCHAR(255)

recycle_bin

  • user_id bigint(20)
  • profile_file_name varchar(64)
  • face_file_name varchar(64)
  • log_id bigint(20)

spots_compatibility

Совместимость текущей версии точек с предыдущими

  • version int(11)
  • example_spots text - Точки, которые наносим на 2 фото-примера (анфас и профиль)
  • compatibility text - С какими версиями совместимо
  • segments text - Нужно для составления отрезков в new_miner()
  • tolerances text - Допустимые расхождения между точками при поиске фото-дублей
  • log_id int(11)

testblock

Нужно на этапе соревнования, у кого меньше хэш

  • block_id int(11) - ID тестируемого блока
  • time int(10) - Время, когда блок попал сюда
  • level tinyint(4) - Пишем сюда для использования при формировании заголовка
  • user_id int(11) - По id вычисляем хэш шапки
  • header_hash binary(32) - Хэш шапки: им меряемся, у кого меньше - тот круче. Хэш генерим у себя при получении данных блока
  • signature blob - Подпись блока юзером, чей минимальный хэш шапки мы приняли
  • mrkl_root binary(32) - Хэш тр-ий. Чтобы каждый раз не проверять те же самые данные, просто сравниваем хэши
  • enum('active
    'pending') DEFAULT 'active' - Указание скрипту testblock_disseminator.php
  • uniq tinyint(1)

testblock_lock

  • lock_time int(10)
  • script_name varchar(30)
  • uniq tinyint(4)

transactions

Все незанесенные в блок тр-ии, которые у нас есть

  • hash binary(16) - Все хэши из этой таблы шлем тому, у кого хотим получить блок (т.е. недостающие тр-ии для составления блока)
  • data longblob - Само тело тр-ии
  • verified tinyint(1) DEFAULT '1' - Оставшиеся после прихода нового блока тр-ии отмечаются как \"непроверенные\", и их нужно проверять по новой
  • used tinyint(1) - После того, как попадают в блок, ставим 1, а те, у которых уже стояло 1, - удаляем
  • high_rate tinyint(1) - 1 - админские, 0 - другие
  • for_self_use tinyint(1) - для new_pct(pct_generator.php), т.к. эта тр-ия валидна только вместе с блоком, который сгенерил тот, кто сгенерил эту тр-ию
  • type tinyint(4) - Тип тр-ии. Нужно для недопущения попадания в блок 2-х тр-ий одного типа от одного юзера
  • user_id tinyint(4) - Нужно для недопущения попадания в блок 2-х тр-ий одного типа от одного юзера
  • third_var int(11) - Для исключения пересечения в одном блоке удаления обещанной суммы и запроса на её обмен на DC. И для исключения голосования за один и тот же объект одним и тем же юзеров в одном блоке
  • counter tinyint(3) - Чтобы избежать зацикливания при проверке тр-ии: verified=1, новый блок, verified=0. При достижении 10-и удаляем тр-ию
  • sent tinyint(1) - Была отправлена нодам, указанным в nodes_connections

transactions_testblock

Тр-ии, которые используются в текущем testblock

  • id int(11) AUTO_INCREMENT - Порядок следования очень важен
  • hash binary(16) - md5 для обмена только недостающими тр-ми
  • data longblob
  • type tinyint(4) - Тип тр-ии. Нужно для недопущения попадания в блок 2-х тр-ий одного типа от одного юзера
  • user_id tinyint(4) - Нужно для недопущения попадания в блок 2-х тр-ий одного типа от одного юзера
  • third_var int(11) - Для исключения пересечения в одном блоке удаления обещанной суммы и запроса на её обмен на DC. И для исключения голосования за один и тот же объект одним и тем же юзеров в одном блоке

log_commission

Каждый майнер определяет, какая комиссия с тр-ий будет доставаться ему, если он будет генерить блок

  • log_id bigint(20)
  • commission text
  • block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
  • prev_log_id int(11)

commission

Каждый майнер определяет, какая комиссия с тр-ий будет доставаться ему, если он будет генерить блок

  • user_id bigint(20)
  • commission text - Комиссии по всем валютам в json. Если какой-то валюты нет в списке, то комиссия будет равна нулю. currency_id, %, мин., макс.
  • log_id int(11)

my_commission

Каждый майнер определяет, какая комиссия с тр-ий будет доставаться ему, если он будет генерить блок

  • currency_id int(11)
  • pct float
  • min float
  • max float

users

В этой таблице содержатся публичные ключи всех пользователей и майнеров.

  • user_id bigint(20) AUTO_INCREMENT - На него будут слаться деньги
  • public_key_0 varbinary(512) - Открытый ключ, которым проверяются все транзакции от юзера
  • public_key_1 varbinary(512) - 2-й ключ, если есть
  • public_key_2 varbinary(512) - 3-й ключ, если есть
  • referral bigint(20) - Тот, кто зарегал данного юзера и теперь получает с него рефские
  • log_id bigint(20)

variables

  • name varchar(35)
  • value text
  • comment varchar(255)

votes_miners

Отделено от miners_data, чтобы голоса шли точно за свежие данные

  • id bigint(20)
  • enum('node_voting
    'user_voting')
  • user_id bigint(20) - За кого голосуем
  • votes_start_time int(10)
  • votes_0 int(11)
  • votes_1 int(11)
  • votes_end tinyint(1)
  • end_block_id bigint(20) - В каком блоке мы выставили принудительное end для node
  • cron_checked_time int(11) - По крону проверили, не нужно ли нам скачать фотки юзера к себе на сервер

votes_referral

Голосование за рефские %. Каждые 14 дней пересчет

  • user_id bigint(20)
  • first tinyint(2)
  • second tinyint(2)
  • third tinyint(2)
  • log_id bigint(20)

log_votes_referral

  • log_id bigint(20)
  • user_id bigint(20)
  • first tinyint(2)
  • second tinyint(2)
  • third tinyint(2)
  • block_id int(11)
  • prev_log_id int(10)

referral

  • first tinyint(2)
  • second tinyint(2)
  • third tinyint(2)
  • log_id int(11)

log_referral

  • log_id bigint(20)
  • first tinyint(2)
  • second tinyint(2)
  • third tinyint(2)
  • block_id int(11)
  • prev_log_id int(10)

install

Используется только в момент установки

  • progress varchar(10) - На каком шаге остановились

wallets

У кого сколько какой валюты

  • user_id bigint(20)
  • currency_id tinyint(3)
  • amount decimal(15,2)
  • amount_backup decimal(15,2) - Может неравномерно обнуляться из-за обработки, а затем - отката new_reduction()
  • last_update int(11) - Время последнего пересчета суммы с учетом % из miner_pct
  • log_id bigint(20) - ID log_wallets, откуда будем брать данные при откате на 1 блок. 0 - значит при откате нужно удалить строку

wallets_buffer

Суммируем все списания, которые еще не в блоке

  • hash binary(32) - Хэш транзакции. Нужно для удаления данных из буфера после того, как транзакция была обработана в блоке либо аннулирована из-за ошибок при повторной проверке
  • del_block_id bigint(20) - Т.к. удалять нельзя из-за возможного отката блока, приходится делать *delete=1, а через сутки - чистить
  • user_id bigint(20)
  • currency_id tinyint(3)
  • amount decimal(15,2)
  • block_id bigint(20) - Может быть = 0. Номер блока, в котором была занесена запись. Если блок в процессе фронт. проверки окажется невалидным, то просто удалим все данные по block_id

forex_orders

  • id bigint(20)
  • user_id bigint(20) - Чей ордер
  • sell_currency_id tinyint(3) - Что продается
  • sell_rate decimal(20,10) - По какому курсу к buy_currency_id
  • amount decimal(15,2) - Сколько осталось на данном ордере
  • buy_currency_id int(10) - Какая валюта нужна
  • commission decimal(15,2) - Какую отдали комиссию ноду-генератору
  • empty_block_id bigint(20) - Если ордер опустошили, то тут будет номер блока. Чтобы потом удалить старые записи
  • del_block_id bigint(20) - Если юзер решил удалить ордер, то тут будет номер блока

log_forex_orders

Все ордеры, которые были затронуты в результате тр-ии

  • id bigint(20)
  • main_id bigint(20) - ID из log_forex_orders_main. Для откатов
  • order_id bigint(20) - Какой ордер был задействован. Для откатов
  • amount decimal(15,2) - Какая сумма была вычтена из ордера
  • to_user_id bigint(20) - Какому юзеру было начислено amount
  • new tinyint(3) - Если 1, то был создан новый ордер. При 1 amount не указывается, т.к. при откате будет просто удалена запись из forex_orders
  • block_id bigint(20) - Для откатов

log_forex_orders_main

Каждый ордер пишется сюда. При откате любого ордера просто берем последнюю строку отсюда

  • id bigint(20)
  • block_id bigint(20) - Чтобы можно было понять, какие данные можно смело удалять из-за их давности

log_time_money_orders

В один блок не должно попасть более чем 10 тр-ий перевода средств или создания forex-ордеров на суммы менее эквивалента 0.05-0.1$ по текущему курсу

  • tx_hash binary(16) - По этому хэшу отмечается, что данная тр-ия попала в блок, и ставится *del_block_id
  • user_id bigint(20)
  • del_block_id bigint(20) - block_id сюда пишется в тот момент, когда тр-ия попала в блок и уже не используется для фронтальной проверки. Нужно, чтобы можно было понять, какие данные можно смело удалять из-за их давности

_my_admin_messages

Эта табла видна только админу

  • id bigint(20)
  • add_time int(11) - для удаления старых my_pending
  • user_int_message_id int(11) - ID сообщения, которое присылает юзер
  • parent_user_int_message_id int(11) - Parent_id, который присылает юзер
  • user_id bigint(20)
  • enum('from_user','to_user')
  • subject varchar(255)
  • encrypted blob
  • decrypted tinyint(1)
  • message text
  • message_type tinyint(1)
  • message_subtype tinyint(1)
  • enum('my_pending','approved') DEFAULT 'my_pending
  • close tinyint(1) - Вопрос закрыли, чтобы больше не маячил

my_comments

Чтобы было проще понять причину отказов

  • enum('miner','promised_amount')
  • vote_id int(11)
  • comment varchar(255)

authorization

  • hash binary(16)
  • data varchar(20)

community

Если не пусто, то работаем в режиме пула

  • user_id int(11)

backup_community

  • uniq enum('1') DEFAULT '1
  • data text

payment_systems

Для тех, кто не хочет встречаться для обмена кода на наличные

  • id bigint(20)
  • name varchar(255)

config

  • php_path varchar(255) - Нужно для запуска демонов
  • my_block_id int(11) - Параллельно с info_block пишем и сюда. Нужно при обнулении рабочих таблиц, чтобы знать, до какого блока не трогаем таблы my_
  • local_gate_ip varchar(255) - Если тут не пусто, то connector.php будет неактивным, а ip для disseminator.php будет браться тут. Нужно для защищенного режима
  • static_node_user_id int(11) - Все исходящие тр-ии будут подписаны публичным ключом этой ноды. Нужно для защищенного режима
  • in_connections_ip_limit int(11) - Кол-во запросов от 1 ip за минуту
  • in_connections int(11) - Кол-во нодов и просто юзеров, от кого принимаем данные. Считаем кол-во ip за 1 минуту
  • out_connections int(11) - Кол-во нодов, кому шлем данные
  • bad_blocks text - Номера и sign плохих блоков. Нужно, чтобы не подцепить более длинную, но глючную цепочку блоков
  • pool_max_users int(11) DEFAULT '100
  • pool_admin_user_id int(11)

См. также

Clone this wiki locally