Манитон Docs

Besu Connector

Микросервис для взаимодействия с блокчейном Hyperledger Besu

Besu Connector

Besu Connector (apps/services/besu-connector) — это высокопроизводительный шлюз на языке Go, инкапсулирующий логику работы с DLT-слоем (Hyperledger Besu).

Принципы работы

Сервис спроектирован по принципу "DLT as a black box". Другие микросервисы платформы не знают о JSON-RPC или деталях Ethereum-протокола. Взаимодействие происходит исключительно асинхронно через Kafka.

  1. Команды (Commands): Сервис слушает входящие топики с командами (SubmitTransaction, GetBlock и др.).
  2. События (Events): Результаты выполнения команд и мониторинга цепочки трансляруются в исходящие события.
  3. Chain Listener: Фоновый процесс постоянно опрашивает узлы Besu на наличие новых блоков и публикует их в Kafka для синхронизации операционного учета.

Технологический стек

  • Язык: Go 1.22+
  • Библиотеки:
    • go-ethereum/ethclient — RPC взаимодействие с Besu.
    • segmentio/kafka-go — работа с Kafka.
    • uber-go/zap — структурированное логирование.
  • Контракты: Использует сгенерированный Go-код из Protobuf-определений maniton.besu.v1.

Kafka RPC API

Топик КомандыОжидаемый ответ (Any)Описание
besu.command.sendRawTransactionTransactionSubmittedEventОтправка подписанной транзакции в сеть.
besu.command.getTransactionReceiptTransactionReceiptReadyEventПолучение квитанции финализированной транзакции.
besu.command.getBlockNumberBlockReadEventЧтение данных блока по номеру.
besu.command.verifyBlockHashBlockHashVerifiedEventСверка хэша блока (аудит).

События Chain Listener

Сервис генерирует поток событий о состоянии блокчейна:

  • BlockReadEvent: Отправляется для каждого нового блока, найденного в сети. Содержит номер, хэш, временную метку и список транзакций.
  • TransactionFailedEvent: Если RPC-запрос к Besu вернул ошибку или транзакция не прошла валидацию на уровне ноды.

Статусы транзакций

  • BESU_TX_STATUS_SUBMITTED: Транзакция принята в мемпул ноды.
  • BESU_TX_STATUS_CONFIRMED: Транзакция включена в блок (успех).
  • BESU_TX_STATUS_REVERTED: Транзакция выполнена, но EVM вернула Revert.
  • BESU_TX_STATUS_FAILED: Сетевая ошибка или отказ в приеме транзакции.

Обработка Context

Каждое сообщение в Kafka содержит RequestContext. Besu Connector гарантирует передачу correlation_id и idempotency_key из команды в соответствующее событие-ответ, что позволяет инициатору отследить статус своей операции.

On this page