«Игры на деньги вне блокчейна должны умереть»
Дмитрий Пичулин, известный под ником «deemru», стал победителем игры Fhloston Paradise, разработанной Tradisys на блокчейне Waves. Победу Дмитрию принес созданный им бот Patrollo. Дмитрий сделал всего восемь ставок по одному WAVES и в итоге выиграл 4700 WAVES (836300 руб.). В интервью Дмитрий рассказал о своем боте и перспективах игр на блокчейне.
Расскажите немного о себе. Чем занимаетесь? Когда заинтересовались технологией блокчейн?
Я — разработчик в сфере информационной безопасности. В блокчейн пришел с «хайпом» 2017 года, разобрался в технологии и остался ради технологии.
Что стало основной мотивацией для участия в игре?
Прежде всего — технический интерес. Хотелось разобраться как она работает, найти уязвимости, не дать игре закончиться, ну и «потроллить» остальных игроков, конечно.
Вы уже решили, как потратите выигрыш? В чем будете хранить его, если решите пока не тратить?
Не придумал что делать с выигрышем. Не ожидал его, поэтому и планов нет. Пока будет лежать как есть. Может, в какой-нибудь проект на Waves перетечет.
Почему вы решили принять участие в игре с помощью бота? Как пришла идея Patrollo? Могли бы рассказать подробнее о его разработке?
С уязвимостями не вышло. Я «поднял» игру в тестовой сети, поиграл сам с собой, перепробовал все варианты, но все оказалось «железно», уязвимостей в контракте нет. Стало ясно, что этим путем не победить.
Как вы искали уязвимости? Какие у Вас были гипотезы? Не могли бы привести пример кода?
Гипотез было две. Во-первых, атака на проверки типов данных в записях дата-транзакций. Например, я рассчитывал, что плохое кодирование позволит обойти проверку переиспользования transaction ID. Вторая — атака на целочисленное переполнение. Я рассчитывал, что есть способ задать слишком большую или отрицательную высоту и попытаться оказаться в прошлом.
$tx = $wk→txBroadcast ($wk→txSign ($wk→txData ([ 'heightToGetMoney' => -9223372036854775807 ])));
Что вы сделали, когда увидели, что ожидания по уязвимостям не подтвердились?
В своем телеграм-чате Tradisys посетовал, что пока в сети все тихо, игра будет вечной, но в неразберихе (при обновлениях нод или непредвиденных форках) шансы у хороших ботов повышаются. Там же, в чате, я принял вызов — написать хорошего бота, — что и сделал через пару дней. Код Patrollo я написал на языке PHP, на основе моего фреймворка WavesKit, в котором я стараюсь зафиксировать все самые лучшие техники для работы с блокчейном.
Проверил работу в тестовой сети, выложил код на github, запустил бота в основной сети и забыл про него.
Моя конфигурация Patrollo должна была решать две задачи: делать ставки как можно реже и работать как можно надежнее.
Первое решается крайне рискованными ставками, желательно в самом последнем блоке. В итоге я все же поставил бота на предпоследний блок, но с дополнительной задержкой в 29 секунд. Это позволило сделать всего восемь ставок за все время игры.
Почему именно 29 секунд? Как вы пришли к этому числу?
29 секунд появились постепенно. Сначала задержки не было, но я заметил, что на предпоследнем блоке бывали случаи одновременных ставок — то есть, ставить не было смысла. Тогда появилась задержка — кажется, в 17 секунд, но и она не помогла: все еще были одновременные ставки. Тогда я решил рисковать посильнее, но уж точно, чтобы не было одновременных ставок. Почему 17, 29 итд.? Просто любовь к простым числам. 24, 25, 26, 27, 28, 30 — все составные. А больше 30 секунд уже было бы совсем рискованно.
Как решился вопрос надежности?
Надежность решалась, главным образом, механизмом выбора рабочей ноды и, в меньшей степени, проведением трансфер-транзакции для ставки заранее, чтобы ставка в дата-транзакции уже точно ссылалась на существующую в блокчейне транзакцию.
Во время каждого круга цикла все ноды, заданные в конфигурации, опрашивались на предмет их текущей высоты, выбиралась нода с наибольшей текущей высотой, и с ней происходило дальнейшее взаимодействие. В моем понимании это должно было защитить от форков, недоступности, кэширования и возможных ошибок на нодах. Есть уверенность, что именно этот простой механизм и привел к победе.
В чем, на ваш взгляд, основные особенности и преимущества игр на блокчейне? Насколько перспективны для разработки игр публичные блокчейны вообще и блокчейн Waves в частности?
Главные преимущества — известные, зафиксированные и не меняющиеся правила игры, плюс равные условия доступа к игре из любой точки мира.
Игры на деньги вне блокчейна должны умереть.
У Waves богатый технический функционал, однако существуют нюансы, как присущие любым блокчейнам, так и специфические. И те, и другие пока не очень хорошо отражены в существующих инструментах разработчика.
Например, если бы вы попробовали реагировать на транзакции в режиме реального времени, а не на дистанции в 5–10 подтверждений, вы бы узнали о редких, но имеющих место явлениях: перепрыгивании транзакций из блока в блок, пропаже транзакций в одних блоках и появления в других. Все это критично для скорости и надежности любых приложений и должно быть решено в общем виде, но пока каждый разработчик достигает необходимого ему уровня надежности самостоятельно. Со временем, конечно, все это будет решено, но пока есть определенный, довольно высокий, порог вхождения и страх перед спецификой работы истинно децентрализованных блокчейнов в целом.
Чем игра FOMO отличается от других известных вам игр на блокчейне? В чем ее преимущества и недостатки?
Это — игры вдолгую. Интерес к таким играм растет с величиной выигрыша, а величина выигрыша растет со временем.
Идеально, если игра никогда не закончится. Когда игра заканчивается — это грустно…
Недавно была запущена игра Fhloston Paradise 2. Планируете ли принять в ней участие?
Да, если будет время и интерес, я предприму те же шаги: анализ на уязвимости, игра с самим собой в тестовой сети, бот, open source и т.д.
В заключение расскажите, пожалуйста, о своих планах как разработчика.
Мне интересно решать нерешенные задачи, а в теме блокчейна много нерешенных задач. Это — настоящий вызов! И он принят.