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

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

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Повний цикл продажу 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, що вже працює. Повернемося з оцінкою та планом.

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

Останні роботи

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