Home / IntersectMBO / cardano-cli
May 07, 10-11 PM (0)
May 07, 11-12 AM (0)
May 08, 12-1 AM (0)
May 08, 1-2 AM (0)
May 08, 2-3 AM (0)
May 08, 3-4 AM (0)
May 08, 4-5 AM (0)
May 08, 5-6 AM (0)
May 08, 6-7 AM (0)
May 08, 7-8 AM (0)
May 08, 8-9 AM (0)
May 08, 9-10 AM (0)
May 08, 10-11 AM (0)
May 08, 11-12 PM (0)
May 08, 12-1 PM (1)
May 08, 1-2 PM (7)
May 08, 2-3 PM (6)
May 08, 3-4 PM (2)
May 08, 4-5 PM (2)
May 08, 5-6 PM (0)
May 08, 6-7 PM (3)
May 08, 7-8 PM (0)
May 08, 8-9 PM (0)
May 08, 9-10 PM (0)
May 08, 10-11 PM (0)
May 08, 11-12 AM (0)
May 09, 12-1 AM (0)
May 09, 1-2 AM (0)
May 09, 2-3 AM (0)
May 09, 3-4 AM (0)
May 09, 4-5 AM (0)
May 09, 5-6 AM (0)
May 09, 6-7 AM (0)
May 09, 7-8 AM (0)
May 09, 8-9 AM (0)
May 09, 9-10 AM (0)
May 09, 10-11 AM (0)
May 09, 11-12 PM (0)
May 09, 12-1 PM (0)
May 09, 1-2 PM (0)
May 09, 2-3 PM (0)
May 09, 3-4 PM (0)
May 09, 4-5 PM (0)
May 09, 5-6 PM (0)
May 09, 6-7 PM (0)
May 09, 7-8 PM (0)
May 09, 8-9 PM (0)
May 09, 9-10 PM (0)
May 09, 10-11 PM (0)
May 09, 11-12 AM (0)
May 10, 12-1 AM (0)
May 10, 1-2 AM (0)
May 10, 2-3 AM (0)
May 10, 3-4 AM (0)
May 10, 4-5 AM (0)
May 10, 5-6 AM (0)
May 10, 6-7 AM (0)
May 10, 7-8 AM (0)
May 10, 8-9 AM (0)
May 10, 9-10 AM (0)
May 10, 10-11 AM (0)
May 10, 11-12 PM (0)
May 10, 12-1 PM (0)
May 10, 1-2 PM (0)
May 10, 2-3 PM (0)
May 10, 3-4 PM (0)
May 10, 4-5 PM (0)
May 10, 5-6 PM (0)
May 10, 6-7 PM (0)
May 10, 7-8 PM (0)
May 10, 8-9 PM (0)
May 10, 9-10 PM (0)
May 10, 10-11 PM (0)
May 10, 11-12 AM (0)
May 11, 12-1 AM (0)
May 11, 1-2 AM (0)
May 11, 2-3 AM (0)
May 11, 3-4 AM (0)
May 11, 4-5 AM (0)
May 11, 5-6 AM (0)
May 11, 6-7 AM (0)
May 11, 7-8 AM (0)
May 11, 8-9 AM (0)
May 11, 9-10 AM (0)
May 11, 10-11 AM (0)
May 11, 11-12 PM (0)
May 11, 12-1 PM (0)
May 11, 1-2 PM (0)
May 11, 2-3 PM (0)
May 11, 3-4 PM (0)
May 11, 4-5 PM (0)
May 11, 5-6 PM (0)
May 11, 6-7 PM (0)
May 11, 7-8 PM (3)
May 11, 8-9 PM (0)
May 11, 9-10 PM (0)
May 11, 10-11 PM (0)
May 11, 11-12 AM (0)
May 12, 12-1 AM (0)
May 12, 1-2 AM (0)
May 12, 2-3 AM (0)
May 12, 3-4 AM (0)
May 12, 4-5 AM (0)
May 12, 5-6 AM (0)
May 12, 6-7 AM (0)
May 12, 7-8 AM (0)
May 12, 8-9 AM (0)
May 12, 9-10 AM (0)
May 12, 10-11 AM (0)
May 12, 11-12 PM (0)
May 12, 12-1 PM (0)
May 12, 1-2 PM (1)
May 12, 2-3 PM (0)
May 12, 3-4 PM (0)
May 12, 4-5 PM (1)
May 12, 5-6 PM (3)
May 12, 6-7 PM (0)
May 12, 7-8 PM (0)
May 12, 8-9 PM (1)
May 12, 9-10 PM (0)
May 12, 10-11 PM (0)
May 12, 11-12 AM (0)
May 13, 12-1 AM (0)
May 13, 1-2 AM (0)
May 13, 2-3 AM (0)
May 13, 3-4 AM (0)
May 13, 4-5 AM (0)
May 13, 5-6 AM (0)
May 13, 6-7 AM (0)
May 13, 7-8 AM (0)
May 13, 8-9 AM (0)
May 13, 9-10 AM (0)
May 13, 10-11 AM (0)
May 13, 11-12 PM (0)
May 13, 12-1 PM (0)
May 13, 1-2 PM (0)
May 13, 2-3 PM (0)
May 13, 3-4 PM (1)
May 13, 4-5 PM (1)
May 13, 5-6 PM (0)
May 13, 6-7 PM (0)
May 13, 7-8 PM (0)
May 13, 8-9 PM (0)
May 13, 9-10 PM (0)
May 13, 10-11 PM (0)
May 13, 11-12 AM (0)
May 14, 12-1 AM (0)
May 14, 1-2 AM (0)
May 14, 2-3 AM (0)
May 14, 3-4 AM (0)
May 14, 4-5 AM (0)
May 14, 5-6 AM (0)
May 14, 6-7 AM (0)
May 14, 7-8 AM (0)
May 14, 8-9 AM (0)
May 14, 9-10 AM (0)
May 14, 10-11 AM (0)
May 14, 11-12 PM (0)
May 14, 12-1 PM (0)
May 14, 1-2 PM (0)
May 14, 2-3 PM (0)
May 14, 3-4 PM (0)
May 14, 4-5 PM (0)
May 14, 5-6 PM (0)
May 14, 6-7 PM (1)
May 14, 7-8 PM (0)
May 14, 8-9 PM (2)
May 14, 9-10 PM (0)
May 14, 10-11 PM (0)
35 commits this week May 07, 2026 - May 14, 2026
Migrate Compatible.Certificate callers to Exp.Certificate
Replace the remaining five imports of Cardano.Api.Compatible.Certificate
with direct ledger-level construction of Exp.Certificate. This removes
the indirection through the Compatible API so the old Certificate type
in cardano-api can be deprecated.

