import { BigNumber } from "@ethersproject/bignumber"; import { ChainId, Token, CurrencyAmount as CurrencyAmountRaw } from "@onyxcoindev/sdk-core-test"; import { Pool } from "@onyxcoindev/pool-sdk-test"; import { ProviderConfig } from "../../../providers/provider"; import { CurrencyAmount } from "../../../util/amounts"; import { RouteWithValidQuote, V3RouteWithValidQuote } from "../entities/route-with-valid-quote"; import { TPool } from "../../../util"; export declare const usdGasTokens: Token[]; export declare const usdGasTokensByChain: { [chainId in ChainId]?: Token[]; }; export type L1ToL2GasCosts = { gasUsedL1: BigNumber; gasCostL1USD: CurrencyAmount; gasCostL1QuoteToken: CurrencyAmount; }; export type GasModelProviderConfig = ProviderConfig & { additionalGasOverhead?: BigNumber; gasToken?: Token; }; export type BuildOnChainGasModelFactoryType = { chainId: ChainId; gasPriceWei: BigNumber; pools: LiquidityCalculationPools; amountToken: Token; quoteToken: Token; providerConfig?: GasModelProviderConfig; }; export type LiquidityCalculationPools = { usdPool: TPool; nativeQuoteTokenFusionPool: TPool | null; nativeAmountTokenFusionPool: TPool | null; nativeAndSpecifiedGasTokenFusionPool: TPool | null; }; export type GasModelType = { v3GasModel: IGasModel; }; /** * Contains functions for generating gas estimates for given routes. * * We generally compute gas estimates off-chain because * 1/ Calling eth_estimateGas for a swaps requires the caller to have * the full balance token being swapped, and approvals. * 2/ Tracking gas used using a wrapper contract is not accurate with Multicall * due to EIP-2929 * 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used. * * Generally these models should be optimized to return quickly by performing any * long running operations (like fetching external data) outside of the functions defined. * This is because the functions in the model are called once for every route and every * amount that is considered in the algorithm so it is important to minimize the number of * long running operations. */ export type IGasModel = { estimateGasCost(routeWithValidQuote: TRouteWithValidQuote): { gasEstimate: BigNumber; gasCostInToken: CurrencyAmount; gasCostInUSD: CurrencyAmount; gasCostInGasToken?: CurrencyAmount; }; calculateL1GasFees?(): Promise; }; /** * Factory for building gas models that can be used with any route to generate * gas estimates. * * Factory model is used so that any supporting data can be fetched once and * returned as part of the model. * * @export * @abstract * @class IOnChainGasModelFactory */ export declare abstract class IOnChainGasModelFactory { abstract buildGasModel({ chainId, gasPriceWei, pools, amountToken, quoteToken, providerConfig, }: BuildOnChainGasModelFactoryType): Promise>; protected totalInitializedTicksCrossed(initializedTicksCrossedList: number[]): number; } export declare const getQuoteThroughNativePool: (chainId: ChainId, nativeTokenAmount: CurrencyAmountRaw, nativeTokenPool: TPool) => CurrencyAmount;