hiero-ledger / hiero-ledger/hiero-consensus-node

Incorrect block stream output for scheduled ContractCall transactions

Open
#24,420 0 comments 0 reactions 1 assignee Claimed by @aderevets View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.