# 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();
    }
```
