Fees Calculation & Gas Estimation Logic

Base Transaction Fee

  • dstGasLimit: User-defined gas limit to be used on the destination network during the redeem transaction.

  • dstGasPriceInWei: Stored in the contract and updated by the backend; represents the gas price on the destination network based on chainId.

  • dstNativePriceInUSDe18: Stored in the contract and updated by the backend; indicates the USD price of the native currency on the destination network, depending on chainId.

  • curNativePriceInUSDe18: Stored in the contract and updated by the backend; reflects the USD price of the native currency on the source network.


Base Fee Calculation

To calculate the base fee in terms of the current native currency:

baseFeeAtCurrentNative = dstGasLimit * dstGasPriceInWei * dstNativePriceInUSDe18 / curNativePriceInUSDe18

This formula determines the amount of native currency required on the source network to execute the transaction (excluding payload), which is then compared to msg.value.


Payload Cost Calculation

To calculate the cost related to the payload, use these parameters:

  • payloadLength: User-defined length of the payload in bytes.

  • dstPricePerByteInWei: Cost per byte of payload in the native currency on the destination network.

  • dstNativePriceInUSDe18: Represents the USD price of the native currency on the destination network.

  • curNativePriceInUSDe18: Represents the USD price of the native currency on the source network.

The payload cost calculation in the current native currency is:

payloadPriceAtCurrentNative = payloadLength * dstPricePerByteInWei * dstNativePriceInUSDe18 / curNativePriceInUSDe18

This formula calculates how much native currency is needed on the source network to cover the payload cost, which is also compared to msg.value.


Final Calculation

To determine the total required amount, sum baseFeeAtCurrentNative and payloadPriceAtCurrentNative, then compare to msg.value. Note that users may incur small losses if dstGasLimit exceeds the actual gas consumed.


Optimization of Calculations

To optimize the process, the backend handles calculations off-chain to minimize contract updates across different destination networks:

  • dstGasPriceInWei

  • dstPricePerByteInWei

  • dstNativePriceInUSDe18

  • curNativePriceInUSDe18

Using these parameters, the backend performs these calculations:

  • Calculate dstGasPriceAtCurrentNative:

    dstGasPriceAtCurrentNative = dstGasPriceInWei * dstNativePriceInUSDe18 / curNativePriceInUSDe18
  • Calculate dstPayloadPriceAtCurrentNative:

    dstPayloadPriceAtCurrentNative = dstPricePerByteInWei * dstNativePriceInUSDe18 / curNativePriceInUSDe18

The backend then sends only the dstGasPriceAtCurrentNative value to the contract. Optionally, it can also send dstPayloadPriceAtCurrentNative if a dynamic price per byte is preferred; otherwise, a static price is more efficient.

Last updated