Skip to content

Commit f0b31ac

Browse files
committed
refactor(client-lib): move merkleproof creation and verification inside the snapshotmessage computation
1 parent 43a6053 commit f0b31ac

File tree

9 files changed

+285
-145
lines changed

9 files changed

+285
-145
lines changed

examples/client-cardano-database-v2/src/main.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,14 +98,21 @@ async fn main() -> MithrilResult<()> {
9898
)
9999
.await?;
100100

101+
println!("Downloading and verifying digests file authenticity...");
102+
let verified_digest = client
103+
.cardano_database_v2()
104+
.download_and_verify_digests(&certificate, &cardano_database_snapshot)
105+
.await?;
106+
101107
println!("Computing Cardano database Merkle proof...",);
102108
let merkle_proof = client
103109
.cardano_database_v2()
104110
.compute_merkle_proof(
105111
&certificate,
106-
&cardano_database_snapshot,
112+
cardano_database_snapshot.beacon.immutable_file_number,
107113
&immutable_file_range,
108114
&unpacked_dir,
115+
&verified_digest,
109116
)
110117
.await?;
111118
merkle_proof

mithril-client-cli/src/commands/cardano_db/download/v2.rs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,22 +124,41 @@ impl PreparedCardanoDbV2Download {
124124
)
125125
})?;
126126

