Repository navigation
Mithril v2642.0
Pre-releaseHighlights:
- On-chain protocol configuration: The Mithril signers and aggregators now read the protocol parameters and the signed entity types configuration from the Cardano chain.
- Breaking Changes: Removed support for
Gzipcompressed snapshot archives in the Mithril aggregator and client, and removed the deprecatedClientBuilder::aggregatorconstructor and--cardano-networkoption of the snapshot converter in the Mithril client library and CLI. - Certificate chain cache: The Mithril client library, CLI and WASM library can cache the verified certificate chain to speed up subsequent verifications (unstable).
- SNARK certificates: Compact encoding, Proof of Bound Possession and a genesis-signed registry of the trusted circuit verification keys (unstable).
- IPFS: Preliminary support for IPFS as a storage location of the immutable files in the Mithril aggregator and client, with IPNS publishing of the aggregator directory (unstable).
- Cardano node: Support for
Cardano node11.1.3and preliminary support for the upcomingCardano node11.2. - DMQ node: Support for the DMQ node
0.7.2.0stable version. - Maintenance: Bug fixes and performance improvements.
What's Changed
- Docs/update tailwind and docusaurus by @roynakakawa in #3430
- fix(stm): stop forcing
rustlsin thefuture_snarkfeature by @jpraynaud in #3439 - fix(infra): avoid huge warp backtraces in aggregator and relay logs by @jpraynaud in #3444
- docs: final CHANGELOG for
2630.0distribution by @jpraynaud in #3448 - docs: rotate documentation for
2630distribution by @jpraynaud in #3320 - docs(website): update dev blog post for distribution
2630.0by @jpraynaud in #3449 - feat: upgrade DMQ node to
0.7.0.0by @jpraynaud in #3361 - removed plausible script by @roynakakawa in #3450
- chore: update infrastructure and documentation for DMQ node
0.7.0.0by @jpraynaud in #3456 - fix admonitions on blog entries by @roynakakawa in #3458
- feat(common): encode the SNARK aggregate signature as bytes in the certificate message by @jpraynaud in #3437
- feat(test-lab): add IPFS devnet by @Alenar in #3453
- fix(e2e): remove epoch gap flakiness by @jpraynaud in #3445
- refactor(stm): Reuse the cached unsafe SRS in the SNARK test setups by @damrobi in #3443
- Add aggregator CLI commands for configuration parameters by @turmelclem in #3438
- refactor: remove gzip support by @Alenar in #3474
- fix(e2e): fix flakiness with minimal scenario by @jpraynaud in #3475
- refactor(stm): combine pairing checks ivc verify by @damrobi in #3454
- docs(website): harmonize the DMQ beta status across the documentation by @jpraynaud in #3476
- fix(e2e): strengthen concatenation protocol parameters by @jpraynaud in #3477
- feat(infra): deploy protocol configuration reader on-chain parameters by @jpraynaud in #3472
- fix: anticipate Rust
1.98clippy warnings by @Alenar in #3485 - test(stm): consolidate the certificate proof tests around the golden proof by @hjeljeli32 in #3483
- refactor(stm): cache the circuit test fixtures on disk by @hjeljeli32 in #3481
- chore(infra): update configurations for Cardano
11.1.0by @jpraynaud in #3488 - fix admonitions and update footer discord by @roynakakawa in #3492
- fix(infra): build wrapper Docker image with Cardano node
11.1.0by @jpraynaud in #3493 - Add a new protocol configuration markers runbook by @turmelclem in #3451
- fix(infra): remove the Cardano block producer configuration file by @jpraynaud in #3494
- Adapt end-to-end test for on-chain configuration parameters by @turmelclem in #3489
- Replace protocol-config placeholders by newly generated verification key and address by @turmelclem in #3478
- test(stm): consolidate the recursive circuit MockProver tests by @hjeljeli32 in #3486
- refactor(aggregator): deterministic snapshots archives by @Alenar in #3479
- fix(ci): deploy the Cardano blocks and transactions signing configuration by @jpraynaud in #3500
- feat(doc): added pages for aggregation method in website by @damrobi in #3490
- Implement chain adapter to read on chain protocol configurations by @turmelclem in #3482
- test(stm): recover the ignored IVC prover input preparation tests by @hjeljeli32 in #3502
- feat(aggregator): ipfs file uploader by @Alenar in #3495
- fix: adapt the UTxO-HD ledger flavors to Cardano node
11.1by @jpraynaud in #3501 - ci: raise the wasm headless tests timeout to 15 minutes by @jpraynaud in #3506
- Enhancements protocol configuration markers by @turmelclem in #3504
- test(stm): split the IVC prover monolith into separated tests by @hjeljeli32 in #3505
- refactor(aggregator): remove the protocol configuration parameters in aggregator configuration by @turmelclem in #3510
- chore(infra): remove the aggregator protocol configuration parameters by @jpraynaud in #3508
- feat(stm): add behavior tests for ivc wiring by @damrobi in #3509
- docs: adapt documentation for on chain configuration parameters by @turmelclem in #3511
- refactor(stm): harmonize the recursive and non-recursive SNARK stacks by @hjeljeli32 in #3515
- feat(client, client-cli): IPFS file downloader by @Alenar in #3512
- docs(stm): add runnable examples for the three paths by @hjeljeli32 in #3517
- feat(stm): add off circuit checks by @damrobi in #3516
- test(e2e): IPFS support by @Alenar in #3528
- refactor(stm, client, ci): add missing binaries in mithril-stm, improve verifications in Nightly Dispatcher by @turmelclem in #3529
- feat: introduce the circuit verification key registry by @jpraynaud in #3513
- feat(stm): cache the circuit keys and reuse the prover setups by @jpraynaud in #3532
- better ipfs urls + small fixes by @Alenar in #3531
- refactor(aggregator): accelerate build times by @jpraynaud in #3536
- feat(infra): deploy an IPFS node on the Mithril networks by @jpraynaud in #3540
- test(stm): add property tests for the IVC pure helpers by @hjeljeli32 in #3535
- feat(e2e): enhance the SNARK test with a prover warmup by @jpraynaud in #3533
- chore(infra): add protocol config verification key and address for
dev-previewby @jpraynaud in #3544 - fix: update Pallas to
1.3.0by @jpraynaud in #3548 - fix(aggregator): make IPFS uploads resilient to a large MFS directory by @jpraynaud in #3546
- docs: add dev blog post for distribution
2630.1hotfix by @jpraynaud in #3550 - feat: support for Cardano
11.1.2configuration by @jpraynaud in #3545 - ci: avoid binaries artifact name collision in the nightly dispatcher by @jpraynaud in #3553
- refactor(stm): move the IVC circuit onto the Relation trait by @hjeljeli32 in #3547
- refactor(client): new certificate verifier cache api by @Alenar in #3554
- refactor: remove the HTTP client and TLS features from STM by @jpraynaud in #3559
- refactor(stm): rename the circuit test assets and production keys by @hjeljeli32 in #3565
- chore: publish the dual genesis verification keys of the Mithril networks by @jpraynaud in #3560
- docs: add aggregator protocol configuration markers commands by @jpraynaud in #3568
- feat: support an IVC follower aggregator joining the network at any time by @jpraynaud in #3543
- feat(client): add the
EarlyStopVerificationcertificate chain cache mode by @jpraynaud in #3561 - feat(client): add a file system backend for the certificate chain cache by @jpraynaud in #3562
- docs(stm): add the SNARK book by @hjeljeli32 in #3567
- fix(aggregator): gate the genesis hash test field behind future_snark by @jpraynaud in #3570
- feat(client-cli): enable the certificate chain cache by @jpraynaud in #3564
- feat: add the circuit verification key registry crate and tools by @jpraynaud in #3541
- feat: enforce the circuit verification key registry by @jpraynaud in #3514
- fix(stm): identify circuit verification keys by digest by @hjeljeli32 in #3569
- refactor: rename the
future_snarkfeature tosnarkby @jpraynaud in #3574 - feat(client-wasm): add an IndexedDB backend for the certificate chain cache by @jpraynaud in #3571
- docs: document the certificate chain cache by @jpraynaud in #3575
- fix: Rust
1.99clippy warnings by @jpraynaud in #3579 - feat: add proof bound possession for Schnorr signing key by @damrobi in #3539
- fix: derive the registry IVC circuit key from the protocol parameters by @jpraynaud in #3577
- docs(stm): update the SNARK book to the current main by @jpraynaud in #3576
- test(stm): cover ivc_halo2_snark conversions by @HusseinAdeiza in #3566
- fix: strengthen the Kubo download of the IPFS devnet by @jpraynaud in #3583
- fix: restore crates publication after
mithril-commonminor bump by @jpraynaud in #3580 - fix(devnet): fix flakiness of the end to end tests in the CI by @jpraynaud in #3597
- chore: update CODEOWNERS by @jpraynaud in #3586
- chore(stm): upgrade
midnight-proofsto0.8.3by @jpraynaud in #3598 - fix(aggregator): GCP uploader only caching the first 1000 files by @Alenar in #3599
- refactor(aggregator, docs): add generate keypair tool in aggregator CLI by @turmelclem in #3600
- test(client-wasm): fix and enhance
make testby @Alenar in #3609 - feat: upgrade Cardano default to
11.1.3by @jpraynaud in #3604 - chore: update dependencies for distribution
2642by @jpraynaud in #3610 - feat(stm): hardening stm library by @damrobi in #3603
- fix(infra): firewall P2P ports and monitoring redeployment. by @jpraynaud in #3612
- docs: fix DMQ node SRV record prefix by @jpraynaud in #3619
- feature(ci, nightly-dispatcher): improve nightly dispatcher with yanked and unmaintained crates verification by @turmelclem in #3613
- refactor(stm): distinguish canonical bytes encoding by @jpraynaud in #3615
- feat(infra): import the IPNS signing key in the aggregator IPFS node by @jpraynaud in #3621
- docs(website): explain how to restart the signer with the Cardano node of guild-operators by @jpraynaud in #3624
- chore: upgrade
rustlsto0.23.46by @jpraynaud in #3630 - refactor: remove deprecated features of the client library and CLI by @jpraynaud in #3627
- chore: update DMQ node to
0.7.2.0by @jpraynaud in #3605 - feat: support for upcoming Cardano
11.2by @jpraynaud in #3614 - feat(infra): add on-chain protocol configuration of the release networks by @jpraynaud in #3633
- feat(aggregator): publish snapshot dir to IPNS by @Alenar in #3622
- docs: update CHANGELOG with
2642.0distribution by @jpraynaud in #3629
New Contributors
- @roynakakawa made their first contribution in #3430
- @HusseinAdeiza made their first contribution in #3566
Full Changelog: 2630.1-hotfix...2642.0
Crates Versions
| Crate | Version |
|---|---|
| mithril-aggregator | 0.10.21 |
| mithril-client | 0.14.34 |
| mithril-client-cli | 0.13.29 |
| mithril-client-wasm | 0.10.12 |
| mithril-common | 0.8.3 |
| mithril-signer | 1.2.5 |
| mithril-stm | 0.13.0 |
Networks Compatibility ⚠️
| Network | Compatible |
|---|---|
| release-mainnet | ⛔ |
| release-preprod | ⛔ |
| pre-release-preview | ✔ |
| testing-preview | ⛔ |
Cardano Node Compatibility
| Network | Mithril Aggregator | Mithril Signer |
|---|---|---|
| release-mainnet | Cardano 10.7.1+(*) |
Cardano 10.7.1+(*) |
| release-preprod | Cardano 10.7.1+(*) |
Cardano 10.7.1+(*) |
| pre-release-preview | Cardano 10.7.1+(*) |
Cardano 10.7.1+(*) |
| testing-preview | Cardano 10.7.1+(*) |
Cardano 10.7.1+(*) |
*: Up to the latest Cardano node version released at the time of this release.
DMQ Node Compatibility
| Network | Mithril Aggregator | Mithril Signer |
|---|---|---|
| release-mainnet | DMQ 0.7.0.0+(*) |
DMQ 0.7.0.0+(*) |
| release-preprod | DMQ 0.7.0.0+(*) |
DMQ 0.7.0.0+(*) |
| pre-release-preview | DMQ 0.7.0.0+(*) |
DMQ 0.7.0.0+(*) |
| testing-preview | DMQ 0.7.0.0+(*) |
DMQ 0.7.0.0+(*) |
*: Up to the latest DMQ node version released at the time of this release.
Platform Support
Summary of the platforms for which pre-built binaries are provided.
| Binary | Linux x64 | Linux arm64 | macOS arm64 | Windows x64 |
|---|---|---|---|---|
| mithril-aggregator | ✔ | ✔ ⁽*⁾ | ⛔ | ⛔ |
| mithril-signer | ✔ | ✔ ⁽*⁾ | ⛔ | ⛔ |
| mithril-client | ✔ | ✔ ⁽*⁾ | ✔ | ✔ |
⁽*⁾
Download a binary asset
To simplify the installation and updating of Mithril binaries, we have created a one line installer that downloads and installs the Mithril binaries for you.
This installer is available for Linux and macOS and supports the Mithril signer, Mithril aggregator, and Mithril client CLI.
Use the following commands to install the Mithril nodes:
- Download the Mithril signer in the current directory:
curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/IntersectMBO/mithril/refs/heads/main/mithril-install.sh | sh -s -- -c mithril-signer -d 2642.0 -p $(pwd)- Download the Mithril client CLI in the current directory:
curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/IntersectMBO/mithril/refs/heads/main/mithril-install.sh | sh -s -- -c mithril-client -d 2642.0 -p $(pwd)- Download the Mithril aggregator in the current directory:
curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/IntersectMBO/mithril/refs/heads/main/mithril-install.sh | sh -s -- -c mithril-aggregator -d 2642.0 -p $(pwd)Verify the authenticity of a downloaded asset
Detailed procedure to verify an asset
- Step 1: Identify the downloaded asset on your computer YOUR_ASSET_FILE
- Step 2: Download the signed checksum file from this link CHECKSUM.asc and save it in the same folder as the asset
- Step 3: In your terminal, go to the asset folder by running:
cd ***YOUR_ASSET_FOLDER***
- Step 4: Then verify the checksum of the asset by running:
sha256sum -c ./CHECKSUM.asc 2>/dev/null | grep ***YOUR_ASSET_FILE***
You must see:
./***YOUR_ASSET_FILE***: OK
- Step 5: Download the public key file from this link public-key.gpg and save it in the same folder as the asset
- Step 6: Then import the GPG public key:
gpg --import ./public-key.gpg
You must see something like:
gpg: key : public key "Input Output / Mithril <mithril@iohk.io>" imported
gpg: Total number processed: 1
gpg: imported: 1
- Step 7: Then verify the GPG signature of the checksum file:
gpg --verify ./CHECKSUM.asc
You must see something like:
gpg: Signature made Mon 05 Dec 2022 04:53:54 PM CET
gpg: using RSA key 35EDE9D47BBA62A2F388E655899ACD26B8BCA0D2
gpg: Good signature from "Input Output / Mithril <mithril@iohk.io>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 35ED E9D4 7BBA 62A2 F388 E655 899A CD26 B8BC A0D2
The signature is valid if and only if:
- there is a line with
gpg: Good signature from "Input Output / Mithril <mithril@iohk.io>" - there is a line with
Primary key fingerprint: 73FC 4C3D FD55 DBDC 428A D2B5 BE04 3B79 FDA4 C2EE
- Step 8:
If you successfully validated all the steps of this process, then you have successfully verified the authenticity of the asset ✔️
If not, contact us at [mithril@iohk.io] and let us know of the outcome of your run of this process⚠️
Download a Docker image
You can directly pull prebuilt Mithril Docker images:
| Binary | Image name | URL |
|---|---|---|
| mithril-aggregator | mithril-aggregator:2642.0-e85df3d | ghcr.io/intersectmbo/mithril-aggregator:2642.0-e85df3d |
| mithril-signer | mithril-signer:2642.0-e85df3d | ghcr.io/intersectmbo/mithril-signer:2642.0-e85df3d |
| mithril-client | mithril-client:2642.0-e85df3d | ghcr.io/intersectmbo/mithril-client:2642.0-e85df3d |