Home / IntersectMBO / cardano-node
May 24, 5-6 PM (0)
May 24, 6-7 PM (0)
May 24, 7-8 PM (0)
May 24, 8-9 PM (0)
May 24, 9-10 PM (0)
May 24, 10-11 PM (0)
May 24, 11-12 AM (0)
May 25, 12-1 AM (0)
May 25, 1-2 AM (0)
May 25, 2-3 AM (0)
May 25, 3-4 AM (0)
May 25, 4-5 AM (0)
May 25, 5-6 AM (0)
May 25, 6-7 AM (0)
May 25, 7-8 AM (6)
May 25, 8-9 AM (0)
May 25, 9-10 AM (0)
May 25, 10-11 AM (6)
May 25, 11-12 PM (0)
May 25, 12-1 PM (0)
May 25, 1-2 PM (0)
May 25, 2-3 PM (0)
May 25, 3-4 PM (1)
May 25, 4-5 PM (1)
May 25, 5-6 PM (0)
May 25, 6-7 PM (0)
May 25, 7-8 PM (0)
May 25, 8-9 PM (0)
May 25, 9-10 PM (3)
May 25, 10-11 PM (0)
May 25, 11-12 AM (3)
May 26, 12-1 AM (3)
May 26, 1-2 AM (3)
May 26, 2-3 AM (0)
May 26, 3-4 AM (0)
May 26, 4-5 AM (0)
May 26, 5-6 AM (0)
May 26, 6-7 AM (4)
May 26, 7-8 AM (0)
May 26, 8-9 AM (0)
May 26, 9-10 AM (0)
May 26, 10-11 AM (0)
May 26, 11-12 PM (1)
May 26, 12-1 PM (1)
May 26, 1-2 PM (10)
May 26, 2-3 PM (0)
May 26, 3-4 PM (0)
May 26, 4-5 PM (16)
May 26, 5-6 PM (0)
May 26, 6-7 PM (0)
May 26, 7-8 PM (0)
May 26, 8-9 PM (0)
May 26, 9-10 PM (3)
May 26, 10-11 PM (3)
May 26, 11-12 AM (4)
May 27, 12-1 AM (4)
May 27, 1-2 AM (0)
May 27, 2-3 AM (2)
May 27, 3-4 AM (0)
May 27, 4-5 AM (0)
May 27, 5-6 AM (0)
May 27, 6-7 AM (1)
May 27, 7-8 AM (1)
May 27, 8-9 AM (3)
May 27, 9-10 AM (3)
May 27, 10-11 AM (2)
May 27, 11-12 PM (1)
May 27, 12-1 PM (0)
May 27, 1-2 PM (0)
May 27, 2-3 PM (2)
May 27, 3-4 PM (1)
May 27, 4-5 PM (1)
May 27, 5-6 PM (0)
May 27, 6-7 PM (0)
May 27, 7-8 PM (0)
May 27, 8-9 PM (1)
May 27, 9-10 PM (0)
May 27, 10-11 PM (0)
May 27, 11-12 AM (0)
May 28, 12-1 AM (0)
May 28, 1-2 AM (0)
May 28, 2-3 AM (0)
May 28, 3-4 AM (0)
May 28, 4-5 AM (0)
May 28, 5-6 AM (3)
May 28, 6-7 AM (2)
May 28, 7-8 AM (3)
May 28, 8-9 AM (0)
May 28, 9-10 AM (6)
May 28, 10-11 AM (2)
May 28, 11-12 PM (1)
May 28, 12-1 PM (0)
May 28, 1-2 PM (0)
May 28, 2-3 PM (1)
May 28, 3-4 PM (0)
May 28, 4-5 PM (0)
May 28, 5-6 PM (0)
May 28, 6-7 PM (0)
May 28, 7-8 PM (0)
May 28, 8-9 PM (0)
May 28, 9-10 PM (0)
May 28, 10-11 PM (1)
May 28, 11-12 AM (0)
May 29, 12-1 AM (0)
May 29, 1-2 AM (4)
May 29, 2-3 AM (0)
May 29, 3-4 AM (0)
May 29, 4-5 AM (0)
May 29, 5-6 AM (0)
May 29, 6-7 AM (0)
May 29, 7-8 AM (3)
May 29, 8-9 AM (0)
May 29, 9-10 AM (0)
May 29, 10-11 AM (0)
May 29, 11-12 PM (0)
May 29, 12-1 PM (8)
May 29, 1-2 PM (9)
May 29, 2-3 PM (0)
May 29, 3-4 PM (0)
May 29, 4-5 PM (1)
May 29, 5-6 PM (3)
May 29, 6-7 PM (6)
May 29, 7-8 PM (0)
May 29, 8-9 PM (0)
May 29, 9-10 PM (0)
May 29, 10-11 PM (1)
May 29, 11-12 AM (0)
May 30, 12-1 AM (0)
May 30, 1-2 AM (0)
May 30, 2-3 AM (0)
May 30, 3-4 AM (1)
May 30, 4-5 AM (2)
May 30, 5-6 AM (0)
May 30, 6-7 AM (0)
May 30, 7-8 AM (0)
May 30, 8-9 AM (0)
May 30, 9-10 AM (0)
May 30, 10-11 AM (0)
May 30, 11-12 PM (0)
May 30, 12-1 PM (0)
May 30, 1-2 PM (0)
May 30, 2-3 PM (0)
May 30, 3-4 PM (0)
May 30, 4-5 PM (0)
May 30, 5-6 PM (0)
May 30, 6-7 PM (0)
May 30, 7-8 PM (1)
May 30, 8-9 PM (3)
May 30, 9-10 PM (0)
May 30, 10-11 PM (6)
May 30, 11-12 AM (0)
May 31, 12-1 AM (4)
May 31, 1-2 AM (0)
May 31, 2-3 AM (1)
May 31, 3-4 AM (0)
May 31, 4-5 AM (0)
May 31, 5-6 AM (0)
May 31, 6-7 AM (0)
May 31, 7-8 AM (0)
May 31, 8-9 AM (1)
May 31, 9-10 AM (0)
May 31, 10-11 AM (0)
May 31, 11-12 PM (0)
May 31, 12-1 PM (0)
May 31, 1-2 PM (0)
May 31, 2-3 PM (0)
May 31, 3-4 PM (2)
May 31, 4-5 PM (0)
May 31, 5-6 PM (0)
165 commits this week May 24, 2026 - May 31, 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: shim consumer code for the SRP'd APIs
  Companion to the previous SRP pin: adapts the local consumers to the
  shape of consensus / ouroboros-network on the Leios prototype remake
  forks (which differ from CHAP).

  cardano-node/src/Cardano/Node/Run.hs
    - RunNodeArgs gained 'rnLeiosDb :: LeiosDbHandle m' on the
      leios-remake consensus. Initialise it with 'newLeiosDBInMemory' —
      tx-centrifuge has no need for persistence, the Leios DB is just
      bookkeeping for EB notifications.

  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.

