Comment on page
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()
)
Last modified 3mo ago