Полный цикл продажи NFT: approve, листинг и комиссии для iOS и Android

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

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Полный цикл продажи NFT: approve, листинг и комиссии для iOS и Android
Средний
~3-5 дней
Часто задаваемые вопросы

Почему продажа NFT в мобильном приложении ломается на этапе approve

Продажа NFT в мобильном приложении почти всегда упирается в один шаг — approve токена. Пользователь нажимает «Подтвердить», кошелёк открывает экран подписи, транзакция уходит в сеть — и дальше тишина. Экран висит в ожидании, кнопка листинга неактивна, а в истории кошелька красуется зависшая транзакция. Со стороны это выглядит как «приложение сломалось», хотя технически не прошёл один вызов.

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

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

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

Разбираем, как это закрывается: правильная последовательность approve → ожидание подтверждения → листинг, обработка зависших транзакций и предварительный расчёт комиссий до подписи.

Что даёт корректно выстроенный цикл продажи

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

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

Второй эффект — снижение отказов. Зависшие подтверждения возникают там, где приложение не отслеживает замену транзакции и не различает «ещё в обработке» и «отклонено сетью». Явная обработка этих состояний убирает повторные подписи, дубли листингов и ситуации, когда актив списан, а лот не создан.

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

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

Варианты реализации: встроенный кошелёк, внешний, гибрид

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

Вариант Когда подходит Ограничения
Встроенный кошелёк Массовый продукт, аудитория без опыта в крипте, нужен бесшовный вход Ключи под контролем приложения — нужен аппаратный модуль хранения и политика восстановления; approve и листинг проходят внутри, без прыжков в сторонние приложения
Внешний кошелёк Аудитория уже держит активы, важна самостоятельная опека ключей Подпись транзакций уходит в чужое приложение — часть пользователей отваливается на возврате; глубже связаны с конкретными кошельками
Гибридная схема Нужен и массовый вход, и поддержка опытных держателей Двойной набор сценариев approve, листинга и обработки отказов — дороже в разработке и тестировании

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

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

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

Как мы выстраиваем цикл продажи: от аудита до передачи

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

  1. Аудит текущей схемы. Смотрим, как приложение сейчас работает с кошельком и контрактами: где подписывается транзакция, кто платит газ, как обрабатывается отказ пользователя. Фиксируем узкие места — обычно это повторные подтверждения и отсутствие статусов между шагами.
  2. Проектирование вызовов. Раскладываем продажу на последовательность: approve на конкретный токен вместо безлимитного, проверка владельца, листинг, отмена. Для каждого вызова определяем, что видит пользователь в интерфейсе и что происходит при обрыве связи.
  3. Настройка комиссий. Считаем роялти автора, комиссию маркетплейса и платформы, распределение выплат между получателями. Все ставки выносим в конфигурацию, а не в код — их можно менять без пересборки приложения.
  4. Проверка на тестовой сети. Прогоняем полный цикл на тестовых токенах: успешная продажа, отказ от подписи, недостаток средств, повторный листинг уже проданного токена. Каждый сценарий — с ожидаемым состоянием баланса и статуса лота.
  5. Обработка отказов и восстановление. Учим приложение доводить пользователя до результата: если транзакция не прошла, показываем причину и предлагаем повторить шаг, а не начинать цикл заново.
  6. Сборка под iOS и Android. Проверяем одинаковое поведение на обеих платформах: возврат из кошелька, восстановление сессии, обновление статуса лота после подтверждения.
  7. Передача. Отдаём исходники, схему вызовов, конфигурацию комиссий и инструкцию по добавлению новых сетей и токенов.

Опишите вашу текущую схему продажи — вернёмся с оценкой и планом работ по этапам.

Что заказчик получает на руки после внедрения

После внедрения продажа NFT в мобильном приложении перестаёт зависеть от одного инженера, который «помнит, как тут всё устроено». Все решения зафиксированы в артефактах: их можно передать другой команде, проверить на ревью и восстановить по ним работу без раскопок в переписке.

  • Конфигурации окружений: параметры сетей и контрактов, адреса коллекций, лимиты комиссий и правила округления — в версионируемых файлах, а не в коде экрана.
  • Схемы вызовов: последовательность approve → листинг → подтверждение покупки, точки ожидания подтверждения и обработка отклонённых транзакций на каждом шаге.
  • Политики доступа: роли для выпуска коллекций, изменения комиссий и ручных операций, с журналом, кто и когда их менял.
  • Модель комиссий: откуда берётся платформа, роялти и сетевой сбор, как они складываются в итоговую сумму и где показываются пользователю до подтверждения.
  • Обработка отказов: сценарии при недостатке средств, отклонённом approve, отменённой транзакции и повторной попытке — с понятными состояниями в интерфейсе.
  • Документация интеграции: описание контрактов, форматов ответов и поведения приложения на iOS и Android, включая различия платформенных оплат.
  • Регламенты поддержки: уровни реагирования, порядок обновления адресов контрактов и выпуска исправлений без остановки продаж.

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

Кейс: как сократили долю зависших подтверждений втрое

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

