feat(ledger): Conway PV9 gating
Signed-off-by: Chris Gianelloni <[email protected]>
Signed-off-by: Chris Gianelloni <[email protected]>
Widen Exp.SignedTx to all Shelley-based eras
friendlyTx and friendlyTxBody now take Exp.SignedTx / Exp.UnsignedTx instead of the old Tx / TxBody. friendlyTxBodyImpl reads every field directly from the ledger TxBody via lenses, so the old TxBodyContent constructor and getTxBodyContent are no longer used in this module. Pre-Conway eras are no longer supported by transaction view; the TransactionView caller errors out via caseShelleyToBabbageOrConwayEraOnwards.
Two related findings on the cardano_node_adversary 1h dispatch
(report 9_VSL0Up0MFelP0KPcfYVGa2):
Always: Commands finish with zero exit code → stub/eventually_alive.sh
Always: Commands finish with zero exit code → stub/finally_alive.sh
Always assertions → stub eventually_alive cold_start
Both probes were budgeted at 30 s settle + 15×2 s retries = 60 s
worst case. The Antithesis composer's per-command timeout is well
below that — observed ≤16 s for parallel/eventually commands and
≤54 s for finally commands across multiple reports — so the
probes were getting SIGKILL'd by composer mid-loop and registering
as exit-code findings. Tightening to 3 s settle + 8×1 s = 11 s
worst case fits comfortably under any of the observed bounds.
The cold-start path used `sdk_unreachable`, which emits an
`AlwaysOrUnreachable` assertion with hit:true + condition:false —
that fires as an Always-class finding, defeating the script
comment's stated intent ("emit silently and exit 0 so a
fault-cascade window doesn't flag as a real liveness failure"). The
right primitive for an informational observation is
`sdk_sometimes false`, which records the rate without triggering a
finding when the assertion isn't continuously true. Switched the
cold-start emit to that.
Both probes now exit 0 unconditionally — the SDK assertion already
records the outcome; a non-zero shell exit just duplicates the
signal under the "Always: zero exit code" property. The Sometimes
events visible in the report make the failure mode equally
diagnosable without needing a finding.
The 13 s indexer cold-start absorption noted in the original
comments isn't lost — `slotsBehind <= 5` still polls every 1 s for
8 attempts after the 3 s settle, giving roughly the same number of
RollForward arrivals to catch up. The settle is purely the initial
"don't hammer the socket while the indexer is reconnecting" delay;
the loop's per-attempt sleep does the actual waiting.
Two related findings on the cardano_node_adversary 1h dispatch
(report 9_VSL0Up0MFelP0KPcfYVGa2):
Always: Commands finish with zero exit code → stub/eventually_alive.sh
Always: Commands finish with zero exit code → stub/finally_alive.sh
Always assertions → stub eventually_alive cold_start
Both probes were budgeted at 30 s settle + 15×2 s retries = 60 s
worst case. The Antithesis composer's per-command timeout is well
below that — observed ≤16 s for parallel/eventually commands and
≤54 s for finally commands across multiple reports — so the
probes were getting SIGKILL'd by composer mid-loop and registering
as exit-code findings. Tightening to 3 s settle + 8×1 s = 11 s
worst case fits comfortably under any of the observed bounds.
The cold-start path used `sdk_unreachable`, which emits an
`AlwaysOrUnreachable` assertion with hit:true + condition:false —
that fires as an Always-class finding, defeating the script
comment's stated intent ("emit silently and exit 0 so a
fault-cascade window doesn't flag as a real liveness failure"). The
right primitive for an informational observation is
`sdk_sometimes false`, which records the rate without triggering a
finding when the assertion isn't continuously true. Switched the
cold-start emit to that.
Both probes now exit 0 unconditionally — the SDK assertion already
records the outcome; a non-zero shell exit just duplicates the
signal under the "Always: zero exit code" property. The Sometimes
events visible in the report make the failure mode equally
diagnosable without needing a finding.
The 13 s indexer cold-start absorption noted in the original
comments isn't lost — `slotsBehind <= 5` still polls every 1 s for
8 attempts after the 3 s settle, giving roughly the same number of
RollForward arrivals to catch up. The settle is purely the initial
"don't hammer the socket while the indexer is reconnecting" delay;
the loop's per-attempt sleep does the actual waiting.
Signed-off-by: Akhil Repala <[email protected]>
Bumps [openssl](https://github.com/rust-openssl/rust-openssl) from 0.10.72 to 0.10.79. - [Release notes](https://github.com/rust-openssl/rust-openssl/releases) - [Commits](https://github.com/rust-openssl/rust-openssl/compare/openssl-v0.10.72...openssl-v0.10.79) --- updated-dependencies: - dependency-name: openssl dependency-version: 0.10.79 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <[email protected]>
Signed-off-by: Akhil Repala <[email protected]>
[ci skip]
Signed-off-by: Akhil Repala <[email protected]>
Introduces a new package providing authenticated v2 envelope wrapping for Byron HD wallet extended private keys. Key design: - C layer handles ed25519 key generation, public-key derivation, signing, and BIP32 child derivation; it stores and operates on plaintext key material only; public symbols are prefixed cwv2_ to avoid linker conflicts with the legacy cardano-crypto C library - Haskell layer owns all encryption: Argon2id key derivation (128 MiB, t=3, p=4) and XChaCha20-Poly1305 AEAD wrapping with a freshly randomized salt and nonce per write - CBOR-encoded versioned envelope with explicit associated data binding format version, KDF parameters, cipher, payload shape, public key, and chain code — preventing silent swaps without detection - Fail-closed public API: passphrase-using operations return Either and reject wrong passphrases at authentication time - Test helpers for fast-KDF and deterministic randomness modes keep the test suite sub-second without touching production paths - Benchmark suite covers create, validate, sign, and change-passphrase under production Argon2id parameters
`goldenExampleEraTxCborSpec` allows us to generate a `Spec` for generating a `golden/tx.cbor` golden file out of some `Tx` provided as a parameter. Then, for each era's test-suite, we call this function to generate the golden file using the example transaction we have defined for each era. We also extended `EraTest` so that we don't need to manually call `getDataFileName` in order to get the fullpath for each era's cabal project. We also create new `Binary.Golden` modules for Mary and Babbage (previously they reused Allegra's and Alonzo's respectively, which used the wrong era's example transactions). Additionally, fix `exampleDijkstraBasedTopTx` to not add PlutusV4 scripts to `scriptTxWitsL`: PlutusV4 is not included in Dijkstra's `transaction_witness_set` CDDL, so those scripts were silently dropped during serialization, causing a roundtrip failure.
Signed-off-by: Matthieu Pizenberg <[email protected]>
[ci skip]
Signed-off-by: Tripura Repalle <[email protected]>
Signed-off-by: Eric Torreborre <[email protected]>