Expand description
A client to retrieve from an aggregator cryptographic proofs of membership for a subset of Cardano transactions.
In order to do so it defines a CardanoTransactionClient which exposes the following features:
- get_proofs: get a cryptographic proof that the transactions with given hash are included in the global Cardano transactions set.
- get: get a Cardano transaction snapshot data from its hash.
- list: get the list of the latest available Cardano transaction snapshot.
Important: Verifying a proof only means that its cryptography is valid, in order to certify that a Cardano transactions subset is valid, the associated proof must be tied to a valid Mithril certificate (see the example below).
§Get and verify Cardano transaction proof
To get and verify a Cardano transaction proof using the ClientBuilder.
use mithril_client::{ClientBuilder, MessageBuilder};
let client = ClientBuilder::aggregator("YOUR_AGGREGATOR_ENDPOINT", "YOUR_GENESIS_VERIFICATION_KEY").build()?;
// 1 - Get a proof from the aggregator and verify it
let cardano_transaction_proof = client.cardano_transaction().get_proofs(&["tx-1", "tx-2"]).await?;
println!("Mithril could not certify the following transactions : {:?}", &cardano_transaction_proof.non_certified_transactions);
let verified_transactions = cardano_transaction_proof.verify()?;
// 2 - Verify its associated certificate chain
let certificate = client.certificate().verify_chain(&cardano_transaction_proof.certificate_hash).await?;
// 3 - Ensure that the proof is indeed signed in the associated certificate
let message = MessageBuilder::new().compute_cardano_transactions_proofs_message(&certificate, &verified_transactions);
if certificate.match_message(&message) {
// All green, Mithril certifies that those transactions are part of the Cardano transactions set.
println!("Certified transactions : {:?}", verified_transactions.certified_transactions());
}
§Get a Cardano transaction snapshot
To get a Cardano transaction snapshot using the ClientBuilder.
use mithril_client::ClientBuilder;
let client = ClientBuilder::aggregator("YOUR_AGGREGATOR_ENDPOINT", "YOUR_GENESIS_VERIFICATION_KEY").build()?;
let cardano_transaction_snapshot = client.cardano_transaction().get_snapshot("CARDANO_TRANSACTION_SNAPSHOT_HASH").await?.unwrap();
println!("Cardano transaction snapshot hash={}, epoch={}", cardano_transaction_snapshot.hash, cardano_transaction_snapshot.epoch);
§List available Cardano transaction snapshots
To list latest available Cardano transaction snapshots using the ClientBuilder.
use mithril_client::ClientBuilder;
let client = ClientBuilder::aggregator("YOUR_AGGREGATOR_ENDPOINT", "YOUR_GENESIS_VERIFICATION_KEY").build()?;
let cardano_transaction_snapshots = client.cardano_transaction().list_snapshots().await?;
for cardano_transaction_snapshot in cardano_transaction_snapshots {
println!("Cardano transaction snapshot hash={}, epoch={}", cardano_transaction_snapshot.hash, cardano_transaction_snapshot.epoch);
}
Structs§
- HTTP client for CardanoTransactionsAPI from the Aggregator