Перейти к публикации
Garrett

Достоверный механизм выбора победителя в крипто лотереях

Рекомендованные сообщения

(изменено)

В ходе недавней дискуссии в этой теме https://forum.bits.media/index.php?/topic/9194-kripto-lotereia/

У меня возникло понимание необходимости сделать механизм выбора победителя, абсолютно достоверный и прозрачный для всех участников лотереи.  Как обеспечить выбор победителя крипто-лотереи без сомнения честно, публично, проверяемо, т.е. математически?

 

Сначала были мысли задействовать один из онлайн сервисов RND-счетчиков со временным штампом и публичным логом. Но, тут пришла идея, в которой не нужен вообще никакой внешний сервис - все расчеты ведутся на основе самого блокчейна!

 

Итак, суть.

 

Участники лотереи отправляют на некий адрес взносы по X EMC (или BTC, LTC механизм работает для любой крипты)
По условиям, желающие могут сделать несколько взносов на этот адрес, но в фиксированной сумме. Таким образом покупая один или несколько "билетов".
Взносы должны быть отправлены до наступления особого момента - появления в сети блока N (скорость появления блоков известна и можно приблизительно задать время лотереи)
С этого момента начинается вычисление победителя:

 

Мы берем TXID (Идентификатор транзакций, как его найти - тут) в том порядке в котором они поступали на адрес и составляем таблицу:

 

355e8aeb17c089ede2a5f0a60b44ef87ce9d19b91a501c74eeb712ef07af541d
c6718b5d71efe9f78bf75cad00d888b455eb7ecbadf13ef814954363e57aa100
b52006948fdb8cc602a094a4dac1e0e34fe4d3210daebc8f8767f065c62efa6d
....
ce64911d80279310b85c8c1fc28e3862a4334703d8354824e3287d934317c63f

 

Затем мы производим операцию XOR c каждым TX ID по порядку. Первая со второй, результат с третьей, результат с четвертой... и так до конца.
Затем полученное 256 битное число мы объединяем (XOR) с хешем того самого блока N.
Полученное число делится на восемь 64-битных целых чисел, которые объединяются все тем-же методом XOR.
Полученное число делится на число "билетов" с вычислением остатка. Полученное число является номером той TX ID которая победила. Разумеется, адрес победителя нам тоже автоматически известен.

Объявляется победитель, на адрес с которого был отправлен взнос переводится сумма приза.

Можно сделать несколько победителей (хоть 3, хоть 30) для этого из списка TX-ID нужно выдергивать последний выигрышный номер транзакции и заново прогонять алгоритм.

 

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

 

Для проверки предлагаю прогнать пару тестовых лотерей:

 

На блокчейне EmerCoin и Bitcoin.

 

Для EmerCoin кошелек для взноса EXUr7Qjgsh6LYeWkBm1fFZn5WYjD323RCk

Стоимость одного билета 100 EMC (Меньшая сумма не принимается за взнос. Большая принимается, но билет все же один)

Можно покупать сколько угодно билетов, перечисляя на вышеуказанный адрес по 100 EMC в течении времени пока не появится в сети:

Финишный Блок N = 57,374 (~1,5 неделя от 1 сентября 2014 )

Сервис для онлайн просмотра блокчейна - http://darkgamex.ch:2752/chain/Emercoin

 

 

Аналогичные условия для BitCoin лотереи:

 

Кошелек для взноса 1B26Gk6bKm7WvK1AJokhrWEuhKi4YUao2u

Стоимость одного билета - 0.01 BTC

Финишный Блок N = 320487 (~2 недели от 1 сентября 2014)

Сервис для онлайн просмотра блокчейна - https://blockchain.info

 

По достижению финишных блоков, производим расчет и определяем победителей!

 

Выигрыш будет разделен следующим образом 70% - 1 победитель

20% - второй победитель 7% - третий победитель 3% - на проект emerfor.org, комиссии и организационные издержки.

 