The era-varying helpers (StakeRegistrationRequirements, Delegatee type
families) are inlined at each callsite. MIR and GenesisKeyDelegation
certificates remain pinned to BabbageEra since their on-chain
serialization is uniform across Shelley→Babbage.
Remove TxOut CtxTx/CtxUTxO usage from cardano-cli (non-Byron)
Eliminate the legacy 'TxOut CtxTx era' and 'TxOut CtxUTxO era' type
signatures and pattern matches from cardano-cli's non-Byron code paths.
Byron-era code is left alone — Byron uses a separate pre-Shelley tx
output model and 'Exp.TxOut' is not applicable.

Surfaces migrated:

  * 'Cardano.CLI.Compatible.Transaction.TxOut': 'mkTxOut' and
    'toTxOutInAnyEra' now return '(Exp.TxOut, Map DataHash (L.Data ...))'
    directly. The legacy 'TxOut CtxTx era' is still used internally as a
    stepping stone to reuse the api's 'toShelleyTxOutAny' field-level
    conversion logic; it does not leak to callers.

  * 'Cardano.CLI.Compatible.Transaction.Run': the 'createCompatibleTx'
    call site now just splits the tuple returned by 'toTxOutInAnyEra'.

  * 'Cardano.CLI.EraBased.Transaction.Run': 'toTxOutInEra' and
    'toTxOutInShelleyBasedEra' delegate straight to 'mkTxOut' now that
    it produces the tuple itself.

  * 'Cardano.CLI.Compatible.Json.Friendly.friendlyTxOut': now takes
    'Exp.TxOut (LedgerEra era)' and reads address / value / datum /
    reference script directly via the ledger lenses ('addrTxOutL',
    'valueTxOutL', 'datumTxOutL', 'referenceScriptTxOutL'). The two
    call sites in 'basePairs' and 'friendlyReturnCollateral' wrap the
    body's ledger outputs with 'Exp.TxOut' directly instead of going
    through 'fromShelleyTxOut → fromCtxUTxOTxOut'. The dead
    'friendlyTxOutValue' helper is dropped.

  * 'Cardano.CLI.EraBased.Query.Run.filteredUTxOsToText': now takes a
    'ShelleyBasedEra era' witness; converts the api 'UTxO era' to the
    ledger UTxO once via 'toLedgerUTxO', then renders each entry from
    '(api TxIn, Exp.TxOut (ShelleyLedgerEra era))' using ledger lenses.
    The pre-Babbage datum slot has no uniform ledger representation,
    so the text renderer emits an empty placeholder there and shows
    the babbage+ ledger datum elsewhere — debug-style output, no
    golden tests.

  * 'Cardano.CLI.Type.Error.TxValidationError': removed
    'validateTxReturnCollateral', which was exported but never called
    anywhere outside its own module (the actual return-collateral
    construction in 'EraBased/Transaction/Run' builds
    'Exp.TxReturnCollateral' directly).

