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

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

Что происходит с сегментом сейчас

Снаружи игровая экономика раскладывается на три стандарта. Различия существенны. ERC-20 в статусе Final создан 19 ноября 2015 года и не содержит понятия отличимых единиц или идентификаторов: это взаимозаменяемые количества с объявленным числом десятичных знаков. ERC-721 в статусе Final создан 24 января 2018 года: идентификатор равен предмету. ERC-1155 в статусе Final создан 17 июня 2018 года и позволяет одному контракту держать под разными идентификаторами и делимые балансы, и неделимые предметы.

Отдельное наблюдение из обращений читателей: шлюз вывода выключают раньше серверов. Проект может работать, сайт открываться, а кнопка вывода уже не отвечать — потому что внешний шлюз относится к инфраструктуре, которую сворачивают первой. Проверять доступность вывода нужно на дату, а не по описанию в документации, выпущенной год назад. Документация отстаёт.

Токен и предмет: четыре различия, которые решают всё

Разница не в оформлении. Она в правах. И в обратимости.

Признак Игровая валюта по ERC-20 Предмет по ERC-721 Смешанный контракт ERC-1155
Делимость при выводе Выводится любая часть баланса в пределах лимита шлюза Выводится целиком: половины предмета не существует Зависит от идентификатора: часть делимая, часть неделимая
Отличимость единиц Единицы неотличимы, стандарт не знает идентификаторов Каждый предмет имеет собственный идентификатор и владельца Идентификатор есть у типа, количество — у владельца внутри типа
Как читается баланс Функция по адресу владельца возвращает количество Функция по идентификатору возвращает адрес владельца Функция принимает и адрес, и идентификатор одновременно
Обратимость заноса назад Обычно двусторонний шлюз: количество можно вернуть в игру Часто односторонний: предмет возвращается без игрового состояния Определяется правилами проекта отдельно для каждого типа
Что уносит из игры Ничего, кроме количества: валюта не имеет свойств Идентификатор и метаданные, но не уровень и не привязки Количество и тип, набор свойств задаёт сам контракт

Из таблицы следует неочевидное. Токен терять нечего — он безличен. Предмет теряет часть себя, и потеря эта невидима до момента, когда вы попробуете занести его обратно.

Как вывести внутриигровые токены и активы за пределы проекта: что происходит с балансом

Внутри проекта работает двойная бухгалтерия. Первый слой — записи в базе: ваш игровой кошелёк, счётчики, инвентарь. Второй слой — адреса в сети: хранилище проекта и ваш внешний адрес. Вывод состоит из трёх событий, которые происходят не одновременно: списание во внутреннем слое, обращение к контракту, зачисление на ваш адрес. События разнесены во времени.

Разрыв между событиями и порождает основную путаницу. Строка в игре исчезла — значит, вывод прошёл? Нет. Исчезновение строки означает лишь, что заявка принята внутренним слоем, и до появления записи в сети токены не ваши, а в обработке. В редакционной практике это самый частый повод для обращений: баланс в игре обнулился, кошелёк пуст, человек считает средства потерянными, а заявка висит в шлюзе.

Пример условный, значения взяты для демонстрации механики округлений. Внутренний баланс — 1 250,4567 единицы, интерфейс игры показывает два знака: 1 250,45. Шлюз выводит целыми единицами, наружу уходит 1 250. Внутри остаётся 0,4567, из которых видно 0,45. Разница в 0,0067 не отображается нигде. Для стандарта ERC-20 это нормально: число десятичных знаков объявляет сам контракт, и у внешнего представления оно обычно больше, чем у игрового интерфейса.

Полезная деталь: стандарт ERC-20 требует, чтобы перенос нулевого количества обрабатывался как обычный и порождал событие переноса. Это значит, что в истории адреса может оказаться запись с нулём — она не ошибка и не признак взлома. Пугаться нечего.

Пошаговый сценарий вывода

Порядок закрывает оба типа активов. Шесть шагов.

Схема из шести шагов: проверить работу шлюза на дату, разделить заявку на токены и предметы, сверить адрес и сеть, вывести пробную сумму, вывести остальное с записью идентификаторов, сверить внутренний и адресный баланс
Схема из шести шагов: проверить работу шлюза на дату, разделить заявку на токены и предметы, сверить адрес и сеть, вывести пробную сумму, вывести остальное с записью идентификаторов, сверить внутренний и адресный баланс
  1. Убедитесь, что шлюз вывода работает на сегодняшнюю дату, и выясните, в какую сеть он отправляет токены и в какую — предметы. Сети могут не совпадать.
  2. Разделите заявку: токены отдельно, предметы отдельно. У них разные лимиты, разные окна обработки и разная обратимость.
  3. Сверьте адрес получателя по средним знакам и проверьте, что выбранная сеть совпадает с той, в которой вы собираетесь распоряжаться активами.
  4. Выведите пробную сумму токена — минимальную, какую пропускает шлюз. Дождитесь записи в сети, а не исчезновения строки в игре.
  5. Выведите остальное, записывая идентификаторы операций: по ним восстанавливается история, если внутренний интерфейс перестанет отвечать.
  6. Сверьте два слоя: внутренний баланс уменьшился и на адресе появилась запись. Расхождение означает заявку в обработке, а не потерю.

