Web3 и Инфраструктура

Landfall: Observability и трейсинг транзакций в Solana

Задача

Когда транзакция в Solana не проходит, эксплорер выдаёт «Transaction not found». Команда гадает: пакет завис на RPC, истёк blockhash или запрос вообще не покинул браузер.

Результат

Спроектировали систему наблюдаемости (Rust-бэкенд, PostgreSQL, TypeScript SDK и React-дашборд), разделяющую жизненный цикл транзакции на 5 состояний с фиксацией доказательств.

Проблема диагностики: почему «Not Found» — это не диагноз

Когда пользователь нажимает «Approve», а баланс в приложении не меняется, первое действие разработчика — скопировать сигнатуру в блокчейн-эксплорер. И слишком часто экран встречает сухой фразой: Transaction not found.

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

  • Кошелёк подписал транзакцию, но HTTP-запрос оборвался до того, как дошёл до RPC-ноды.
  • RPC принял пакет, но транзакция истекла по blockhash до того, как валидатор включил её в слот.
  • Транзакция попала в короткий форк, который сеть отбросила в ходе консенсуса.
  • Клиентское приложение потеряло WebSocket-соединение и пропустило событие подтверждения.
  • У системы-наблюдателя банально не хватает доказательств (evidence), чтобы вынести вердикт.

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

Дашборд трейсинга транзакций Landfall Интерфейс Landfall: визуализация пути транзакции по фазам жизненного цикла с фиксацией проверяемых доказательств.

Архитектура: факты вместо догадок

Вместо того чтобы сводить статус транзакции к бинарному «успех / ошибка», Landfall фиксирует каждый шаг как неизменяемое событие жизненного цикла. Система непрерывно собирает свидетельства по пяти фазам: подписана (signed), отправлена (submitted), замечена в сети (observed on-chain), исполнена (executed) или требует подтверждений (missing evidence).

1. Высокопроизводительный приём событий на Rust

Ядро бэкенда написано на Rust с использованием Axum и SQLx. Оно принимает телеметрию из клиентских приложений, дедуплицирует входящие пакеты и непрерывно отслеживает статусы на RPC. Rust выбран осознанно: под высокой нагрузкой и во время спайков сети здесь нет пауз сборщика мусора (GC), а задержки укладываются в доли миллисекунды.

2. Неизменяемый журнал событий и проекции в PostgreSQL

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

3. Легковесный клиентский TypeScript SDK

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

4. Инфраструктура и безопасность

Проект изначально спроектирован под продакшен-требования:

  • Изоляция проектов по токенам: Мультитенантная модель, при которой команды видят только свои пайплайны телеметрии.
  • Шифрование приватных эндпоинтов: Ключи доступа и приватные RPC-маршруты не утекают в клиентский бандл.
  • Полная эксплуатационная обвязка: Контейнеризация через Docker Compose, экспорт метрик в Prometheus для мониторинга пропускной способности, а также регламенты резервного копирования и восстановления.

Что это показывает техническому лидеру

Для отладки асинхронных сетей с тысячами транзакций в секунду нужна прозрачность именно в «серой зоне» — между браузером пользователя и валидатором. Landfall демонстрирует:

  • Быструю изоляцию сбоев: За секунды видно, почему не прошла транзакция — подвёл RPC, кончился blockhash, не хватило priority fee или оборвалась связь на клиенте.
  • Инженерную культуру на Rust и TypeScript: Чёткое разделение системного программирования для критичного бэкенда и быстрого компонентного интерфейса для разработчиков.
  • Проверяемый результат: Это не дизайн-концепт и не набор картинок, а рабочий сервис с открытым кодом и публичным интерактивным демо.

Хотите такие же результаты?

Давайте обсудим ваш проект.

Есть идея проекта? →