hiero-ledger / hiero-ledger/hiero-consensus-node
CN 0.72.0 node update transaction cause `CATASTROPHIC failure trying to reconcile TSS state`
- Dominant language
- Java
- Stars
- 406
- Forks
- 226
- Avg merge
- 3d 4h
- Merged PRs (30d)
- 210
Description
When running following steps with solo for CN 0.72.0 + BN 0.29.0, node update transaction would cause exception in hgcaa.log
```
#!/bin/bash
set -eo pipefail
export SOLO_CLUSTER_NAME=solo
export SOLO_NAMESPACE=solo
export SOLO_CLUSTER_SETUP_NAMESPACE=solo-cluster
export SOLO_DEPLOYMENT=solo-deployment
export NODE_ALIASES="node1,node2"
kind delete cluster --name "${SOLO_CLUSTER_NAME}" >/dev/null 2>&1 || true
kind create cluster -n "${SOLO_CLUSTER_NAME}"
rm -rf "${HOME}/.solo/"
npm run solo-test -- init
npm run solo-test -- cluster-ref config connect --cluster-ref kind-${SOLO_CLUSTER_NAME} --context kind-${SOLO_CLUSTER_NAME}
npm run solo-test -- deployment config create -n "${SOLO_NAMESPACE}" --deployment "${SOLO_DEPLOYMENT}"
npm run solo-test -- deployment cluster attach --deployment "${SOLO_DEPLOYMENT}" --cluster-ref kind-${SOLO_CLUSTER_NAME} --num-consensus-nodes 2
npm run solo-test -- cluster-ref config setup -s "${SOLO_CLUSTER_SETUP_NAMESPACE}"
npm run solo-test -- block node add --deployment "${SOLO_DEPLOYMENT}"
npm run solo-test -- keys consensus generate --gossip-keys --tls-keys --deployment "${SOLO_DEPLOYMENT}" -i "${NODE_ALIASES}"
npm run solo-test -- consensus network deploy --deployment "${SOLO_DEPLOYMENT}" -i "${NODE_ALIASES}"
npm run solo-test -- consensus node setup --deployment "${SOLO_DEPLOYMENT}" -i "${NODE_ALIASES}"
npm run solo-test -- consensus node start --deployment "${SOLO_DEPLOYMENT}" -i "${NODE_ALIASES}"
npm run solo-test -- consensus node add --deployment "${SOLO_DEPLOYMENT}"
```
### Hgcaa.log:
```
2026-03-31 03:27:36.423 ERROR 351 HandleWorkflow - Possibly CATASTROPHIC failure trying to reconcile TSS state
java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:220)
at com.hedera.node.app.history.impl.WrapsHistoryProver.publishIfNeeded(WrapsHistoryProver.java:407)
at com.hedera.node.app.history.impl.WrapsHistoryProver.advance(WrapsHistoryProver.java:261)
at com.hedera.node.app.history.impl.ProofControllerImpl.advanceConstruction(ProofControllerImpl.java:207)
at com.hedera.node.app.history.impl.HistoryServiceImpl.reconcile(HistoryServiceImpl.java:99)
at com.hedera.node.app.workflows.handle.HandleWorkflow.lambda$reconcileTssState$12(HandleWorkflow.java:1163)
at com.hedera.node.app.workflows.handle.HandleWorkflow.doStreamingChangesInternal(HandleWorkflow.java:953)
at com.hedera.node.app.workflows.handle.HandleWorkflow.doStreamingOnlyKvChanges(HandleWorkflow.java:930)
at com.hedera.node.app.workflows.handle.HandleWorkflow.reconcileTssState(HandleWorkflow.java:1160)
at com.hedera.node.app.workflows.handle.HandleWorkflow.handleRound(HandleWorkflow.java:349)
at com.hedera.node.app.Hedera.onHandleConsensusRound(Hedera.java:1048)
at com.swirlds.platform.eventhandling.DefaultTransactionHandler.doHandleConsensusRound(DefaultTransactionHandler.java:264)
at com.swirlds.platform.eventhandling.DefaultTransactionHandler.handleConsensusRound(DefaultTransactionHandler.java:233)
at com.swirlds.component.framework.component.ComponentWiring.lambda$bind$7(ComponentWiring.java:665)
at com.swirlds.component.framework.wires.input.BindableInputWire.lambda$bind$1(BindableInputWire.java:96)
at com.swirlds.component.framework.schedulers.internal.SequentialThreadTask.handle(SequentialThreadTask.java:19)
at com.swirlds.component.framework.schedulers.internal.SequentialThreadTaskScheduler.run(SequentialThreadTaskScheduler.java:193)
at java.base/java.lang.Thread.run(Thread.java:1474)
2026-03-31 03:27:36.482 INFO 401 WrapsHistoryProver - Considering publication of WRAPS R1 output on construction #2
2026-03-31 03:27:36.482 ERROR 351 HandleWorkflow - Possibly CATASTROPHIC failure trying to reconcile TSS state
java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:220)
at com.hedera.node.app.history.impl.WrapsHistoryProver.publishIfNeeded(WrapsHistoryProver.java:407)
at com.hedera.node.app.history.impl.WrapsHistoryProver.advance(WrapsHistoryProver.java:261)
at com.hedera.node.app.history.impl.ProofControllerImpl.advanceConstruction(ProofControllerImpl.java:207)
at com.hedera.node.app.history.impl.HistoryServiceImpl.reconcile(HistoryServiceImpl.java:99)
at com.hedera.node.app.workflows.handle.HandleWorkflow.lambda$reconcileTssState$12(HandleWorkflow.java:1163)
at com.hedera.node.app.workflows.handle.HandleWorkflow.doStreamingChangesInternal(HandleWorkflow.java:953)
at com.hedera.node.app.workflows.handle.HandleWorkflow.doStreamingOnlyKvChanges(HandleWorkflow.java:930)
at com.hedera.node.app.workflows.handle.HandleWorkflow.reconcileTssState(HandleWorkflow.java:1160)
at com.hedera.node.app.workflows.handle.HandleWorkflow.handleRound(HandleWorkflow.java:349)
at com.hedera.node.app.Hedera.onHandleConsensusRound(Hedera.java:1048)
at com.swirlds.platform.eventhandling.DefaultTransactionHandler.doHandleConsensusRound(DefaultTransactionHandler.java:264)
at com.swirlds.platform.eventhandling.DefaultTransactionHandler.handleConsensusRound(DefaultTransactionHandler.java:233)
at com.swirlds.component.framework.component.ComponentWiring.lambda$bind$7(ComponentWiring.java:665)
at com.swirlds.component.framework.wires.input.BindableInputWire.lambda$bind$1(BindableInputWire.java:96)
at com.swirlds.component.framework.schedulers.internal.SequentialThreadTask.handle(SequentialThreadTask.java:19)
at com.swirlds.component.framework.schedulers.internal.SequentialThreadTaskScheduler.run(SequentialThreadTaskScheduler.java:193)
at java.base/java.lang.Thread.run(Thread.java:1474)
```
[hgcaa-1.log](https://github.com/user-attachments/files/26367061/hgcaa-1.log)
### Summary
NodeCreateTransaction submits with Status.Success
Node1 tries to reconcile TSS state for the pending new node3 on each round → NPE
Because TSS reconciliation fails, the roster is never updated to include node3
Contributor guide
Assessment
This issue has not been assessed yet.