Привет всем, еще раз!
Расскажу, как я изобрел велосипед, т.е. прием DASH на сайте без использования различных демонов и установки какого либо кошелька на сервер.
Что нам обязательно потребуется для таких костылей?
Это парочка таблиц в базе данных MySQL, доступ к настройкам Cron таблиц на сервере и PHP интерпретатор – мало майски порядочный хостинг не больше чем за 3 бакса в пол года – дает нам такие возможности.
Итак, посмотри, на две таблички,
Первая - это таблица пользователей (собственно с логином, паролем, е-маилом и самым интересным полем – DASH – показывает, сколько денег на счет).
Вторая табличка – это таблица платежных адресов DASH с самим адресом, его статусом, суммой пополнения и датой активации.
Структура таблиц такая:
-
- Дамп структуры для таблица baysaru_6x45.lotto_dash_addres
CREATE TABLE IF NOT EXISTS `lotto_dash_addres` (
`daid` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ключ идентификатор',
`genid` int(10) DEFAULT '0' COMMENT 'порядковый номер платежного адреса',
`address` varchar(250) DEFAULT '0' COMMENT 'платежный адрес DASH',
`addkey` varchar(250) DEFAULT '0' COMMENT 'mpk Мастер ключ адреса',
`stat` varchar(250) DEFAULT 'FREE' COMMENT 'статус адреса',
`player_id` int(10) DEFAULT '0' COMMENT 'кому пренадлежит',
`actdate` date DEFAULT '0000-00-00' COMMENT 'дата активации',
`freetime` int(11) DEFAULT '0' COMMENT 'время освобождения',
`summa` varchar(50) DEFAULT '0' COMMENT 'сумма пополнения',
PRIMARY KEY (`daid`),
UNIQUE KEY `address` (`address`),
UNIQUE KEY `addkey` (`addkey`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Экспортируемые данные не выделены.
-- Дамп структуры для таблица baysaru_6x45.lotto_player
CREATE TABLE IF NOT EXISTS `lotto_player` (
`pid` int(10) NOT NULL AUTO_INCREMENT COMMENT 'идентификатор пользователя',
`pLogin` varchar(50) NOT NULL DEFAULT '0' COMMENT 'Логин',
`pPassw` varchar(50) NOT NULL DEFAULT '0' COMMENT 'Пароль в МД5',
`pEmail` varchar(50) NOT NULL DEFAULT '0' COMMENT 'Почта',
`pDASH` double NOT NULL DEFAULT '0' COMMENT 'Сколько ДАШей на счете',
`pBTC` varchar(50) NOT NULL DEFAULT '0' COMMENT 'Биткоин',
`pLTC` varchar(50) NOT NULL DEFAULT '0' COMMENT 'Лайты',
`pDOGE` varchar(50) NOT NULL DEFAULT '0' COMMENT 'Доги',
`pDatareg` int(10) NOT NULL DEFAULT '0' COMMENT 'Дата регистрации',
`pSex` int(10) NOT NULL DEFAULT '0' COMMENT 'Мальчик или девочка',
`pLastup` int(10) NOT NULL DEFAULT '0' COMMENT 'Врпемя последнего визита',
PRIMARY KEY (`pid`),
UNIQUE KEY `pLogin` (`pLogin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Значит, какой алгоритм нашей работы?
Пользователь желает пополнить депозит, для этого
1. из таблицы адресов для него выбираем первый свободный адрес – поле status должно быть ‘FREE’.
2. Помечаем адрес как занятый пользователе указываем status до ‘REZERV’, устанавливаем player_id = идентификатору пользователя желающего пополнить баланс, ставим время освобождения +1 час от текущего (в юникс формате) freetime = time()+60*60;
3. ждем оплаты – анализируя каждую минуту блокчейн DASH. (в следующем разделе расскажу)
4. если в течении часа оплаты нет, освобождаем адрес возвращая значения полей из 2-го в исходные.
5. если оплата поступила (в пункте 3), смотрим на сколько, обновляем статус адреса на status=’OK’, указываем summa = $$$$ (сколько там пришло из блокчейна) Обновляем табличку пользователей, указываем нашему желающему pDASH = pDASH+ summa.
Подробно по 3-му пункту.
Для анализа будем использовать официальный блокчейн DASH
http://explorer.dash.org/address/АДРЕС_ПРОВЕРКИ
значит в проверяющем скрипте ежеминутно (у меня так настроено, но теоретически можно и пореже) проверяем платежные адреса со статусом ‘REZER’, как только видим на любом из них не нулевой баланс обновляем его как выполненный status=’OK’ и обновляем баланс пользователя, кто зарезервировал этот адрес.
Так же это скрипт ежеминутно высвобождает адреса у которых подошло время освобождения и статус все еще не оплачен.
Вот конкретные исходники этого скрипта проверки:
см. след. сообщение (в 1 пост не влезает)
А теперь исходники модуля резерва адреса пользователем
см. след. сообщение (в 1 пост не влезает)
Необходимо отметить, что платежные адреса генерируются и заполняются в таблицу адресов заранее, для этого я использовал бумажный бумажник DASH, т.е. вот этот сайт:
https://paper.dash.org/
Генерируем сколько нужно (я сделал пару тысяч) и вставляем в таблицу.
Вот такой велосипед.
Теоретически, можно как-то нагенерировать платежных адресов прямо в скрипте PHP, но я пока не разобрался как, поэтому нагенерировал из заранее...