Skip to content

Commit ea887ce

Browse files
author
Clément Turmel
committed
refactor(client-lib): red test moving message.rs algorithm back to proving.rs
1 parent 9d9e963 commit ea887ce

File tree

1 file changed

+128
-0
lines changed
  • mithril-client/src/cardano_database_client

1 file changed

+128
-0
lines changed

mithril-client/src/cardano_database_client/proving.rs

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -757,4 +757,132 @@ mod tests {
757757
)
758758
}
759759
}
760+
761+
mod verify_cardano_database {
762+
763+
use std::{collections::BTreeMap, ops::RangeInclusive, path::PathBuf};
764+
765+
use mithril_cardano_node_internal_database::{
766+
digesters::{CardanoImmutableDigester, ImmutableDigester},
767+
test::DummyCardanoDbBuilder,
768+
};
769+
use mithril_common::{
770+
entities::{CardanoDbBeacon, Epoch, ImmutableFileNumber, ProtocolMessage},
771+
messages::CertificateMessage,
772+
test::double::Dummy,
773+
};
774+
775+
use crate::cardano_database_client::ImmutableFileRange;
776+
use crate::{cardano_database_client::VerifiedDigests, test_utils::TestLogger};
777+
778+
use super::*;
779+
780+
async fn prepare_db_and_verified_digests(
781+
dir_name: &str,
782+
beacon: &CardanoDbBeacon,
783+
immutable_file_range: &RangeInclusive<ImmutableFileNumber>,
784+
) -> (PathBuf, CertificateMessage, VerifiedDigests) {
785+
let cardano_db = DummyCardanoDbBuilder::new(dir_name)
786+
.with_immutables(&immutable_file_range.clone().collect::<Vec<_>>())
787+
.append_immutable_trio()
788+
.build();
789+
let database_dir = cardano_db.get_dir();
790+
let immutable_digester =
791+
CardanoImmutableDigester::new("whatever".to_string(), None, TestLogger::stdout());
792+
let computed_digests = immutable_digester
793+
.compute_digests_for_range(database_dir, immutable_file_range)
794+
.await
795+
.unwrap();
796+
797+
let digests = computed_digests
798+
.entries
799+
.iter()
800+
.map(|(immutable_file, digest)| (immutable_file.filename.clone(), digest.clone()))
801+
.collect::<BTreeMap<_, _>>();
802+
803+
let merkle_tree = immutable_digester
804+
.compute_merkle_tree(database_dir, beacon)
805+
.await
806+
.unwrap();
807+
808+
let verified_digests = VerifiedDigests {
809+
digests,
810+
merkle_tree,
811+
};
812+
813+
let certificate = {
814+
let protocol_message_merkle_root =
815+
verified_digests.merkle_tree.compute_root().unwrap().to_hex();
816+
let mut protocol_message = ProtocolMessage::new();
817+
protocol_message.set_message_part(
818+
ProtocolMessagePartKey::CardanoDatabaseMerkleRoot,
819+
protocol_message_merkle_root,
820+
);
821+
822+
CertificateMessage {
823+
protocol_message: protocol_message.clone(),
824+
signed_message: protocol_message.compute_hash(),
825+
..CertificateMessage::dummy()
826+
}
827+
};
828+
829+
(database_dir.to_owned(), certificate, verified_digests)
830+
}
831+
832+
fn to_vec_immutable_file_name(list: &[&str]) -> Vec<ImmutableFileName> {
833+
list.iter().map(|s| ImmutableFileName::from(*s)).collect()
834+
}
835+
836+
#[tokio::test]
837+
async fn verify_cardano_database_succeeds() {
838+
let beacon = CardanoDbBeacon {
839+
epoch: Epoch(123),
840+
immutable_file_number: 10,
841+
};
842+
let immutable_file_range = 1..=15;
843+
let immutable_file_range_to_prove = ImmutableFileRange::Range(2, 4);
844+
let (database_dir, certificate, verified_digests) = prepare_db_and_verified_digests(
845+
"compute_cardano_database_message_succeeds",
846+
&beacon,
847+
&immutable_file_range,
848+
)
849+
.await;
850+
851+
//TODO: verify_cardano_database will not build a message anymore
852+
// let message = MessageBuilder::new()
853+
// .compute_cardano_database_message(
854+
// &certificate,
855+
// &CardanoDatabaseSnapshotMessage::dummy(),
856+
// &immutable_file_range_to_prove,
857+
// false,
858+
// &database_dir,
859+
// &verified_digests,
860+
// )
861+
// .await
862+
// .unwrap();
863+
864+
// assert!(certificate.match_message(&message));
865+
let expected_merkle_root =
866+
verified_digests.merkle_tree.compute_root().unwrap().to_owned();
867+
868+
let client = CardanoDatabaseClientDependencyInjector::new();
869+
870+
let merkle_proof = client
871+
.verify_cardano_database(
872+
&certificate,
873+
&CardanoDatabaseSnapshotMessage::dummy(),
874+
&immutable_file_range_to_prove,
875+
false,
876+
&database_dir,
877+
&verified_digests,
878+
)
879+
.await
880+
.unwrap();
881+
882+
merkle_proof.verify().unwrap();
883+
let merkle_proof_root = merkle_proof.root().to_owned();
884+
assert_eq!(expected_merkle_root, merkle_proof_root);
885+
assert!(!InternalArtifactProver::digest_target_dir().exists());
886+
}
887+
}
760888
}

0 commit comments

Comments
 (0)