Crypto
The OpenZeppelin Rust Contracts provide a crate for common cryptographic procedures in a blockchain environment. The following documents the available functionality.
Verifying Merkle Proofs
Developers can build a Merkle Tree off-chain, which allows for verifying that an element (leaf) is part of a set by using a Merkle Proof. This technique is widely used for creating whitelists (e.g. for airdrops) and other advanced use cases.
OpenZeppelin Contracts provides a JavaScript library for building trees off-chain and generating proofs. |
MerkleProof
provides:
-
verify
- can prove that some value is part of a Merkle tree. -
verify_multi_proof
- can prove multiple values are part of a Merkle tree.
pub fn verify(&self, proof: Vec<B256>, root: B256, leaf: B256) -> bool {
let proof: Vec<[u8; 32]> = proof.into_iter().map(|m| *m).collect();
Verifier::<KeccakBuilder>::verify(&proof, *root, *leaf)
}
Note that these functions use keccak256
as the hashing algorithm, but our library also provides generic counterparts: verify_with_builder
and verify_multi_proof_with_builder
.
We also provide an adapter hash
module to use your own hashers in conjunction with them that resembles Rust’s standard library’s API.