hiero-ledger / hiero-ledger/hiero-consensus-node
bug: SmartContractLoadTest fails with INVALID_TRANSACTION_BODY when blockStream.streamMode=BLOCKS in CN v0.74.0
- Dominant language
- Java
- Stars
- 406
- Forks
- 226
- Avg merge
- 3d 4h
- Merged PRs (30d)
- 210
Description
## Background
When `blockStream.streamMode=BLOCKS` is configured in CN v0.74.0, `ContractCreateFlow.execute` returns a receipt with status `INVALID_TRANSACTION_BODY`. The same test with `blockStream.streamMode=BOTH` on identical CN v0.74.0 passes at 98 TPS.
This was discovered while working on [hiero-ledger/solo#4511](https://github.com/hiero-ledger/solo/pull/4511), which disables MinIO and configures the consensus node in pure block-streaming mode (`BLOCKS`). Four other NLG load tests (TokenTransferLoadTest, NftTransferLoadTest, CryptoTransferLoadTest, HCSLoadTest) all pass at ~98 TPS in the same deployment, confirming the node is otherwise healthy.
**Failure stack trace (from NLG `network-load-generator-0.14.0`, `cheetah:0.3.4`):**
```
java.lang.RuntimeException: com.hedera.hashgraph.sdk.ReceiptStatusException:
receipt for transaction 0.0.2@1781120748.148000097 raised status INVALID_TRANSACTION_BODY
at com.hedera.hashgraph.sdk.ContractCreateFlow.execute(ContractCreateFlow.java:674)
at com.hedera.hashgraph.sdk.ContractCreateFlow.execute(ContractCreateFlow.java:645)
at com.hedera.benchmark.SmartContractLoadTest$SetUpJob.exec(SmartContractLoadTest.java:100)
at com.hedera.benchmark.SmartContractLoadTest.runLoad(SmartContractLoadTest.java:142)
```
The failure occurs in the setup phase (deploying the contract bytecode), not during the load phase. The error is returned as a consensus receipt status, not a submission error — meaning the transaction was submitted, went through consensus, and the node returned `INVALID_TRANSACTION_BODY`.
Why BLOCKS mode causes this: The most likely explanation is that with blockStream.streamMode=BLOCKS, CN 0.74.0 has a back-pressure/stall issue with the block node under sustained load. After 4 full tests, the block node may be lagging. With no MinIO fallback, the CN is tightly coupled to block node throughput. The specific transaction that fails (ContractCreateFlow) involves a multi-step sequence (FileCreate + ContractCreate) that is more sensitive to internal CN state transitions than simple transfers or HCS messages.
**Configuration at time of failure:**
- CN version: v0.74.0
- `blockStream.streamMode=BLOCKS`
- `blockStream.writerMode=FILE_AND_GRPC`
- `blockNode.connectionStallThresholdMillis=2000`
- Block node version: 0.35.0 (running and healthy)
- Failure happens after ~25 minutes of operation (4 prior NLG load tests completed successfully)
**Passing configuration (same CN v0.74.0):**
- `blockStream.streamMode=BOTH`
- MinIO enabled (record streams uploaded)
- Same NLG version, same test order
**CI run showing the failure:** https://github.com/hiero-ledger/solo/actions/runs/27300218929/job/80643648068
## Acceptance Criteria
1. `SmartContractLoadTest` with `ContractCreateFlow` succeeds when `blockStream.streamMode=BLOCKS` on CN v0.74.0
2. No `INVALID_TRANSACTION_BODY` receipt is returned for contract-create transactions in pure block-streaming mode
3. Behavior is consistent regardless of prior transaction load (the failure reproduces after ~25 min of sustained HCS/token/crypto load)
## Dependencies
- hiero-ledger/solo#4511
Contributor guide
Research direction
Start with the CI run and the SmartContractLoadTest setup path in SmartContractLoadTest.java, especially the ContractCreateFlow call at line 100. Reproduce the setup after sustained load with BLOCKS and compare it with BOTH, then inspect the consensus receipt and block-stream configuration. Done means contract creation succeeds consistently without INVALID_TRANSACTION_BODY regardless of prior transaction load.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- blockchain, distributed-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100