# How to integrate anyCall V7?

* Mainnet AnyCall Contracts:

Available Chains: Ethereum, Optimism, BNB Chain, Fantom, Polygon, Arbitrum, Avalanche.

Contract Address: 0x8efd012977DD5C97E959b9e48c04eE5fcd604374

* Testnet AnyCall Contracts:

Goerli (5): 0x965f84D915a9eFa2dD81b653e3AE736555d945f4

BNB Testnet (97): 0xcBd52F7E99eeFd9cD281Ea84f3D903906BB677EC

Fantom Testnet (4002): 0xfCea2c562844A7D385a7CB7d5a79cfEE0B673D99

Avalanche Fuji Testnet (43113): 0x461d52769884ca6235b685ef2040f47d30c94eb5

* Source code:  <https://github.com/anyswap/multichain-smart-contracts/tree/main/contracts/anycall/v7>

{% hint style="info" %}
You can also lookup your tx with our explorer and api.
{% endhint %}

{% content-ref url="api-explorer" %}
[api-explorer](https://docs.multichain.org/developer-guide/anycall-v7/api-explorer)
{% endcontent-ref %}

### Requirements to be compatible with anyCall interfaces:

1. **Sender Contract**: Your sender contract needs to call the method `anyCall` on the official anyCall contract.&#x20;
2. **Receiver Contract:** A method named `anyExecute` needs to exist on your `_to` contract address. This is needed because `anyExec` (Our deployed anyCall Contract) will call `anyExecute` on your receiver contract.
3. **Your contract needs to be payable to allow refund of excess fees.**

### **anyCall Interfaces**

#### anyCall (Called by Dapps)

`function anyCall( address _to, bytes calldata _data, uint256 _toChainID, uint256 _flags, bytes calldata )`

The destination chain would call `anyExecute` function on the `_to` address with `_data` passed in the function. And you can customize what you do with such `_data`.

#### Parameters <a href="#request-parameters" id="request-parameters"></a>

| Param       | Type    | Description                                                                                                                                                                                                                                                                                                                                                        |
| ----------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| \_to        | address | The target contract to interact with on `_toChainID`                                                                                                                                                                                                                                                                                                               |
| \_data      | bytes   | <p>The calldata supplied for the interaction with <code>\_to</code></p><p> </p><p><code>anyExecute</code> will be run with this <code>\_data</code> on the receiver contract you deployed.</p>                                                                                                                                                                     |
| \_toChainID | uint256 | The target chain id to interact with                                                                                                                                                                                                                                                                                                                               |
| \_flags     | uint256 | <p>How dapps are paying gas fee of tx execution: </p><p></p><p>0: Gas fee paid on source chain. Fallback not allowed.</p><p><br><strong>2</strong>: Gas fee paid on destination chain. Fallback not allowed.</p><p></p><p><strong>4</strong>: Gas fee paid on source chain. Allow fallback </p><p></p><p>6: Gas fee paid on destination chain. Allow fallback </p> |

#### anyExecute **(This exact format needs to be implemented in your dapp, what would be called on the destination chain)**

`function anyExecute(bytes calldata data) external override onlyExecutor returns (bool success, bytes memory result)`

#### Parameters <a href="#request-parameters" id="request-parameters"></a>

| Param               | Type    | Description                                                                 |
| ------------------- | ------- | --------------------------------------------------------------------------- |
| data                | bytes   | The calldata supplied for the interaction with subsequent contracts         |
| **Returned Values** |         |                                                                             |
| `success`           | `bool`  | The address to call on `_fromChainID`  if the cross chain interaction fails |
| `result`            | `bytes` | The originating chain id                                                    |

### AnyCallExecutor

As stated above,  `AnyCallExecutor`  will make the final execution to your destination contract as a sandbox.

The address of this executor contract is stored in the main anycall contract. It can be accessed with an interface function like below.

```
interface CallProxy{
 
    function executor() external view returns (address executor);
}
```

The executor should then be saved in your contract constructor

```
constructor(){
        anycallExecutor=CallProxy(anycallcontract).executor();
    }
```


---

# 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://docs.multichain.org/developer-guide/anycall-v7/how-to-integrate-anycall-v7.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.
