# MultiChainLayerZeroTellerWithMultiAssetSupport

[Git Source](https://github.com/Ion-Protocol/nucleus-boring-vault/blob/cc0b494b83e17b9b169a73b96050d2810b690477/src/base/Roles/CrossChain/MultiChainLayerZeroTellerWithMultiAssetSupport.sol)

**Inherits:** MultiChainTellerBase, OAppAuth

LayerZero implementation of MultiChainTeller

## Functions

### constructor

```solidity
constructor(
    address _owner,
    address _vault,
    address _accountant,
    address _endpoint
)
    MultiChainTellerBase(_owner, _vault, _accountant)
    OAppAuth(_endpoint, _owner);
```

### \_quote

function override to return the fee quote

```solidity
function _quote(uint256 shareAmount, BridgeData calldata data) internal view override returns (uint256);
```

**Parameters**

| Name          | Type         | Description             |
| ------------- | ------------ | ----------------------- |
| `shareAmount` | `uint256`    | to be sent as a message |
| `data`        | `BridgeData` | Bridge data             |

### \_lzReceive

Called when data is received from the protocol. It overrides the equivalent function in the parent contract. Protocol messages are defined as packets, comprised of the following parameters.

```solidity
function _lzReceive(
    Origin calldata _origin,
    bytes32 _guid,
    bytes calldata payload,
    address,
    bytes calldata
)
    internal
    override;
```

**Parameters**

| Name      | Type      | Description                                                       |
| --------- | --------- | ----------------------------------------------------------------- |
| `_origin` | `Origin`  | A struct containing information about where the packet came from. |
| `_guid`   | `bytes32` | A global unique identifier for tracking the packet.               |
| `payload` | `bytes`   | Encoded message.                                                  |
| `<none>`  | `address` |                                                                   |
| `<none>`  | `bytes`   |                                                                   |

### \_bridge

bridge override to allow bridge logic to be done for bridge() and depositAndBridge()

```solidity
function _bridge(uint256 shareAmount, BridgeData calldata data) internal override returns (bytes32);
```

**Parameters**

| Name          | Type         | Description              |
| ------------- | ------------ | ------------------------ |
| `shareAmount` | `uint256`    | to be moved across chain |
| `data`        | `BridgeData` | BridgeData               |

## Errors

### MultiChainLayerZeroTellerWithMultiAssetSupport\_InvalidToken

```solidity
error MultiChainLayerZeroTellerWithMultiAssetSupport_InvalidToken();
```