Co-Authored-By: Claude Opus <[email protected]>
bench | tx-centrifuge: pin consensus/ledger/network/api/cli to Leios remake
  Mirrors the SRP set on jl/leios-prototype-remake (the node branch
  carrying the Dijkstra wiring). CHAP's cardano-api 11.0.0.0 ships TODO
  stubs for Dijkstra in caseByronOrShelleyBasedEra, shelleyBasedEra-
  Constraints, etc. — at runtime that surfaces as:

    "TODO Dijkstra: caseByronOrShelleyBasedEra: era not supported"

  ouroboros-consensus / cardano-ledger / ouroboros-network are pinned
  together with cardano-api / cardano-cli because the Leios prototype
  changes are coupled across the set; CHAP versions of any one would
  conflict with sibling APIs (e.g. ouroboros-network needs MkReception
  from network-mux, which isn't on CHAP yet).

  Pin selection trade-offs:

  - cardano-ledger: only libs/cardano-ledger-core + eras/dijkstra/impl
    are pinned. Pinning eras/conway/impl would force cardano-ledger-
    conway 1.22.0.0 (the SRP version), conflicting with cardano-node
    11.0.1's >= 1.22.1.0 requirement which CHAP satisfies.

  - ouroboros-network: all five touched subdirs (ouroboros-network,
    cardano-diffusion, cardano-ping, network-mux, ntp-client) are
    pinned together — ouroboros-network's framework sublibrary uses
    MkReception introduced in network-mux on this branch.

Co-Authored-By: Claude <[email protected]>
N2: wire Leios tracers into cardano-node Tracers / OrphanInstances
The consensus Leios chunks added four fields to the consensus tracer
records that cardano-node assembles in 'Cardano.Tracing.Tracers' (old
style) and 'Cardano.Node.Tracing.Tracers' (new style):

  - Consensus.Tracers'      gained 'leiosKernelTracer' and 'leiosPeerTracer'
  - NodeToNode.Tracers'     gained 'tLeiosNotifyTracer' and 'tLeiosFetchTracer'

This commit populates those fields in both 'mkTracers' code paths so
the record-construction sites are total. All four are wired to
'nullTracer' for now; the corresponding 'Transformable' / 'MetaTrace'
instances and EKG metrics are left as TODO. The new-style tracing
system will accordingly emit a 'TracerConsistencyWarnings' for the
four Leios namespaces declared in the config.yaml — that surfaces the
gap explicitly rather than silently dropping the configuration.

Adds the corresponding selectors to 'TraceSelection' / 'PartialTraceSelection'
and their JSON parsing:

  - traceLeiosKernel          / Consensus.LeiosKernel
  - traceLeiosPeer            / Consensus.LeiosPeer
  - traceLeiosNotifyProtocol  / LeiosNotify.Remote
  - traceLeiosFetchProtocol   / LeiosFetch.Remote

Also drops the duplicate 'LogFormatting (Simple/Stateful.TraceSendRecv)'
and 'MetaTrace (Simple/Stateful.TraceSendRecv)' instances that the
upstream leios-prototype branch carried in
'Cardano/Node/Tracing/Tracers/NodeToClient.hs' — they are now provided
by 'ouroboros-network:framework-tracing' and would collide if redefined
here.

Co-Authored-By: Claude Opus 4.7 <[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]>
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: 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: 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: 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: 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]>
fix(generate-release-changelog-links): drop optparse-applicative bound
The explicit optparse-applicative ^>= 0.18 dep (and matching import) was
blocking resolution with GHC versions that ship optparse-applicative 0.19.
All argument parsing goes through turtle, so optparse-applicative is a
transitive dep only — removing the explicit bound and the unused
Options.Applicative import fixes the solver failure without any code changes.
ansi-wl-pprint removed for the same reason: never imported, was only there
as a vestige of optparse-applicative 0.18's internal Doc type.
fix(generate-release-changelog-links): drop optparse-applicative bound
The explicit optparse-applicative ^>= 0.18 dep (and matching import) was
blocking resolution with GHC versions that ship optparse-applicative 0.19.
All argument parsing goes through turtle, so optparse-applicative is a
transitive dep only — removing the explicit bound and the unused
Options.Applicative import fixes the solver failure without any code changes.
ansi-wl-pprint removed for the same reason: never imported, was only there
as a vestige of optparse-applicative 0.18's internal Doc type.