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.
- Команды (Commands): Сервис слушает входящие топики с командами (
SubmitTransaction,GetBlockи др.). - События (Events): Результаты выполнения команд и мониторинга цепочки трансляруются в исходящие события.
- 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.sendRawTransaction | TransactionSubmittedEvent | Отправка подписанной транзакции в сеть. |
besu.command.getTransactionReceipt | TransactionReceiptReadyEvent | Получение квитанции финализированной транзакции. |
besu.command.getBlockNumber | BlockReadEvent | Чтение данных блока по номеру. |
besu.command.verifyBlockHash | BlockHashVerifiedEvent | Сверка хэша блока (аудит). |
События 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 из команды в соответствующее событие-ответ, что позволяет инициатору отследить статус своей операции.