Давайте начнем! Можно участвовать в какой-то одной, можно в обеих сразу.

После совершения перевода пишите TX ID в комментариях к этому посту.

 

Если не наберется больше 10 участников в одной из лотерей - взносы возвращаются участникам в полном объеме.

 

Ну и вопросы, разумеется.

 

PS: Я тоже играю и буду делать несколько ставок   нет, делаю по 1 ставке в каждую, ниже объясню почему.

 

EmerCoin lotary:

 

1) Garrett - 20623515ff4b96c611af1437edad15f19f3d4beaca8b2ea273777babf0cd6e12

2) Nanna - 1f1ed9488eb799be17d4ee96998f8b9d51a274141300195c452910af518e2ae2

 

BitCoin lotary:

 

1) Garrett - 53b39efc779be4bff3881c475cbb2d15d84bf5c4f3485e18ab3ccbf10508c349

Изменено пользователем Garrett

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

.

Изменено пользователем temrus63

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Затем мы производим операцию XOR c каждым TX ID по порядку. Первая со второй, результат с третьей, результат с четвертой... и так до конца. Затем полученное 256 битное число мы объединяем (XOR) с хешем того самого блока N. Полученное число делится на восемь 64-битных целых чисел, которые объединяются все тем-же методом XOR. Полученное число делится на число "билетов" с вычислением остатка. Полученное число является номером той TX ID которая победила. Разумеется, адрес победителя нам тоже автоматически известен.

А почему нельзя хеш блока тупо  разделить на число билетов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А почему нельзя хеш блока тупо  разделить на число билетов?

 

Можно и так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

звучит как кручу-верчу, запутать хочу)

 

тем более гаррет,  емц это твоя монета - как захочешь, так и накрутишь)

 

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

 

Говори сразу - ты не понял алгоритма. Будем разбирать по пунктам.

 

Я ссылку на твою лотерею в самом начале поста привел, если что. Так что у читателей есть выбор в какой участвовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Можно и так.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Во-первых, я очень извиняюсь, но что такое TX ID и где (как) его посмотреть? (в гугле не банили, но ооочень лениво искать)

 

Во-вторых, в схеме есть один сомнительный момент: порядковые номера билетов не подтверждаются математически. То есть, гипотетически, у организатора есть возможность слегка "переставить" участников пост-фактум (и кто вспомнит, какая там была таблица?). И потом, когда кто-то начнёт возмущаться, что "я был не пятнадцатым, а шестнадцатым", не будет никаких математических доказательств - только свидетельские показания.

На начальном этапе, в рамках форума, можно этот изъян не учитывать, апеллируя к репутации организатора и небольшому числу участников, но в идеале нужна система разбора конфликтных ситуаций, строго (т.е. математически) подтверждающая порядковый номер билета. Например, при покупке нового билета участнику выдаётся подпись к сообщению (номер билета || TXID). Или же можно под подпись включать всю цепочку предыдущих TXID-ов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Nanna, TX ID это идентификатор транзакции. Найти ее очень просто. Открываем клиент EmerCoin, идем на вкладку "Транзакции",  выбираем нужную транзакцию, кликаем правой мышью и открываем менюшку. В ней в самом низу выбираем, "Показать детали...". Открывается окно, в нем типа такого:

 

Статус: 4/не подтверждено, разослано через 4 узлов
Дата: 01.09.2014 10:27
Дебет: -100.00 EMC
Кредит: 100.00 EMC
Комиссия: -0.01 EMC
Общая сумма: -0.01 EMC
Идентификатор транзакции: 20623515ff4b96c611af1437edad15f19f3d4beaca8b2ea273777babf0cd6e12

 

Последнее это то, что нам надо.
 

Во-вторых, в схеме есть один сомнительный момент: порядковые номера билетов не подтверждаются математически. То есть, гипотетически, у организатора есть возможность слегка "переставить" участников пост-фактум (и кто вспомнит, какая там была таблица?).

 

