Закулисный взгляд на то, почему страницы стали быстрее, 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