Что остаётся недоступным снаружи

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

  • Уровень, прокачка и накопленный прогресс: эти величины живут во внутреннем слое и в контракт не записываются.
  • Привязка предмета к персонажу или аккаунту: за пределами игры предмет становится записью владения без роли.
  • Сезонные эффекты и временные свойства, срок которых считает сервер проекта.
  • Вторая, «мягкая» валюта: во многих экономиках она не выводится вовсе и существует исключительно внутри.
  • Непередаваемые предметы: контракт может запрещать перенос, и тогда вывод невозможен технически.
  • Метаданные с сервера проекта: после сворачивания инфраструктуры внешний кошелёк покажет идентификатор без картинки и атрибутов.
Вывод не равен сохранению. Если ценность предмета создавалась игровым состоянием, снаружи она не сохраняется: уходит идентификатор, остаётся прогресс. Решайте до вывода, что именно вы хотите сохранить — право владения записью или возможность продолжать играть этим предметом.

Издержки: комиссии, роялти, газ

Тарифы шлюзов и площадок здесь не приводятся: они меняются чаще, чем живёт статья, и проверяются на дату в самом проекте. Структура издержек устойчивее цифр.

Плату за вычисления в сети несёт тот, кто подписывает операцию, и зависит она от сети и загрузки. Удержание шлюза задаёт проект, и оно бывает разным для токенов и предметов. Количество вызовов зависит от стандарта: стандарт ERC-1155 предусматривает пакетный перенос нескольких идентификаторов одной операцией и прямо указывает на экономию издержек при таком подходе, тогда как вывод токенов частями множит плату на число заявок. Детальнее структура удержаний разобрана в материале о том, как перевести предмет между кошельками и понять структуру комиссий, а тарифная логика посредников — в разборе о том, как разобраться в комиссиях площадки.

Риски и мошеннические схемы сегмента

Схемы вокруг вывода однотипны. Чаще прочих встречается поддельный шлюз: страница повторяет оформление проекта и предлагает подписать разрешение на распоряжение всем балансом вместо переноса конкретной суммы, и отличить одну подпись от другой на малом экране труднее, чем кажется. Подпись выглядит рутинной, последствия — нет.

Вторая схема — обещание ускорить вывод за отдельную плату. Третья — указание сети, в которой токен не обращается: активы приходят, распорядиться ими нельзя. Четвёртая возникает на объявлениях о сворачивании проекта, когда в чатах появляются «помощники по срочному выводу». Общее у всех одно: они торопят. Их узнают по спешке. Шлюз, работающий штатно, спешки не требует.

Отдельная категория — предметы, полученные бесплатно. Логика их получения разобрана в материале о том, как участвовать в бесплатной раздаче предметов, и перед выводом такие записи стоит пересчитать: часть из них попадает на адрес без вашего участия. А различие между игровой валютой и токеном, выпущенным вокруг сообщества, хорошо видно на примере из разбора про фан-токены клубов и модель участия болельщиков: права, которые даёт токен, определяются не стандартом, а правилами эмитента.

Итог

  • Работа шлюза проверена на текущую дату, а не по старой документации.
  • Известно, в какие сети уходят токены и в какие предметы, и они не перепутаны.
  • Заявка разделена: токены отдельно, предметы отдельно.
  • Пробный вывод минимальной суммы прошёл и подтверждён записью в сети.
  • Идентификаторы операций сохранены вне интерфейса проекта.
  • Два слоя сверены: внутренний баланс уменьшился, адресный увеличился.
  • Решено заранее, что важнее — владение записью снаружи или игровое состояние внутри.

Частые вопросы

Почему баланс в игре уменьшился, а на кошельке ничего нет?

Между списанием во внутреннем слое и зачислением на адрес проходит обработка заявки шлюзом, и длительность задаёт проект. До появления записи в сети активы находятся в пути. Сохраните идентификатор заявки и проверьте адрес по обозревателю: если записи нет, обращайтесь в поддержку с номером заявки, а не с описанием.

Можно ли вывести часть предмета, как часть валюты?

Нет. Предмет по ERC-721 неделим: идентификатор принадлежит одному адресу целиком. Делимость возможна у типов внутри ERC-1155, где у владельца есть количество внутри идентификатора, — но это решение контракта, а не ваше. Игровая валюта по ERC-20 делится свободно в пределах объявленного числа десятичных знаков.

Вернётся ли прокачка, если занести предмет обратно в игру?

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

Что делать, если проект объявил о закрытии?

Выводите в первую очередь то, что имеет хождение вне проекта, и не дожидайтесь последнего дня: шлюз отключают раньше серверов. Предметы, ценность которых держалась на игровом состоянии, снаружи этой ценности не сохранят. И не пользуйтесь услугами «ускоренного вывода» из чатов — на таких объявлениях схемы оживают.

Вердикт

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

Разборы по игровым экономикам, предметам и площадкам выходят в Telegram-канале Cryptium — там же отмечаем изменения в стандартах и документации сетей.