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 updated