---
# System prepended metadata

title: 'Napkin Math: Merkle Tree'

---

# Napkin Math: Costs of a Merkle Tree 

This note describes the computational costs associated with constructing Merkle trees and verifying Merkle inclusion proofs. 

We assume a radix-2 Merkle tree with $n$ leaves. Assume 256-bit nodes, and assume we store $k$ bytes of information per leaf. 

Assume a hash such as SHA-256 that compresses 512-bit inputs into 256-bit digests.

## Prover Complexity: $\log(k) + n$
The Prover computes $\log(k) + n$ hashes in order to construct the entire Merkle tree. The first term counts the `leaf hashing`, and the second term counts the `layer hashing`. 
1. `leaf hashing`: the leaf contents are hashed in order to construct the digest for each leaf node. 
2. `layer hashing`: for each layer, the nodes are hashed pair-wise to compute the next layer.

## Proof Size: $k + \log(n)$ bytes
A Merkle inclusion proof consists of:
- purported leaf contents, $k$ bytes
- a purported branch, $\log(n)$ bytes 

## Verifier Complexity:  $\log(k) + \log(n)$
To verify the correctness of an inclusion proof, the Verifier computes:
- $\log(k)$ hashes to check that the purported leaf contents align with the purported leaf digest, and 
- $log(n)$ hashes to check that the purported leaf node aligns with the prior root commitment. 