Перезапуск XPort NFT Marketplace: быстрее страницы, стабильнее изображения и управление коллекциями на стороне создателя

Закулисный взгляд на то, почему страницы стали быстрее, NFT-изображения теперь загружаются стабильнее, а issuers наконец могут управлять своими коллекциями on-chain.

За последние несколько недель мы перестроили большую часть NFT-маркетплейса XPort. Страницы теперь загружаются быстрее, изображения работают стабильнее, история кошелька стала чище, а issuers получили прямой on-chain контроль над публичным профилем своих коллекций.

Часть этих изменений видна сразу. Другая часть работает тихо в фоне. Ниже — что изменилось, почему мы это перестроили и что это значит для пользователей и issuers.

Проблема, в которую мы постоянно упирались

Старый маркетплейс почти для всего обращался напрямую к публичному Klever API. Но этот API никогда не проектировался как полноценный backend для маркетплейса.

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

Это работало, но было тяжело.

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

Мы решили исправить это с основания.

Purpose-built NFT indexer

Первый элемент — новый сервис на nftapi.xport.app.

Вместо того чтобы заставлять frontend пересобирать состояние маркетплейса при каждой загрузке страницы, indexer читает NFT-активность из Klever, понимает, что реально произошло с каждым ордером, и отдаёт чистые данные, уже подготовленные для интерфейса маркетплейса.

Он отслеживает реальный lifecycle ордера:

  • created
  • cancelled
  • expired
  • fulfilled

И даёт frontend-у endpoints, созданные именно под UI маркетплейса:

  • один запрос возвращает все активные листинги кошелька
  • другой возвращает floor price коллекции по маркетплейсу и валюте
  • ещё один отдаёт все ордера коллекции с нормальной пагинацией

Когда вы отменяете листинг или покупаете NFT, frontend может сразу запустить быстрый re-sync кошелька. То есть вам не нужно ждать следующего фонового цикла обновления, чтобы интерфейс догнал реальное состояние.

Результат простой: страницы, которые раньше делали десятки запросов, теперь обычно обходятся одним-двумя.

Image cache, созданный для IPFS

NFT-арт хранится в IPFS, а IPFS-шлюзы не всегда надёжны. Иногда они быстрые. Иногда медленные. Иногда просто не отвечают.

Поэтому мы построили второй сервис на nftimg.xport.app.

Он параллельно обращается к нескольким IPFS-шлюзам, берёт первый успешный ответ, конвертирует изображение в оптимизированный WebP, ресайзит его под thumbnails маркетплейса и кеширует на диске.

Если изображение действительно отсутствует или сломано, мы помечаем его как dead, чтобы маркетплейс не запрашивал один и тот же битый CID снова и снова.

Для пользователей это значит:

  • меньше сломанных thumbnails
  • меньше размер изображений
  • быстрее страницы коллекций
  • лучше загрузка на мобильных устройствах

Вместо многомегабайтных оригиналов со случайных gateways маркетплейс теперь может отдавать оптимизированные thumbnails, которые часто весят около 30–60 KB.

Быстрее страницы, меньше ожидания

Когда indexer и image cache были готовы, мы подчистили вокруг них frontend.

Страницы коллекций теперь загружают данные параллельно и в основном из indexer. Token precision приходит из того же источника, поэтому больше не нужны дополнительные Klever-запросы для каждой строки.

Stats-запросы тоже дедуплицированы. Открытие нескольких карточек больше не спамит сеть одинаковыми запросами.

Мы также исправили маленькую, но раздражающую UX-проблему: переключатели вроде “Hidden” и “All market” больше не очищают grid во время загрузки новых данных. Новые строки теперь подменяются атомарно, страница не прыгает, а позиция скролла сохраняется.

Чище home page и настоящая NFT-история

Home page получил более лёгкий loading skeleton, плавную cascade-анимацию и более понятную подсказку, если у вас есть ордера, но нет баланса, чтобы с ними что-то сделать.

Страница истории кошелька тоже была перестроена.

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

Issuer dashboard: контроль над своей коллекцией

Это самое заметное изменение для issuers.

Если вы выпустили коллекцию на Klever, теперь вы можете управлять её публичным профилем из нового issuer dashboard:

hub.xport.app/issuer

На странице редактора можно:

  • задать tagline и описание
  • загрузить banner и logo
  • добавить ссылки на Website, X, Telegram и Discord
  • выбрать, как banner будет вписан в frame: Fit или Fill

Для banners и logos используется тот же image proxy, поэтому ускорение загрузки работает и для изображений профиля коллекции.

Самое важное: это не просто приватная настройка внутри XPort.

Каждое сохранение — это реальная Klever AssetTrigger transaction, подписанная кошельком issuer. Профили коллекций не редактируются в off-chain базе данных XPort. Нет platform admin, который может тихо изменить вашу страницу коллекции за вас.

Chain — источник истины.

Ваши collectors видят тот же on-chain профиль коллекции, который вы видите в preview.

Manage button на странице коллекции

Чтобы editor было легко найти, мы добавили небольшой “Manage” chip на публичных страницах коллекций.

Он появляется в строке с asset ID и royalties, но только если подключённый кошелёк является issuer этой коллекции.

Один тап — и вы сразу попадаете в issuer dashboard для этой коллекции.

Что дальше

На roadmap уже есть несколько направлений:

  • per-owner queries в indexer, чтобы issuer landing page не сканировал весь NFT registry
  • более богатая статистика коллекций, включая views, holder counts и listing history
  • больше инструментов для issuers, чтобы управлять royalties и готовить collection launches

Попробуйте

Если вы выпустили коллекцию на Klever, подключите кошелёк, откройте свою коллекцию и найдите кнопку Manage.

Попробуйте редактор коллекции, обновите профиль и расскажите, чего ещё не хватает.

hub.xport.app

1 Like