Developer Docs
Search…
⌃K

Cross Chain Swap Fee

Get the cross chain swap fee, paid in native gas on the source chain.
Use quoteLayerZeroFee() to get the fee required to call swap(). The fee ensures the cross chain message is paid for.
// 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 of the other function types.
Estimate the fee for the message cost of the swap() using offchain code like this:
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:
// the message fee is the first value in the tuple.
let feeWei = quoteData[0]
Use feeWei to call swap():
// 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()
)