@metamask-previews/transaction-pay-controller 22.3.1-preview-2fd84c8 → 22.3.1-preview-c04e6a2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/TransactionPayController-method-action-types.cjs.map +1 -1
- package/dist/TransactionPayController-method-action-types.d.cts +23 -1
- package/dist/TransactionPayController-method-action-types.d.cts.map +1 -1
- package/dist/TransactionPayController-method-action-types.d.mts +23 -1
- package/dist/TransactionPayController-method-action-types.d.mts.map +1 -1
- package/dist/TransactionPayController-method-action-types.mjs.map +1 -1
- package/dist/TransactionPayController.cjs +38 -5
- package/dist/TransactionPayController.cjs.map +1 -1
- package/dist/TransactionPayController.d.cts +18 -2
- package/dist/TransactionPayController.d.cts.map +1 -1
- package/dist/TransactionPayController.d.mts +18 -2
- package/dist/TransactionPayController.d.mts.map +1 -1
- package/dist/TransactionPayController.mjs +38 -5
- package/dist/TransactionPayController.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/strategy/across/AcrossStrategy.cjs +12 -1
- package/dist/strategy/across/AcrossStrategy.cjs.map +1 -1
- package/dist/strategy/across/AcrossStrategy.d.cts.map +1 -1
- package/dist/strategy/across/AcrossStrategy.d.mts.map +1 -1
- package/dist/strategy/across/AcrossStrategy.mjs +12 -1
- package/dist/strategy/across/AcrossStrategy.mjs.map +1 -1
- package/dist/strategy/across/across-quotes.cjs +160 -37
- package/dist/strategy/across/across-quotes.cjs.map +1 -1
- package/dist/strategy/across/across-quotes.d.cts.map +1 -1
- package/dist/strategy/across/across-quotes.d.mts.map +1 -1
- package/dist/strategy/across/across-quotes.mjs +160 -37
- package/dist/strategy/across/across-quotes.mjs.map +1 -1
- package/dist/strategy/across/types.cjs.map +1 -1
- package/dist/strategy/across/types.d.cts +1 -0
- package/dist/strategy/across/types.d.cts.map +1 -1
- package/dist/strategy/across/types.d.mts +1 -0
- package/dist/strategy/across/types.d.mts.map +1 -1
- package/dist/strategy/across/types.mjs.map +1 -1
- package/dist/strategy/relay/polymarket/calldata.cjs +28 -0
- package/dist/strategy/relay/polymarket/calldata.cjs.map +1 -0
- package/dist/strategy/relay/polymarket/calldata.d.cts +14 -0
- package/dist/strategy/relay/polymarket/calldata.d.cts.map +1 -0
- package/dist/strategy/relay/polymarket/calldata.d.mts +14 -0
- package/dist/strategy/relay/polymarket/calldata.d.mts.map +1 -0
- package/dist/strategy/relay/polymarket/calldata.mjs +21 -0
- package/dist/strategy/relay/polymarket/calldata.mjs.map +1 -0
- package/dist/strategy/relay/polymarket/constants.cjs +11 -0
- package/dist/strategy/relay/polymarket/constants.cjs.map +1 -0
- package/dist/strategy/relay/polymarket/constants.d.cts +8 -0
- package/dist/strategy/relay/polymarket/constants.d.cts.map +1 -0
- package/dist/strategy/relay/polymarket/constants.d.mts +8 -0
- package/dist/strategy/relay/polymarket/constants.d.mts.map +1 -0
- package/dist/strategy/relay/polymarket/constants.mjs +8 -0
- package/dist/strategy/relay/polymarket/constants.mjs.map +1 -0
- package/dist/strategy/relay/polymarket/withdraw.cjs +170 -0
- package/dist/strategy/relay/polymarket/withdraw.cjs.map +1 -0
- package/dist/strategy/relay/polymarket/withdraw.d.cts +13 -0
- package/dist/strategy/relay/polymarket/withdraw.d.cts.map +1 -0
- package/dist/strategy/relay/polymarket/withdraw.d.mts +13 -0
- package/dist/strategy/relay/polymarket/withdraw.d.mts.map +1 -0
- package/dist/strategy/relay/polymarket/withdraw.mjs +164 -0
- package/dist/strategy/relay/polymarket/withdraw.mjs.map +1 -0
- package/dist/strategy/relay/relay-quotes.cjs +8 -2
- package/dist/strategy/relay/relay-quotes.cjs.map +1 -1
- package/dist/strategy/relay/relay-quotes.d.cts.map +1 -1
- package/dist/strategy/relay/relay-quotes.d.mts.map +1 -1
- package/dist/strategy/relay/relay-quotes.mjs +8 -2
- package/dist/strategy/relay/relay-quotes.mjs.map +1 -1
- package/dist/strategy/relay/relay-submit.cjs +50 -18
- package/dist/strategy/relay/relay-submit.cjs.map +1 -1
- package/dist/strategy/relay/relay-submit.d.cts.map +1 -1
- package/dist/strategy/relay/relay-submit.d.mts.map +1 -1
- package/dist/strategy/relay/relay-submit.mjs +50 -18
- package/dist/strategy/relay/relay-submit.mjs.map +1 -1
- package/dist/strategy/relay/types.cjs.map +1 -1
- package/dist/strategy/relay/types.d.cts +11 -0
- package/dist/strategy/relay/types.d.cts.map +1 -1
- package/dist/strategy/relay/types.d.mts +11 -0
- package/dist/strategy/relay/types.d.mts.map +1 -1
- package/dist/strategy/relay/types.mjs.map +1 -1
- package/dist/tests/messenger-mock.cjs +6 -0
- package/dist/tests/messenger-mock.cjs.map +1 -1
- package/dist/tests/messenger-mock.d.cts +14 -0
- package/dist/tests/messenger-mock.d.cts.map +1 -1
- package/dist/tests/messenger-mock.d.mts +14 -0
- package/dist/tests/messenger-mock.d.mts.map +1 -1
- package/dist/tests/messenger-mock.mjs +6 -0
- package/dist/tests/messenger-mock.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +27 -0
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +27 -0
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/quotes.cjs +8 -3
- package/dist/utils/quotes.cjs.map +1 -1
- package/dist/utils/quotes.d.cts.map +1 -1
- package/dist/utils/quotes.d.mts.map +1 -1
- package/dist/utils/quotes.mjs +8 -3
- package/dist/utils/quotes.mjs.map +1 -1
- package/dist/utils/source-amounts.cjs +10 -8
- package/dist/utils/source-amounts.cjs.map +1 -1
- package/dist/utils/source-amounts.d.cts.map +1 -1
- package/dist/utils/source-amounts.d.mts.map +1 -1
- package/dist/utils/source-amounts.mjs +10 -8
- package/dist/utils/source-amounts.mjs.map +1 -1
- package/dist/utils/token.cjs +2 -2
- package/dist/utils/token.cjs.map +1 -1
- package/dist/utils/token.mjs +2 -2
- package/dist/utils/token.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"across-quotes.cjs","sourceRoot":"","sources":["../../../src/strategy/across/across-quotes.ts"],"names":[],"mappings":"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","sourcesContent":["import { successfulFetch, toHex } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { TransactionPayStrategy } from '../../constants';\nimport { projectLogger } from '../../logger';\nimport type {\n Amount,\n FiatRates,\n PayStrategyGetQuotesRequest,\n QuoteRequest,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n} from '../../types';\nimport { getFiatValueFromUsd, sumAmounts } from '../../utils/amounts';\nimport { getPayStrategiesConfig, getSlippage } from '../../utils/feature-flags';\nimport { calculateGasCost } from '../../utils/gas';\nimport {\n getGasStationCostInSourceTokenRaw,\n getGasStationEligibility,\n} from '../../utils/gas-station';\nimport { estimateQuoteGasLimits } from '../../utils/quote-gas';\nimport {\n getNativeToken,\n getTokenBalance,\n getTokenFiatRate,\n} from '../../utils/token';\nimport { getAcrossDestination } from './across-actions';\nimport { normalizeAcrossRequest } from './perps';\nimport { isAcrossQuoteRequest } from './requests';\nimport { getAcrossOrderedTransactions } from './transactions';\nimport type {\n AcrossAction,\n AcrossActionRequestBody,\n AcrossGasLimits,\n AcrossQuote,\n AcrossSwapApprovalResponse,\n} from './types';\n\nconst log = createModuleLogger(projectLogger, 'across-strategy');\n\nconst UNSUPPORTED_AUTHORIZATION_LIST_ERROR =\n 'Across does not support type-4/EIP-7702 authorization lists yet';\n\ntype AcrossQuoteWithoutMetaMask = Omit<AcrossQuote, 'metamask'>;\n\n/**\n * Fetch Across quotes.\n *\n * @param request - Request object.\n * @returns Array of quotes.\n */\nexport async function getAcrossQuotes(\n request: PayStrategyGetQuotesRequest,\n): Promise<TransactionPayQuote<AcrossQuote>[]> {\n const { requests } = request;\n\n log('Fetching quotes', requests);\n\n try {\n const normalizedRequests = requests.filter(isAcrossQuoteRequest);\n\n if (normalizedRequests.length === 0) {\n return [];\n }\n\n if (request.transaction.txParams?.authorizationList?.length) {\n throw new Error(UNSUPPORTED_AUTHORIZATION_LIST_ERROR);\n }\n\n return await Promise.all(\n normalizedRequests.map((singleRequest) =>\n getQuoteWithGasStationHandling(singleRequest, request),\n ),\n );\n } catch (error) {\n log('Error fetching quotes', { error });\n throw new Error(`Failed to fetch Across quotes: ${String(error)}`);\n }\n}\n\nasync function getSingleQuote(\n request: QuoteRequest,\n fullRequest: PayStrategyGetQuotesRequest,\n): Promise<TransactionPayQuote<AcrossQuote>> {\n const { messenger, signal, transaction } = fullRequest;\n const normalizedRequest = normalizeAcrossRequest(request, transaction.type);\n const {\n from,\n isMaxAmount,\n sourceChainId,\n sourceTokenAddress,\n sourceTokenAmount,\n targetAmountMinimum,\n targetChainId,\n targetTokenAddress,\n } = normalizedRequest;\n\n const config = getPayStrategiesConfig(messenger);\n const slippageDecimal = getSlippage(\n messenger,\n sourceChainId,\n sourceTokenAddress,\n );\n\n const amount = isMaxAmount ? sourceTokenAmount : targetAmountMinimum;\n const tradeType = isMaxAmount ? 'exactInput' : 'exactOutput';\n const destination = getAcrossDestination(transaction, request);\n const quote = await requestAcrossApproval({\n actions: destination.actions,\n amount,\n apiBase: config.across.apiBase,\n depositor: from,\n destinationChainId: targetChainId,\n inputToken: sourceTokenAddress,\n originChainId: sourceChainId,\n outputToken: targetTokenAddress,\n recipient: destination.recipient,\n signal,\n slippage: slippageDecimal,\n tradeType,\n });\n\n const originalQuote: AcrossQuoteWithoutMetaMask = {\n quote,\n request: {\n amount,\n tradeType,\n },\n };\n\n return await normalizeQuote(originalQuote, normalizedRequest, fullRequest);\n}\n\nasync function getQuoteWithGasStationHandling(\n request: QuoteRequest,\n fullRequest: PayStrategyGetQuotesRequest,\n): Promise<TransactionPayQuote<AcrossQuote>> {\n const phase1Quote = await getSingleQuote(request, fullRequest);\n\n if (!request.isMaxAmount || !phase1Quote.fees.isSourceGasFeeToken) {\n return phase1Quote;\n }\n\n const adjustedSourceAmount = new BigNumber(request.sourceTokenAmount)\n .minus(phase1Quote.fees.sourceNetwork.max.raw)\n .integerValue(BigNumber.ROUND_DOWN);\n\n if (!adjustedSourceAmount.isGreaterThan(0)) {\n log('Insufficient balance after gas subtraction for Across max quote');\n return phase1Quote;\n }\n\n log('Subtracting gas from source for Across max quote', {\n adjustedSourceAmount: adjustedSourceAmount.toString(10),\n gasCostRaw: phase1Quote.fees.sourceNetwork.max.raw,\n originalSourceAmount: request.sourceTokenAmount,\n });\n\n try {\n const phase2Quote = await getSingleQuote(\n {\n ...request,\n sourceTokenAmount: adjustedSourceAmount.toFixed(\n 0,\n BigNumber.ROUND_DOWN,\n ),\n },\n fullRequest,\n );\n\n if (!phase2Quote.fees.isSourceGasFeeToken) {\n log('Across max phase 2 lost gas fee token eligibility');\n return phase1Quote;\n }\n\n const phase2GasCost = new BigNumber(phase2Quote.fees.sourceNetwork.max.raw);\n\n if (\n adjustedSourceAmount\n .plus(phase2GasCost)\n .isGreaterThan(request.sourceTokenAmount)\n ) {\n log('Across max phase 2 quote exceeds original source amount', {\n adjustedSourceAmount: adjustedSourceAmount.toString(10),\n gasCostRaw: phase2GasCost.toString(10),\n originalSourceAmount: request.sourceTokenAmount,\n });\n return phase1Quote;\n }\n\n return phase2Quote;\n } catch (error) {\n log('Across max phase 2 quote failed, falling back to phase 1', { error });\n return phase1Quote;\n }\n}\n\ntype AcrossApprovalRequest = {\n actions: AcrossAction[];\n amount: string;\n apiBase: string;\n depositor: Hex;\n destinationChainId: Hex;\n inputToken: Hex;\n originChainId: Hex;\n outputToken: Hex;\n recipient: Hex;\n signal?: AbortSignal;\n slippage?: number;\n tradeType: 'exactInput' | 'exactOutput';\n};\n\nasync function requestAcrossApproval(\n request: AcrossApprovalRequest,\n): Promise<AcrossSwapApprovalResponse> {\n const {\n actions,\n amount,\n apiBase,\n depositor,\n destinationChainId,\n inputToken,\n originChainId,\n outputToken,\n recipient,\n signal,\n slippage,\n tradeType,\n } = request;\n\n const params = new URLSearchParams();\n params.set('tradeType', tradeType);\n params.set('amount', amount);\n params.set('inputToken', inputToken);\n params.set('outputToken', outputToken);\n params.set('originChainId', String(parseInt(originChainId, 16)));\n params.set('destinationChainId', String(parseInt(destinationChainId, 16)));\n params.set('depositor', depositor);\n params.set('recipient', recipient);\n\n if (slippage !== undefined) {\n params.set('slippage', String(slippage));\n }\n\n const body: AcrossActionRequestBody = { actions };\n const url = `${apiBase}/swap/approval?${params.toString()}`;\n const options: RequestInit = {\n body: JSON.stringify(body),\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n signal,\n };\n const response = await successfulFetch(url, options);\n\n return (await response.json()) as AcrossSwapApprovalResponse;\n}\n\nasync function normalizeQuote(\n original: AcrossQuoteWithoutMetaMask,\n request: QuoteRequest,\n fullRequest: PayStrategyGetQuotesRequest,\n): Promise<TransactionPayQuote<AcrossQuote>> {\n const { messenger } = fullRequest;\n const { quote } = original;\n\n const { usdToFiatRate, sourceFiatRate, targetFiatRate } = getFiatRates(\n messenger,\n quote,\n );\n\n const dustUsd = calculateDustUsd(quote, request, targetFiatRate);\n const dust = getFiatValueFromUsd(dustUsd, usdToFiatRate);\n\n const {\n gasLimits,\n is7702,\n isGasFeeToken: isSourceGasFeeToken,\n requiresAuthorizationList,\n sourceNetwork,\n } = await calculateSourceNetworkCost(quote, messenger, request);\n\n const targetNetwork = getFiatValueFromUsd(new BigNumber(0), usdToFiatRate);\n\n const inputAmountRaw = quote.inputAmount ?? '0';\n const outputAmountRaw = new BigNumber(\n quote.expectedOutputAmount ??\n quote.minOutputAmount ??\n request.targetAmountMinimum ??\n '0',\n ).toString(10);\n\n const sourceAmount = getAmountFromTokenAmount({\n amountRaw: inputAmountRaw,\n decimals: quote.inputToken.decimals,\n fiatRate: sourceFiatRate,\n });\n\n const providerUsd = calculateProviderUsd(\n quote,\n inputAmountRaw,\n sourceFiatRate,\n targetFiatRate,\n quote.expectedOutputAmount,\n );\n const provider = getFiatValueFromUsd(providerUsd, usdToFiatRate);\n const metaMaskFee = getFiatValueFromUsd(\n new BigNumber(quote.fees?.app?.amountUsd ?? '0').abs(),\n usdToFiatRate,\n );\n\n const targetAmount = getAmountFromTokenAmount({\n amountRaw: outputAmountRaw,\n decimals: quote.outputToken.decimals,\n fiatRate: targetFiatRate,\n });\n\n const metamask = {\n gasLimits,\n is7702,\n ...(requiresAuthorizationList ? { requiresAuthorizationList } : {}),\n };\n\n return {\n dust,\n estimatedDuration: quote.expectedFillTime ?? 0,\n fees: {\n isSourceGasFeeToken,\n metaMask: metaMaskFee,\n provider,\n sourceNetwork,\n targetNetwork,\n },\n original: {\n ...original,\n metamask,\n },\n request,\n sourceAmount,\n targetAmount,\n strategy: TransactionPayStrategy.Across,\n } as TransactionPayQuote<AcrossQuote>;\n}\n\nfunction getFiatRates(\n messenger: TransactionPayControllerMessenger,\n quote: AcrossSwapApprovalResponse,\n): {\n sourceFiatRate: FiatRates;\n targetFiatRate: FiatRates;\n usdToFiatRate: BigNumber;\n} {\n const sourceFiatRate = getTokenFiatRate(\n messenger,\n quote.inputToken.address,\n toHex(quote.inputToken.chainId),\n );\n\n if (!sourceFiatRate) {\n throw new Error('Source token fiat rate not found');\n }\n\n const targetFiatRate =\n getTokenFiatRate(\n messenger,\n quote.outputToken.address,\n toHex(quote.outputToken.chainId),\n ) ?? sourceFiatRate;\n\n const usdToFiatRate = new BigNumber(sourceFiatRate.fiatRate).dividedBy(\n sourceFiatRate.usdRate,\n );\n\n return { sourceFiatRate, targetFiatRate, usdToFiatRate };\n}\n\nfunction calculateDustUsd(\n quote: AcrossSwapApprovalResponse,\n request: QuoteRequest,\n targetFiatRate: FiatRates,\n): BigNumber {\n const expectedOutputRaw = quote.expectedOutputAmount;\n\n if (expectedOutputRaw === undefined) {\n return new BigNumber(0);\n }\n\n const expectedOutput = new BigNumber(expectedOutputRaw);\n const minimumOutput = new BigNumber(\n quote.minOutputAmount ?? request.targetAmountMinimum ?? '0',\n );\n\n const dustRaw = expectedOutput.minus(minimumOutput).isNegative()\n ? new BigNumber(0)\n : expectedOutput.minus(minimumOutput);\n const dustHuman = dustRaw.shiftedBy(-quote.outputToken.decimals);\n\n return dustHuman.multipliedBy(targetFiatRate.usdRate);\n}\n\nfunction calculateProviderUsd(\n quote: AcrossSwapApprovalResponse,\n inputAmountRaw: string,\n sourceFiatRate: FiatRates,\n targetFiatRate: FiatRates,\n expectedOutputRaw?: string,\n): BigNumber {\n const totalFeeUsd = quote.fees?.total?.amountUsd;\n\n if (totalFeeUsd !== undefined) {\n return new BigNumber(totalFeeUsd).abs();\n }\n\n if (expectedOutputRaw === undefined) {\n return new BigNumber(0);\n }\n\n const expectedOutput = new BigNumber(expectedOutputRaw);\n\n if (expectedOutput.lte(0)) {\n return new BigNumber(0);\n }\n\n const inputAmountUsd = new BigNumber(inputAmountRaw)\n .shiftedBy(-quote.inputToken.decimals)\n .multipliedBy(sourceFiatRate.usdRate);\n const expectedOutputUsd = expectedOutput\n .shiftedBy(-quote.outputToken.decimals)\n .multipliedBy(targetFiatRate.usdRate);\n const providerFeeUsd = inputAmountUsd.minus(expectedOutputUsd);\n\n return providerFeeUsd.isNegative() ? new BigNumber(0) : providerFeeUsd;\n}\n\nfunction getAmountFromTokenAmount({\n amountRaw,\n decimals,\n fiatRate,\n}: {\n amountRaw: string;\n decimals: number;\n fiatRate: FiatRates;\n}): Amount {\n const rawValue = new BigNumber(amountRaw);\n const raw = rawValue.toString(10);\n\n const humanValue = rawValue.shiftedBy(-decimals);\n const human = humanValue.toString(10);\n\n const usd = humanValue.multipliedBy(fiatRate.usdRate).toString(10);\n const fiat = humanValue.multipliedBy(fiatRate.fiatRate).toString(10);\n\n return {\n fiat,\n human,\n raw,\n usd,\n };\n}\n\nasync function calculateSourceNetworkCost(\n quote: AcrossSwapApprovalResponse,\n messenger: TransactionPayControllerMessenger,\n request: QuoteRequest,\n): Promise<{\n sourceNetwork: TransactionPayQuote<AcrossQuote>['fees']['sourceNetwork'];\n gasLimits: AcrossGasLimits;\n isGasFeeToken?: boolean;\n is7702: boolean;\n requiresAuthorizationList?: true;\n}> {\n const acrossFallbackGas =\n getPayStrategiesConfig(messenger).across.fallbackGas;\n const { from, sourceChainId, sourceTokenAddress } = request;\n const orderedTransactions = getAcrossOrderedTransactions({ quote });\n const { swapTx } = quote;\n const swapChainId = toHex(swapTx.chainId);\n const gasEstimates = await estimateQuoteGasLimits({\n fallbackGas: acrossFallbackGas,\n messenger,\n transactions: orderedTransactions.map((transaction) => ({\n chainId: toHex(transaction.chainId),\n data: transaction.data,\n from,\n gas: transaction.gas,\n to: transaction.to,\n value: transaction.value ?? '0x0',\n })),\n });\n const { batchGasLimit, is7702, requiresAuthorizationList, totalGasEstimate } =\n gasEstimates;\n\n let sourceNetwork: TransactionPayQuote<AcrossQuote>['fees']['sourceNetwork'];\n let gasLimits: AcrossGasLimits;\n\n if (is7702) {\n if (!batchGasLimit) {\n throw new Error('Across combined batch gas estimate missing');\n }\n\n const estimate = calculateGasCost({\n chainId: swapChainId,\n gas: batchGasLimit.estimate,\n maxFeePerGas: swapTx.maxFeePerGas,\n maxPriorityFeePerGas: swapTx.maxPriorityFeePerGas,\n messenger,\n });\n const max = calculateGasCost({\n chainId: swapChainId,\n gas: batchGasLimit.max,\n isMax: true,\n maxFeePerGas: swapTx.maxFeePerGas,\n maxPriorityFeePerGas: swapTx.maxPriorityFeePerGas,\n messenger,\n });\n\n sourceNetwork = {\n estimate,\n max,\n };\n gasLimits = [\n {\n estimate: batchGasLimit.estimate,\n max: batchGasLimit.max,\n },\n ];\n } else {\n const transactionGasLimits = orderedTransactions.map(\n (transaction, index) => ({\n gasEstimate: gasEstimates.gasLimits[index],\n transaction,\n }),\n );\n\n const estimate = sumAmounts(\n transactionGasLimits.map(({ gasEstimate, transaction }) =>\n calculateGasCost({\n chainId: toHex(transaction.chainId),\n gas: gasEstimate.estimate,\n maxFeePerGas: transaction.maxFeePerGas,\n maxPriorityFeePerGas: transaction.maxPriorityFeePerGas,\n messenger,\n }),\n ),\n );\n\n const max = sumAmounts(\n transactionGasLimits.map(({ gasEstimate, transaction }) =>\n calculateGasCost({\n chainId: toHex(transaction.chainId),\n gas: gasEstimate.max,\n isMax: true,\n maxFeePerGas: transaction.maxFeePerGas,\n maxPriorityFeePerGas: transaction.maxPriorityFeePerGas,\n messenger,\n }),\n ),\n );\n\n sourceNetwork = {\n estimate,\n max,\n };\n gasLimits = transactionGasLimits.map(({ gasEstimate }) => ({\n estimate: gasEstimate.estimate,\n max: gasEstimate.max,\n }));\n }\n\n const result = {\n sourceNetwork,\n is7702,\n ...(requiresAuthorizationList ? { requiresAuthorizationList } : {}),\n gasLimits,\n };\n\n const nativeBalance = getTokenBalance(\n messenger,\n from,\n sourceChainId,\n getNativeToken(sourceChainId),\n );\n\n if (\n new BigNumber(nativeBalance).isGreaterThanOrEqualTo(sourceNetwork.max.raw)\n ) {\n return result;\n }\n\n const gasStationEligibility = getGasStationEligibility(\n messenger,\n sourceChainId,\n );\n\n if (gasStationEligibility.isDisabledChain) {\n log('Skipping Across gas station as disabled chain', { sourceChainId });\n return result;\n }\n\n if (!gasStationEligibility.chainSupportsGasStation) {\n log('Skipping Across gas station as chain does not support EIP-7702', {\n sourceChainId,\n });\n return result;\n }\n\n const firstTransaction = orderedTransactions[0];\n\n const gasFeeTokenCost = await getGasStationCostInSourceTokenRaw({\n firstStepData: {\n data: firstTransaction.data,\n to: firstTransaction.to,\n value: firstTransaction.value,\n },\n messenger,\n request: {\n from,\n sourceChainId,\n sourceTokenAddress,\n },\n totalGasEstimate,\n totalItemCount: Math.max(orderedTransactions.length, gasLimits.length),\n });\n\n if (!gasFeeTokenCost) {\n return result;\n }\n\n log('Using gas fee token for Across source network', {\n gasFeeTokenCost,\n });\n\n return {\n isGasFeeToken: true,\n sourceNetwork: {\n estimate: gasFeeTokenCost,\n max: gasFeeTokenCost,\n },\n is7702,\n ...(requiresAuthorizationList ? { requiresAuthorizationList } : {}),\n gasLimits,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"across-quotes.cjs","sourceRoot":"","sources":["../../../src/strategy/across/across-quotes.ts"],"names":[],"mappings":"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","sourcesContent":["import { successfulFetch, toHex } from '@metamask/controller-utils';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { TransactionPayStrategy } from '../../constants';\nimport { projectLogger } from '../../logger';\nimport type {\n Amount,\n FiatRates,\n PayStrategyGetQuotesRequest,\n QuoteRequest,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n} from '../../types';\nimport { getFiatValueFromUsd, sumAmounts } from '../../utils/amounts';\nimport { getPayStrategiesConfig, getSlippage } from '../../utils/feature-flags';\nimport { calculateGasCost } from '../../utils/gas';\nimport {\n getGasStationCostInSourceTokenRaw,\n getGasStationEligibility,\n} from '../../utils/gas-station';\nimport { estimateQuoteGasLimits } from '../../utils/quote-gas';\nimport {\n getNativeToken,\n getTokenBalance,\n getTokenFiatRate,\n} from '../../utils/token';\nimport { isPredictWithdrawTransaction } from '../../utils/transaction';\nimport type { AcrossDestination } from './across-actions';\nimport { getAcrossDestination } from './across-actions';\nimport { hasUnsupportedTransactionAuthorizationList } from './authorization-list';\nimport { normalizeAcrossRequest } from './perps';\nimport { isAcrossQuoteRequest } from './requests';\nimport { getAcrossOrderedTransactions } from './transactions';\nimport type {\n AcrossAction,\n AcrossActionRequestBody,\n AcrossGasLimits,\n AcrossQuote,\n AcrossSwapApprovalResponse,\n} from './types';\n\nconst log = createModuleLogger(projectLogger, 'across-strategy');\n\nconst UNSUPPORTED_AUTHORIZATION_LIST_ERROR =\n 'Across does not support type-4/EIP-7702 authorization lists yet';\n\ntype AcrossQuoteWithoutMetaMask = Omit<AcrossQuote, 'metamask'>;\n\n/**\n * Fetch Across quotes.\n *\n * @param request - Request object.\n * @returns Array of quotes.\n */\nexport async function getAcrossQuotes(\n request: PayStrategyGetQuotesRequest,\n): Promise<TransactionPayQuote<AcrossQuote>[]> {\n const { requests } = request;\n\n log('Fetching quotes', requests);\n\n try {\n const normalizedRequests = requests.filter(isAcrossQuoteRequest);\n\n if (normalizedRequests.length === 0) {\n return [];\n }\n\n if (\n hasUnsupportedTransactionAuthorizationList(\n request.transaction,\n normalizedRequests,\n )\n ) {\n throw new Error(UNSUPPORTED_AUTHORIZATION_LIST_ERROR);\n }\n\n return await Promise.all(\n normalizedRequests.map((singleRequest) =>\n getQuoteWithGasStationHandling(singleRequest, request),\n ),\n );\n } catch (error) {\n log('Error fetching quotes', { error });\n throw new Error(`Failed to fetch Across quotes: ${String(error)}`);\n }\n}\n\nasync function getSingleQuote(\n request: QuoteRequest,\n fullRequest: PayStrategyGetQuotesRequest,\n): Promise<TransactionPayQuote<AcrossQuote>> {\n const { messenger, signal, transaction } = fullRequest;\n const normalizedRequest = normalizeAcrossRequest(request, transaction.type);\n const {\n from,\n isMaxAmount,\n sourceChainId,\n sourceTokenAddress,\n sourceTokenAmount,\n targetAmountMinimum,\n targetChainId,\n targetTokenAddress,\n } = normalizedRequest;\n\n const config = getPayStrategiesConfig(messenger);\n const slippageDecimal = getSlippage(\n messenger,\n sourceChainId,\n sourceTokenAddress,\n );\n\n const useExactInput = isMaxAmount\n ? true\n : normalizedRequest.isPostQuote === true;\n const amount = useExactInput ? sourceTokenAmount : targetAmountMinimum;\n const tradeType = useExactInput ? 'exactInput' : 'exactOutput';\n const destination = getAcrossDestinationForRequest(\n transaction,\n request,\n from,\n );\n\n const quote = await requestAcrossApproval({\n actions: destination.actions,\n amount,\n apiBase: config.across.apiBase,\n depositor: from,\n destinationChainId: targetChainId,\n inputToken: sourceTokenAddress,\n originChainId: sourceChainId,\n outputToken: targetTokenAddress,\n recipient: destination.recipient,\n signal,\n refundAddress: normalizedRequest.refundTo,\n slippage: slippageDecimal,\n tradeType,\n });\n\n const originalQuote: AcrossQuoteWithoutMetaMask = {\n quote,\n request: {\n actions: destination.actions,\n amount,\n tradeType,\n },\n };\n\n return await normalizeQuote(originalQuote, normalizedRequest, fullRequest);\n}\n\nfunction getAcrossDestinationForRequest(\n transaction: TransactionMeta,\n request: QuoteRequest,\n recipient: Hex,\n): AcrossDestination {\n if (request.isPostQuote) {\n return {\n actions: [],\n recipient,\n };\n }\n\n return getAcrossDestination(transaction, request);\n}\n\nasync function getQuoteWithGasStationHandling(\n request: QuoteRequest,\n fullRequest: PayStrategyGetQuotesRequest,\n): Promise<TransactionPayQuote<AcrossQuote>> {\n // Phase 1 uses the requested source amount to discover whether Across will\n // pay source-chain gas with the source token, and what the max gas cost is.\n // Phase 2 repeats the quote with that max gas cost reserved from the source\n // amount, so execution can fund both the Across deposit and token-paid gas.\n const phase1Quote = await getSingleQuote(request, fullRequest);\n\n if (\n (!request.isMaxAmount && !request.isPostQuote) ||\n !phase1Quote.fees.isSourceGasFeeToken\n ) {\n return phase1Quote;\n }\n\n const requiresSourceGasReservation =\n request.isPostQuote === true &&\n isPredictWithdrawTransaction(fullRequest.transaction);\n\n const adjustedSourceAmount = new BigNumber(request.sourceTokenAmount)\n .minus(phase1Quote.fees.sourceNetwork.max.raw)\n .integerValue(BigNumber.ROUND_DOWN);\n\n if (!adjustedSourceAmount.isGreaterThan(0)) {\n log('Insufficient balance after gas subtraction for Across quote');\n if (requiresSourceGasReservation) {\n throw new Error(\n 'Across Predict withdraw source amount cannot cover source gas fee token',\n );\n }\n return phase1Quote;\n }\n\n log('Subtracting gas from source for Across quote', {\n adjustedSourceAmount: adjustedSourceAmount.toString(10),\n gasCostRaw: phase1Quote.fees.sourceNetwork.max.raw,\n originalSourceAmount: request.sourceTokenAmount,\n });\n\n try {\n const phase2Quote = await getSingleQuote(\n {\n ...request,\n sourceTokenAmount: adjustedSourceAmount.toFixed(\n 0,\n BigNumber.ROUND_DOWN,\n ),\n },\n fullRequest,\n );\n\n if (!phase2Quote.fees.isSourceGasFeeToken) {\n log('Across phase 2 lost gas fee token eligibility');\n if (requiresSourceGasReservation) {\n throw new Error(\n 'Across Predict withdraw quote lost source gas fee token eligibility',\n );\n }\n return phase1Quote;\n }\n\n const phase2GasCost = new BigNumber(phase2Quote.fees.sourceNetwork.max.raw);\n\n if (\n adjustedSourceAmount\n .plus(phase2GasCost)\n .isGreaterThan(request.sourceTokenAmount)\n ) {\n log('Across phase 2 quote exceeds original source amount', {\n adjustedSourceAmount: adjustedSourceAmount.toString(10),\n gasCostRaw: phase2GasCost.toString(10),\n originalSourceAmount: request.sourceTokenAmount,\n });\n if (requiresSourceGasReservation) {\n throw new Error(\n 'Across Predict withdraw source gas fee token quote exceeds source amount',\n );\n }\n return phase1Quote;\n }\n\n return phase2Quote;\n } catch (error) {\n log(\n requiresSourceGasReservation\n ? 'Across phase 2 quote failed after source gas reservation'\n : 'Across phase 2 quote failed, falling back to phase 1',\n { error },\n );\n if (requiresSourceGasReservation) {\n throw error;\n }\n return phase1Quote;\n }\n}\n\ntype AcrossApprovalRequest = {\n actions: AcrossAction[];\n amount: string;\n apiBase: string;\n depositor: Hex;\n destinationChainId: Hex;\n inputToken: Hex;\n originChainId: Hex;\n outputToken: Hex;\n recipient: Hex;\n refundAddress?: Hex;\n signal?: AbortSignal;\n slippage?: number;\n tradeType: 'exactInput' | 'exactOutput';\n};\n\nasync function requestAcrossApproval(\n request: AcrossApprovalRequest,\n): Promise<AcrossSwapApprovalResponse> {\n const {\n actions,\n amount,\n apiBase,\n depositor,\n destinationChainId,\n inputToken,\n originChainId,\n outputToken,\n recipient,\n refundAddress,\n signal,\n slippage,\n tradeType,\n } = request;\n\n const params = new URLSearchParams();\n params.set('tradeType', tradeType);\n params.set('amount', amount);\n params.set('inputToken', inputToken);\n params.set('outputToken', outputToken);\n params.set('originChainId', String(parseInt(originChainId, 16)));\n params.set('destinationChainId', String(parseInt(destinationChainId, 16)));\n params.set('depositor', depositor);\n params.set('recipient', recipient);\n\n if (refundAddress !== undefined) {\n params.set('refundAddress', refundAddress);\n }\n\n if (slippage !== undefined) {\n params.set('slippage', String(slippage));\n }\n\n const body: AcrossActionRequestBody = { actions };\n const url = `${apiBase}/swap/approval?${params.toString()}`;\n const options: RequestInit = {\n body: JSON.stringify(body),\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n signal,\n };\n\n const response = await successfulFetch(url, options);\n\n return (await response.json()) as AcrossSwapApprovalResponse;\n}\n\nasync function normalizeQuote(\n original: AcrossQuoteWithoutMetaMask,\n request: QuoteRequest,\n fullRequest: PayStrategyGetQuotesRequest,\n): Promise<TransactionPayQuote<AcrossQuote>> {\n const { messenger } = fullRequest;\n const { quote } = original;\n\n const { usdToFiatRate, sourceFiatRate, targetFiatRate } = getFiatRates(\n messenger,\n quote,\n );\n\n const dustUsd = calculateDustUsd(quote, request, targetFiatRate);\n const dust = getFiatValueFromUsd(dustUsd, usdToFiatRate);\n\n const {\n gasLimits,\n is7702,\n isGasFeeToken: isSourceGasFeeToken,\n requiresAuthorizationList,\n sourceNetwork,\n } = await calculateSourceNetworkCost(\n quote,\n messenger,\n request,\n fullRequest.transaction,\n );\n\n const targetNetwork = getFiatValueFromUsd(new BigNumber(0), usdToFiatRate);\n\n const inputAmountRaw = quote.inputAmount ?? '0';\n const outputAmountRaw = new BigNumber(\n quote.expectedOutputAmount ??\n quote.minOutputAmount ??\n request.targetAmountMinimum ??\n '0',\n ).toString(10);\n\n const sourceAmount = getAmountFromTokenAmount({\n amountRaw: inputAmountRaw,\n decimals: quote.inputToken.decimals,\n fiatRate: sourceFiatRate,\n });\n\n const providerUsd = calculateProviderUsd(\n quote,\n inputAmountRaw,\n sourceFiatRate,\n targetFiatRate,\n quote.expectedOutputAmount,\n );\n const provider = getFiatValueFromUsd(providerUsd, usdToFiatRate);\n const metaMaskFee = getFiatValueFromUsd(\n new BigNumber(quote.fees?.app?.amountUsd ?? '0').abs(),\n usdToFiatRate,\n );\n\n const targetAmount = getAmountFromTokenAmount({\n amountRaw: outputAmountRaw,\n decimals: quote.outputToken.decimals,\n fiatRate: targetFiatRate,\n });\n\n const metamask = {\n gasLimits,\n is7702,\n ...(requiresAuthorizationList ? { requiresAuthorizationList } : {}),\n };\n\n return {\n dust,\n estimatedDuration: quote.expectedFillTime ?? 0,\n fees: {\n isSourceGasFeeToken,\n metaMask: metaMaskFee,\n provider,\n sourceNetwork,\n targetNetwork,\n },\n original: {\n ...original,\n metamask,\n },\n request,\n sourceAmount,\n targetAmount,\n strategy: TransactionPayStrategy.Across,\n } as TransactionPayQuote<AcrossQuote>;\n}\n\nfunction getFiatRates(\n messenger: TransactionPayControllerMessenger,\n quote: AcrossSwapApprovalResponse,\n): {\n sourceFiatRate: FiatRates;\n targetFiatRate: FiatRates;\n usdToFiatRate: BigNumber;\n} {\n const sourceFiatRate = getTokenFiatRate(\n messenger,\n quote.inputToken.address,\n toHex(quote.inputToken.chainId),\n );\n\n if (!sourceFiatRate) {\n throw new Error('Source token fiat rate not found');\n }\n\n const targetFiatRate =\n getTokenFiatRate(\n messenger,\n quote.outputToken.address,\n toHex(quote.outputToken.chainId),\n ) ?? sourceFiatRate;\n\n const usdToFiatRate = new BigNumber(sourceFiatRate.fiatRate).dividedBy(\n sourceFiatRate.usdRate,\n );\n\n return { sourceFiatRate, targetFiatRate, usdToFiatRate };\n}\n\nfunction calculateDustUsd(\n quote: AcrossSwapApprovalResponse,\n request: QuoteRequest,\n targetFiatRate: FiatRates,\n): BigNumber {\n const expectedOutputRaw = quote.expectedOutputAmount;\n\n if (expectedOutputRaw === undefined) {\n return new BigNumber(0);\n }\n\n const expectedOutput = new BigNumber(expectedOutputRaw);\n const minimumOutput = new BigNumber(\n quote.minOutputAmount ?? request.targetAmountMinimum ?? '0',\n );\n\n const dustRaw = expectedOutput.minus(minimumOutput).isNegative()\n ? new BigNumber(0)\n : expectedOutput.minus(minimumOutput);\n const dustHuman = dustRaw.shiftedBy(-quote.outputToken.decimals);\n\n return dustHuman.multipliedBy(targetFiatRate.usdRate);\n}\n\nfunction calculateProviderUsd(\n quote: AcrossSwapApprovalResponse,\n inputAmountRaw: string,\n sourceFiatRate: FiatRates,\n targetFiatRate: FiatRates,\n expectedOutputRaw?: string,\n): BigNumber {\n const totalFeeUsd = quote.fees?.total?.amountUsd;\n\n if (totalFeeUsd !== undefined) {\n return new BigNumber(totalFeeUsd).abs();\n }\n\n if (expectedOutputRaw === undefined) {\n return new BigNumber(0);\n }\n\n const expectedOutput = new BigNumber(expectedOutputRaw);\n\n if (expectedOutput.lte(0)) {\n return new BigNumber(0);\n }\n\n const inputAmountUsd = new BigNumber(inputAmountRaw)\n .shiftedBy(-quote.inputToken.decimals)\n .multipliedBy(sourceFiatRate.usdRate);\n const expectedOutputUsd = expectedOutput\n .shiftedBy(-quote.outputToken.decimals)\n .multipliedBy(targetFiatRate.usdRate);\n const providerFeeUsd = inputAmountUsd.minus(expectedOutputUsd);\n\n return providerFeeUsd.isNegative() ? new BigNumber(0) : providerFeeUsd;\n}\n\nfunction getAmountFromTokenAmount({\n amountRaw,\n decimals,\n fiatRate,\n}: {\n amountRaw: string;\n decimals: number;\n fiatRate: FiatRates;\n}): Amount {\n const rawValue = new BigNumber(amountRaw);\n const raw = rawValue.toString(10);\n\n const humanValue = rawValue.shiftedBy(-decimals);\n const human = humanValue.toString(10);\n\n const usd = humanValue.multipliedBy(fiatRate.usdRate).toString(10);\n const fiat = humanValue.multipliedBy(fiatRate.fiatRate).toString(10);\n\n return {\n fiat,\n human,\n raw,\n usd,\n };\n}\n\nasync function calculateSourceNetworkCost(\n quote: AcrossSwapApprovalResponse,\n messenger: TransactionPayControllerMessenger,\n request: QuoteRequest,\n transaction: TransactionMeta,\n): Promise<{\n sourceNetwork: TransactionPayQuote<AcrossQuote>['fees']['sourceNetwork'];\n gasLimits: AcrossGasLimits;\n isGasFeeToken?: boolean;\n is7702: boolean;\n requiresAuthorizationList?: true;\n}> {\n const acrossFallbackGas =\n getPayStrategiesConfig(messenger).across.fallbackGas;\n const { from, sourceChainId, sourceTokenAddress } = request;\n const orderedTransactions = getAcrossOrderedTransactions({ quote });\n const { swapTx } = quote;\n const swapChainId = toHex(swapTx.chainId);\n const gasEstimates = await estimateQuoteGasLimits({\n fallbackGas: acrossFallbackGas,\n messenger,\n transactions: orderedTransactions.map((orderedTransaction) => ({\n chainId: toHex(orderedTransaction.chainId),\n data: orderedTransaction.data,\n from,\n gas: orderedTransaction.gas,\n to: orderedTransaction.to,\n value: orderedTransaction.value ?? '0x0',\n })),\n });\n\n const { batchGasLimit, is7702, requiresAuthorizationList, totalGasEstimate } =\n gasEstimates;\n\n let sourceNetwork: TransactionPayQuote<AcrossQuote>['fees']['sourceNetwork'];\n let gasLimits: AcrossGasLimits;\n\n if (is7702) {\n if (!batchGasLimit) {\n throw new Error('Across combined batch gas estimate missing');\n }\n\n const estimate = calculateGasCost({\n chainId: swapChainId,\n gas: batchGasLimit.estimate,\n maxFeePerGas: swapTx.maxFeePerGas,\n maxPriorityFeePerGas: swapTx.maxPriorityFeePerGas,\n messenger,\n });\n const max = calculateGasCost({\n chainId: swapChainId,\n gas: batchGasLimit.max,\n isMax: true,\n maxFeePerGas: swapTx.maxFeePerGas,\n maxPriorityFeePerGas: swapTx.maxPriorityFeePerGas,\n messenger,\n });\n\n sourceNetwork = {\n estimate,\n max,\n };\n gasLimits = [\n {\n estimate: batchGasLimit.estimate,\n max: batchGasLimit.max,\n },\n ];\n } else {\n const transactionGasLimits = orderedTransactions.map(\n (orderedTransaction, index) => ({\n gasEstimate: gasEstimates.gasLimits[index],\n orderedTransaction,\n }),\n );\n\n const estimate = sumAmounts(\n transactionGasLimits.map(({ gasEstimate, orderedTransaction }) =>\n calculateGasCost({\n chainId: toHex(orderedTransaction.chainId),\n gas: gasEstimate.estimate,\n maxFeePerGas: orderedTransaction.maxFeePerGas,\n maxPriorityFeePerGas: orderedTransaction.maxPriorityFeePerGas,\n messenger,\n }),\n ),\n );\n\n const max = sumAmounts(\n transactionGasLimits.map(({ gasEstimate, orderedTransaction }) =>\n calculateGasCost({\n chainId: toHex(orderedTransaction.chainId),\n gas: gasEstimate.max,\n isMax: true,\n maxFeePerGas: orderedTransaction.maxFeePerGas,\n maxPriorityFeePerGas: orderedTransaction.maxPriorityFeePerGas,\n messenger,\n }),\n ),\n );\n\n sourceNetwork = {\n estimate,\n max,\n };\n gasLimits = transactionGasLimits.map(({ gasEstimate }) => ({\n estimate: gasEstimate.estimate,\n max: gasEstimate.max,\n }));\n }\n\n const result = {\n sourceNetwork,\n is7702,\n ...(requiresAuthorizationList ? { requiresAuthorizationList } : {}),\n gasLimits,\n totalGasEstimate,\n totalGasLimit: gasEstimates.totalGasLimit,\n };\n\n const finalResult = request.isPostQuote\n ? combinePostQuoteGas(result, transaction, swapTx, messenger)\n : result;\n\n const nativeBalance = getTokenBalance(\n messenger,\n from,\n sourceChainId,\n getNativeToken(sourceChainId),\n );\n const hasNativeBalance = new BigNumber(nativeBalance).isGreaterThanOrEqualTo(\n finalResult.sourceNetwork.max.raw,\n );\n\n if (hasNativeBalance) {\n return finalResult;\n }\n\n const gasStationEligibility = getGasStationEligibility(\n messenger,\n sourceChainId,\n );\n\n if (gasStationEligibility.isDisabledChain) {\n log('Skipping Across gas station as disabled chain', { sourceChainId });\n return finalResult;\n }\n\n if (!gasStationEligibility.chainSupportsGasStation) {\n log('Skipping Across gas station as chain does not support EIP-7702', {\n sourceChainId,\n });\n return finalResult;\n }\n\n const firstTransaction = orderedTransactions[0];\n\n const gasFeeTokenCost = await getGasStationCostInSourceTokenRaw({\n firstStepData: {\n data: firstTransaction.data,\n to: firstTransaction.to,\n value: firstTransaction.value,\n },\n messenger,\n request: {\n from,\n sourceChainId,\n sourceTokenAddress,\n },\n totalGasEstimate: finalResult.totalGasEstimate,\n totalItemCount: Math.max(\n orderedTransactions.length + (request.isPostQuote ? 1 : 0),\n finalResult.gasLimits.length,\n ),\n });\n\n if (!gasFeeTokenCost) {\n return finalResult;\n }\n\n log('Using gas fee token for Across source network', {\n gasFeeTokenCost,\n });\n\n return {\n isGasFeeToken: true,\n sourceNetwork: {\n estimate: gasFeeTokenCost,\n max: gasFeeTokenCost,\n },\n is7702: finalResult.is7702,\n ...(requiresAuthorizationList ? { requiresAuthorizationList } : {}),\n gasLimits: finalResult.gasLimits,\n };\n}\n\nfunction combinePostQuoteGas(\n gasResult: {\n sourceNetwork: TransactionPayQuote<AcrossQuote>['fees']['sourceNetwork'];\n gasLimits: AcrossGasLimits;\n is7702: boolean;\n requiresAuthorizationList?: true;\n totalGasEstimate: number;\n totalGasLimit: number;\n },\n transaction: TransactionMeta,\n swapTx: AcrossSwapApprovalResponse['swapTx'],\n messenger: TransactionPayControllerMessenger,\n): typeof gasResult {\n const originalTxGas = getOriginalTransactionGas(transaction);\n\n if (originalTxGas === undefined) {\n return gasResult;\n }\n\n const gasLimits = gasResult.is7702\n ? [\n {\n estimate: gasResult.gasLimits[0].estimate + originalTxGas,\n max: gasResult.gasLimits[0].max + originalTxGas,\n },\n ]\n : [\n {\n estimate: originalTxGas,\n max: originalTxGas,\n },\n ...gasResult.gasLimits,\n ];\n\n const totalGasEstimate = gasResult.totalGasEstimate + originalTxGas;\n const totalGasLimit = gasResult.totalGasLimit + originalTxGas;\n const originalSourceNetwork = calculateOriginalSourceNetworkCost({\n gas: originalTxGas,\n messenger,\n swapTx,\n transaction,\n });\n\n return {\n ...gasResult,\n sourceNetwork: {\n estimate: sumAmounts([\n gasResult.sourceNetwork.estimate,\n originalSourceNetwork.estimate,\n ]),\n max: sumAmounts([gasResult.sourceNetwork.max, originalSourceNetwork.max]),\n },\n gasLimits,\n totalGasEstimate,\n totalGasLimit,\n };\n}\n\nfunction getOriginalTransactionGas(\n transaction: TransactionMeta,\n): number | undefined {\n const nestedGas = transaction.nestedTransactions?.find((tx) => tx.gas)?.gas;\n const rawGas = nestedGas ?? transaction.txParams.gas;\n\n if (rawGas === undefined) {\n return undefined;\n }\n\n const gas = new BigNumber(rawGas);\n\n if (!gas.isFinite() || gas.isNaN() || !gas.isInteger() || gas.lte(0)) {\n return undefined;\n }\n\n return gas.toNumber();\n}\n\nfunction calculateOriginalSourceNetworkCost({\n gas,\n messenger,\n swapTx,\n transaction,\n}: {\n gas: number;\n messenger: TransactionPayControllerMessenger;\n swapTx: AcrossSwapApprovalResponse['swapTx'];\n transaction: TransactionMeta;\n}): TransactionPayQuote<AcrossQuote>['fees']['sourceNetwork'] {\n const originalTransactionWithGas = transaction.nestedTransactions?.find(\n (tx) => tx.gas,\n );\n const maxFeePerGas =\n originalTransactionWithGas?.maxFeePerGas ??\n transaction.txParams.maxFeePerGas;\n const maxPriorityFeePerGas =\n originalTransactionWithGas?.maxPriorityFeePerGas ??\n transaction.txParams.maxPriorityFeePerGas;\n\n return {\n estimate: calculateGasCost({\n chainId: transaction.chainId ?? toHex(swapTx.chainId),\n gas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n messenger,\n }),\n max: calculateGasCost({\n chainId: transaction.chainId ?? toHex(swapTx.chainId),\n gas,\n isMax: true,\n maxFeePerGas,\n maxPriorityFeePerGas,\n messenger,\n }),\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"across-quotes.d.cts","sourceRoot":"","sources":["../../../src/strategy/across/across-quotes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"across-quotes.d.cts","sourceRoot":"","sources":["../../../src/strategy/across/across-quotes.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAGV,2BAA2B,EAG3B,mBAAmB,EACpB,wBAAoB;AAqBrB,OAAO,KAAK,EAIV,WAAW,EAEZ,oBAAgB;AASjB;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC,CA8B7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"across-quotes.d.mts","sourceRoot":"","sources":["../../../src/strategy/across/across-quotes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"across-quotes.d.mts","sourceRoot":"","sources":["../../../src/strategy/across/across-quotes.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAGV,2BAA2B,EAG3B,mBAAmB,EACpB,wBAAoB;AAqBrB,OAAO,KAAK,EAIV,WAAW,EAEZ,oBAAgB;AASjB;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC,CA8B7C"}
|
|
@@ -9,7 +9,9 @@ import { calculateGasCost } from "../../utils/gas.mjs";
|
|
|
9
9
|
import { getGasStationCostInSourceTokenRaw, getGasStationEligibility } from "../../utils/gas-station.mjs";
|
|
10
10
|
import { estimateQuoteGasLimits } from "../../utils/quote-gas.mjs";
|
|
11
11
|
import { getNativeToken, getTokenBalance, getTokenFiatRate } from "../../utils/token.mjs";
|
|
12
|
+
import { isPredictWithdrawTransaction } from "../../utils/transaction.mjs";
|
|
12
13
|
import { getAcrossDestination } from "./across-actions.mjs";
|
|
14
|
+
import { hasUnsupportedTransactionAuthorizationList } from "./authorization-list.mjs";
|
|
13
15
|
import { normalizeAcrossRequest } from "./perps.mjs";
|
|
14
16
|
import { isAcrossQuoteRequest } from "./requests.mjs";
|
|
15
17
|
import { getAcrossOrderedTransactions } from "./transactions.mjs";
|
|
@@ -29,7 +31,7 @@ export async function getAcrossQuotes(request) {
|
|
|
29
31
|
if (normalizedRequests.length === 0) {
|
|
30
32
|
return [];
|
|
31
33
|
}
|
|
32
|
-
if (request.transaction
|
|
34
|
+
if (hasUnsupportedTransactionAuthorizationList(request.transaction, normalizedRequests)) {
|
|
33
35
|
throw new Error(UNSUPPORTED_AUTHORIZATION_LIST_ERROR);
|
|
34
36
|
}
|
|
35
37
|
return await Promise.all(normalizedRequests.map((singleRequest) => getQuoteWithGasStationHandling(singleRequest, request)));
|
|
@@ -45,9 +47,12 @@ async function getSingleQuote(request, fullRequest) {
|
|
|
45
47
|
const { from, isMaxAmount, sourceChainId, sourceTokenAddress, sourceTokenAmount, targetAmountMinimum, targetChainId, targetTokenAddress, } = normalizedRequest;
|
|
46
48
|
const config = getPayStrategiesConfig(messenger);
|
|
47
49
|
const slippageDecimal = getSlippage(messenger, sourceChainId, sourceTokenAddress);
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
const useExactInput = isMaxAmount
|
|
51
|
+
? true
|
|
52
|
+
: normalizedRequest.isPostQuote === true;
|
|
53
|
+
const amount = useExactInput ? sourceTokenAmount : targetAmountMinimum;
|
|
54
|
+
const tradeType = useExactInput ? 'exactInput' : 'exactOutput';
|
|
55
|
+
const destination = getAcrossDestinationForRequest(transaction, request, from);
|
|
51
56
|
const quote = await requestAcrossApproval({
|
|
52
57
|
actions: destination.actions,
|
|
53
58
|
amount,
|
|
@@ -59,31 +64,52 @@ async function getSingleQuote(request, fullRequest) {
|
|
|
59
64
|
outputToken: targetTokenAddress,
|
|
60
65
|
recipient: destination.recipient,
|
|
61
66
|
signal,
|
|
67
|
+
refundAddress: normalizedRequest.refundTo,
|
|
62
68
|
slippage: slippageDecimal,
|
|
63
69
|
tradeType,
|
|
64
70
|
});
|
|
65
71
|
const originalQuote = {
|
|
66
72
|
quote,
|
|
67
73
|
request: {
|
|
74
|
+
actions: destination.actions,
|
|
68
75
|
amount,
|
|
69
76
|
tradeType,
|
|
70
77
|
},
|
|
71
78
|
};
|
|
72
79
|
return await normalizeQuote(originalQuote, normalizedRequest, fullRequest);
|
|
73
80
|
}
|
|
81
|
+
function getAcrossDestinationForRequest(transaction, request, recipient) {
|
|
82
|
+
if (request.isPostQuote) {
|
|
83
|
+
return {
|
|
84
|
+
actions: [],
|
|
85
|
+
recipient,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return getAcrossDestination(transaction, request);
|
|
89
|
+
}
|
|
74
90
|
async function getQuoteWithGasStationHandling(request, fullRequest) {
|
|
91
|
+
// Phase 1 uses the requested source amount to discover whether Across will
|
|
92
|
+
// pay source-chain gas with the source token, and what the max gas cost is.
|
|
93
|
+
// Phase 2 repeats the quote with that max gas cost reserved from the source
|
|
94
|
+
// amount, so execution can fund both the Across deposit and token-paid gas.
|
|
75
95
|
const phase1Quote = await getSingleQuote(request, fullRequest);
|
|
76
|
-
if (!request.isMaxAmount
|
|
96
|
+
if ((!request.isMaxAmount && !request.isPostQuote) ||
|
|
97
|
+
!phase1Quote.fees.isSourceGasFeeToken) {
|
|
77
98
|
return phase1Quote;
|
|
78
99
|
}
|
|
100
|
+
const requiresSourceGasReservation = request.isPostQuote === true &&
|
|
101
|
+
isPredictWithdrawTransaction(fullRequest.transaction);
|
|
79
102
|
const adjustedSourceAmount = new BigNumber(request.sourceTokenAmount)
|
|
80
103
|
.minus(phase1Quote.fees.sourceNetwork.max.raw)
|
|
81
104
|
.integerValue(BigNumber.ROUND_DOWN);
|
|
82
105
|
if (!adjustedSourceAmount.isGreaterThan(0)) {
|
|
83
|
-
log('Insufficient balance after gas subtraction for Across
|
|
106
|
+
log('Insufficient balance after gas subtraction for Across quote');
|
|
107
|
+
if (requiresSourceGasReservation) {
|
|
108
|
+
throw new Error('Across Predict withdraw source amount cannot cover source gas fee token');
|
|
109
|
+
}
|
|
84
110
|
return phase1Quote;
|
|
85
111
|
}
|
|
86
|
-
log('Subtracting gas from source for Across
|
|
112
|
+
log('Subtracting gas from source for Across quote', {
|
|
87
113
|
adjustedSourceAmount: adjustedSourceAmount.toString(10),
|
|
88
114
|
gasCostRaw: phase1Quote.fees.sourceNetwork.max.raw,
|
|
89
115
|
originalSourceAmount: request.sourceTokenAmount,
|
|
@@ -94,29 +120,40 @@ async function getQuoteWithGasStationHandling(request, fullRequest) {
|
|
|
94
120
|
sourceTokenAmount: adjustedSourceAmount.toFixed(0, BigNumber.ROUND_DOWN),
|
|
95
121
|
}, fullRequest);
|
|
96
122
|
if (!phase2Quote.fees.isSourceGasFeeToken) {
|
|
97
|
-
log('Across
|
|
123
|
+
log('Across phase 2 lost gas fee token eligibility');
|
|
124
|
+
if (requiresSourceGasReservation) {
|
|
125
|
+
throw new Error('Across Predict withdraw quote lost source gas fee token eligibility');
|
|
126
|
+
}
|
|
98
127
|
return phase1Quote;
|
|
99
128
|
}
|
|
100
129
|
const phase2GasCost = new BigNumber(phase2Quote.fees.sourceNetwork.max.raw);
|
|
101
130
|
if (adjustedSourceAmount
|
|
102
131
|
.plus(phase2GasCost)
|
|
103
132
|
.isGreaterThan(request.sourceTokenAmount)) {
|
|
104
|
-
log('Across
|
|
133
|
+
log('Across phase 2 quote exceeds original source amount', {
|
|
105
134
|
adjustedSourceAmount: adjustedSourceAmount.toString(10),
|
|
106
135
|
gasCostRaw: phase2GasCost.toString(10),
|
|
107
136
|
originalSourceAmount: request.sourceTokenAmount,
|
|
108
137
|
});
|
|
138
|
+
if (requiresSourceGasReservation) {
|
|
139
|
+
throw new Error('Across Predict withdraw source gas fee token quote exceeds source amount');
|
|
140
|
+
}
|
|
109
141
|
return phase1Quote;
|
|
110
142
|
}
|
|
111
143
|
return phase2Quote;
|
|
112
144
|
}
|
|
113
145
|
catch (error) {
|
|
114
|
-
log(
|
|
146
|
+
log(requiresSourceGasReservation
|
|
147
|
+
? 'Across phase 2 quote failed after source gas reservation'
|
|
148
|
+
: 'Across phase 2 quote failed, falling back to phase 1', { error });
|
|
149
|
+
if (requiresSourceGasReservation) {
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
115
152
|
return phase1Quote;
|
|
116
153
|
}
|
|
117
154
|
}
|
|
118
155
|
async function requestAcrossApproval(request) {
|
|
119
|
-
const { actions, amount, apiBase, depositor, destinationChainId, inputToken, originChainId, outputToken, recipient, signal, slippage, tradeType, } = request;
|
|
156
|
+
const { actions, amount, apiBase, depositor, destinationChainId, inputToken, originChainId, outputToken, recipient, refundAddress, signal, slippage, tradeType, } = request;
|
|
120
157
|
const params = new URLSearchParams();
|
|
121
158
|
params.set('tradeType', tradeType);
|
|
122
159
|
params.set('amount', amount);
|
|
@@ -126,6 +163,9 @@ async function requestAcrossApproval(request) {
|
|
|
126
163
|
params.set('destinationChainId', String(parseInt(destinationChainId, 16)));
|
|
127
164
|
params.set('depositor', depositor);
|
|
128
165
|
params.set('recipient', recipient);
|
|
166
|
+
if (refundAddress !== undefined) {
|
|
167
|
+
params.set('refundAddress', refundAddress);
|
|
168
|
+
}
|
|
129
169
|
if (slippage !== undefined) {
|
|
130
170
|
params.set('slippage', String(slippage));
|
|
131
171
|
}
|
|
@@ -149,7 +189,7 @@ async function normalizeQuote(original, request, fullRequest) {
|
|
|
149
189
|
const { usdToFiatRate, sourceFiatRate, targetFiatRate } = getFiatRates(messenger, quote);
|
|
150
190
|
const dustUsd = calculateDustUsd(quote, request, targetFiatRate);
|
|
151
191
|
const dust = getFiatValueFromUsd(dustUsd, usdToFiatRate);
|
|
152
|
-
const { gasLimits, is7702, isGasFeeToken: isSourceGasFeeToken, requiresAuthorizationList, sourceNetwork, } = await calculateSourceNetworkCost(quote, messenger, request);
|
|
192
|
+
const { gasLimits, is7702, isGasFeeToken: isSourceGasFeeToken, requiresAuthorizationList, sourceNetwork, } = await calculateSourceNetworkCost(quote, messenger, request, fullRequest.transaction);
|
|
153
193
|
const targetNetwork = getFiatValueFromUsd(new BigNumber(0), usdToFiatRate);
|
|
154
194
|
const inputAmountRaw = quote.inputAmount ?? '0';
|
|
155
195
|
const outputAmountRaw = new BigNumber(quote.expectedOutputAmount ??
|
|
@@ -251,7 +291,7 @@ function getAmountFromTokenAmount({ amountRaw, decimals, fiatRate, }) {
|
|
|
251
291
|
usd,
|
|
252
292
|
};
|
|
253
293
|
}
|
|
254
|
-
async function calculateSourceNetworkCost(quote, messenger, request) {
|
|
294
|
+
async function calculateSourceNetworkCost(quote, messenger, request, transaction) {
|
|
255
295
|
const acrossFallbackGas = getPayStrategiesConfig(messenger).across.fallbackGas;
|
|
256
296
|
const { from, sourceChainId, sourceTokenAddress } = request;
|
|
257
297
|
const orderedTransactions = getAcrossOrderedTransactions({ quote });
|
|
@@ -260,13 +300,13 @@ async function calculateSourceNetworkCost(quote, messenger, request) {
|
|
|
260
300
|
const gasEstimates = await estimateQuoteGasLimits({
|
|
261
301
|
fallbackGas: acrossFallbackGas,
|
|
262
302
|
messenger,
|
|
263
|
-
transactions: orderedTransactions.map((
|
|
264
|
-
chainId: toHex(
|
|
265
|
-
data:
|
|
303
|
+
transactions: orderedTransactions.map((orderedTransaction) => ({
|
|
304
|
+
chainId: toHex(orderedTransaction.chainId),
|
|
305
|
+
data: orderedTransaction.data,
|
|
266
306
|
from,
|
|
267
|
-
gas:
|
|
268
|
-
to:
|
|
269
|
-
value:
|
|
307
|
+
gas: orderedTransaction.gas,
|
|
308
|
+
to: orderedTransaction.to,
|
|
309
|
+
value: orderedTransaction.value ?? '0x0',
|
|
270
310
|
})),
|
|
271
311
|
});
|
|
272
312
|
const { batchGasLimit, is7702, requiresAuthorizationList, totalGasEstimate } = gasEstimates;
|
|
@@ -303,23 +343,23 @@ async function calculateSourceNetworkCost(quote, messenger, request) {
|
|
|
303
343
|
];
|
|
304
344
|
}
|
|
305
345
|
else {
|
|
306
|
-
const transactionGasLimits = orderedTransactions.map((
|
|
346
|
+
const transactionGasLimits = orderedTransactions.map((orderedTransaction, index) => ({
|
|
307
347
|
gasEstimate: gasEstimates.gasLimits[index],
|
|
308
|
-
|
|
348
|
+
orderedTransaction,
|
|
309
349
|
}));
|
|
310
|
-
const estimate = sumAmounts(transactionGasLimits.map(({ gasEstimate,
|
|
311
|
-
chainId: toHex(
|
|
350
|
+
const estimate = sumAmounts(transactionGasLimits.map(({ gasEstimate, orderedTransaction }) => calculateGasCost({
|
|
351
|
+
chainId: toHex(orderedTransaction.chainId),
|
|
312
352
|
gas: gasEstimate.estimate,
|
|
313
|
-
maxFeePerGas:
|
|
314
|
-
maxPriorityFeePerGas:
|
|
353
|
+
maxFeePerGas: orderedTransaction.maxFeePerGas,
|
|
354
|
+
maxPriorityFeePerGas: orderedTransaction.maxPriorityFeePerGas,
|
|
315
355
|
messenger,
|
|
316
356
|
})));
|
|
317
|
-
const max = sumAmounts(transactionGasLimits.map(({ gasEstimate,
|
|
318
|
-
chainId: toHex(
|
|
357
|
+
const max = sumAmounts(transactionGasLimits.map(({ gasEstimate, orderedTransaction }) => calculateGasCost({
|
|
358
|
+
chainId: toHex(orderedTransaction.chainId),
|
|
319
359
|
gas: gasEstimate.max,
|
|
320
360
|
isMax: true,
|
|
321
|
-
maxFeePerGas:
|
|
322
|
-
maxPriorityFeePerGas:
|
|
361
|
+
maxFeePerGas: orderedTransaction.maxFeePerGas,
|
|
362
|
+
maxPriorityFeePerGas: orderedTransaction.maxPriorityFeePerGas,
|
|
323
363
|
messenger,
|
|
324
364
|
})));
|
|
325
365
|
sourceNetwork = {
|
|
@@ -336,21 +376,27 @@ async function calculateSourceNetworkCost(quote, messenger, request) {
|
|
|
336
376
|
is7702,
|
|
337
377
|
...(requiresAuthorizationList ? { requiresAuthorizationList } : {}),
|
|
338
378
|
gasLimits,
|
|
379
|
+
totalGasEstimate,
|
|
380
|
+
totalGasLimit: gasEstimates.totalGasLimit,
|
|
339
381
|
};
|
|
382
|
+
const finalResult = request.isPostQuote
|
|
383
|
+
? combinePostQuoteGas(result, transaction, swapTx, messenger)
|
|
384
|
+
: result;
|
|
340
385
|
const nativeBalance = getTokenBalance(messenger, from, sourceChainId, getNativeToken(sourceChainId));
|
|
341
|
-
|
|
342
|
-
|
|
386
|
+
const hasNativeBalance = new BigNumber(nativeBalance).isGreaterThanOrEqualTo(finalResult.sourceNetwork.max.raw);
|
|
387
|
+
if (hasNativeBalance) {
|
|
388
|
+
return finalResult;
|
|
343
389
|
}
|
|
344
390
|
const gasStationEligibility = getGasStationEligibility(messenger, sourceChainId);
|
|
345
391
|
if (gasStationEligibility.isDisabledChain) {
|
|
346
392
|
log('Skipping Across gas station as disabled chain', { sourceChainId });
|
|
347
|
-
return
|
|
393
|
+
return finalResult;
|
|
348
394
|
}
|
|
349
395
|
if (!gasStationEligibility.chainSupportsGasStation) {
|
|
350
396
|
log('Skipping Across gas station as chain does not support EIP-7702', {
|
|
351
397
|
sourceChainId,
|
|
352
398
|
});
|
|
353
|
-
return
|
|
399
|
+
return finalResult;
|
|
354
400
|
}
|
|
355
401
|
const firstTransaction = orderedTransactions[0];
|
|
356
402
|
const gasFeeTokenCost = await getGasStationCostInSourceTokenRaw({
|
|
@@ -365,11 +411,11 @@ async function calculateSourceNetworkCost(quote, messenger, request) {
|
|
|
365
411
|
sourceChainId,
|
|
366
412
|
sourceTokenAddress,
|
|
367
413
|
},
|
|
368
|
-
totalGasEstimate,
|
|
369
|
-
totalItemCount: Math.max(orderedTransactions.length, gasLimits.length),
|
|
414
|
+
totalGasEstimate: finalResult.totalGasEstimate,
|
|
415
|
+
totalItemCount: Math.max(orderedTransactions.length + (request.isPostQuote ? 1 : 0), finalResult.gasLimits.length),
|
|
370
416
|
});
|
|
371
417
|
if (!gasFeeTokenCost) {
|
|
372
|
-
return
|
|
418
|
+
return finalResult;
|
|
373
419
|
}
|
|
374
420
|
log('Using gas fee token for Across source network', {
|
|
375
421
|
gasFeeTokenCost,
|
|
@@ -380,9 +426,86 @@ async function calculateSourceNetworkCost(quote, messenger, request) {
|
|
|
380
426
|
estimate: gasFeeTokenCost,
|
|
381
427
|
max: gasFeeTokenCost,
|
|
382
428
|
},
|
|
383
|
-
is7702,
|
|
429
|
+
is7702: finalResult.is7702,
|
|
384
430
|
...(requiresAuthorizationList ? { requiresAuthorizationList } : {}),
|
|
431
|
+
gasLimits: finalResult.gasLimits,
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
function combinePostQuoteGas(gasResult, transaction, swapTx, messenger) {
|
|
435
|
+
const originalTxGas = getOriginalTransactionGas(transaction);
|
|
436
|
+
if (originalTxGas === undefined) {
|
|
437
|
+
return gasResult;
|
|
438
|
+
}
|
|
439
|
+
const gasLimits = gasResult.is7702
|
|
440
|
+
? [
|
|
441
|
+
{
|
|
442
|
+
estimate: gasResult.gasLimits[0].estimate + originalTxGas,
|
|
443
|
+
max: gasResult.gasLimits[0].max + originalTxGas,
|
|
444
|
+
},
|
|
445
|
+
]
|
|
446
|
+
: [
|
|
447
|
+
{
|
|
448
|
+
estimate: originalTxGas,
|
|
449
|
+
max: originalTxGas,
|
|
450
|
+
},
|
|
451
|
+
...gasResult.gasLimits,
|
|
452
|
+
];
|
|
453
|
+
const totalGasEstimate = gasResult.totalGasEstimate + originalTxGas;
|
|
454
|
+
const totalGasLimit = gasResult.totalGasLimit + originalTxGas;
|
|
455
|
+
const originalSourceNetwork = calculateOriginalSourceNetworkCost({
|
|
456
|
+
gas: originalTxGas,
|
|
457
|
+
messenger,
|
|
458
|
+
swapTx,
|
|
459
|
+
transaction,
|
|
460
|
+
});
|
|
461
|
+
return {
|
|
462
|
+
...gasResult,
|
|
463
|
+
sourceNetwork: {
|
|
464
|
+
estimate: sumAmounts([
|
|
465
|
+
gasResult.sourceNetwork.estimate,
|
|
466
|
+
originalSourceNetwork.estimate,
|
|
467
|
+
]),
|
|
468
|
+
max: sumAmounts([gasResult.sourceNetwork.max, originalSourceNetwork.max]),
|
|
469
|
+
},
|
|
385
470
|
gasLimits,
|
|
471
|
+
totalGasEstimate,
|
|
472
|
+
totalGasLimit,
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
function getOriginalTransactionGas(transaction) {
|
|
476
|
+
const nestedGas = transaction.nestedTransactions?.find((tx) => tx.gas)?.gas;
|
|
477
|
+
const rawGas = nestedGas ?? transaction.txParams.gas;
|
|
478
|
+
if (rawGas === undefined) {
|
|
479
|
+
return undefined;
|
|
480
|
+
}
|
|
481
|
+
const gas = new BigNumber(rawGas);
|
|
482
|
+
if (!gas.isFinite() || gas.isNaN() || !gas.isInteger() || gas.lte(0)) {
|
|
483
|
+
return undefined;
|
|
484
|
+
}
|
|
485
|
+
return gas.toNumber();
|
|
486
|
+
}
|
|
487
|
+
function calculateOriginalSourceNetworkCost({ gas, messenger, swapTx, transaction, }) {
|
|
488
|
+
const originalTransactionWithGas = transaction.nestedTransactions?.find((tx) => tx.gas);
|
|
489
|
+
const maxFeePerGas = originalTransactionWithGas?.maxFeePerGas ??
|
|
490
|
+
transaction.txParams.maxFeePerGas;
|
|
491
|
+
const maxPriorityFeePerGas = originalTransactionWithGas?.maxPriorityFeePerGas ??
|
|
492
|
+
transaction.txParams.maxPriorityFeePerGas;
|
|
493
|
+
return {
|
|
494
|
+
estimate: calculateGasCost({
|
|
495
|
+
chainId: transaction.chainId ?? toHex(swapTx.chainId),
|
|
496
|
+
gas,
|
|
497
|
+
maxFeePerGas,
|
|
498
|
+
maxPriorityFeePerGas,
|
|
499
|
+
messenger,
|
|
500
|
+
}),
|
|
501
|
+
max: calculateGasCost({
|
|
502
|
+
chainId: transaction.chainId ?? toHex(swapTx.chainId),
|
|
503
|
+
gas,
|
|
504
|
+
isMax: true,
|
|
505
|
+
maxFeePerGas,
|
|
506
|
+
maxPriorityFeePerGas,
|
|
507
|
+
messenger,
|
|
508
|
+
}),
|
|
386
509
|
};
|
|
387
510
|
}
|
|
388
511
|
//# sourceMappingURL=across-quotes.mjs.map
|