2024-10-10 21:34:38 +03:00
|
|
|
import type { BigNumberish, JsonRpcApiProvider, TransactionLike } from 'ethers';
|
2024-04-29 18:55:15 +03:00
|
|
|
import { OvmGasPriceOracle } from './typechain';
|
|
|
|
/**
|
|
|
|
* Example:
|
|
|
|
*
|
|
|
|
* amountInWei (0.1 ETH) * tokenDecimals (18) * tokenPriceInWei (0.0008) = 125 TOKEN
|
|
|
|
*/
|
|
|
|
export declare function convertETHToTokenAmount(amountInWei: BigNumberish, tokenPriceInWei: BigNumberish, tokenDecimals?: number): bigint;
|
|
|
|
export interface RelayerFeeParams {
|
|
|
|
gasPrice: BigNumberish;
|
|
|
|
gasLimit?: BigNumberish;
|
|
|
|
l1Fee?: BigNumberish;
|
|
|
|
denomination: BigNumberish;
|
|
|
|
ethRefund: BigNumberish;
|
|
|
|
tokenPriceInWei: BigNumberish;
|
|
|
|
tokenDecimals: number;
|
|
|
|
relayerFeePercent?: number;
|
|
|
|
isEth?: boolean;
|
|
|
|
premiumPercent?: number;
|
|
|
|
}
|
|
|
|
export declare class TornadoFeeOracle {
|
2024-10-10 21:34:38 +03:00
|
|
|
provider: JsonRpcApiProvider;
|
2024-04-29 18:55:15 +03:00
|
|
|
ovmGasPriceOracle?: OvmGasPriceOracle;
|
2024-10-10 21:34:38 +03:00
|
|
|
constructor(provider: JsonRpcApiProvider, ovmGasPriceOracle?: OvmGasPriceOracle);
|
|
|
|
/**
|
|
|
|
* Calculates Gas Price
|
|
|
|
* We apply 50% premium of EIP-1559 network fees instead of 100% from ethers.js
|
|
|
|
* (This should cover up to 4 full blocks which is equivalent of minute)
|
|
|
|
* (A single block can bump 12.5% of fees, see the methodology https://hackmd.io/@tvanepps/1559-wallets)
|
|
|
|
* (Still it is recommended to use 100% premium for sending transactions to prevent stucking it)
|
|
|
|
*/
|
|
|
|
gasPrice(): Promise<bigint>;
|
2024-04-29 18:55:15 +03:00
|
|
|
/**
|
|
|
|
* Calculate L1 fee for op-stack chains
|
|
|
|
*
|
|
|
|
* This is required since relayers would pay the full transaction fees for users
|
|
|
|
*/
|
|
|
|
fetchL1OptimismFee(tx?: TransactionLike): Promise<bigint>;
|
|
|
|
/**
|
|
|
|
* We don't need to distinguish default refunds by tokens since most users interact with other defi protocols after withdrawal
|
|
|
|
* So we default with 1M gas which is enough for two or three swaps
|
|
|
|
* Using 30 gwei for default but it is recommended to supply cached gasPrice value from the UI
|
|
|
|
*/
|
|
|
|
defaultEthRefund(gasPrice?: BigNumberish, gasLimit?: BigNumberish): bigint;
|
|
|
|
/**
|
|
|
|
* Calculates token amount for required ethRefund purchases required to calculate fees
|
|
|
|
*/
|
|
|
|
calculateTokenAmount(ethRefund: BigNumberish, tokenPriceInEth: BigNumberish, tokenDecimals?: number): bigint;
|
|
|
|
/**
|
|
|
|
* Warning: For tokens you need to check if the fees are above denomination
|
|
|
|
* (Usually happens for small denomination pool or if the gas price is high)
|
|
|
|
*/
|
|
|
|
calculateRelayerFee({ gasPrice, gasLimit, l1Fee, denomination, ethRefund, tokenPriceInWei, tokenDecimals, relayerFeePercent, isEth, premiumPercent, }: RelayerFeeParams): bigint;
|
|
|
|
}
|