# 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: 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://futaba.gitbook.io/docs/guide/customize-light-client.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.
