> For the complete documentation index, see [llms.txt](https://futaba.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://futaba.gitbook.io/docs/guide/customize-light-client.md).

# Customize Light Client

As mentioned [here](/docs/protocol/light-client.md), Futaba allows you to build the verification logic part at will.

If the target contract extends `ILightClient.sol` and defines `verify()` , `requestQuery()` and `estimateFee()` You can build your own logic at a minimum.

{% code title="ILightClient.sol" %}

```solidity
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;

import "../QueryType.sol";

/**
 * @title Light client interface
 * @notice This interface is for the verification of proof
 */

interface ILightClient {
    /**
     * @notice This function is intended to make Light Client do something when a query request is made (mock emit events to Oracle)
     * @param queries request query data
     */
    function requestQuery(QueryType.QueryRequest[] memory queries) external;

    /**
     * @notice This function is for validation upon receipt of query(mock verifies account proof and storage proof)
     * @param message response query data
     */
    function verify(
        bytes memory message
    ) external returns (bool, bytes[] memory);

    /**
     * @notice Estimated fees to be collected on the LightClient Contract side
     * @param queries request query data
     */
    function estimateFee(
        QueryType.QueryRequest[] memory queries
    ) external view returns (uint256);
}

```

{% endcode %}

By default, the block header (state root) supplied by Oracle and the storage proof received from Relayer are verified by Merkle Patricia Trie (MPT).

In the future, we can develop modules using zkp and a block hash Aggregator such as [Hashi](https://github.com/gnosis/hashi).

{% hint style="info" %}
When customizing, it may be necessary to build your own Relayer separate from the current Relayer.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://futaba.gitbook.io/docs/guide/customize-light-client.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
