Home / Input Output / cardano-node
Jun 04, 1-2 AM (0)
Jun 04, 2-3 AM (0)
Jun 04, 3-4 AM (0)
Jun 04, 4-5 AM (0)
Jun 04, 5-6 AM (0)
Jun 04, 6-7 AM (1)
Jun 04, 7-8 AM (1)
Jun 04, 8-9 AM (0)
Jun 04, 9-10 AM (0)
Jun 04, 10-11 AM (0)
Jun 04, 11-12 PM (0)
Jun 04, 12-1 PM (14)
Jun 04, 1-2 PM (0)
Jun 04, 2-3 PM (0)
Jun 04, 3-4 PM (0)
Jun 04, 4-5 PM (0)
Jun 04, 5-6 PM (0)
Jun 04, 6-7 PM (1)
Jun 04, 7-8 PM (0)
Jun 04, 8-9 PM (0)
Jun 04, 9-10 PM (0)
Jun 04, 10-11 PM (0)
Jun 04, 11-12 AM (0)
Jun 05, 12-1 AM (0)
Jun 05, 1-2 AM (0)
Jun 05, 2-3 AM (0)
Jun 05, 3-4 AM (0)
Jun 05, 4-5 AM (0)
Jun 05, 5-6 AM (0)
Jun 05, 6-7 AM (0)
Jun 05, 7-8 AM (0)
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)
85 commits this week Jun 04, 2026 - Jun 11, 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]>
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: 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]>
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]>