hydra-head-troubleshooter
hydra-head-troubleshooter
When to use
- Hydra Head doesn't start or no head observed
- Head exists but doesn't make progress
- Peers out of sync or disconnected
- Log messages: PeerConnected, AckSn, LogicOutcome errors
Operating rules (must follow)
- Confirm network and hydra-node version first
- Request logs from ALL participants for same time window
- Never request key contents (file paths OK)
- Output: (1) Root cause (2) Fix steps (3) Verification
Quick diagnostic commands
# Check hydra-node version
hydra-node --version
# Check API health
curl -s localhost:4001/health
# Check peers
curl -s localhost:4001/peers
# Check head status
curl -s localhost:4001/status
# Check metrics (if enabled)
curl -s localhost:6001/metrics | grep hydra
Decision tree
A) "No head is observed from the chain"
Symptoms:
- Head never appears in logs
- No Init/Commit/Open progression
- Client shows no head state
Check 1: Cardano connection
# Verify cardano-node is ready
cardano-cli query tip --testnet-magic 1
# Should show current slot, not error
# Check socket exists
ls -la $CARDANO_NODE_SOCKET_PATH
Fix: Wait for cardano-node sync, verify socket path and network magic
Check 2: Scripts tx id
# Verify you're using correct scripts tx id for network
# Get from hydra-node release notes
# In hydra-node logs, look for:
grep -i "script" hydra-node.log | head -20
Fix: Use correct --hydra-scripts-tx-id for your network
Check 3: Key mismatch
# Verify cardano.sk matches what peers have as your vkey
cardano-cli key verification-key \
--signing-key-file cardano.sk \
--verification-key-file check.vkey
# Compare check.vkey with what you distributed
Fix: Re-exchange verification keys with all peers
B) "Head does not make progress"
Symptoms:
- Head exists but stuck at Init or Commit
- Snapshots not confirmed
- Commands hang or timeout
Check 1: Peer connectivity
# In logs, look for PeerConnected
grep "PeerConnected" hydra-node.log
# Check metrics
curl -s localhost:6001/metrics | grep peers_connected
Fix: Verify --peer host:port is correct and ports are reachable
Check 2: Hydra key mismatch
# Look for AckSn issues
grep -E "AckSn|LogicOutcome" hydra-node.log
# Verify hydra keys match
hydra-node verify-keys \
--hydra-signing-key hydra.sk \
--hydra-verification-key peer-hydra.vk
Fix: Re-exchange hydra verification keys
Check 3: Version mismatch
# All nodes must run compatible versions
hydra-node --version
# Compare across all participants
Fix: Align hydra-node versions
C) "Head stuck: peer out of sync"
Symptoms:
- One node accepts txs, others reject
- Snapshots stop being signed
- Ledger state diverged
Cause: Different ledger views due to config drift or missed txs
Fix: Snapshot side-loading
# 1. Get latest snapshot from healthy node
curl -s http://healthy-node:4001/snapshot > snapshot.json
# 2. Post to out-of-sync node
curl -X POST http://out-of-sync-node:4001/snapshot \
-H "Content-Type: application/json" \
-d @snapshot.json
Verify: Snapshots resume, all parties sign again
D) Mirror nodes / HA issues
Symptoms:
SnapshotAlreadySignedin logs- etcd quorum issues
Reality:
SnapshotAlreadySignedis transient and harmless with mirrors- Keep mirror count < floor(n/2) for quorum stability
Fix: Reduce mirror count or accept transient warnings
Log patterns to grep
| Pattern | Meaning |
|---|---|
PeerConnected |
Peer connected successfully |
PeerDisconnected |
Peer lost connection |
AckSn |
Snapshot acknowledgment |
LogicOutcome |
Head logic result (check for errors) |
SnapshotConfirmed |
Snapshot finalized |
HeadIsOpen |
Head successfully opened |
HeadIsClosed |
Head closed, contestation started |
Verification checklist
After any fix:
- All nodes same hydra-node version
- Scripts tx id correct for network
- cardano-node ready (query tip works)
- PeerConnected for all peers
- AckSn messages flowing
- No LogicOutcome errors
Examples
Example: Diagnose stuck head
User request: "My Hydra head won't open—stuck at commit"
Response:
# 1. Check all peers connected
grep "PeerConnected" hydra-node.log | tail -10
# Should see PeerConnected for each peer
# 2. If missing peers, check network
nc -zv peer-host 5001
# Should show "Connection succeeded"
# 3. Check all parties committed
curl -s localhost:4001/status | jq .
# Look for parties and their commit status
# 4. Check for key issues
grep -E "InvalidSignature|WrongParty" hydra-node.log
# Common fix: restart with correct peer addresses
# Verify --peer host:port matches actual peer locations
References
hydra-head(operational guidance)hydra-head-operator(execution)reference/sources.md(doc provenance)- hydra.family troubleshooting