> For the complete documentation index, see [llms.txt](https://stargateprotocol.gitbook.io/stargate/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://stargateprotocol.gitbook.io/stargate/developers/cross-chain-swap-fee.md).

# Cross Chain Swap Fee

Use `quoteLayerZeroFee()` to get the fee required to call `swap()`. The fee ensures the cross chain message is paid for.

```java
// Router.sol method to get the value for swap()
function quoteLayerZeroFee(
    uint16 _dstChainId,
    uint8 _functionType,
    bytes calldata _toAddress,
    bytes calldata _transferAndCallPayload,
    Router.lzTxObj memory _lzTxParams
) external view override returns (uint256, uint256)
```

For the `uint8 _functionType` argument use `1` for `swap()`s.  Here is an [explanation](/stargate/developers/function-types.md) of the [other function types](/stargate/developers/function-types.md).

Estimate the fee for the message cost of the `swap()` using offchain code like this:<br>

```javascript
let quoteData = await router.quoteLayerZeroFee(
    dstChainId,                 // destination chainId
    functionType,               // function type: see Bridge.sol for all types
    toAddress,                  // destination of tokens
    "0x",                       // payload, using abi.encode()
    ({
        dstGasForCall: 0,       // extra gas, if calling smart contract,
        dstNativeAmount: 0,     // amount of dust dropped in destination wallet 
        dstNativeAddr: taskArgs.dstNativeAddr // destination wallet for dust
    })
)
```

`quoteLayerZeroFee()` estimates the message fee and returns an amount of wei in source gas token. Use this as the `{ value: xxxx }` passed to the actual `swap()` method when you perform the swap.

Note:  quoteLayerZeroFee() returns a 2-value tuple:

```javascript
// the message fee is the first value in the tuple.
let feeWei = quoteData[0]
```

Use `feeWei` to call swap():

```javascript
// ethersjs example: call swap() with the feeWei value from quoteLayerZeroFee
// execute a Stargate swap on the Router.sol contract
await router.swap(
    dstChainId,
    srcPoolId,
    dstPoolId,
    payable(refundAddress),
    qty,
    qtyMin,
    { dstGasForCall: 0, dstNativeAmount: 0, dstNativeAddr: "0x" },   // lzTxObj
    toAddress, 
    "0x", // no payload
    { value: feeWei }  // <------ feeWei from quoteData[0] from quoteLayerZeroFee()   
)
```