На начальном этапе, в рамках форума, можно этот изъян не учитывать, апеллируя к репутации организатора и небольшому числу участников,

 

Нет, тут все в порядке. Каждая транзакция имеет поле "confirmations" (число подтверждений) - т.е. какое количество блоков назад она получена. Единственный момент, когда несколько транзакций идут в одном блоке, но на это есть поле "time", оно позволяет оценить, какая была раньше.

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

Изменено пользователем Garrett

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

Так проще считать, это точно. Но вот как ты оцениваешь предсказуемость? Почему, если мы на искомый хеш наксорим 100 чисел перед тем как разделить, результат будет более предсказуем? Чем больше случайных переменных участвовало, тем "более случаен" результат, разве не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что ж, давайте сыграем :)

 

1f1ed9488eb799be17d4ee96998f8b9d51a274141300195c452910af518e2ae2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

PS: Я тоже играю и буду делать несколько ставок   нет, делаю по 1 ставке в каждую, ниже объясню почему.

 

Объясняю.

 

Если энтузиазм участников будет мал, например 2-3 человека сделают ставки, то я могу, например, ближе к концу сделать 7 ставок. И закрыть минимальное число билетов 10.  Тогда с вероятностью 7 из 10 я выиграю 1 приз, и вероятностью 6 из 9 второй. Это не является мошенничеством, потому что все ставки рискуют, но специально уменьшать шансы первопроходцев я не хочу.

 

Отсюда может вылиться следующее явление: игроки будут стараться заполучить больше преимущества выкупая все больше билетов, увеличивая свои шансы, и уменьшая шансы противников. Например кто-то ставит сразу 15 билетов в надежде легкой победы, а другой 50 и так далее. Похоже это будет действительно азартная игра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Изменено пользователем temrus63

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

путанные правила нужны только чтобы запутать людей

 

@temrus63, Ничего сложного в них нет, вон, даже девушка Nanna разобралась, а она в крипту на года на два позже тебя пришла :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Моя ставка:

 

20623515ff4b96c611af1437edad15f19f3d4beaca8b2ea273777babf0cd6e12  EMC

53b39efc779be4bff3881c475cbb2d15d84bf5c4f3485e18ab3ccbf10508c349  BTC

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

.

Изменено пользователем temrus63

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Изменено пользователем temrus63

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Оказывается, в списке консольных команд Биткоина (последней версии включительно) нет таких, которые бы позволяли увидеть статистику чужого адреса! Т.е. я могу вывести список транзакций командой listtransactions [account] [count=10] [from=0] но только своих.

Это означает дополнительные трудности в нашем случае и ряде других. Конечно, можно методично лазить по блокчейн эксплореру, но это дополнительный гимор.

Мы решили добавить консольную команду выборки списка транзакций, совершенных на произвольный EMC-адрес в интервале блоков.

gettxlistfor [start Block] [finish Block] <Emercoin adress>  с ее помощью любой пользователь EmerCoin сможет проверить порядок поступления транзакций на адрес и убедиться, что он одинаков для всех.

Собственно, команду уже сделали, сейчас гоняем тесты, в релизе появится уже сегодня.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Команда  gettxlistfor <from block> <to block> <address> [type=0] [verbose=0] доступна в релизе 0.2.4

Если вы введете в консоли отладке (либо в терминале)

 

gettxlistfor 50000 55943 EXUr7Qjgsh6LYeWkBm1fFZn5WYjD323RCk 1 1

 

Вы получите список всех транзакций на адрес нашей лотереи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пока получается, что играю я против казино :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Nanna, похоже, затея никому не интересна, ну да и ладно эксперимент есть эксперимент.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Осталось ~500 блоков до конца, но так-как никто не присоединился. Возвращаю @Nanna, ее взнос +150 EMC сверху - за смелость :) -  673d389e50a08ff227c8e30130c8c4b5291ad3094af58f63679fcef27027efbb

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо! Можно считать - выиграла в лотерею :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×