Hydra Team Update
· 4 min read
High-level Summary
The user-friendly hydra-node configuration file has been merged, letting
operators run a head from a single YAML file and diff configs against peers at
a glance. The rest of the period was mostly hardening: deposit and recovery
chain observations are now scoped to the head that produced them (closing a
long-standing cross-head contamination issue), the Blockfrost backend retries
on HTTP errors instead of crashing and no longer chokes on some inline
datums, and the event store's rotation logic got two fixes - a race between
VACUUM and streaming client history, and a deadlock in the network layer's
outbound message queue that could silently halt broadcasting.
What did the team achieve?
- Merged the user-friendly
hydra-nodeconfiguration file: nodes can now be configured via YAML, making it easy to spot differences between peers' setups #2581, #2296 - Scoped deposit and recover chain observations to the current head:
Open/Closedstates only recordOnDepositTxevents for their ownheadIdandIdlesilently drops the rest, while recovery of a deposit from a previous head keeps working in every state, including mid-fanout and while a new head is running #2743, #2606 - Made the Blockfrost chain backend more resilient: HTTP errors are now retried instead of crashing the node #2729, #2477, and a follow-up fixed inline datum decoding that could throw on some UTxOs #2754, #2751
- Fixed a race between the event log's
VACUUM-based rotation and the API server streaming client history over the same SQLite connection, which could take a node down on reconnect #2755 - Fixed a deadlock in the network layer's
PersistentQueue: a falseEqresult inpopPersistentQueuecould leave the broadcast queue stuck at capacity with no log output; it now pops unconditionally by index and emitsPersistentQueueFull/PersistentQueueLoadFailedfor visibility, and a failed file delete no longer crashes the network component #2742 - Event log rotation now archives the outgoing database to a numbered
old-state/hydra-<logId>.dbfile instead of deleting it, restoring the old file-based persistence's pre-rotation backup behaviour #2748, #2747 - Added a fuel verification key option to
hydra-tuiso the funds tab can show both the head's ada and a separate fuel UTxO #2731 - Moved the spec back into the
hydrarepo, dropping the separate flake input #2733
What's next?
- Merge some in-progress performance work: computing accumulator commitments
via the
rust-accumulatorFFI instead of off-chain PlutusTx, batching etcd broadcasts onto shared connections, and raising the per-snapshot transaction cap - early results show sustained throughput roughly doubling on a 1k-UTxO head #2752 - Make
hydra-chain-observerversion-aware by detecting script hashes, so a single process can watch heads from any historical Hydra version instead of running one per version #2740 - Enforce
--deposit-periodconsistency across head nodes by embedding it in the on-chainOpenDatum#2734 - Accept
PaymentExtendedKey(HD wallet keys) #2583 - Work on the updated version of the spec (typst+Agda)
