Specialize `CertsSpec` for dijkstra
to fix the tests failing because of the new predicate failure
to fix the tests failing because of the new predicate failure
Consolidates golden tests from the separate `cardano-ledger-alonzo-test` package into the main `cardano-ledger-alonzo` impl package, following the same pattern already completed in other eras (allegra, mary, conway, babbage).
- Remove darwin.apple_sdk.frameworks.{CoreServices,AppKit} and
darwin.libobjc from buildInputs in any-darwin.nix and devshells.nix;
darwin.apple_sdk (aliased to apple_sdk_11_0) was removed as a legacy
compatibility stub — the default Darwin stdenv SDK provides all
frameworks automatically
- Update ghc8107 → ghc810 in installers/default.nix; ghc8107 was
removed from nixpkgs-25.11 (closest available: ghc810)
* chore: update script for new release
* chore: bump node/dbsync/mithril
* chore: config files for node/dbsync
* feat(tests): add Python test framework with full schema coverage
Adds a Rosetta-inspired, read-only test suite at tests/ for any GraphQL
implementation of the cardano-graphql schema. Six phases shipped in one go:
Phase 1 — sanity, golden functional, negative tests
Phase 2 — Locust load harness + p95<500ms / err<1% baseline gate
Phase 3 — multi-instance comparison (skipped without --compare-url)
Phase 4 — regression goldens seeded from cardano-foundation issues
(#951, #953, #978/#980, #979)
Phase 5 — schema introspection diff against committed snapshot
Phase 6 — CI workflows: PR gate, nightly, weekly
Coverage:
* 52 / 52 top-level Query roots (100%)
* 428 / 440 data-type fields (97.3%) across 61/61 types touched
* 59 mainnet goldens captured at anchor block 13228000
* 8 preprod goldens scaffolded (auto-skip on mainnet runs)
* 8 negative tests, 7 schema tests (1 integration + 6 offline unit)
Determinism:
* All goldens pinned to anchor_block 13228000 in config/networks.yaml
* Address buckets: light / medium / heavy with separate goldens + perf tasks
* --update-golden record-then-review lifecycle; forbidden when CI=true
* Volatile fields masked via dot.notation[*] ignore_paths DSL
Tooling:
* uv-managed, Python 3.12+
* generate_report.py: self-contained HTML report with coverage panel,
per-test timing table, and query corpus appendix
* utils/coverage.py: graphql-core-based coverage report (top-level + field)
* utils/markers.py: lists 52 auto-applied root markers + cip26/cip68
* Dynamic markers — pytest -m assets / -m cip26 / -m cip68 / -m <root>
target only goldens whose query touches that root, computed at collection
Reusable patterns lifted from cardano-rosetta-java/tests/data-endpoints:
* pytest_runtest_makereport Allure attachment hook
* Recording GraphQL client proxy
* YAML network test data layout
* Deep-diff with path-based ignores
Documentation:
* tests/README.md — top-level reference
* tests/QUICKSTART.md — install + run in 5 minutes
* tests/TESTING_GUIDE.md — skim-friendly reference for all test types
* tests/CONTRIBUTING.md — how to add tests, refresh anchor, debug
* tests/{performance,multi_instance,schema,negative}/README.md
* tests/queries/{coverage,regression}/README.md
* .claude/skills/test-cardano-graphql.md — natural-language Claude skill
CI:
* .github/workflows/graphql_tests.yml — PR gate (markers=pr), nightly (full
functional + negative + schema), weekly (adds perf smoke + baseline gate),
workflow_dispatch with optional URL override and run_perf toggle.
* Every job exports CI=true to block --update-golden / --update-schema.
---------
Co-authored-by: VladislavKudrin <[email protected]>
This commit adds property tests to validate the implementation of ensureSameTarget, provided by the generic voting committee API. Co-authored-by: Nicolas BACQUEY <[email protected]> Co-authored-by: Thomas BAGREL <[email protected]> Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]> Co-authored-by: Thomas BAGREL <[email protected]> Co-authored-by: Agustin Mista <[email protected]>
This commit implements the deterministic core of the weighted Fait-Accompli algorithm using a precomputed extended stake distribution, shareable across multiple voting committees running on the same epoch. The implementation includes a tiebreaker mechanism to allow altering the order of pools with the same stake when the threshold index between persistent and non-persistent voters would land between them. This can later be instantiated to allow for a fair split across epochs. Co-authored-by: Nicolas BACQUEY <[email protected]> Co-authored-by: Thomas BAGREL <[email protected]> Co-authored-by: Agustin Mista <[email protected]>
This commit tweaks the generic voting committee interface around aggregatable types to better acommodate the fact that cryptographic aggregation of signatures can fail (in very rare cases). Previously, we had encapsulated this problem by collecting keys and signatures and aggregating them at verification time. The new interface is more faithful and accounts for the new failure mode in a more honest way. In addition, it renames the 'CryptoSupportsAggregateVRF' class into 'CryptoSupportsBatchVRFVerification', since the new interface constraints the inputs to /not/ be aggregated at (batch) verification time, so that implementations that require binding keys to VRF outputs can do so more directly and explicitly. Finally, it removes the trivial aggregation helpers introduced in Peras 22, as concrete implementations of the new aggregation interface will not benefit much from having them, so there's no need to maintain unused code for which we have no plans to use in the long term either. Co-authored-by: Nicolas BACQUEY <[email protected]> Co-authored-by: Thomas BAGREL <[email protected]> Co-authored-by: Agustin Mista <[email protected]>
This commit implements property tests for the real WFALS implementation asserting that: * votes cast by eligible voters are successfully verifiable under the same voting committee, * fake (illegal) votes are successfully rejected, and * certificates forged by multiple votes can be verifiable under the same voting committe Co-authored-by: Nicolas BACQUEY <[email protected]> Co-authored-by: Thomas BAGREL <[email protected]> Co-authored-by: Agustin Mista <[email protected]>
This commit implements property tests for the EveryoneVotes implementation asserting that: * votes cast by eligible voters are successfully verifiable under the same voting committee, * fake (illegal) votes are successfully rejected, and * certificates forged by multiple votes can be verifiable under the same voting committe Co-authored-by: Nicolas BACQUEY <[email protected]> Co-authored-by: Thomas BAGREL <[email protected]> Co-authored-by: Agustin Mista <[email protected]>
This commit adds serialization roundtrip tests for the concrete Peras votes and certificate types. Co-authored-by: Agustin Mista <[email protected]> Co-authored-by: Thomas BAGREL <[email protected]> Co-authored-by: Nicolas BACQUEY <[email protected]>
This commit implements BLS-based crypto helpers to simplify the implementation of crypto schemes used for voting committees. It includes both single and aggregate signature and VRF signing and verification, as well as swap-attack-resistant aggregate VRF verification via linearization. Co-authored-by: Nicolas BACQUEY <[email protected]> Co-authored-by: Thomas BAGREL <[email protected]> Co-authored-by: Agustin Mista <[email protected]>
This commit defines a concrete PerasCrypto scheme using BLS signatures to instantiate all the voting committee superclasses needed by the WFALS and EveryoneVotes voting committee implementations. Note that these instances are heavily inspired by the ones defined for TestCrypto in the generic voting committee test-suite, albeit with slightly different types and more documentation. Co-authored-by: Agustin Mista <[email protected]> Co-authored-by: Thomas BAGREL <[email protected]> Co-authored-by: Nicolas BACQUEY <[email protected]>
This commit defines some common test helpers used by the upcoming property and conformance tests for both WFALS and EveryoneVotes. Co-authored-by: Nicolas BACQUEY <[email protected]> Co-authored-by: Thomas BAGREL <[email protected]> Co-authored-by: Agustin Mista <[email protected]>
This commit implements conversion routines between the brand-new (concrete) Peras votes and certificates and their corresponding (abstract) voting committee counterparts. This is done by introducing a `VotingCommitteeSupportsPeras` type class to allow us to easily change the underlying voting committee implementation via a proxy type. Co-authored-by: Agustin Mista <[email protected]> Co-authored-by: Thomas BAGREL <[email protected]> Co-authored-by: Nicolas BACQUEY <[email protected]>
This commit adds conversion rountrip tests between concrete Peras votes and certificates and their corresponding (abstract) counterparts in the WFALS and EveryoneVotes voting committee implementations. Notably, the roundtrip properties allow testing both total (WFALS) and partial (EveryoneVotes) conversions, generating both good and bad cases and contrasting them against their expected rountrip outcome. Co-authored-by: Agustin Mista <[email protected]> Co-authored-by: Thomas BAGREL <[email protected]> Co-authored-by: Nicolas BACQUEY <[email protected]>
This commit implements the local sortition fallback scheme needed by wFA^LS to allocate non-persistent voters. Each non-persistent voter provides a VRF output that gets normalized and compared against the output of a numerically-stable stake-weighted Poisson distribution. Co-authored-by: Nicolas BACQUEY <[email protected]> Co-authored-by: Thomas BAGREL <[email protected]> Co-authored-by: Agustin Mista <[email protected]>
This commit reorganizes the existing model and conformance test infrastructure for WFALS in anticipation to the the tests for the real implementation implemented in the next commit. Co-authored-by: Nicolas BACQUEY <[email protected]> Co-authored-by: Thomas BAGREL <[email protected]> Co-authored-by: Agustin Mista <[email protected]>