# Contract Configuration

To enable cross-chain communication in your blockchain application, you need two key functions: `sendMessage()` and `messageProcess()`. These functions handle sending and receiving messages between different blockchains.

### Simple Code Example

Here's a straightforward example to demonstrate the simplicity of using these functions:

```solidity
pragma solidity 0.8.17;

import "@vialabs-io/contracts/message/MessageClient.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";

contract HelloERC20 is ERC20Burnable, MessageClient {
    constructor() ERC20("HelloERC20", "HELLO") {
        _mint(msg.sender, 1_000_000 ether);
    }

    function bridge(uint _destChainId, address _recipient, uint _amount) external onlyActiveChain(_destChainId) {
        // burn tokens
        _burn(msg.sender, _amount);

        // send cross chain message
        _sendMessage(_destChainId, abi.encode(_recipient, _amount));
    }

    function messageProcess(uint, uint _sourceChainId, address _sender, address, uint, bytes calldata _data) external override  onlySelf(_sender, _sourceChainId)  {
        // decode message
        (address _recipient, uint _amount) = abi.decode(_data, (address, uint));

        // mint tokens
        _mint(_recipient, _amount);
    }
}
```

***

The `sendMessage()`function packages and sends data to another blockchain.

*Parameters*:

* `destinationChainId`: The ID of the chain to send the message to.
* `data`: The message data to be sent.

***

The `messageProcess()` function receives and processes data from another blockchain.

*Parameters*:

* `_txId`: Transaction ID of the message.
* `_sourceChainId`: ID of the source chain from where the message is coming.
* `_sender`: Address of the sender.
* `_reference`: Reference address.
* `_amount`: Amount of tokens involved in the message.
* `_data`: Additional message data.

***

This simple example shows how easy it is to set up cross-chain communication using the VIA Network.

Developers can use the [Developer Documentation](http://developer.vialabs.io/) to dive further into these functions.&#x20;


---

# 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.vialabs.io/via-omnichain-network/contract-configuration.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.
