Skip to content

HIP-1056 Failed atomic batch transaction in blockstream breaks blockstream reader assumption #12313

@xin-hedera

Description

@xin-hedera

Description

When processing blockstream from testnet, importer failed with the following error:

2025-10-30T20:10:36.688Z ERROR scheduling-1 o.h.m.i.d.b.CompositeBlockSource Failed to get block from BLOCK_NODE source org.hiero.mirror.importer.exception.BlockStreamException: org.hiero.mirror.importer.exception.InvalidStreamFileException: Missing transaction result in block 000000000000000000000000000063746115.blk
	at org.hiero.mirror.importer.downloader.block.BlockNode.streamBlocks(BlockNode.java:144)
	at org.hiero.mirror.importer.downloader.block.BlockNodeSubscriber.get(BlockNodeSubscriber.java:47)
	at org.hiero.mirror.importer.downloader.block.CompositeBlockSource.get(CompositeBlockSource.java:48)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.scheduling.support.ScheduledMethodRunnable.runInternal(ScheduledMethodRunnable.java:130)
	at org.springframework.scheduling.support.ScheduledMethodRunnable.lambda$run$2(ScheduledMethodRunnable.java:124)
	at io.micrometer.observation.Observation.observe(Observation.java:498)
	at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:124)
	at org.springframework.scheduling.config.Task$OutcomeTrackingRunnable.run(Task.java:85)
	at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: org.hiero.mirror.importer.exception.InvalidStreamFileException: Missing transaction result in block 000000000000000000000000000063746115.blk
	at org.hiero.mirror.importer.reader.block.BlockStreamReaderImpl.readSignedTransactions(BlockStreamReaderImpl.java:141)
	at org.hiero.mirror.importer.reader.block.BlockStreamReaderImpl.readEvents(BlockStreamReaderImpl.java:127)
	at org.hiero.mirror.importer.reader.block.BlockStreamReaderImpl.readRounds(BlockStreamReaderImpl.java:194)
	at org.hiero.mirror.importer.reader.block.BlockStreamReaderImpl.read(BlockStreamReaderImpl.java:69)
	at org.hiero.mirror.importer.downloader.block.AbstractBlockSource.onBlockStream(AbstractBlockSource.java:36)
	at org.hiero.mirror.importer.downloader.block.BlockNode.streamBlocks(BlockNode.java:115)
	... 16 common frames omitted

Tracing reveals that it's an atomic batch transaction with 2 inner transactions: https://hashscan.io/testnet/transaction/1761778510.870996548

In blockstream reader, we assumed there will be TranactionResult block item for each inner transaction, regardless of its execution status. However, there's no TransactionResult for the second inner transaction at all. As a result, the reader ended up expecting the wrong block item.

Steps to reproduce

check the description

Additional context

No response

Hedera network

testnet

Version

v0.141.0

Operating system

None

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugType: Something isn't workingimporterArea: Importer

    Type

    Projects

    Status

    🏃‍♀ Sprint backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions