# How Hashi Works

Hashi is a decentralized protocol that allows secure cross-chain communication. By enabling contracts on one blockchain to interact with contracts on another, Hashi facilitates cross-chain data transfer and execution through message dispatching, storage proofs, and cryptographic verification.

The process involves **sending a message** or **verifying a state** across blockchains, such as **Sepolia** and **Gnosis Chiado**, using a series of contracts and oracles. Let’s break down how this works in practice:

### **Verifying State with Cross-Chain Proofs**

A powerful feature of Hashi is the ability to verify the state of a contract on one chain using **cryptographic proofs** stored on a different chain. Here’s how this works using Sepolia and Chiado as origin and target chains:

1. **Storing Block Headers**:
   * The first step is to relay **block headers** from Sepolia to Chiado.
   * These headers are stored in the **Header Storage** contract on Chiado and contain essential information like the state root, which can be used to validate the state of a Sepolia smart contract.
2. **Requesting a Proof**:
   * Verify the value stored in a specific storage slot of a contract on Sepolia (Chain A).
   * Generate a **Merkle proof** that shows the value of this storage slot on a particular block on Sepolia. This proof includes information from the block header (stored on Chiado) and the Merkle path leading to the value.
3. **Submitting the Proof**:
   * You submit this proof to the **Yaru** contract on **Chiado**. The **Yaru** contract checks the proof against the block header that was previously relayed and stored in the **Header Storage** contract.
   * If the proof is valid, Hashi confirms that the state on Sepolia matches what was proven in the Merkle proof.

In this way, you can **verify contract state** on Sepolia directly from Chiado, without interacting with Sepolia in real-time, using **trustless proofs** and stored block headers.

### **Message Dispatching Across Chains**

1. **Start on Chain A (Sepolia)**:
   * Imagine you have a contract on Sepolia that needs to send a message to a contract on Gnosis Chiado (Chain B).
   * On **Sepolia**, you use Hashi’s **Yaho** contract, which is specifically designed for dispatching messages across chains.
2. **Sending the Message**:
   * Your Sepolia contract calls the **Yaho** contract, instructing it to send a message to the **Yaho** contract on **Chiado**.
   * The message typically contains the target contract address on Chiado and the data you want to send (such as a function call or value).
3. **Relaying the Message**:
   * Once the message is dispatched, it is picked up by Hashi’s **oracle network**. These oracles listen for events on Sepolia, relay the message, and submit it to **Yaho** on Chiado for execution.
   * Multiple oracles are used for redundancy and security, ensuring that the message is properly validated before it’s passed to Chiado.
4. **Receiving and Executing the Message on Chain B (Chiado)**:
   * On **Chiado**, the **Yaho** contract receives the message after the oracles validate the block header and the message’s integrity.
   * Once validated, the **Yaho** contract triggers the appropriate callback function on the target contract (for example, updating the contract state or calling a specific function).

In practice, this allows you to **seamlessly send a message from Sepolia to Chiado**, have it validated by multiple oracles, and executed on the destination chain.


---

# 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://crosschain-alliance.gitbook.io/hashi/getting-started/how-hashi-works.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.