OpenSea и другие маркетплейсы решают это на своей стороне, но мобильный клиент обязан корректно переживать любой исход. Мы разобрали цепочку: approve на контракт токена, затем safeTransferFrom при продаже. Проблема была не в блокчейне, а в том, что приложение считало транзакцию завершённой по факту отправки в сеть, не дожидаясь подтверждения и не отслеживая смену статуса.

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

Результат за месяц наблюдений: доля успешных подтверждений выросла с 71% до 96%, зависшие операции сократились втрое, обращения в поддержку по теме «транзакция не прошла» упали примерно на 60%. Отказы теперь приходят с понятной причиной, а не молчаливым зависанием — это сняло основную нагрузку с первой линии.

Чем отличается approve от листинга и что делать, если уже развёрнут кошелёк

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

Разница принципиальная: approve отвечает на вопрос «имеет ли площадка право распоряжаться токеном», листинг — «на каких условиях токен продаётся».

Второй нюанс — область действия разрешения. Approve выдаётся либо на один конкретный токен, либо на всю коллекцию, и это прямо влияет на число подтверждений, которые увидит пользователь. Разрешение на коллекцию экономит транзакции при массовой продаже, но расширяет права площадки на все токены серии — часть аудитории такое не принимает. Мы по умолчанию ставим точечный approve на конкретный токен и оставляем выбор в настройках, а в интерфейсе показываем, что именно и на какой объём пользователь подтверждает.

Если кошелёк уже развёрнут и работает, встраивание новой логики не требует переписывать приложение целиком. Мы добавляем слой работы с контрактами поверх существующего модуля подписи: он собирает approve-транзакцию, дожидается подтверждения в сети, проверяет, что allowance выставлен, и только после этого отправляет листинг. Такой слой изолирован — текущие сценарии отправки и подписи продолжают работать, а новый сценарий продажи подключается к ним как отдельная ветка.

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

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

Частые технические сомнения заказчиков

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

Как обеспечивается безопасность приватных ключей и подписей?

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

Одинаково ли работает продажа на iOS и Android?

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

Как считаются комиссии маркетплейса и роялти?

Комиссия платформы и выплата автору закладываются в смарт-контракт и списываются атомарно в момент сделки — пользователь видит итоговую сумму до подтверждения, без скрытых списаний. Мы проверяем расчёт на тестовой сети и сверяем фактическое зачисление с ожидаемым, чтобы расхождения не всплывали уже в проде.

Что происходит при сбое сети или зависшей транзакции?

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

Опишите вашу задачу — вернёмся с оценкой и планом по каждому из этих сценариев.

Обсудим вашу задачу и вернёмся с планом

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

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

  • Разбор задачи. Смотрим текущее приложение, интеграции с блокчейном и сценарии продажи NFT на iOS и Android.
  • Уточнение требований. Согласуем поддерживаемые сети, маркетплейсы, схему комиссий и правила роялти.
  • Оценка объёмов. Считаем трудозатраты по каждому этапу, отмечаем риски и зависимости от внешних сервисов.
  • План работ. Разбиваем на этапы с понятным результатом на каждом: интеграция, листинг, продажа, выплаты.
  • Согласование. Обсуждаем план, корректируем приоритеты и фиксируем порядок запуска.
  • Старт. Начинаем с этапа, который даёт проверяемый результат раньше остальных.

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

Подход к продаже NFT в приложении Как работает Сроки внедрения Где уместен
Встроенный кошелёк Ключи хранятся внутри приложения, approve и листинг проходят без переключения между сервисами Дольше: нужен аудит хранения ключей и защита от подмены транзакций Массовый продукт с частыми продажами, где важна бесшовность
Внешний кошелёк Пользователь подтверждает действия в стороннем приложении, ваш продукт только формирует запрос Быстрее: интеграция без хранения ключей на вашей стороне Аудитория уже с кошельками, нежелание брать на себя ответственность за ключи
Гибрид Встроенный кошелёк для быстрых операций, внешний — для крупных сумм и выводов Средние: две ветки сценариев и общий слой проверки статусов Маркетплейсы и игры, где профили пользователей разного уровня
Ручное сопровождение операций Сделки проводит оператор, приложение только собирает заявки Быстрее всего на старте, но плохо масштабируется Пилот, малый поток заказов, проверка спроса
Полный цикл под ключ Аудит текущего кошелька, перестройка approve и листинга, комиссии, обработка зависших подтверждений, передача документации Дольше на входе, но снимает ручные разборы после запуска Продукт с оборотом и планами на рост, где сбои стоят дороже срока

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

Наши компетенции:

Последние работы

  • Разработка мобильного приложения для компании FEEDME
    Разработка мобильного приложения для компании FEEDME
    1010
  • Разработка мобильного приложения для компании XOOMER
    Разработка мобильного приложения для компании XOOMER
    903
  • Разработка мобильного приложения для компании RHL
    Разработка мобильного приложения для компании RHL
    1332
  • Разработка мобильного приложения для компании ZIPPY
    Разработка мобильного приложения для компании ZIPPY
    1180
  • Разработка мобильного приложения для компании Affhome
    Разработка мобильного приложения для компании Affhome
    1107
  • Разработка мобильного приложения для компании FLAVORS
    Разработка мобильного приложения для компании FLAVORS
    714