Home /
Input Output /
cardano-node
Jun 05, 8-9 AM (0)
Jun 05, 9-10 AM (0)
Jun 05, 10-11 AM (0)
Jun 05, 11-12 PM (0)
Jun 05, 12-1 PM (0)
Jun 05, 1-2 PM (0)
Jun 05, 2-3 PM (5)
Jun 05, 3-4 PM (0)
Jun 05, 4-5 PM (1)
Jun 05, 5-6 PM (0)
Jun 05, 6-7 PM (0)
Jun 05, 7-8 PM (0)
Jun 05, 8-9 PM (0)
Jun 05, 9-10 PM (0)
Jun 05, 10-11 PM (0)
Jun 05, 11-12 AM (0)
Jun 06, 12-1 AM (0)
Jun 06, 1-2 AM (0)
Jun 06, 2-3 AM (0)
Jun 06, 3-4 AM (0)
Jun 06, 4-5 AM (0)
Jun 06, 5-6 AM (0)
Jun 06, 6-7 AM (0)
Jun 06, 7-8 AM (0)
Jun 06, 8-9 AM (0)
Jun 06, 9-10 AM (0)
Jun 06, 10-11 AM (0)
Jun 06, 11-12 PM (0)
Jun 06, 12-1 PM (0)
Jun 06, 1-2 PM (0)
Jun 06, 2-3 PM (0)
Jun 06, 3-4 PM (0)
Jun 06, 4-5 PM (0)
Jun 06, 5-6 PM (0)
Jun 06, 6-7 PM (0)
Jun 06, 7-8 PM (0)
Jun 06, 8-9 PM (0)
Jun 06, 9-10 PM (0)
Jun 06, 10-11 PM (0)
Jun 06, 11-12 AM (0)
Jun 07, 12-1 AM (0)
Jun 07, 1-2 AM (0)
Jun 07, 2-3 AM (0)
Jun 07, 3-4 AM (0)
Jun 07, 4-5 AM (0)
Jun 07, 5-6 AM (0)
Jun 07, 6-7 AM (0)
Jun 07, 7-8 AM (0)
Jun 07, 8-9 AM (0)
Jun 07, 9-10 AM (0)
Jun 07, 10-11 AM (0)
Jun 07, 11-12 PM (0)
Jun 07, 12-1 PM (0)
Jun 07, 1-2 PM (0)
Jun 07, 2-3 PM (0)
Jun 07, 3-4 PM (0)
Jun 07, 4-5 PM (0)
Jun 07, 5-6 PM (0)
Jun 07, 6-7 PM (0)
Jun 07, 7-8 PM (0)
Jun 07, 8-9 PM (0)
Jun 07, 9-10 PM (0)
Jun 07, 10-11 PM (0)
Jun 07, 11-12 AM (0)
Jun 08, 12-1 AM (0)
Jun 08, 1-2 AM (0)
Jun 08, 2-3 AM (0)
Jun 08, 3-4 AM (0)
Jun 08, 4-5 AM (0)
Jun 08, 5-6 AM (0)
Jun 08, 6-7 AM (0)
Jun 08, 7-8 AM (0)
Jun 08, 8-9 AM (0)
Jun 08, 9-10 AM (0)
Jun 08, 10-11 AM (0)
Jun 08, 11-12 PM (0)
Jun 08, 12-1 PM (0)
Jun 08, 1-2 PM (0)
Jun 08, 2-3 PM (0)
Jun 08, 3-4 PM (0)
Jun 08, 4-5 PM (0)
Jun 08, 5-6 PM (0)
Jun 08, 6-7 PM (0)
Jun 08, 7-8 PM (0)
Jun 08, 8-9 PM (0)
Jun 08, 9-10 PM (0)
Jun 08, 10-11 PM (0)
Jun 08, 11-12 AM (0)
Jun 09, 12-1 AM (0)
Jun 09, 1-2 AM (0)
Jun 09, 2-3 AM (0)
Jun 09, 3-4 AM (0)
Jun 09, 4-5 AM (0)
Jun 09, 5-6 AM (0)
Jun 09, 6-7 AM (0)
Jun 09, 7-8 AM (1)
Jun 09, 8-9 AM (1)
Jun 09, 9-10 AM (0)
Jun 09, 10-11 AM (0)
Jun 09, 11-12 PM (0)
Jun 09, 12-1 PM (0)
Jun 09, 1-2 PM (0)
Jun 09, 2-3 PM (0)
Jun 09, 3-4 PM (0)
Jun 09, 4-5 PM (0)
Jun 09, 5-6 PM (1)
Jun 09, 6-7 PM (0)
Jun 09, 7-8 PM (0)
Jun 09, 8-9 PM (0)
Jun 09, 9-10 PM (0)
Jun 09, 10-11 PM (0)
Jun 09, 11-12 AM (0)
Jun 10, 12-1 AM (0)
Jun 10, 1-2 AM (11)
Jun 10, 2-3 AM (9)
Jun 10, 3-4 AM (0)
Jun 10, 4-5 AM (1)
Jun 10, 5-6 AM (0)
Jun 10, 6-7 AM (0)
Jun 10, 7-8 AM (1)
Jun 10, 8-9 AM (0)
Jun 10, 9-10 AM (0)
Jun 10, 10-11 AM (0)
Jun 10, 11-12 PM (19)
Jun 10, 12-1 PM (0)
Jun 10, 1-2 PM (0)
Jun 10, 2-3 PM (0)
Jun 10, 3-4 PM (2)
Jun 10, 4-5 PM (0)
Jun 10, 5-6 PM (0)
Jun 10, 6-7 PM (0)
Jun 10, 7-8 PM (13)
Jun 10, 8-9 PM (3)
Jun 10, 9-10 PM (0)
Jun 10, 10-11 PM (0)
Jun 10, 11-12 AM (0)
Jun 11, 12-1 AM (0)
Jun 11, 1-2 AM (0)
Jun 11, 2-3 AM (0)
Jun 11, 3-4 AM (0)
Jun 11, 4-5 AM (0)
Jun 11, 5-6 AM (0)
Jun 11, 6-7 AM (0)
Jun 11, 7-8 AM (0)
Jun 11, 8-9 AM (0)
Jun 11, 9-10 AM (0)
Jun 11, 10-11 AM (0)
Jun 11, 11-12 PM (0)
Jun 11, 12-1 PM (0)
Jun 11, 1-2 PM (0)
Jun 11, 2-3 PM (0)
Jun 11, 3-4 PM (0)
Jun 11, 4-5 PM (0)
Jun 11, 5-6 PM (0)
Jun 11, 6-7 PM (0)
Jun 11, 7-8 PM (1)
Jun 11, 8-9 PM (1)
Jun 11, 9-10 PM (0)
Jun 11, 10-11 PM (0)
Jun 11, 11-12 AM (0)
Jun 12, 12-1 AM (0)
Jun 12, 1-2 AM (0)
Jun 12, 2-3 AM (0)
Jun 12, 3-4 AM (0)
Jun 12, 4-5 AM (0)
Jun 12, 5-6 AM (0)
Jun 12, 6-7 AM (0)
Jun 12, 7-8 AM (0)
Jun 12, 8-9 AM (0)
70 commits this week
Jun 05, 2026
-
Jun 12, 2026
bench | tx-centrifuge: make cooldown configurable, default 0
Replace the hardcoded 300s worker cooldown with an optional top-level "cooldown_seconds" JSON field, defaulting to 0 (no wait). The cooldown was added to give multi-node benchmark clusters time to stabilise before traffic begins; for single-node ops / iterative testing it's a 5-minute tax with no benefit. Cluster runs opt back in explicitly. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
bench | tx-centrifuge: add periodic queue-depth + counter tracer
Adds a BuilderQueueDepth trace fired every 5 seconds per workload,
reporting three pipeline depths and five cumulative counters the
existing NewTx/Recycle events don't expose:
Depths
inputQueue — inputs available to the builder
payloadQueue — 8192-bounded backpressure queue
pendingRecycle — in-flight txs awaiting confirmation/orphan
Cumulative counters (deltas between ticks give per-5s rates)
built — successful bhBuildPayload returns
recycledConfirmed — Right events that matched a pending entry
recycledOrphan — Left events that matched a pending entry
dropped — bhBuildPayload returns Nothing (dust)
submitted — payloads pulled from payload queue by a worker
Diagnostic for cases where TPS holds for a while then degrades. The
identity `built - (confirmed + orphan + dropped) ≈ pendingRecycle`
holds in steady state; drift between those numbers localises the
leak. Submitted lagging built points at worker-side stall; built
lagging submitted points at builder starvation.
TQueue has no length op, so pipeInputQueue size is tracked via a TVar
counter updated atomically alongside every read/write. Counters live
in a new `Counters` record on the `Pipe`; the snapshot is materialised
into a value-only `Stats` record passed through the callback. Stats
async is linked like the builder and recycler asyncs; output is muted
under --preflight and respects the existing trace severity config.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
bench | tx-centrifuge: shim consumer code for the SRP'd APIs
Adapts the local consumers to the shape of consensus /
ouroboros-network on the Leios prototype SRPs pinned by the base
branch (which differ from CHAP).
bench/tx-centrifuge/lib/tx-centrifuge/.../Tracing/Orphans.hs
- 'TraceSendMsg' / 'TraceRecvMsg' (from Ouroboros.Network.Driver.
Simple / Stateful) gained a mux-bearer-time field. Discard it
with '_' in the local LogFormatting and MetaTrace orphans; we
don't surface mux timestamps from these instances.
bench/tx-centrifuge/lib/tx-centrifuge/.../NodeToNode.hs
- 'NetN2N.Codecs' gained two ByteString slots for the new Peras
cert/vote diffusion mini-protocols (PerasCertDiffusion,
PerasVoteDiffusion). Add the slots to the four module-level
Codecs signatures and the one in 'connect''s where-clause; we
pass 'BSL.ByteString' for them like every other slot.
- 'byteLimitsKeepAlive' dropped its size-measurer argument. Drop
'(const 0)' from the call site accordingly.
Note: on the previous (leios-11.0.1 remake) base this commit also
initialised RunNodeArgs.rnLeiosDb in cardano-node's Run.hs; the
leios-prototype-bench base already wires rnLeiosDb from
LeiosDbConfig, so no Run.hs change is needed here.
Co-Authored-By: Claude Opus <[email protected]>
WIP: workbench hacks, make ci-test it work!
bench | tx-centrifuge: add --preflight dry-run mode
Run all initialization (config, protocol, signing key, UTxO discovery, runtime resolution, observer connection check, partition summary) and exit 0 before spawning workers — so the same production config can be verified end-to-end without producing traffic. Useful for ops health checks after a new skey, fresh funding, node-config tweak, etc. The 2-second observer-settle window catches a broken local node socket early; observer linked-thread failures during the wait are caught and reported as a clean preflight error rather than crashing the process. Triggered by `tx-centrifuge config.json --preflight` (flag accepted in either position). Also exports pull-fiction's partitionInputs so the preflight summary can render the same workload split that Runtime.resolve performs. Co-Authored-By: Claude <[email protected]>
bench | tx-centrifuge: discover initial UTxOs on-chain at startup
Replace the funds.json / initial_inputs config pathway with on-chain UTxO discovery via N2C LocalStateQuery. At startup, tx-centrifuge derives the 1000 recycle addresses from the seed prefix and queries the local node for every spendable UTxO across them, in a single QueryUTxOByAddress. This makes restarts stateless: there is no on-disk state to corrupt, and any UTxOs at any of the recycle addresses are picked up automatically (including leftovers from a previous larger workload configuration). Requires a 'nodetoclient' observer to be declared — its socket_path is reused for the LocalStateQuery. The first such observer (alphabetical by name) is selected; tx-centrifuge dies with a config example if none is declared. Removes funds.json / initial_inputs / network_magic / genesis_utxo_keys and the supporting Fund.loadFunds, Fund.genesisTxIn, FundEntry, etc. Raw.initialInputs becomes Maybe Aeson.Value so other pull-fiction callers can still pass JSON-driven seeds out of band. Co-Authored-By: Claude <[email protected]>
bench | tx-centrifuge: Leios tx-generator
value-volt-nomadperf with tx-centrifuge (TPS per target, 40000b/s)
bench | tx-centrifuge: drop dust UTxOs instead of dying
Previously the builder called `die` whenever TxAssembly.buildTx returned
Left — most commonly because an input UTxO's value <= fee, leaving no
change to produce a valid output. A single dust UTxO in the recycle
pool would crash the whole service.
Two layers of protection:
- Runtime change: bhBuildPayload now returns Maybe (key, payload,
[input]). On Nothing the runtime drops the consumed inputs (no
enqueue, no recycle) and continues.
- mkBuilder: on Left from buildTx, logs the txin + value + reason to
stderr and returns Nothing. The inputs are abandoned on-chain but
the centrifuge stays up.
Also filters dust out at startup discovery: UTxOs with value at or
below the max configured fee are flagged and skipped, with per-address
counts reported in the discovery summary (e.g. "142 UTxOs, 18 dust
skipped"). maxConfiguredFee walks every configured builder
(top-level + per-workload) and takes the max; defaults to 1 ADA when
no builder declares a fee, matching the integer-ADA convention.
Test harness: bhBuildPayload return wrapped in Just; also fixes a
pre-existing 2-arg-vs-4-arg lambda on the onRecycle callback so
cabal build all goes further than before.
Co-Authored-By: Claude <[email protected]>
bench | tx-centrifuge: relax skey suffix, scan full 4096 hex address space
Drop the strict "000" suffix requirement on the operator-supplied skey. Any cardano-cli-generated key now works as-is — its last 3 hex chars become the workload-0 base offset, and workload N's recycle key uses suffix (base + N) mod 0x1000. Workload 0 still reproduces the supplied key exactly. Suffix encoding switches from decimal %03d (1000 keys) to hex %03x (4096 keys), and discovery scans the full address space. UTxOs that landed at any of the 4096 addresses are picked up regardless of which suffix — including legacy funding under the old strict-000 layout, or addresses funded via cardano-cli prior to the centrifuge run. loadSigningKeyPrefix now returns (prefix, base :: Int). The address-level derivation lives in keyForSuffixIndex; recycleKeyForWorkload wraps it for workload N. Discovery summary indices are printed in hex (%03x) to match. Co-Authored-By: Claude <[email protected]>
WIP: Increase mempool capacity
- MempoolCapacityBytesOverride (See https://github.com/input-output-hk/ouroboros-leios/blob/ebc1f7c76b34e3d4f1b28485b720ed324633a6b3/demo/proto-devnet/config/config.yaml#L9) - MempoolTimeoutCapacity
cardano-profile: add PV11 nomadcloud profiles
wb | don't include cache-entry in the genesis tar file
bench | tx-centrifuge: load recycle skey from file
Add required top-level "signing_key_file" config field. The skey is read as a standard cardano-cli text envelope (payment or genesis UTxO key); its raw 32-byte secret must end in 0x000, and the leading 61 hex chars become the per-workload key derivation prefix. Workload 0 reproduces the supplied key exactly; workloads 1..N derive distinct keys. Co-Authored-By: Claude <[email protected]>
bench | tx-centrifuge: detect era for UTxO query (fix Dijkstra anachrony)
Previously hardcoded the UTxO query to ConwayEra. On a Dijkstra-era
chain, that triggers an EraMismatch on the consensus side ("anachrony")
which closes the bearer and surfaces client-side as BearerClosed.
Now query QueryCurrentEra first, then dispatch the QueryUTxOByAddress
via caseByronOrShelleyBasedEra in whatever era the chain reports.
Conway addresses we derive locally are projected to AddressAny for the
set we pass to the query, and the result map is also keyed by AddressAny
so the caller looks up via an era-agnostic key.
Works against any Shelley-based era — Conway, Dijkstra, and anything
caseByronOrShelleyBasedEra dispatches in the current cardano-api.
Co-Authored-By: Claude <[email protected]>
Merge pull request #6598 from IntersectMBO/russoul/cardano-node-move-out-recon
bench: remove cardano-recon-framework
wb: adjust to new LedgerDB config object
wb | drop per-call "using <backend>" announcement in genesis()
The info banner sat inside the genesis() function body, so it fired once per `wb genesis <op>` dispatch
wb | add PV 11 preview and dijkstra support to cardano-profile
wb | remove genesis specs and use the profile contents
Remove the "genesis spec" workbench command that was used for `create-testnet-data --spec-*` and instead use what cardano-profile provides. The profile may have null "conway" or "dijkstra" genesis fields but the node still needs valid files, use a "zero" genesis in those cases.