# Merkle Proofs Within Smart Contracts

{% hint style="info" %}
[**Book an audit with Zokyo**](https://www.zokyo.io/)
{% endhint %}

**Use of Merkle Proofs in Smart Contracts**

Smart contracts are self-executing contracts with the terms of the agreement directly written into code. Merkle proofs play a pivotal role in the efficient operation of smart contracts, primarily by verifying the existence and validity of transactions without requiring the entire blockchain data.

**Cross-Chain Bridges**

A cross-chain bridge allows for the transfer of tokens or data between two separate blockchain networks. This is often used to overcome the issue of interoperability, enabling interactions between otherwise isolated blockchains.

In the case of cross-chain bridges, a smart contract on one chain (let's call this Chain A) might need to verify a transaction that occurred on another chain (Chain B). However, Chain A does not have direct access to Chain B's entire transaction history.

This is where Merkle proofs come into play. The smart contract on Chain A can request a Merkle proof of the transaction on Chain B. This Merkle proof, often provided by a relayer or a bridge contract, contains just enough information (the hash of the transaction, its sibling hashes, and their orders) to verify the transaction without needing the full transaction history of Chain B. The contract on Chain A can then execute based on the validity of the transaction from Chain B, enabling cross-chain interactions.

**Layer 2 Solutions**

Layer 2 solutions aim to increase a blockchain network's transaction capacity without requiring changes to the underlying (Layer 1) protocol. There are several types of Layer 2 solutions, such as state channels, sidechains, and rollups, all of which utilize Merkle proofs in various ways.

Take Optimistic Rollups as an example. This Layer 2 solution works by aggregating multiple transactions off-chain into a single 'rollup'. The rollup, along with the new state of the system, is then submitted to the Layer 1 blockchain. Users only interact with the Layer 1 blockchain when depositing or withdrawing assets, or in case of disputes.

Each rollup contains a snapshot of the Layer 2 state represented as a Merkle tree. If there's a dispute about a transaction within a rollup, the disputing party can submit a Merkle proof to the smart contract on Layer 1. The smart contract can then validate the transaction within the rollup by checking the Merkle proof, without needing the full state data of the Layer 2 solution.

**Why are they used?**

In both cross-chain bridges and Layer 2 solutions, the use of Merkle proofs boils down to efficiency and scalability. Verifying an entire block or, in extreme cases, an entire blockchain is computationally heavy and time-consuming. This becomes impractical with large-scale blockchains.

Merkle proofs, on the other hand, allow participants to verify specific transactions efficiently without needing the full data set. This significantly reduces the computational power required and thus increases the scalability of blockchain applications, all while maintaining the core attributes of security and transparency.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://zokyo-auditing-tutorials.gitbook.io/zokyo-tutorials/tutorial-6-merkle-trees/merkle-proofs-within-smart-contracts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
