hiero-ledger / hiero-ledger/hiero-consensus-node
Incorrect block stream output for scheduled ContractCall transactions
- Dominant language
- Java
- Stars
- 406
- Forks
- 226
- Avg merge
- 3d 4h
- Merged PRs (30d)
- 210
Description
Two issues in the block stream translator when handling scheduled ContractCall transactions:
1. Missing bloom: The ContractCallTranslator only maps EVM traces (including bloom/logs) for top level and batch-inner transactions. Scheduled ContractCall dispatches are neither, so the translator produces a
contractCallResult without a bloom field, while the generated record includes one.
2. Key type vs index type slot reads: Child dispatch stacks (used for scheduled execution) lack an immediateStateChangeListener, so BlockStreamBuilder.build() cannot perform implicit key to index conversion for storage reads. The block stream outputs KEY type slot reads instead of INDEX-type for scheduled ContractCall. The translator doesn't account for key-type reads that also have corresponding writes. it treats all key type reads as pure reads, losing the written values.
The failure is triggered by any test that schedules a ContractCall that interacts with contract storage and goes through block stream validation. It was first surfaced by ScheduleServiceSimpleFeesTest.scheduledContractCallFullLifecycleFees in the Simple Fees HAPI test suite.
Contributor guide
Assessment
This issue has not been assessed yet.