• Forum has been upgraded, all links, images, etc are as they were. Please see Official Announcements for more information

Самая честная лотерея 6 из 49 с испоьзованием DASH

Status
Not open for further replies.
6x49.jpg


Всем привет!

Предлагаю вашему вниманию самую честную и самую первую (?) электронную лотерею с использованием DASH 6 из 49 как в старом добром СпортЛото.
Давайте этот релиз назовем открытым бета-тестированием.
Собственно - сайт проекта: http://6x49.dnsresolve.org
Расскажу что уже сделано и как это работает.
1. Реализован автоматический приме DASH на виртуальном хостинге, т.е. у меня нет всяких запущенных демонов или установленных кошельков - все работает через анализ блокчейна и крон-таблицы.
Теперь, тут остается открытый вопрос - как реализовать автоматические выплаты в тех же самых DASH.

2. Реализован механизм правильного случайного распределения выпадающих чисел - используются API сайта RANDOM.ORG

3. Реализована проверка честности, результаты каждого розыгрыша закодированы по трем алгоритмам MD5, SHA256 и SHA512.

4. На данный момент таблица выигрыша такая:
» 1 цифра - ½ ставки возвращается
» 2 цифра - x1.5
» 3 цифра - x10
» 4 цифра - x100
» 5 цифра - x200
» 6 цифра - x500
Таким образом максимальный выигрыш может составит 50 х 500 = 25 000 DASH !

Хочу еще раз отметить, прямо сейчас все это в жестком бета-тесте, и любым вашим замечаниям и предложениям буду очень рад!
Добровольным тестерам могу закинуть на депозит некоторое кол-во дашей (виртуальных, естественно).
 
лучше раздай всем аккаунтам фейковых Dash для тестировання
 
Привет , много багов ) например при выпадение 1 номера с тебя еще списывают 50% ставки )
 
Привет , много багов ) например при выпадение 1 номера с тебя еще списывают 50% ставки )
так и задумано, если угадал 1 число - значит тебе и мне как говорится, лучше угадывать 2 числа или больше.
 
Мне казалось, что казино и всякие слоты на битке с проверкой честности уже придумали и реализовали ещё в прошлом году, ссылки с ходу не вспомню, но что-то такое видел, так что аккуратнее в описании насчёт "самую первую (?)",а так, идея супер.

2 вопроса:
1)зачем принимать dodge??! :eek: Это крипта по приколу создавалась и уже давно в минуса слилась, на одном честном слове держится. Может эфир или монеро?
2)я понимаю, что вероятность крошечная, но если чудо случится, у вас реально 25000 dash на кошельке лежит? Если это не так, а мне почему-то так и кажется, тогда насчет "самую честную" тоже писать не стоит, получается... :rolleyes:

Вообще желательно реализовать что бы в режиме реального времени сайт показывал баланс призового кошелька, типа как джекпот постоянно увеличивающийся в автоматах показывают, и что бы этот баланс можно было через блокчейн по гиперссылке проверить, в лучших традициях казино 2.0, было бы круто и доверие бы повысило:cool:
 
Last edited by a moderator:
1) доги - да по приколу просто, их никому не жалко, можно и поиграться.
2) конечно у меня нет да же и сотни DASH - я тут хотел раскрыть тему "честности" как таковой в программировании лотерейных сайтов и поделиться некоторыми своими наработками в этой области.
еще раз напишу - ну это же не рилиз прямо какой-то, просто пробуем (кому нужно все DASH зачисленные на счета верну!)
 
Привет всем, еще раз!
Расскажу, как я изобрел велосипед, т.е. прием DASH на сайте без использования различных демонов и установки какого либо кошелька на сервер.

Что нам обязательно потребуется для таких костылей?
Это парочка таблиц в базе данных MySQL, доступ к настройкам Cron таблиц на сервере и PHP интерпретатор – мало майски порядочный хостинг не больше чем за 3 бакса в пол года – дает нам такие возможности.

Итак, посмотри, на две таблички,
Первая - это таблица пользователей (собственно с логином, паролем, е-маилом и самым интересным полем – DASH – показывает, сколько денег на счет).
player.png


Вторая табличка – это таблица платежных адресов DASH с самим адресом, его статусом, суммой пополнения и датой активации.
address.png


Структура таблиц такая:
-- Дамп структуры для таблица 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 пост не влезает)

depo.png



Необходимо отметить, что платежные адреса генерируются и заполняются в таблицу адресов заранее, для этого я использовал бумажный бумажник DASH, т.е. вот этот сайт: https://paper.dash.org/
Генерируем сколько нужно (я сделал пару тысяч) и вставляем в таблицу.
paper.png



Вот такой велосипед.

Теоретически, можно как-то нагенерировать платежных адресов прямо в скрипте PHP, но я пока не разобрался как, поэтому нагенерировал из заранее...
 
Крон-модуль.
<?php
// этот скрипт запускается каждую минуту Cron’ом
include_once ("../mysql.php"); //подключаемся к MySQL
$query = mysql_query("SELECT * FROM lotto_dash_addres WHERE stat='REZERV'");
while($row = mysql_fetch_assoc($query)) // перебираем все зарезервированные адреса
{
$url = "http://explorer.dash.org/address/".$row['address']; // откуда нам читать блокчейн DASH
{
$random_org = getSslPage($url); // секретная функция из Гугла, позволяет читать https страницы, обычный file($url) не всегда прокатывает
$rund_str = explode("\n",$random_org); // делим информацию на строки в массив
$file = $rund_str[17]; // нам нужна 17 строка – это баланс адреса
$file = str_replace("<pre>Balance: ","",$file); // убираем там все лишнее
$file = str_replace("DASH","",$file); // убираем там все лишнее
$file = trim($file); // обрезаем лишние символы по всем краям строк
$sl_up = "";
if ($file!="<p><a href=\"../q\">API</a> (machine-readable pages)</p>") // если не равной этой шляпе, значит баланс пополнили
{
if (doubleval($file) > 0) // проверяем если это так, баланс больше нуля
{
$sql_up = "UPDATE lotto_player SET pDASH = pDASH + ".doubleval($file)." WHERE pid=".$row['player_id']." ";
mysql_query($sql_up); // обновляем баланс пользователя
$sql_up = "UPDATE lotto_dash_addres SET stat='OK', player_id=".$row['player_id'].", actdate='".date("Y-m-d",time())."', summa='".$file."' WHERE daid=".$row['daid']."";
mysql_query($sql_up); // обновляем сам адрес, он уже отработан
$fCONTENT .= $url."|".$file."\n"; // сообщаем админу сайта что кто-то что-то оплатил (у меня на хостинге cron отправляет почту если я чтото вывожу на экран)
}
}
}
if ($row['freetime'] < time()) // а если время освобождения же просрочено
{
$sql_up = "UPDATE lotto_dash_addres SET stat='FREE', player_id=0, freetime=0 WHERE stat='REZERV' AND daid=".$row['daid'];
mysql_query($sql_up); // освобождаем адрес
$fCONTENT .= $url."| Устарел и освободился\n"; // сообщаем админу
}
}
echo "<pre>".$fCONTENT."</pre>"; // у меня тут крон отправит почту админу
?>
<?php
// добрый Гугл нам подсказал, как загружать страницы за SSL
function getSslPage($url) { // заставляем работать с ssl
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
?>
 
Модуль "депозита"

<?php
if (empty($Player) && $do!='login' && $do!='auth')
{
header('Location: ./?do=login');
} /* в блоке выше у меня проверяется авторизовался ли пользователь или нет, если не – оправляем на страницу ввода логина и пароля */
$a = $_GET['a']; // переменная Аактион – т.е. что делается?
if ($a == 'generate') // пользователь заказал генерацию нового адреса
{
$rez = mysql_query("SELECT * FROM lotto_dash_addres WHERE stat='FREE' AND actdate = '0000-00-00' LIMIT 1");
$Addres = mysql_fetch_array($rez); // выбрали адрес
$free_time = time() + 60*60 + 60*12; // (тут я добавил 12 минут театральных на всякие там задержки или еще что то )
$sl_up = "UPDATE lotto_dash_addres SET stat='REZERV', player_id=".$Player['pid'].", freetime= ".$free_time." WHERE address='".$Addres['address']."'";
mysql_query($sl_up); // зарезервировали его
$addres_msg = "<small><strong>На этот адрес неоходиме внести депозит до ".date("H:i:s",$free_time - 60*12)." ! </strong></small> <Br>".$Addres['address'].""; // сообщили что адрес освободится через час
}
else
{ // нет пользователь не заказа еще новый адрес, ну что же нарисуем ему красивую кнопочку
$addres_msg = "<a href='./index.php?do=depo&v=DASH&a=generate'><div class='gradient'>Сгенерировать новый платежный адрес</div></a>";
}
$query = mysql_query("SELECT * FROM lotto_dash_addres WHERE stat='REZERV' AND player_id=".$Player['pid']);
while($row = mysql_fetch_assoc($query)) // тут перебираем адреса которые зарезервированы за пользователем, вдруг он про них забыл
{
$fCONTENT .= "<tr><td>Ожидает:<br><small>".date("d.mY - H:i:s",$row['freetime'] - 60*12)."</small></td><td><font face='courier new'>".$row['address']."</font></td><td>???</td></tr>"; // выводим в строчках тиблицы
}

$query = mysql_query("SELECT * FROM lotto_dash_addres WHERE stat='OK' AND player_id=".$Player['pid']." ORDER BY daid DESC");
while($row = mysql_fetch_assoc($query)) // а тут переборка адресов которые уже были оплачены
{
$fCONTENT .= "<tr style='border:1px solid #00cafa; background-color: #003775;'><td>Приход:<br><small>".date("d.mY - H:i:s",$row['freetime'])."</small></td><td><font color='#626262' face='courier new'>".$row['address']."</font></td><td>+".$row['summa']."</td></tr>";
// так же рисуем их в табличке (получилась история платежей)
}

// ниже просто html код странички для пользователя
$echo = "
<table width='100%' cellspacing='0' cellpadding='7' border='0' align='center'>
<tr>
<td width='100%' bgcolor='#0058a7' valign='top'>
<h1>Пополнить депозит в DASH</h1>
<hr>
Ваш платежный адрес:
<h2>".$addres_msg."</h2>
<strong>Внимание!</strong> Не используйте один платежный адрес дважды, всегда перед пополнением генерируйте новый адрес оплаты!<br>
Сгенерированные адреса действуют в течении 1 часа. Это значит, что если в течении 1 часа на него не поступила оплата - адрес удаляется и вам придется генерировать новый!<br>
<strong>Это важно!</strong>
<hr>
<h1>История и статус платежей</h1>
<table style='BORDER-COLLAPSE: collapse; border:1px solid #00cafa;' align='center' border='0' cellpadding='4' cellspacing='0' width='80%'>
".$fCONTENT."
</table>
</td>
</tr>
</table>";

$CONTENT .= $echo; // тут у меня как бы выводится на экран

?>
 
Человек явно сечет фишку. А команда dash как раз программистов набирает сейчас эволюшн запиливать, может свяжитесь с ними на этот счет?
 
$url = "http://explorer.dash.org/address/".$row['address']; // откуда нам читать блокчейн DASH
{
$random_org = getSslPage($url); // секретная функция из Гугла, позволяет читать https страницы, обычный file($url) не всегда прокатывает
$rund_str = explode("\n",$random_org); // делим информацию на строки в массив
$file = $rund_str[17]; // нам нужна 17 строка – это баланс адреса
$file = str_replace("<pre>Balance: ","",$file); // убираем там все лишнее
$file = str_replace("DASH","",$file); // убираем там все лишнее
$file = trim($file); // обрезаем лишние символы по всем краям строк
$sl_up = "";
Предлагаю заменить на чтение http://explorer.dash.org/chain/Dash/q/addressbalance/XfoGXXFJtobHvjwfszWnbMNZCBAHJWeN6G ;)
 
Status
Not open for further replies.
Back
Top