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