Skip to content

Commit 10fe27c

Browse files
committed
Document Mina Account verifier
1 parent a82fd67 commit 10fe27c

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

operator/mina_account/lib/src/lib.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ fn inner_verify_account_inclusion_ffi(
5050
verify_account_inclusion(proof_bytes, pub_input_bytes)
5151
}
5252

53+
/// Verifies a Mina account inclusion.
54+
/// Verifies that exists a Merkle path composed of:
55+
///
56+
/// - The hash of the Mina account as the leaf
57+
/// - The ledger hash as the root
58+
/// - Some intermediate nodes
59+
///
60+
/// Returns `true` if the Mina account is included in the ledger hash. `false` otherwise.
5361
pub fn verify_account_inclusion(proof_bytes: &[u8], pub_input_bytes: &[u8]) -> bool {
5462
let MinaAccountProof {
5563
merkle_path,

operator/mina_account/lib/src/merkle_verifier.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ use mina_curves::pasta::Fp;
44
use mina_p2p_messages::v2::hash_with_kimchi;
55
use std::fmt::Write;
66

7+
/// Verifies a Merkle Proof.
8+
/// This means that `merkle_leaf`, `merkle_path` and `merkle_root` conform one of the paths of a Merkle tree
9+
/// where `merkle_leaf` is the first node of the path, `merkle_root` is the last one and `merkle_path` is a
10+
/// vector of all the intermediate nodes.
11+
/// Returns `true` if the Merkle proof is valid. `false` otherwise.
12+
///
713
/// Based on OpenMina's implementation
814
/// https://github.com/openmina/openmina/blob/d790af59a8bd815893f7773f659351b79ed87648/ledger/src/account/account.rs#L1444
915
pub fn verify_merkle_proof(merkle_leaf: Fp, merkle_path: Vec<MerkleNode>, merkle_root: Fp) -> bool {

0 commit comments

Comments
 (0)