From e27cfcb046758fd15e48b98bcdba34e34ae2d3bd Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Mon, 23 Jun 2025 14:27:51 +0200 Subject: Add proofer example --- examples/proofer_blake3.rs | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 examples/proofer_blake3.rs (limited to 'examples/proofer_blake3.rs') diff --git a/examples/proofer_blake3.rs b/examples/proofer_blake3.rs new file mode 100644 index 0000000..154b51c --- /dev/null +++ b/examples/proofer_blake3.rs @@ -0,0 +1,47 @@ +use mt_rs::{ + hasher::{Blake3Hasher, Hasher}, + node::Node, + proof::{DefaultProofer, Proofer}, +}; + +fn main() { + let root_hash = match std::env::args().nth(1) { + Some(hash) => hash, + None => { + eprintln!( + "Usage: cargo run --example proofer_blake3 -- ..." + ); + std::process::exit(1); + } + }; + + let filenames: Vec = std::env::args().skip(2).collect(); + if filenames.is_empty() { + eprintln!("Usage: cargo run --example proofer_blake3 -- ..."); + std::process::exit(1); + } + + let mut nodes: Vec = Vec::new(); + for filename in &filenames { + match std::fs::read(filename) { + Ok(contents) => { + let hash = Blake3Hasher::new().hash(&contents); + nodes.push(Node::new_leaf(&contents, hash)); + } + Err(e) => { + eprintln!("Failed to read file '{}': {}", filename, e); + std::process::exit(1); + } + } + } + + let first_node = nodes[0].clone(); + let hasher = Blake3Hasher::new(); + let proofer = DefaultProofer::new(&hasher, nodes); + let proof = proofer.generate(0).expect("Couldn't generate proof"); + + println!( + "{}", + proofer.verify(&proof, first_node.data(), &root_hash[..], &hasher) + ); +} -- cgit v1.2.3-71-g8e6c