Новый 2 Earn формат 💩
Предисловие
Очень-очень много лет назад у меня родилась одна идея, которую я так и не реализовал, хотя совершал целых 3 попытки.
Суть идеи в том, чтобы создать сайт/площадку, где игроки могут создавать свои истории (рассказы, повествования), а другие игроки могут их дополнять. Тем самым получается (в теории) какой-то интересный и необычный рассказ. Планировалось продвигать этот сайт в кругу заинтересованных людей, по типу литературных форумов.
Самая первая версия писалась на движке-конструкторе ucoz и называлась «Пишем историю вместе». Вторая версия писалась на React и называлась Worlds Tale. А третья и последняя версия писалась уже на solid-js (🤔) и называлась Fairy Tales.
В версии которая была написала по сути не было дизайна, но был базовый функционал, можно было создавать отдельные истории и дополнять их. Каждый дополненный кусок текста становился новым абзацем и фиксировался за игроком который его добавил. Из фич которые еще планировались, это возможность ставить лайки/дизлайки на каждый абзац. В целом это вся суть проекта
Токен и NFT 🤑🪝
Внезапно спустя много лет я понял что сюда хорошо ложиться концепция 2 Earn игр/проектов. Люди что-то делаю и получают за это токены. В данном случае они будут получать их за то, что дополняют истории других игроков. Смысла вообще в этом мало, зато можно заработать. Есть несколько версий экономической модели проекта (я их почти не продумывал, всё это то, что первое пришло в голову)
Экономика и игровые механики
✅ [Beta] Экономическая модель #1
- Игрок 1 начинает новую историю, за это ему нужно заплатить N токенов проекта
- Игрок 2 не хочет создавать свою историю (просто не хочет или не хочет платить за это N токенов проекта), поэтому он находит уже кем-то созданную и дополняет её. За это он возможно тоже платит токеном N, но намного меньше
- Аналогично поступает и Игрок 3, 4, 5…
- За это время которое игроки дополняли истории, они и другие игроки оценивали дополнения других игроков, ставили лайки или дизлайки
- Спустя какое-то время, Игрок 1 (создатель этой истории), решает что история уже завершена и отмечает её как завершенная. В этот момент все игроки, которые вносили дополнения в эту историю получают прибыль в виде токена проекта, сумма этой прибыли расчитывается по формуле, но чем больше суммарно лайков получили дополнения этого игрока, тем больше токенов он получит
- А Игрок 1 (создатель этой истории) вместо токенов, получает NFT представление всей этой истории (да, типа NFT текста)
- Что делать дальше с этим нфт надо уже думать. Можно например сделать вариант в котором Игрок 1 может пойти на маркетплейс и перепродать эту нфт. Или же он может пойти отправить его в стейкинг и получать какой-то пассивный доход.
❌ [Beta] Экономическая модель #2
- Игроки не могут создавать новые истории, только дополнять
- Игрок 1 хочет дополнить какую-то историю, для этого ему нужно купить NFT ручку, которая позволит это делать. У неё будет редкость и какие-то характеристики, например кол-во чернил, удобность, хз еще что-то
- Он дополняет историю и получает за это N токенов проекта. Возможно должна быть какая-то энергия, типа 10 дополнений за день
- NFT ручку перепродает на маркетплейсе
Истории и дополнения
Истории не могут быть бесконечные, поэтому есть ограничение на количество дополнений в неё и деление на такие типы:
Тип истории по её длине определяет игрок создавший её.
Прибыль игрока за его дополнения будет зависеть от его любимого жанра
Любимый жанр игрока - жанр, в который он больше всего вносил дополнений. К примеру если он внес 5 дополнений в жанр Детектив и 3 в Юмор, то его любимый жанр будет считаться Детектив
Если игрок делает дополнение в историю его любимого жанра, то он получает дополнительную прибыль. Коэффициент прибыли должен рассчитываться по какой-то хитрой формуле, но иметь зависимость: чем больший процент дополнений в любимый жанр, тем большая прибыль
1. У игрока 100 дополнений в жанр Детектив и 0 дополнений в другие жанры - он получает максимальный коэффициент прибыли
2. У игрока 50 дополнений в жанр Детектив и 49 дополнений в жанр Роман - он получает минимальный коэффициент прибыли
3. У игрока 50 дополнений в жанр Детектив и 50 дополнений в жанр Роман - у него нет любимого жанра и он не получает дополнительную прибыль за жанр
Коэффициент прибыли за любимый жанр не рассчитывается для жанра Общая, также этот жанр не может быть указан как любимый у игрока
Игрок не может дополнять одну и ту же историю 2 или больше раза подряд, между его дополнениями должно быть хотя бы 1 чужое. Также процент его дополнений истории не должен превышать 33% от общего количества её дополнений
Ранги/титулы игроков
У каждого игрока есть определенный ранг, от которого зависят его возможности. Некоторые ранги имеют меньше прав относительно других, но у них будут определенные преимущества. К примеру игрок с одним рангом может как создавать так и дополнять истории, а игрок с другим только дополнять, но за это он получает больше прибыли чем первый.
Идея в том, чтобы создать иерархическую систему рангов с разными ответвлениями, где каждый игрок будет идти путем, который он считает наиболее эффективным.
Переход на ранг происходит только в одном направлении по древу, без возможности вернутся на предыдущий. Также переход является платным (возможно не все) и необязательным. При достижении условий для перехода на следующий ранг игрок может не делать этого, если не хочет. Вместо этого он остается на текущем ранге и продолжает играть, пока не достигнет условия для перехода на тот ранг, который ему интересен
Идея: изначально все игроки будут иметь ранг «Читатель», но можно перед запуском проекта провести лотерею (или классическая система с балами и заданиями на репосты, лайки) между желающими игроками и 50 счастливчиков смогут получить сразу статус «Писатель»
- Только просматривать истории, без возможности их дополнения или создания своих
- Лайкать истории/дополнения, но не больше чем 15 раз за 24 часа
Ограничение на кол-во лайков в день и на отключение дизлайков для этого ранга решает проблему при которой игроки могут создавать много аккаунтов и, либо накручивать лайки, либо массово дизлайкать других игроков тем самым лишая их прибыли
- Поставить 10 и более лайков на истории/дополнения
- Быть зарегистрированным больше 48 часов назад
- Иметь рейтинг ≥ 0
Активная история — та, которая еще не завершена её автором и не конвертирована в NFT
- Возможность создавать свои собственные истории, но не больше чем 1 активная за раз и не больше чем 1 за 24 часа
- Лайкать истории/дополнения, но не больше чем 20 раз за 24 часа
- Дизлайкать истории/дополнения, но не больше чем 10 раз за 24 часа
- Хотя бы 1 раз дополнить 10 и более разных историй
- Создать и завершить минимум 5 историй с количеством лайков минимум в 2 раза превышающим количество дизлайков
- Иметь рейтинг ≥ 100
- Возможности ранга «Писатель»
- Одновременно можно дополнять до 6 активных историй
- Одновременно можно создать до 2 историй
- Иметь ранг «Читатель»
- Быть зарегистрированным больше 14 дней назад
- Поставить 50 и более лайков на истории/дополнения
- Иметь рейтинг ≥ 0
Приватные истории — истории, участники которых не получают никакую прибыль за её дополнение. Но создатель такой истории по аналогии с обычной получит её NFT после завершения
Рейтинговая система
Кроме этого все игроки имеют показатель рейтинга. Он зависит от того, как его оценивают другие игроки и виляет на его общий получаемый доход
Хорошим примером рейтинговой системы является репутация на stackoverflow: https://ru.stackoverflow.com/help/whats-reputation. Она должна послужить примером при проектировании рейтинговой системы в игре
Идея: связать рейтинговую систему и ранговую. Чтобы перейти на определенный ранг, кроме того что надо выполнить условия перехода на него, так еще и нужно иметь определенное количество рейтинга
Рейтинг игрока может быть в пределах от -20 до +∞
За один день можно заработать максимум 200 баллов любым из ниже перечисленных способов
Репутация игрока повышается в следующих случаях:
- за успешно законченную историю: +50 (но только за первые 2 истории)
- за каждый лайк на его истории: +10
- за каждый лайк на его дополнении: +5
- за каждое дополнение к истории в момент её завершения, при условии, что количество лайков на нем в 2 раза больше чем дизлайков: +1 за каждый 10 лайков, но не больше 50
Репутация игрока понижается в следующих случаях:
- за каждый дизлайк на его истории: -2
- за каждый дизлайк на его дополнении: -1
- за каждый поставленный дизлайк на чью-то историю: -1
- за каждый поставленный дизлайк на чье-то дополнение: -1
Кроме этого рейтинговые баллы можно купить за игровой токен. Но чем больше у игрока рейтинг тем дороже будет стоить каждый следующий балл. Также цена значительно дороже за покупку баллов при отрицательном рейтинг, чем он ниже чем дороже
1. Рейтинг игрока равен 0, цена покупки 1 рейтингового балла будет, стоит Х, 2 баллов - 2X, 3 - 3Х и т.д.
2. Рейтинг игрока равен -20, цена покупки 1 рейтингового балла будет, стоит 10Х, 2 баллов - 8X, 3 - 6Х и т.д.
Лайки/дизлайки
Игроки в зависимости от своих рангов могут ставить лайки или дизлайки как на сами истории в целом, так и на дополнения. При этом нельзя оценивать свои же истории и дополнения.
Истории можно оценивать только в том случае, если она завершена хотя бы на 50%.
Положительная или отрицательная оценка истории влияет на ценность будущей NFT. А оценка дополнений влияет на прибыль, которую получит его автор в момент завершения истории. Если создатель по какой-то причине не завершил свою историю, то все её участники не получат прибыли, а сама нфт истории никогда не будет создана.
Каждый поставленный дизлайк отражается на рейтинге игрока. Это значит, что игроку нужно жертвовать своим рейтингом, если он действительно хочет поставить кому-то дизлайк. Если рейтинг игрока равен 0 то он не может ставить дизлайки на истории/дополнения.
Защита от ботов и спама
Полноценная регистрация
Сделать регистрацию не просто по кошельку, а по почте и паролю. Еще лучше через сторонний сервис по типу гугла
В целом идея не очень, т.к. не всем может понравиться подобное в web3 приложении, где авторизация может производиться через кошелек. Но с другой стороны большинство 2 Earn игр именно так и делает, к тому же так мы получаем базу почтовых адресов игроков и можно делать рассылки
Верификация данных через централизованный сервер
Перед отправкой данных в блокчейн, нужно их проверить и подписать доверенным лицом. Контракт будет пропускать только подписанные доверенным лицом данные. Алгоритм такой же как мы делали в MLC (https://github.com/MLC-Game/signer-server-test/blob/master/TestSign.sol)
Капча
Добавить капчу, чтобы нельзя было автоматизировать дополнение и создание историй. Идеально было бы взять google recaptcha v3 и капча будет проходить не заметно для пользователя
Проверка уникальности текста
При верификации данных на сервере можно добавить проверку на уникальность текста. Минусы в том, что неизвестно есть ли open source антиплагиаты, а если и есть то работаю они наверняка слишком медленно
Проверка осмысленности текста
Есть алгоритмы, которые различают набор букв от +- осмысленного текста со словами и предложениями. Они работаю на основе вычисления энтропии текста и учета частоты встречаемости комбинаций букв. Было бы круто внедрить что-то подобное
Проверка орфографии текста
Кроме этого было бы неплохо пропускать на добавление только качественно написанный текст с учетом правил языка
Блокчейн
При выборе блокчейна для игры в первую очередь нужно опираться на стоимость транзакций в нем. В данном случае операции могут быть довольно дорогие. Особенно при минте нфт истории: запись большого количества текста в контракт, множественное распределение токенов за раз.
Каждое дополнение истории будет храниться непосредственно в блокчейне. Но при создании нфт все её дополнения конвертируются в одну структуру и загружаются на IPFS, а в блокчейне минтиться нфт с ссылкой на ipfs
Полезности
- https://www.npmjs.com/package/apos-to-lex-form
- https://www.npmjs.com/package/spelling-corrector
- https://www.npmjs.com/package/stopword
- https://www.npmjs.com/package/natural
- https://studwood.net/2596777/informatika/proverka_teksta_osmyslennost
- https://cyberleninka.ru/article/n/metodika-proverki-odnorodnosti-teksta-i-vyyavleniya-plagiata-na-osnove-metoda-opornyh-vektorov-i-filtra-bystroy-korrelyatsii/viewer