Remaining uses of legacy ctx-typed tx outputs in cardano-cli are
confined to Byron-only modules and to the internal stepping-stone use
inside 'mkTxOut'.
Migrate to experimental TxOut in createCompatibleTx
Adapt to cardano-api PR #1209, which removes the legacy 'TxOut CtxTx era'
from the Compatible and Experimental APIs:

  * createCompatibleTx now takes '[Exp.TxOut (ShelleyLedgerEra era)]' plus
    a new 'Map L.DataHash (L.Data ...)' of supplemental datum bodies. The
    legacy 'TxOut CtxTx era' bundled supplemental datums inside outputs;
    'Exp.TxOut' only carries the datum hash, so callers thread the full
    datum bodies in explicitly.
  * The bridge helpers in 'Cardano.Api.Experimental.Tx'
    (fromLegacyTxOut, legacyDatumToDatum, supplementalDatumFromLegacy,
    toLedgerDatum, DatumDecodingError) are deleted.

Changes here:

  * Add a 'convertLegacyTxOut' helper in
    'Cardano.CLI.Compatible.Transaction.TxOut' that maps each legacy
    'TxOut CtxTx era' to '(Exp.TxOut, Map DataHash (L.Data ...))' using
    'toShelleyTxOutAny' (which already strips supplemental datums to
    their hash in the ledger TxOut) and pulls the supplemental datum
    bodies into the map.
  * Update the 'createCompatibleTx' call in
    'Cardano.CLI.Compatible.Transaction.Run' to convert outs at the
    boundary and pass the folded 'extraDatums' map.
  * Replace 'Exp.fromLegacyTxOut' in 'toTxOutInEra' and
    'toTxOutInShelleyBasedEra' with 'convertLegacyTxOut', using
    'obtainCommonConstraints' to bridge 'ShelleyLedgerEra ~ LedgerEra'.
  * Drop 'TxCmdDatumDecodingError' from 'TxCmdError' since the
    underlying 'Exp.DatumDecodingError' is gone and the new conversion
    is total.

