# Quickstart (Cross-chain text example)

{% embed url="<https://github.com/bscethbot/anyCall-V7-Simple-Message-Sender-Example>" %}

Please fork the repo above and follow the readme.

This repo would deploy a solidity contract on two chains and send a text message from chain A to chain B. This is purposed to showcase anyCall V7 cross-chain messaging capability.

1. Fork the provided repository and install the dependencies using either yarn or npm&#x20;

   (`yarn || npm install`).
2. Add your private key and Etherscan API keys (if you want to verify the contract on Etherscan) to the .env.example file. Rename the file to .env.
3. Deploy the example contract on the ftm and bnb testnets by running the following commands:
   * `yarn hardhat deploy --network ftmtest`
   * `yarn hardhat deploy --network bnbtest`
4. To test the flow, run the following command and change the customMessage in 1testanycall.js to send a different message:
   * `yarn hardhat run ./scripts/1testanycall.js --network ftmtest`

Code Breakdown

### **Sending the message**

The function below is an example. This sends a simple text message to the destination chain by using the anyCall funciton.

```
function step1_initiateAnyCallSimple_srcfee(string calldata _msg) payable external {
        emit NewMsg(_msg);
        if (msg.sender == owneraddress){
        CallProxy(anycallcontract).anyCall{value: msg.value}(
            receivercontract, //Destination Contract Address
            
            abi.encode(_msg), //encoded string as bytes
            destchain, //destination chain id
            
            0, // Using 0 flag to pay fee on the source chain
            "" //extra data used for advanced use cases
            );
            
        }

    }
```

Here's a more detailed breakdown of the parameters.

### **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><br><strong>2</strong>: Gas fee paid on destination chain. </p><p></p><p><strong>4</strong>: Allow fallback</p>                        |

### Receiving the message

The following function named **anyExecute** would process the data sent. In this case, it'd simply decode the data and emit an event. The function must be called **anyExecute**.

```
function anyExecute(bytes memory _data) external returns (bool success, bytes memory result){
        (string memory _msg) = abi.decode(_data, (string)); 
        
        emit NewMsg(_msg);

        success=true;
        result='';

    }
```

#### anyExecute **Parameters (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                                                    |

###


---

# 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/quickstart-cross-chain-text-example.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.
