Перевод Доказуемо честная игра

Тема в разделе "Статьи", создана пользователем Mr. Pickles, 24 дек 2019.

  1. Mr. Pickles

    Команда форума Модератор Редактор

    Регистрация:
    11 сен 2017
    Сообщения:
    745
    Симпатии:
    223
    Игра, в которой участники имеют равные шансы

    Каждую минуту рождается лох.
    Авторство приписывается Майклу Кассиусу Макдональду

    Мне нравится фильм Одиннадцать друзей Оушена (2011). Меня восхитило то, как они провернули ограбление, а также как они выиграли у казино, играя в различные игры, конечно же, обманным способом: они взломали игровые автоматы, они жульничали в карточные игры и они управляли кубиками, играя в кости, подобно волшебникам. И всё это делалось стильно.

    Безусловно, жульничать можно и в реальном мире. Например, можно подбрасывать монету, у которой «орёл» будет с обеих сторон. Или же такая монета будет тяжелее с одной стороны, в результате чего шанс на победу составит 55%, а вероятность поражения — 45%. И это проблема, если вы рассчитываете на честную игру, в которой шансы будут 50/50.

    При этом довольно сложно проверить, честно или нет ведётся игра. Допустим, в случае с монетой вы с некоторой вероятностью можете почувствовать, что с ней что-то не так, а для проверки игровых кубиков существуют специальные механизмы, но ведь никогда нельзя быть уверенным до конца. С азартными играми в интернете та же история. Зачастую доверие к сайту улетучивается, и появляется убеждённость в том, что сайт дурит вас.
    При помощи криптовалют мы можем создать схему, благодаря которой игра станет доказуемо честной. Мы можем создать игровой сайт, пользователи которого будут уверены в том, что ставки делаются честно (с математической точностью) и без участия доверенной третьей стороны, что будет только способствовать игровому процессу.

    Начальные числа и генераторы псевдослучайных чисел

    Чтобы понять, как работает схема, которую я собираюсь описать, прежде всего, необходимо знать, что такое генераторы псевдослучайных чисел. Возьмём, например, такую случайную последовательность:
    Код:
    1 2 2 9 0 3 3 8 5 9 …
    Тут важно то, что вы не можете предсказать, какое число будет следующим. Поэтому последовательность случайна.

    Но если мы захотим подбросить монету и узнать, какой стороной она легла, не глядя на неё, то как нам это сделать? Очень просто — надо подбросить её точно так же, как вы подбросили её до этого, и она приземлится точно так же (а я и не обещал, что всё обойдётся совсем без сложностей).

    В случае с генератором псевдослучайных чисел мы можем сделать ровно это. Мы даём ему начальное число, которое станет основой последовательности, которую нельзя спрогнозировать, но только если вы и в следующий раз зададите то же начальное число, то и последовательность в результате будет той же. Например:

    Начальное число 7:
    Код:
    5 2 6 0 1 8 1 5 9 0 …
    Начальное число 13:
    Код:
    4 4 2 3 2 3 2 2 1 8 …
    Генератор псевдослучайных чисел может выдавать последовательность чисел, количество раз, которое подбрасывается монета, или даже сгенерировать весь мир Minecraft.
    Простая схема доказуемо честной игры

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

    Наш игровой алгоритм прост. Мы свяжем начальное число казино с начальным числом пользователя и используем их для запуска генератора псевдослучайных чисел, который подбросит монету, чтобы определить победителя. Вот простой скрипт, написанный на Python 3, позволяющий сделать это:
    Код:
    import random
    
    casino_seed = input("Please enter the casino seed: ")
    player_seed = input("Please enter the player seed: ")
    our_seed = casino_seed + player_seed
    
    print("Using seed:", our_seed)
    random.seed(our_seed)
    
    print("The winner is:", random.choice(["casino", "player"]))
    
    Важно, чтобы казино дало начальное число, зашифрованное при помощи необратимой хеш-функции. В противном случае игрок может просто выбрать выигрышное начальное число, и никакой игры не будет. Как только игрок отправит казино своё начальное число, ставка будет сделана, и казино должно будет раскрыть своё начальное число (которое мы можем проверить при помощи хешированного значения), и станет ясно, кто проиграл, а кто выиграл.

    На практике игра могла бы выглядеть следующим образом:

    1. Казино отправляет игроку начальное число, зашифрованное при помощи SHA-256:
    2. Игрок отправляет казино своё начальное число, равное 1.

    3. Казино говорит, что выиграло, и раскрывает своё начальное число, равное 4.
    Для того чтобы доказать, что ставка действительно была сделана, вышеописанное взаимодействие должно быть подписано обеими сторонами и дополнено временными метками. Это даже необязательно должно фиксироваться в блокчейне. Будет достаточно публичных ключей, связанных с их личностями. Как только каждая из сторон подпишет своё сообщение, всё получится.
    Теперь игрок захочет убедиться в том, что действительно проиграл:

    1. Сначала проверяется, действительно ли казино использовало начальное число, равное 4:
    Код:
    echo -n "4" | sha256sum
    В результате мы получаем хеш SHA-256:
    Хеш соответствует тому, что давало казино до ставки.

    2. Затем мы можем использовать скрипт, написанный на Python, чтобы проверить честность игры:
    Код:
    Please enter the casino seed: 4
    Please enter the player seed: 1
    Using seed: 41
    The winner is: casino
    Это доказывает, что казино победило честно и справедливо.​

    Ограничения, связанные с данной схемой


    Существуют ограничения, связанные даже с простым, описанным мною примером.

    1. Начальные числа должны быть длиннее
    Начальное число, вроде 4, слишком простое. Чтобы игра стала безопаснее, нам потребуется число подлиннее. Возможно, что-то вроде 65654687731080707945.

    2. Игры с большим количеством участников сложнее

    Эта схема прекрасно работает в случае с одним игроком, например, при подбрасывании монеты. Но если нам захочется создать доказуемо честную игру в покер, то реализация будет гораздо сложнее, но всё же возможна.
    3. Схема подходит только для цифровых игр с фактором случайности
    Подобный способ делать ставки не подходит для реального мира, как в случае с обычным хоккеем, где доверенная третья сторона объявляет результат игры (такую третью сторону ещё называют «оракулом»).​

    Как всё это связано с криптовалютами?

    До этого момента я говорил о необходимости криптовалют (и если вам не нужны они, то и не используйте). Так зачем нужна эта глава в книге, посвящённой криптовалютам?

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

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

    При помощи смарт-контрактов на базе криптовалют, написанных на таком «языке», подобных Ethereum, мы также можем и принудить казино к выплате выигрышей. В нашем примере, когда делаются ставки, и казино, и игрок должны заблокировать свои средства при помощи смарт-контракта, который разыграет ставку (подобно нашему скрипту, написанному на Python) и отправит средства победителю. В результате риск того, что казино откажется выплачивать причитающееся победителю, исчезнет, так как смарт-контракт обяжет его сделать это.
    Также мы можем улучшить положение дел со спортивными тотализаторами. Смарт-контракт наделяет оракула полномочиями передавать выигранные деньги победителю. Но он сможет отправить их либо казино, либо игроку, либо никому другому. Таким образом, сам он не сможет украсть деньги. Мы доверяем оракулу с точки зрения объявления результатов игры, но мы не доверяем ему с точки зрения хранения наших средств.
    Вот так криптовалюты могут способствовать усовершенствованию игрового процесса.

    Источник: Provably fair gambling

    Перевод:
    Mr. Pickles (@v1docq47)
    Редактирование:
    Agent LvM (@LvMi4)
    Коррекция:
    Kukima (@Kukima)
     
    #1 Mr. Pickles, 24 дек 2019
    Последнее редактирование: 24 дек 2019
    TheFuzzStone нравится это.
  • О нас

    Наш сайт является одним из уникальных мест, где русскоязычное сообщество Monero может свободно общаться на темы, связанные с этой криптовалютой. Мы стараемся публиковать полезные мануалы и статьи (как собственные, так и переводы с английского) о криптовалюте Monero. Если вы хорошо владеете английским (или можете писать собственные статьи/мануалы) и хотите помочь в переводах и общем развитии Monero для русскоязычной аудитории - свяжитесь с одним из администраторов.