127-
let merkle_proof = shared_steps::compute_verify_merkle_proof(
127+
let verified_digests = shared_steps::download_and_verify_digests(
128128
4,
129129
&progress_printer,
130130
&client,
131131
&certificate,
132132
&cardano_db_message,
133-
&restoration_options.immutable_file_range,
134-
&restoration_options.db_dir,
135133
)
136-
.await?;
134+
.await
135+
.with_context(|| {
136+
format!(
137+
"Can not download and verify digests file for cardano db snapshot with hash: '{}'",
138+
self.hash
139+
)
140+
})?;
141+
142+
// let merkle_proof = shared_steps::compute_verify_merkle_proof(
143+
// 5,
144+
// &progress_printer,
145+
// &client,
146+
// &certificate,
147+
// &cardano_db_message,
148+
// &restoration_options.immutable_file_range,
149+
// &restoration_options.db_dir,
150+
// &verified_digests,
151+
// )
152+
// .await?;
137153

138154
let message = shared_steps::compute_cardano_db_snapshot_message(
139155
5,
140156
&progress_printer,
141157
&certificate,
142-
&merkle_proof,
158+
&cardano_db_message,
159+
&restoration_options.immutable_file_range,
160+
&restoration_options.db_dir,
161+
&verified_digests,
143162
)
144163
.await?;
145164

mithril-client-cli/src/commands/cardano_db/shared_steps.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,17 @@ pub async fn compute_verify_merkle_proof(
7272
cardano_database_snapshot: &CardanoDatabaseSnapshot,
7373
immutable_file_range: &ImmutableFileRange,
7474
unpacked_dir: &Path,
75+
verified_digests: &VerifiedDigests,
7576
) -> MithrilResult<MKProof> {
7677
progress_printer.report_step(step_number, "Computing and verifying the Merkle proof…")?;
7778
let merkle_proof = client
7879
.cardano_database_v2()
7980
.compute_merkle_proof(
8081
certificate,
81-
cardano_database_snapshot,
82+
cardano_database_snapshot.beacon.immutable_file_number,
8283
immutable_file_range,
8384
Path::new(&unpacked_dir),
85+
verified_digests,
8486
)
8587
.await?;
8688

@@ -96,12 +98,21 @@ pub async fn compute_cardano_db_snapshot_message(
9698
step_number: u16,
9799
progress_printer: &ProgressPrinter,
98100
certificate: &MithrilCertificate,
99-
merkle_proof: &MKProof,
101+
cardano_database_snapshot: &CardanoDatabaseSnapshot,
102+
immutable_file_range: &ImmutableFileRange,
103+
database_dir: &Path,
104+
verified_digest: &VerifiedDigests,
100105
) -> MithrilResult<ProtocolMessage> {
101106
progress_printer.report_step(step_number, "Computing the cardano db snapshot message")?;
102107
let message = CardanoDbUtils::wait_spinner(
103108
progress_printer,
104-
MessageBuilder::new().compute_cardano_database_message(certificate, merkle_proof.root()),
109+
MessageBuilder::new().compute_cardano_database_message(
110+
certificate,
111+
cardano_database_snapshot,
112+
immutable_file_range,
113+
database_dir,
114+
verified_digest,
115+
),
105116
)
106117
.await
107118
.with_context(|| "Can not compute the cardano db snapshot message")?;

mithril-client-cli/src/commands/cardano_db/verify.rs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -113,22 +113,26 @@ impl CardanoDbVerifyCommand {
113113
)
114114
.await?;
115115

116-
let merkle_proof = shared_steps::compute_verify_merkle_proof(
117-
2,
118-
&progress_printer,
119-
&client,
120-
&certificate,
121-
&cardano_db_message,
122-
&immutable_file_range,
123-
db_dir,
124-
)
125-
.await?;
116+
// let merkle_proof = shared_steps::compute_verify_merkle_proof(
117+
// 3,
118+
// &progress_printer,
119+
// &client,
120+
// &certificate,
121+
// &cardano_db_message,
122+
// &immutable_file_range,
123+
// db_dir,
124+
// &verified_digests,
125+
// )
126+
// .await?;
126127

127128
let message = shared_steps::compute_cardano_db_snapshot_message(
128129
3,
129130
&progress_printer,
130131
&certificate,
131-
&merkle_proof,
132+
&cardano_db_message,
133+
&immutable_file_range,
134+
db_dir,
135+
&verified_digests,
132136
)
133137
.await?;
134138

mithril-client/src/cardano_database_client/api.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use slog::Logger;
88
#[cfg(feature = "fs")]
99
use mithril_common::{
1010
crypto_helper::MKProof,
11+
entities::ImmutableFileNumber,
1112
messages::{CardanoDatabaseSnapshotMessage, CertificateMessage},
1213
};
1314

@@ -119,16 +120,18 @@ impl CardanoDatabaseClient {
119120
pub async fn compute_merkle_proof(
120121
&self,
121122
certificate: &CertificateMessage,
122-
cardano_database_snapshot: &CardanoDatabaseSnapshotMessage,
123+
last_immutable_file_number_from_beacon: ImmutableFileNumber,
123124
immutable_file_range: &ImmutableFileRange,
124125
database_dir: &Path,
126+
verified_digests: &VerifiedDigests,
125127
) -> MithrilResult<MKProof> {
126128
self.artifact_prover
127129
.compute_merkle_proof(
128130
certificate,
129-
cardano_database_snapshot,
131+
last_immutable_file_number_from_beacon,
130132
immutable_file_range,
131133
database_dir,
134+
verified_digests,
132135
)
133136
.await
134137
}

mithril-client/src/cardano_database_client/mod.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,16 @@
113113
//! )
114114
//! .await?;
115115
//!
116+
//! let verified_digests = client
117+
//! .cardano_database_v2()
118+
//! .download_and_verify_digests(
119+
//! &certificate,
120+
//! &cardano_database_snapshot)
121+
//! .await?;
122+
//!
116123
//! let merkle_proof = client
117124
//! .cardano_database_v2()
118-
//! .compute_merkle_proof(&certificate, &cardano_database_snapshot, &immutable_file_range, &target_directory)
125+
//! .compute_merkle_proof(&certificate, cardano_database_snapshot.beacon.immutable_file_number, &immutable_file_range, &target_directory, &verified_digests)
119126
//! .await?;
120127
//! #
121128
//! # Ok(())

0 commit comments

Comments
 (0)