Temporary cabal.project additions (to be removed once #1209 is merged
and the next cardano-api is published to CHaP):

  * source-repository-package pointing at the PR branch, so CI can
    build against the unpublished API.
  * Per-package '-Wwarn=deprecations -Wwarn=unused-imports' for
    cardano-cli. The PR branch is several commits ahead of
    cardano-api-11.1.0.0 and surfaces unrelated TxBody/TxBodyContent
    deprecations (cardano-api PR #1200) plus a redundant
    'Cardano.Ledger.Core' import in 'Cardano.CLI.Read' that became
    visible after upstream re-exports widened. Both are separate
    cardano-cli cleanups out of scope for this PR.
Drop redundant PParamsUpdate round-trip in update proposal flow
`makeShelleyUpdateProposal` (cardano-api ^>=11.1) accepts
`EraBasedProtocolParametersUpdate era` directly. The existing code in
`shelleyToBabbageProtocolParametersUpdate` constructed that value,
converted it to the deprecated `ProtocolParametersUpdate` via
`createEraBasedProtocolParamUpdate` / `fromLedgerPParamsUpdate`, and
passed the result to `makeShelleyUpdateProposal` — an unnecessary
round-trip through the old API.

Drop the conversion; pass `eraBasedPParams` directly. No behaviour
change.
Migrate IncompleteTxBody and transaction commands to Exp.UnsignedTx
Drops the last remaining uses of the deprecated old-API transaction
body surface (`TxBody`, `getTxBody`, `getTxBodyAndWitnesses`,
`makeShelleyKeyWitness`, `makeSignedTransaction`,
`evaluateTransactionExecutionUnits` on a deprecated `TxBody`,
`getTxId . getTxBody`) from cardano-cli's source tree.

`IncompleteTxBody` is reworked from a `newtype` wrapping
`InAnyShelleyBasedEra TxBody` into a GADT existential carrying
`Exp.UnsignedTx (ShelleyLedgerEra era)` plus `IsShelleyBasedEra`
evidence. `readFileTxBody` pattern-matches `ShelleyTx _ ledgerTx`
directly and wraps as `Exp.UnsignedTx ledgerTx` — no `getTxBody`.

Consumers in `Transaction.Run` are migrated to:
- `makeShelleyKeyWitness'` (ledger-level body) and `addWitnesses` for
  signing — both non-deprecated and work for all Shelley-based eras,
  preserving pre-Conway support.
- `getTxIdShelley` for transaction IDs.
- `evaluateTransactionExecutionUnitsShelley` (operates on the ledger
  `Tx` directly) for `transaction calculate-plutus-script-cost`,
  preserving Alonzo+ era support.
- `Exp.evaluateTransactionFee` on `Exp.UnsignedTx` for
  `transaction calculate-min-fee` (already Conway+ via `sbeToEra`).

`TransactionView.Run` no longer needs the
`makeSignedTransaction []`-then-extract-ledger boundary that PR #1374
added — the new `readFileTxBody` returns `Exp.UnsignedTx` directly.

The TextEnvelope I/O boundary still uses `Tx era` and `ShelleyTx _`
(both non-deprecated), since `Exp.UnsignedTx`/`Exp.SignedTx` have no
`HasTextEnvelope` instance. The on-disk `.tx`/`.txbody` formats are
unchanged.

The compatible command path (`Cardano.CLI.Compatible.Transaction.Run`)
was already using non-deprecated symbols (`makeShelleyKeyWitness'`,
`addWitnesses`) and is unchanged by this commit.
Drop deprecated TxBody from TxBodyFile phantom
`TxBodyFile` was a `File (TxBody ())` whose phantom payload was only
ever used as a file-tag for option/parser plumbing; the bytes on disk
do not depend on it. Replace `TxBody ()` with a fresh empty
`TxBodyTag` data type so the alias no longer references the deprecated
`TxBody` from cardano-api PR #1200.

No on-disk format change. No call-site change beyond the alias itself.
cabal.project: temporarily pin cardano-api to PR #1200
Pins cardano-api to the master commit containing PR #1200, which
deprecates `TxBody`, `TxBodyContent`, `getTxBody`, `getTxBodyContent`,
`createTransactionBody`, `defaultTxBodyContent`, and `BalancedTxBody`.

Lets this PR verify -Wdeprecations is clean against the deprecated
surface. Remove this stanza once cardano-api releases a version
containing #1200.
Migrate friendly transaction renderer to experimental API (Exp.Era era)
Migrates Cardano.CLI.Compatible.Json.Friendly off the old-API
Tx / TxBody / TxBodyContent onto Exp.SignedTx / Exp.UnsignedTx, with
the public renderer functions (friendlyTx, friendlyTxBody,
friendlyTxImpl, friendlyTxBodyImpl) now taking Exp.Era era instead of
ShelleyBasedEra era. This is the last consumer of old-API
TxBodyContent in cardano-cli.

Behaviour change: 'cardano-cli debug transaction view' and
'cardano-cli transaction view' now only accept Conway and Dijkstra
tx / tx-body files. Pre-Conway files (Shelley, Allegra, Mary, Alonzo,
Babbage) fail with a DeprecatedEra error. The corresponding pre-Conway
golden tests have been removed.
Bump nix CHaP flake input to match cabal index-state
The previous commit bumped cabal.project's cardano-haskell-packages
index-state to 2026-05-08T13:26:45Z, but the nix-side CHaP pin in
flake.lock was still at 2026-04-30. haskell.nix-driven CI checks
(actionlint, check-formatting, check-cabal-files, check-cabal-gild,
test-hls-works, shellcheck) all failed with Cabal-7159 "Latest known
index-state for 'cardano-haskell-packages' (2026-04-30T13:08:25Z) is
older than the requested index-state (2026-05-08T13:26:45Z)".

Updated via `nix flake lock --update-input CHaP` per CONTRIBUTING.md.
Bump cardano-api to ^>=11.1
cardano-api 11.1.0.0 is the first published release containing the
EraBasedProtocolParametersUpdate migration this branch depends on
(cardano-api PR #1103). Bump the CHaP index-state past its publication
and widen the cardano-cli library constraint from ^>=11.0 (which means
>=11.0 && <11.1 under PVP caret-equality) to ^>=11.1 so the solver
picks the new release.
Render update proposal field for Shelley-Babbage eras
Now that the friendly renderer covers Shelley through Babbage, those
tx bodies' update field is no longer just noise — it carries real
governance state (a ProposedPPUpdates map keyed by genesis-key hash and
an EpochNo). Render it directly from the ledger TxBody via
`updateTxBodyL`. Conway replaced update proposals with the new
governance system, so the field is absent (not null) in Conway+.

Adds `updateProposalPairFor` and `renderUpdate` helpers; the
per-era PParamsUpdate is rendered via its ledger ToJSON instance.
Migrate friendly rendering to experimental API types, widen to all Shelley-based eras, and refactor with per-feature helpers
friendlyTx and friendlyTxBody now take ShelleyBasedEra era and accept
Exp.SignedTx era / Exp.UnsignedTx (ShelleyLedgerEra era). They are no
longer parameterised by Exp.Era era (which is Conway-only) — the
renderer works for Shelley through Conway tx and tx-body files,
unblocking transaction view for pre-Conway tx files.

friendlyTxBodyImpl reads every field directly from the ledger TxBody
via lenses, so the old API's TxBodyContent constructor and
getTxBodyContent are no longer used in this module.

The body composes a list of pairs from per-feature helpers
(validityRangePair, mintPairFor, collateralInputsPairFor,
requiredSignersPairFor, referenceInputsPairFor, totalCollateralPairFor,
returnCollateralPairFor, alonzoScriptWitnessPairsFor,
conwayBodyPairsFor). Era-gated helpers return [Aeson.Pair] and emit []
in eras that don't have the field, so JSON keys for absent-in-this-era
fields (e.g. "mint" in Shelley, "collateral inputs" in Mary) are
omitted from the output rather than rendered as null. The eon-based
dispatchers (forShelleyBasedEraInEon, AlonzoEraOnwards,
ConwayEraOnwards, ...) are no longer used in this module.

Also adds an Alonzo YAML golden test alongside the existing JSON
golden to cover the YAML output path for that era.

Relies on cardano-api 11.1.0.0 (PR IntersectMBO/cardano-api#1199),
which widened Exp.SignedTx / Exp.UnsignedTx to all Shelley-based eras.
Render update proposal field for Shelley-Babbage eras
Now that the friendly renderer covers Shelley through Babbage, those
tx bodies' update field is no longer just noise — it carries real
governance state (a ProposedPPUpdates map keyed by genesis-key hash and
an EpochNo). Render it directly from the ledger TxBody via
`updateTxBodyL`. Conway replaced update proposals with the new
governance system, so the field is absent (not null) in Conway+.

Adds `updateProposalPairFor` and `renderUpdate` helpers; the
per-era PParamsUpdate is rendered via its ledger ToJSON instance.
Migrate friendly rendering to experimental API types, widen to all Shelley-based eras, and refactor with per-feature helpers
friendlyTx and friendlyTxBody now take ShelleyBasedEra era and accept
Exp.SignedTx era / Exp.UnsignedTx (ShelleyLedgerEra era). They are no
longer parameterised by Exp.Era era (which is Conway-only) — the
renderer works for Shelley through Conway tx and tx-body files,
unblocking transaction view for pre-Conway tx files.

friendlyTxBodyImpl reads every field directly from the ledger TxBody
via lenses, so the old API's TxBodyContent constructor and
getTxBodyContent are no longer used in this module.

The body composes a list of pairs from per-feature helpers
(validityRangePair, mintPairFor, collateralInputsPairFor,
requiredSignersPairFor, referenceInputsPairFor, totalCollateralPairFor,
returnCollateralPairFor, alonzoScriptWitnessPairsFor,
conwayBodyPairsFor). Era-gated helpers return [Aeson.Pair] and emit []
in eras that don't have the field, so JSON keys for absent-in-this-era
fields (e.g. "mint" in Shelley, "collateral inputs" in Mary) are
omitted from the output rather than rendered as null. The eon-based
dispatchers (forShelleyBasedEraInEon, AlonzoEraOnwards,
ConwayEraOnwards, ...) are no longer used in this module.

Also adds an Alonzo YAML golden test alongside the existing JSON
golden to cover the YAML output path for that era.

Relies on cardano-api 11.1.0.0 (PR IntersectMBO/cardano-api#1199),
which widened Exp.SignedTx / Exp.UnsignedTx to all Shelley-based eras.
Render update proposal field for Shelley-Babbage eras
Now that the friendly renderer covers Shelley through Babbage, those
tx bodies' update field is no longer just noise — it carries real
governance state (a ProposedPPUpdates map keyed by genesis-key hash and
an EpochNo). Render it directly from the ledger TxBody via
`updateTxBodyL`. Conway replaced update proposals with the new
governance system, so the field is absent (not null) in Conway+.

Adds `updateProposalPairFor` and `renderUpdate` helpers; the
per-era PParamsUpdate is rendered via its ledger ToJSON instance.
Migrate friendly rendering to experimental API types, widen to all Shelley-based eras, and refactor with per-feature helpers
friendlyTx and friendlyTxBody now take ShelleyBasedEra era and accept
Exp.SignedTx era / Exp.UnsignedTx (ShelleyLedgerEra era). They are no
longer parameterised by Exp.Era era (which is Conway-only) — the
renderer works for Shelley through Conway tx and tx-body files,
unblocking transaction view for pre-Conway tx files.

friendlyTxBodyImpl reads every field directly from the ledger TxBody
via lenses, so the old API's TxBodyContent constructor and
getTxBodyContent are no longer used in this module.

The body composes a list of pairs from per-feature helpers
(validityRangePair, mintPairFor, collateralInputsPairFor,
requiredSignersPairFor, referenceInputsPairFor, totalCollateralPairFor,
returnCollateralPairFor, alonzoScriptWitnessPairsFor,
conwayBodyPairsFor). Era-gated helpers return [Aeson.Pair] and emit []
in eras that don't have the field, so JSON keys for absent-in-this-era
fields (e.g. "mint" in Shelley, "collateral inputs" in Mary) are
omitted from the output rather than rendered as null. The eon-based
dispatchers (forShelleyBasedEraInEon, AlonzoEraOnwards,
ConwayEraOnwards, ...) are no longer used in this module.

Also adds an Alonzo YAML golden test alongside the existing JSON
golden to cover the YAML output path for that era.

Relies on cardano-api 11.1.0.0 (PR IntersectMBO/cardano-api#1199),
which widened Exp.SignedTx / Exp.UnsignedTx to all Shelley-based eras.
Refactor friendlyTxBodyImpl with per-feature pair helpers
The 7-way ShelleyBasedEra case duplicated body/mAuxData extraction and
a near-identical field list (with Null placeholders) in every branch.
Extract one helper per feature (validityRangePair, mintPair,
collateralInputsPair, requiredSignersPair, referenceInputsPair,
totalCollateralPair, returnCollateralPair) plus
alonzoScriptWitnessPairsFor / conwayBodyPairsFor. The top-level body
now extracts body/mAuxData once and composes a flat list of pairs.

No behaviour change: all golden outputs are unchanged.
Render update proposal field for Shelley-Babbage eras
Now that the friendly renderer covers Shelley through Babbage, those
tx bodies' update field is no longer just noise — it carries real
governance state (a ProposedPPUpdates map keyed by genesis-key hash and
an EpochNo). Render it directly from the ledger TxBody via
`updateTxBodyL`. Conway replaced update proposals with the new
governance system, so the field is absent (not null) in Conway+.

Adds `updateProposalPairFor` and `renderUpdate` helpers; the
per-era PParamsUpdate is rendered via its ledger ToJSON instance.
Migrate friendly rendering to experimental API types and widen to all Shelley-based eras
friendlyTx and friendlyTxBody now take ShelleyBasedEra era and accept
Exp.SignedTx era / Exp.UnsignedTx (ShelleyLedgerEra era). They are no
longer parameterised by Exp.Era era (which is Conway-only) — the
renderer works for Shelley through Conway tx and tx-body files,
unblocking transaction view for pre-Conway tx files.

friendlyTxBodyImpl reads every field directly from the ledger TxBody
via lenses, so the old API's TxBodyContent constructor and
getTxBodyContent are no longer used in this module.

The body dispatches on ShelleyBasedEra at the top level and each
branch renders its full body inline. Era-gated fields (mint,
collateral, reference inputs, governance actions, etc.) are present
only in branches whose era supports them. The eon-based dispatchers
(forShelleyBasedEraInEon, AlonzoEraOnwards, ConwayEraOnwards, ...) are
no longer used in this module.

Relies on cardano-api 11.1.0.0 (PR IntersectMBO/cardano-api#1199),
which widened Exp.SignedTx / Exp.UnsignedTx to all Shelley-based eras.