@metamask/transaction-controller 29.0.0 → 29.0.2
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 +20 -1
- package/dist/TransactionController.js +3 -3
- package/dist/TransactionController.mjs +2 -2
- package/dist/{chunk-MDRMMUMS.mjs → chunk-AHSDUIMT.mjs} +4 -2
- package/dist/chunk-AHSDUIMT.mjs.map +1 -0
- package/dist/{chunk-7TPXSDXL.mjs → chunk-FBCFML64.mjs} +83 -81
- package/dist/chunk-FBCFML64.mjs.map +1 -0
- package/dist/{chunk-X3KACH5P.js → chunk-IT3SYNZ6.js} +4 -2
- package/dist/chunk-IT3SYNZ6.js.map +1 -0
- package/dist/{chunk-N55SEKK7.js → chunk-IXUOEWWL.js} +84 -82
- package/dist/chunk-IXUOEWWL.js.map +1 -0
- package/dist/index.js +3 -3
- package/dist/index.mjs +2 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/TransactionController.d.ts +4 -2
- package/dist/types/TransactionController.d.ts.map +1 -1
- package/dist/utils/simulation.js +2 -2
- package/dist/utils/simulation.mjs +1 -1
- package/package.json +3 -3
- package/dist/chunk-7TPXSDXL.mjs.map +0 -1
- package/dist/chunk-MDRMMUMS.mjs.map +0 -1
- package/dist/chunk-N55SEKK7.js.map +0 -1
- package/dist/chunk-X3KACH5P.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [29.0.2]
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- fix incorrect token balance changes for simulations of multiple tokens that include an NFT mint ([#4290](https://github.com/MetaMask/core/pull/4290))
|
|
15
|
+
|
|
16
|
+
## [29.0.1]
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Bump `@metamask/gas-fee-controller` to `^15.1.2` ([#4275](https://github.com/MetaMask/core/pull/4275))
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- approveTransaction was throwing away the raw signed transaction that signTransaction was adding to the metadata.
|
|
25
|
+
This was causing some transaction with low gas to appear as "failed" when in fact they were still pending. ([#4255](https://github.com/MetaMask/core/pull/4255))
|
|
26
|
+
|
|
10
27
|
## [29.0.0]
|
|
11
28
|
|
|
12
29
|
### Added
|
|
@@ -816,7 +833,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
816
833
|
|
|
817
834
|
All changes listed after this point were applied to this package following the monorepo conversion.
|
|
818
835
|
|
|
819
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@29.0.
|
|
836
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@29.0.2...HEAD
|
|
837
|
+
[29.0.2]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@29.0.1...@metamask/transaction-controller@29.0.2
|
|
838
|
+
[29.0.1]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@29.0.0...@metamask/transaction-controller@29.0.1
|
|
820
839
|
[29.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@28.1.1...@metamask/transaction-controller@29.0.0
|
|
821
840
|
[28.1.1]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@28.1.0...@metamask/transaction-controller@28.1.1
|
|
822
841
|
[28.1.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@28.0.0...@metamask/transaction-controller@28.1.0
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkIXUOEWWLjs = require('./chunk-IXUOEWWL.js');
|
|
8
8
|
require('./chunk-ZNZEJDOE.js');
|
|
9
|
-
require('./chunk-
|
|
9
|
+
require('./chunk-IT3SYNZ6.js');
|
|
10
10
|
require('./chunk-KT6UAKBB.js');
|
|
11
11
|
require('./chunk-SD6CWFDF.js');
|
|
12
12
|
require('./chunk-VH47Q6TS.js');
|
|
@@ -41,5 +41,5 @@ require('./chunk-Z4BLTVTB.js');
|
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
exports.ApprovalState =
|
|
44
|
+
exports.ApprovalState = _chunkIXUOEWWLjs.ApprovalState; exports.CANCEL_RATE = _chunkIXUOEWWLjs.CANCEL_RATE; exports.HARDFORK = _chunkIXUOEWWLjs.HARDFORK; exports.SPEED_UP_RATE = _chunkIXUOEWWLjs.SPEED_UP_RATE; exports.TransactionController = _chunkIXUOEWWLjs.TransactionController;
|
|
45
45
|
//# sourceMappingURL=TransactionController.js.map
|
|
@@ -4,9 +4,9 @@ import {
|
|
|
4
4
|
HARDFORK,
|
|
5
5
|
SPEED_UP_RATE,
|
|
6
6
|
TransactionController
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-FBCFML64.mjs";
|
|
8
8
|
import "./chunk-NHRBO3LU.mjs";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-AHSDUIMT.mjs";
|
|
10
10
|
import "./chunk-K4KOSAGM.mjs";
|
|
11
11
|
import "./chunk-KG4UW4K4.mjs";
|
|
12
12
|
import "./chunk-NM6OYEPP.mjs";
|
|
@@ -178,12 +178,14 @@ async function getTokenBalanceChanges(request, events) {
|
|
|
178
178
|
if (response.transactions.length !== transactions.length) {
|
|
179
179
|
throw new SimulationInvalidResponseError();
|
|
180
180
|
}
|
|
181
|
+
let prevBalanceTxIndex = 0;
|
|
181
182
|
return [...balanceTxs.after.keys()].map((token, index) => {
|
|
182
183
|
const previousBalanceCheckSkipped = !balanceTxs.before.get(token);
|
|
183
184
|
const previousBalance = previousBalanceCheckSkipped ? "0x0" : getValueFromBalanceTransaction(
|
|
184
185
|
request.from,
|
|
185
186
|
token,
|
|
186
|
-
|
|
187
|
+
// eslint-disable-next-line no-plusplus
|
|
188
|
+
response.transactions[prevBalanceTxIndex++]
|
|
187
189
|
);
|
|
188
190
|
const newBalance = getValueFromBalanceTransaction(
|
|
189
191
|
request.from,
|
|
@@ -347,4 +349,4 @@ export {
|
|
|
347
349
|
getSimulationData,
|
|
348
350
|
getEvents
|
|
349
351
|
};
|
|
350
|
-
//# sourceMappingURL=chunk-
|
|
352
|
+
//# sourceMappingURL=chunk-AHSDUIMT.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/simulation.ts"],"sourcesContent":["import type { Fragment, LogDescription, Result } from '@ethersproject/abi';\nimport { Interface } from '@ethersproject/abi';\nimport { hexToBN, toHex } from '@metamask/controller-utils';\nimport { abiERC20, abiERC721, abiERC1155 } from '@metamask/metamask-eth-abis';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport {\n ABI_SIMULATION_ERC20_WRAPPED,\n ABI_SIMULATION_ERC721_LEGACY,\n} from '../constants';\nimport {\n SimulationError,\n SimulationInvalidResponseError,\n SimulationRevertedError,\n} from '../errors';\nimport { projectLogger } from '../logger';\nimport type {\n SimulationBalanceChange,\n SimulationData,\n SimulationTokenBalanceChange,\n SimulationToken,\n} from '../types';\nimport { SimulationTokenStandard } from '../types';\nimport { simulateTransactions } from './simulation-api';\nimport type {\n SimulationResponseLog,\n SimulationRequestTransaction,\n SimulationResponse,\n SimulationResponseCallTrace,\n SimulationResponseTransaction,\n} from './simulation-api';\n\nexport enum SupportedToken {\n ERC20 = 'erc20',\n ERC721 = 'erc721',\n ERC1155 = 'erc1155',\n ERC20_WRAPPED = 'erc20Wrapped',\n ERC721_LEGACY = 'erc721Legacy',\n}\n\ntype ABI = Fragment[];\n\nexport type GetSimulationDataRequest = {\n chainId: Hex;\n from: Hex;\n to?: Hex;\n value?: Hex;\n data?: Hex;\n};\n\ntype ParsedEvent = {\n contractAddress: Hex;\n tokenStandard: SimulationTokenStandard;\n name: string;\n args: Record<string, Hex | Hex[]>;\n abi: ABI;\n};\n\nconst log = createModuleLogger(projectLogger, 'simulation');\n\nconst SUPPORTED_EVENTS = [\n 'Transfer',\n 'TransferSingle',\n 'TransferBatch',\n 'Deposit',\n 'Withdrawal',\n];\n\nconst SUPPORTED_TOKEN_ABIS = {\n [SupportedToken.ERC20]: {\n abi: abiERC20,\n standard: SimulationTokenStandard.erc20,\n },\n [SupportedToken.ERC721]: {\n abi: abiERC721,\n standard: SimulationTokenStandard.erc721,\n },\n [SupportedToken.ERC1155]: {\n abi: abiERC1155,\n standard: SimulationTokenStandard.erc1155,\n },\n [SupportedToken.ERC20_WRAPPED]: {\n abi: ABI_SIMULATION_ERC20_WRAPPED,\n standard: SimulationTokenStandard.erc20,\n },\n [SupportedToken.ERC721_LEGACY]: {\n abi: ABI_SIMULATION_ERC721_LEGACY,\n standard: SimulationTokenStandard.erc721,\n },\n};\n\nconst REVERTED_ERRORS = ['execution reverted', 'insufficient funds for gas'];\n\ntype BalanceTransactionMap = Map<SimulationToken, SimulationRequestTransaction>;\n\n/**\n * Generate simulation data for a transaction.\n * @param request - The transaction to simulate.\n * @param request.chainId - The chain ID of the transaction.\n * @param request.from - The sender of the transaction.\n * @param request.to - The recipient of the transaction.\n * @param request.value - The value of the transaction.\n * @param request.data - The data of the transaction.\n * @returns The simulation data.\n */\nexport async function getSimulationData(\n request: GetSimulationDataRequest,\n): Promise<SimulationData> {\n const { chainId, from, to, value, data } = request;\n\n log('Getting simulation data', request);\n\n try {\n const response = await simulateTransactions(chainId, {\n transactions: [\n {\n data,\n from,\n maxFeePerGas: '0x0',\n maxPriorityFeePerGas: '0x0',\n to,\n value,\n },\n ],\n withCallTrace: true,\n withLogs: true,\n });\n\n const transactionError = response.transactions?.[0]?.error;\n\n if (transactionError) {\n throw new SimulationError(transactionError);\n }\n\n const nativeBalanceChange = getNativeBalanceChange(request.from, response);\n const events = getEvents(response);\n\n log('Parsed events', events);\n\n const tokenBalanceChanges = await getTokenBalanceChanges(request, events);\n\n return {\n nativeBalanceChange,\n tokenBalanceChanges,\n };\n } catch (error) {\n log('Failed to get simulation data', error, request);\n\n let simulationError = error as SimulationError;\n\n if (\n REVERTED_ERRORS.some((revertErrorMessage) =>\n simulationError.message?.includes(revertErrorMessage),\n )\n ) {\n simulationError = new SimulationRevertedError();\n }\n\n const { code, message } = simulationError;\n\n return {\n tokenBalanceChanges: [],\n error: {\n code,\n message,\n },\n };\n }\n}\n\n/**\n * Extract the native balance change from a simulation response.\n * @param userAddress - The user's account address.\n * @param response - The simulation response.\n * @returns The native balance change or undefined if unchanged.\n */\nfunction getNativeBalanceChange(\n userAddress: Hex,\n response: SimulationResponse,\n): SimulationBalanceChange | undefined {\n const transactionResponse = response.transactions[0];\n\n /* istanbul ignore next */\n if (!transactionResponse) {\n return undefined;\n }\n\n const { stateDiff } = transactionResponse;\n const previousBalance = stateDiff?.pre?.[userAddress]?.balance;\n const newBalance = stateDiff?.post?.[userAddress]?.balance;\n\n if (!previousBalance || !newBalance) {\n return undefined;\n }\n\n return getSimulationBalanceChange(previousBalance, newBalance);\n}\n\n/**\n * Extract events from a simulation response.\n * @param response - The simulation response.\n * @returns The parsed events.\n */\nexport function getEvents(response: SimulationResponse): ParsedEvent[] {\n /* istanbul ignore next */\n const logs = extractLogs(\n response.transactions[0]?.callTrace ?? ({} as SimulationResponseCallTrace),\n );\n\n log('Extracted logs', logs);\n\n const interfaces = getContractInterfaces();\n\n return logs\n .map((currentLog) => {\n const event = parseLog(currentLog, interfaces);\n\n if (!event) {\n log('Failed to parse log', currentLog);\n return undefined;\n }\n\n /* istanbul ignore next */\n const inputs = event.abi.find((e) => e.name === event.name)?.inputs;\n\n /* istanbul ignore if */\n if (!inputs) {\n log('Failed to find inputs for event', event);\n return undefined;\n }\n\n const args = parseEventArgs(event.args, inputs);\n\n return {\n contractAddress: currentLog.address,\n tokenStandard: event.standard,\n name: event.name,\n args,\n abi: event.abi,\n };\n })\n .filter((e) => e !== undefined) as ParsedEvent[];\n}\n\n/**\n * Parse event arguments using ABI input definitions.\n * @param args - The raw event arguments.\n * @param abiInputs - The ABI input definitions.\n * @returns The parsed event arguments.\n */\nfunction parseEventArgs(\n args: Result,\n abiInputs: { name: string }[],\n): Record<string, Hex | Hex[]> {\n return args.reduce((result, arg, index) => {\n const name = abiInputs[index].name.replace('_', '');\n const value = parseEventArgValue(arg);\n\n result[name] = value;\n\n return result;\n }, {});\n}\n\n/**\n * Parse an event argument value.\n * @param value - The event argument value.\n * @returns The parsed event argument value.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction parseEventArgValue(value: any): Hex | Hex[] {\n if (Array.isArray(value)) {\n return value.map(parseEventArgValue) as Hex[];\n }\n\n return (value.toHexString?.() ?? value).toLowerCase();\n}\n\n/**\n * Generate token balance changes from parsed events.\n * @param request - The transaction that was simulated.\n * @param events - The parsed events.\n * @returns An array of token balance changes.\n */\nasync function getTokenBalanceChanges(\n request: GetSimulationDataRequest,\n events: ParsedEvent[],\n): Promise<SimulationTokenBalanceChange[]> {\n const balanceTxs = getTokenBalanceTransactions(request, events);\n\n log('Generated balance transactions', [...balanceTxs.after.values()]);\n\n const transactions = [\n ...balanceTxs.before.values(),\n request,\n ...balanceTxs.after.values(),\n ];\n\n if (transactions.length === 1) {\n return [];\n }\n\n const response = await simulateTransactions(request.chainId as Hex, {\n transactions,\n });\n\n log('Balance simulation response', response);\n\n if (response.transactions.length !== transactions.length) {\n throw new SimulationInvalidResponseError();\n }\n\n let prevBalanceTxIndex = 0;\n return [...balanceTxs.after.keys()]\n .map((token, index) => {\n const previousBalanceCheckSkipped = !balanceTxs.before.get(token);\n const previousBalance = previousBalanceCheckSkipped\n ? '0x0'\n : getValueFromBalanceTransaction(\n request.from,\n token,\n // eslint-disable-next-line no-plusplus\n response.transactions[prevBalanceTxIndex++],\n );\n\n const newBalance = getValueFromBalanceTransaction(\n request.from,\n token,\n response.transactions[index + balanceTxs.before.size + 1],\n );\n\n const balanceChange = getSimulationBalanceChange(\n previousBalance,\n newBalance,\n );\n\n if (!balanceChange) {\n return undefined;\n }\n\n return {\n ...token,\n ...balanceChange,\n };\n })\n .filter((change) => change !== undefined) as SimulationTokenBalanceChange[];\n}\n\n/**\n * Generate transactions to check token balances.\n * @param request - The transaction that was simulated.\n * @param events - The parsed events.\n * @returns A map of token balance transactions keyed by token.\n */\nfunction getTokenBalanceTransactions(\n request: GetSimulationDataRequest,\n events: ParsedEvent[],\n): {\n before: BalanceTransactionMap;\n after: BalanceTransactionMap;\n} {\n const tokenKeys = new Set();\n const before = new Map();\n const after = new Map();\n\n const userEvents = events.filter(\n (event) =>\n SUPPORTED_EVENTS.includes(event.name) &&\n [event.args.from, event.args.to].includes(request.from),\n );\n\n log('Filtered user events', userEvents);\n\n for (const event of userEvents) {\n const tokenIds = getEventTokenIds(event);\n\n log('Extracted token ids', tokenIds);\n\n for (const tokenId of tokenIds) {\n const simulationToken: SimulationToken = {\n address: event.contractAddress,\n standard: event.tokenStandard,\n id: tokenId,\n };\n\n const tokenKey = JSON.stringify(simulationToken);\n\n if (tokenKeys.has(tokenKey)) {\n log(\n 'Ignoring additional event with same contract and token ID',\n simulationToken,\n );\n continue;\n }\n\n tokenKeys.add(tokenKey);\n\n const data = getBalanceTransactionData(\n event.tokenStandard,\n request.from,\n tokenId,\n );\n\n const transaction: SimulationRequestTransaction = {\n from: request.from,\n to: event.contractAddress,\n data,\n };\n\n if (skipPriorBalanceCheck(event)) {\n after.set(simulationToken, transaction);\n } else {\n before.set(simulationToken, transaction);\n after.set(simulationToken, transaction);\n }\n }\n }\n\n return { before, after };\n}\n\n/**\n * Check if an event needs to check the previous balance.\n * @param event - The parsed event.\n * @returns True if the prior balance check should be skipped.\n */\nfunction skipPriorBalanceCheck(event: ParsedEvent): boolean {\n // In the case of an NFT mint, we cannot check the NFT owner before the mint\n // as the balance check transaction would revert.\n return (\n event.name === 'Transfer' &&\n event.tokenStandard === SimulationTokenStandard.erc721 &&\n parseInt(event.args.from as string, 16) === 0\n );\n}\n\n/**\n * Extract token IDs from a parsed event.\n * @param event - The parsed event.\n * @returns An array of token IDs.\n */\nfunction getEventTokenIds(event: ParsedEvent): (Hex | undefined)[] {\n if (event.tokenStandard === SimulationTokenStandard.erc721) {\n return [event.args.tokenId as Hex];\n }\n\n if (\n event.tokenStandard === SimulationTokenStandard.erc1155 &&\n event.name === 'TransferSingle'\n ) {\n return [event.args.id as Hex];\n }\n\n if (\n event.tokenStandard === SimulationTokenStandard.erc1155 &&\n event.name === 'TransferBatch'\n ) {\n return event.args.ids as Hex[];\n }\n\n // ERC-20 does not have a token ID so default to undefined.\n return [undefined];\n}\n\n/**\n * Extract the value from a balance transaction response.\n * @param from - The address to check the balance of.\n * @param token - The token to check the balance of.\n * @param response - The balance transaction response.\n * @returns The value of the balance transaction.\n */\nfunction getValueFromBalanceTransaction(\n from: Hex,\n token: SimulationToken,\n response: SimulationResponseTransaction,\n): Hex {\n const normalizedReturn = normalizeReturnValue(response.return);\n\n if (token.standard === SimulationTokenStandard.erc721) {\n return normalizedReturn === from ? '0x1' : '0x0';\n }\n\n return normalizedReturn;\n}\n\n/**\n * Generate the balance transaction data for a token.\n * @param tokenStandard - The token standard.\n * @param from - The address to check the balance of.\n * @param tokenId - The token ID to check the balance of.\n * @returns The balance transaction data.\n */\nfunction getBalanceTransactionData(\n tokenStandard: SimulationTokenStandard,\n from: Hex,\n tokenId?: Hex,\n): Hex {\n switch (tokenStandard) {\n case SimulationTokenStandard.erc721:\n return new Interface(abiERC721).encodeFunctionData('ownerOf', [\n tokenId,\n ]) as Hex;\n\n case SimulationTokenStandard.erc1155:\n return new Interface(abiERC1155).encodeFunctionData('balanceOf', [\n from,\n tokenId,\n ]) as Hex;\n\n default:\n return new Interface(abiERC20).encodeFunctionData('balanceOf', [\n from,\n ]) as Hex;\n }\n}\n\n/**\n * Parse a raw event log using known ABIs.\n * @param eventLog - The raw event log.\n * @param interfaces - The contract interfaces.\n * @returns The parsed event log or undefined if it could not be parsed.\n */\nfunction parseLog(\n eventLog: SimulationResponseLog,\n interfaces: Map<SupportedToken, Interface>,\n):\n | (LogDescription & { abi: ABI; standard: SimulationTokenStandard })\n | undefined {\n const supportedTokens = Object.values(SupportedToken);\n\n for (const token of supportedTokens) {\n try {\n const contractInterface = interfaces.get(token) as Interface;\n const { abi, standard } = SUPPORTED_TOKEN_ABIS[token];\n\n return {\n ...contractInterface.parseLog(eventLog),\n abi,\n standard,\n };\n } catch (e) {\n continue;\n }\n }\n\n return undefined;\n}\n\n/**\n * Extract all logs from a call trace tree.\n * @param call - The root call trace.\n * @returns An array of logs.\n */\nfunction extractLogs(\n call: SimulationResponseCallTrace,\n): SimulationResponseLog[] {\n /* istanbul ignore next */\n const logs = call.logs ?? [];\n\n /* istanbul ignore next */\n const nestedCalls = call.calls ?? [];\n\n return [\n ...logs,\n ...nestedCalls.map((nestedCall) => extractLogs(nestedCall)).flat(),\n ];\n}\n\n/**\n * Generate balance change data from previous and new balances.\n * @param previousBalance - The previous balance.\n * @param newBalance - The new balance.\n * @returns The balance change data or undefined if unchanged.\n */\nfunction getSimulationBalanceChange(\n previousBalance: Hex,\n newBalance: Hex,\n): SimulationBalanceChange | undefined {\n const differenceBN = hexToBN(newBalance).sub(hexToBN(previousBalance));\n const isDecrease = differenceBN.isNeg();\n const difference = toHex(differenceBN.abs());\n\n if (differenceBN.isZero()) {\n log('Balance change is zero');\n return undefined;\n }\n\n return {\n previousBalance,\n newBalance,\n difference,\n isDecrease,\n };\n}\n\n/**\n * Normalize a return value.\n * @param value - The return value to normalize.\n * @returns The normalized return value.\n */\nfunction normalizeReturnValue(value: Hex): Hex {\n return toHex(hexToBN(value));\n}\n\n/**\n * Get the contract interfaces for all supported tokens.\n * @returns A map of supported tokens to their contract interfaces.\n */\nfunction getContractInterfaces(): Map<SupportedToken, Interface> {\n const supportedTokens = Object.values(SupportedToken);\n\n return new Map(\n supportedTokens.map((tokenType) => {\n const { abi } = SUPPORTED_TOKEN_ABIS[tokenType];\n const contractInterface = new Interface(abi);\n return [tokenType, contractInterface];\n }),\n );\n}\n"],"mappings":"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","names":["SupportedToken"]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-NHRBO3LU.mjs";
|
|
5
5
|
import {
|
|
6
6
|
getSimulationData
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-AHSDUIMT.mjs";
|
|
8
8
|
import {
|
|
9
9
|
determineTransactionType
|
|
10
10
|
} from "./chunk-KG4UW4K4.mjs";
|
|
@@ -234,7 +234,7 @@ var TransactionController = class extends BaseController {
|
|
|
234
234
|
__privateAdd(this, _getGlobalChainId);
|
|
235
235
|
__privateAdd(this, _isCustomNetwork);
|
|
236
236
|
__privateAdd(this, _internalEvents, new EventEmitter());
|
|
237
|
-
this.
|
|
237
|
+
this.approvingTransactionIds = /* @__PURE__ */ new Set();
|
|
238
238
|
this.mutex = new Mutex();
|
|
239
239
|
__privateAdd(this, _incomingTransactionOptions, void 0);
|
|
240
240
|
__privateAdd(this, _pendingTransactionOptions, void 0);
|
|
@@ -725,9 +725,7 @@ var TransactionController = class extends BaseController {
|
|
|
725
725
|
validateGasValues(gasValues);
|
|
726
726
|
}
|
|
727
727
|
projectLogger("Creating speed up transaction", transactionId, gasValues);
|
|
728
|
-
const transactionMeta = this.
|
|
729
|
-
({ id }) => id === transactionId
|
|
730
|
-
);
|
|
728
|
+
const transactionMeta = this.getTransaction(transactionId);
|
|
731
729
|
if (!transactionMeta) {
|
|
732
730
|
return;
|
|
733
731
|
}
|
|
@@ -776,7 +774,7 @@ var TransactionController = class extends BaseController {
|
|
|
776
774
|
unsignedEthTx,
|
|
777
775
|
transactionMeta.txParams.from
|
|
778
776
|
);
|
|
779
|
-
const transactionMetaWithRsv =
|
|
777
|
+
const transactionMetaWithRsv = this.updateTransactionMetaRSV(
|
|
780
778
|
transactionMeta,
|
|
781
779
|
signedTx
|
|
782
780
|
);
|
|
@@ -1215,10 +1213,10 @@ var TransactionController = class extends BaseController {
|
|
|
1215
1213
|
common
|
|
1216
1214
|
});
|
|
1217
1215
|
const initialTxAsSerializedHex = bufferToHex(initialTxAsEthTx.serialize());
|
|
1218
|
-
if (this.
|
|
1216
|
+
if (this.approvingTransactionIds.has(initialTxAsSerializedHex)) {
|
|
1219
1217
|
return "";
|
|
1220
1218
|
}
|
|
1221
|
-
this.
|
|
1219
|
+
this.approvingTransactionIds.add(initialTxAsSerializedHex);
|
|
1222
1220
|
let rawTransactions, nonceLock;
|
|
1223
1221
|
try {
|
|
1224
1222
|
const fromAddress = initialTx.from;
|
|
@@ -1239,7 +1237,7 @@ var TransactionController = class extends BaseController {
|
|
|
1239
1237
|
throw err;
|
|
1240
1238
|
} finally {
|
|
1241
1239
|
nonceLock?.releaseLock();
|
|
1242
|
-
this.
|
|
1240
|
+
this.approvingTransactionIds.delete(initialTxAsSerializedHex);
|
|
1243
1241
|
}
|
|
1244
1242
|
return rawTransactions;
|
|
1245
1243
|
}
|
|
@@ -1280,10 +1278,10 @@ var TransactionController = class extends BaseController {
|
|
|
1280
1278
|
transactionMeta,
|
|
1281
1279
|
pickBy({ hash, status })
|
|
1282
1280
|
);
|
|
1283
|
-
if (status === "submitted" /* submitted */) {
|
|
1281
|
+
if (updatedTransactionMeta.status === "submitted" /* submitted */) {
|
|
1284
1282
|
updatedTransactionMeta.submittedTime = (/* @__PURE__ */ new Date()).getTime();
|
|
1285
1283
|
}
|
|
1286
|
-
if (status === "failed" /* failed */) {
|
|
1284
|
+
if (updatedTransactionMeta.status === "failed" /* failed */) {
|
|
1287
1285
|
updatedTransactionMeta.error = normalizeTxError(new Error(errorMessage));
|
|
1288
1286
|
}
|
|
1289
1287
|
this.updateTransaction(
|
|
@@ -1639,68 +1637,62 @@ var TransactionController = class extends BaseController {
|
|
|
1639
1637
|
* @param transactionId - The ID of the transaction to approve.
|
|
1640
1638
|
*/
|
|
1641
1639
|
async approveTransaction(transactionId) {
|
|
1642
|
-
const
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
const transactionMeta = transactions[index];
|
|
1646
|
-
const updatedTransactionMeta = cloneDeep(transactionMeta);
|
|
1647
|
-
const {
|
|
1648
|
-
txParams: { from },
|
|
1649
|
-
networkClientId
|
|
1650
|
-
} = transactionMeta;
|
|
1651
|
-
let releaseNonceLock;
|
|
1640
|
+
const cleanupTasks = new Array();
|
|
1641
|
+
cleanupTasks.push(await this.mutex.acquire());
|
|
1642
|
+
let transactionMeta = this.getTransactionOrThrow(transactionId);
|
|
1652
1643
|
try {
|
|
1653
1644
|
if (!this.sign) {
|
|
1654
|
-
releaseLock();
|
|
1655
1645
|
this.failTransaction(
|
|
1656
1646
|
transactionMeta,
|
|
1657
1647
|
new Error("No sign method defined.")
|
|
1658
1648
|
);
|
|
1659
1649
|
return "not-approved" /* NotApproved */;
|
|
1660
1650
|
} else if (!transactionMeta.chainId) {
|
|
1661
|
-
releaseLock();
|
|
1662
1651
|
this.failTransaction(transactionMeta, new Error("No chainId defined."));
|
|
1663
1652
|
return "not-approved" /* NotApproved */;
|
|
1664
1653
|
}
|
|
1665
|
-
if (this.
|
|
1654
|
+
if (this.approvingTransactionIds.has(transactionId)) {
|
|
1666
1655
|
projectLogger("Skipping approval as signing in progress", transactionId);
|
|
1667
1656
|
return "not-approved" /* NotApproved */;
|
|
1668
1657
|
}
|
|
1658
|
+
this.approvingTransactionIds.add(transactionId);
|
|
1659
|
+
cleanupTasks.push(
|
|
1660
|
+
() => this.approvingTransactionIds.delete(transactionId)
|
|
1661
|
+
);
|
|
1669
1662
|
const [nonce, releaseNonce] = await getNextNonce(
|
|
1670
1663
|
transactionMeta,
|
|
1671
|
-
(address) => __privateGet(this, _multichainTrackingHelper).getNonceLock(
|
|
1664
|
+
(address) => __privateGet(this, _multichainTrackingHelper).getNonceLock(
|
|
1665
|
+
address,
|
|
1666
|
+
transactionMeta.networkClientId
|
|
1667
|
+
)
|
|
1672
1668
|
);
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
chainId
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
...baseTxParams,
|
|
1692
|
-
estimatedBaseFee: updatedTransactionMeta.txParams.estimatedBaseFee,
|
|
1693
|
-
type: "0x2" /* feeMarket */
|
|
1694
|
-
} : baseTxParams;
|
|
1669
|
+
releaseNonce && cleanupTasks.push(releaseNonce);
|
|
1670
|
+
transactionMeta = __privateMethod(this, _updateTransactionInternal, updateTransactionInternal_fn).call(this, {
|
|
1671
|
+
transactionId,
|
|
1672
|
+
note: "TransactionController#approveTransaction - Transaction approved"
|
|
1673
|
+
}, (draftTxMeta) => {
|
|
1674
|
+
const { txParams, chainId } = draftTxMeta;
|
|
1675
|
+
draftTxMeta.status = "approved" /* approved */;
|
|
1676
|
+
draftTxMeta.txParams = {
|
|
1677
|
+
...txParams,
|
|
1678
|
+
nonce,
|
|
1679
|
+
chainId,
|
|
1680
|
+
gasLimit: txParams.gas,
|
|
1681
|
+
...isEIP1559Transaction(txParams) && {
|
|
1682
|
+
type: "0x2" /* feeMarket */
|
|
1683
|
+
}
|
|
1684
|
+
};
|
|
1685
|
+
});
|
|
1686
|
+
this.onTransactionStatusChange(transactionMeta);
|
|
1695
1687
|
const rawTx = await this.signTransaction(
|
|
1696
|
-
|
|
1697
|
-
txParams
|
|
1688
|
+
transactionMeta,
|
|
1689
|
+
transactionMeta.txParams
|
|
1698
1690
|
);
|
|
1699
|
-
if (!this.beforePublish(
|
|
1691
|
+
if (!this.beforePublish(transactionMeta)) {
|
|
1700
1692
|
projectLogger("Skipping publishing transaction based on hook");
|
|
1701
1693
|
this.messagingSystem.publish(
|
|
1702
1694
|
`${controllerName}:transactionPublishingSkipped`,
|
|
1703
|
-
|
|
1695
|
+
transactionMeta
|
|
1704
1696
|
);
|
|
1705
1697
|
return "skipped-via-before-publish-hook" /* SkippedViaBeforePublishHook */;
|
|
1706
1698
|
}
|
|
@@ -1711,51 +1703,50 @@ var TransactionController = class extends BaseController {
|
|
|
1711
1703
|
networkClientId: transactionMeta.networkClientId,
|
|
1712
1704
|
chainId: transactionMeta.chainId
|
|
1713
1705
|
});
|
|
1714
|
-
|
|
1706
|
+
let preTxBalance;
|
|
1707
|
+
const shouldUpdatePreTxBalance = transactionMeta.type === "swap" /* swap */;
|
|
1708
|
+
if (shouldUpdatePreTxBalance) {
|
|
1715
1709
|
projectLogger("Determining pre-transaction balance");
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
"Updated pre-transaction balance",
|
|
1720
|
-
updatedTransactionMeta.preTxBalance
|
|
1721
|
-
);
|
|
1710
|
+
preTxBalance = await query(ethQuery, "getBalance", [
|
|
1711
|
+
transactionMeta.txParams.from
|
|
1712
|
+
]);
|
|
1722
1713
|
}
|
|
1723
|
-
projectLogger("Publishing transaction", txParams);
|
|
1714
|
+
projectLogger("Publishing transaction", transactionMeta.txParams);
|
|
1724
1715
|
let { transactionHash: hash } = await this.publish(
|
|
1725
|
-
|
|
1716
|
+
transactionMeta,
|
|
1726
1717
|
rawTx
|
|
1727
1718
|
);
|
|
1728
1719
|
if (hash === void 0) {
|
|
1729
1720
|
hash = await this.publishTransaction(ethQuery, rawTx);
|
|
1730
1721
|
}
|
|
1731
1722
|
projectLogger("Publish successful", hash);
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
"
|
|
1738
|
-
|
|
1723
|
+
transactionMeta = __privateMethod(this, _updateTransactionInternal, updateTransactionInternal_fn).call(this, {
|
|
1724
|
+
transactionId,
|
|
1725
|
+
note: "TransactionController#approveTransaction - Transaction submitted"
|
|
1726
|
+
}, (draftTxMeta) => {
|
|
1727
|
+
draftTxMeta.hash = hash;
|
|
1728
|
+
draftTxMeta.status = "submitted" /* submitted */;
|
|
1729
|
+
draftTxMeta.submittedTime = (/* @__PURE__ */ new Date()).getTime();
|
|
1730
|
+
if (shouldUpdatePreTxBalance) {
|
|
1731
|
+
draftTxMeta.preTxBalance = preTxBalance;
|
|
1732
|
+
projectLogger("Updated pre-transaction balance", preTxBalance);
|
|
1733
|
+
}
|
|
1734
|
+
});
|
|
1739
1735
|
this.messagingSystem.publish(`${controllerName}:transactionSubmitted`, {
|
|
1740
|
-
transactionMeta
|
|
1736
|
+
transactionMeta
|
|
1741
1737
|
});
|
|
1742
1738
|
this.messagingSystem.publish(
|
|
1743
1739
|
`${controllerName}:transactionFinished`,
|
|
1744
|
-
|
|
1745
|
-
);
|
|
1746
|
-
__privateGet(this, _internalEvents).emit(
|
|
1747
|
-
`${updatedTransactionMeta.id}:finished`,
|
|
1748
|
-
updatedTransactionMeta
|
|
1740
|
+
transactionMeta
|
|
1749
1741
|
);
|
|
1750
|
-
this.
|
|
1742
|
+
__privateGet(this, _internalEvents).emit(`${transactionId}:finished`, transactionMeta);
|
|
1743
|
+
this.onTransactionStatusChange(transactionMeta);
|
|
1751
1744
|
return "approved" /* Approved */;
|
|
1752
1745
|
} catch (error) {
|
|
1753
1746
|
this.failTransaction(transactionMeta, error);
|
|
1754
1747
|
return "not-approved" /* NotApproved */;
|
|
1755
1748
|
} finally {
|
|
1756
|
-
|
|
1757
|
-
releaseNonceLock?.();
|
|
1758
|
-
releaseLock();
|
|
1749
|
+
cleanupTasks.forEach((task) => task());
|
|
1759
1750
|
}
|
|
1760
1751
|
}
|
|
1761
1752
|
async publishTransaction(ethQuery, rawTransaction) {
|
|
@@ -1877,6 +1868,15 @@ var TransactionController = class extends BaseController {
|
|
|
1877
1868
|
const { transactions } = this.state;
|
|
1878
1869
|
return transactions.find(({ id }) => id === transactionId);
|
|
1879
1870
|
}
|
|
1871
|
+
getTransactionOrThrow(transactionId, errorMessagePrefix = "TransactionController") {
|
|
1872
|
+
const txMeta = this.getTransaction(transactionId);
|
|
1873
|
+
if (!txMeta) {
|
|
1874
|
+
throw new Error(
|
|
1875
|
+
`${errorMessagePrefix}: No transaction found with id ${transactionId}`
|
|
1876
|
+
);
|
|
1877
|
+
}
|
|
1878
|
+
return txMeta;
|
|
1879
|
+
}
|
|
1880
1880
|
getApprovalId(txMeta) {
|
|
1881
1881
|
return String(txMeta.id);
|
|
1882
1882
|
}
|
|
@@ -2085,8 +2085,9 @@ var TransactionController = class extends BaseController {
|
|
|
2085
2085
|
*
|
|
2086
2086
|
* @param transactionMeta - The TransactionMeta object to update.
|
|
2087
2087
|
* @param signedTx - The encompassing type for all transaction types containing r, s, and v values.
|
|
2088
|
+
* @returns The updated TransactionMeta object.
|
|
2088
2089
|
*/
|
|
2089
|
-
|
|
2090
|
+
updateTransactionMetaRSV(transactionMeta, signedTx) {
|
|
2090
2091
|
const transactionMetaWithRsv = cloneDeep(transactionMeta);
|
|
2091
2092
|
for (const key of ["r", "s", "v"]) {
|
|
2092
2093
|
const value = signedTx[key];
|
|
@@ -2108,7 +2109,7 @@ var TransactionController = class extends BaseController {
|
|
|
2108
2109
|
transactionMeta.chainId,
|
|
2109
2110
|
txParams
|
|
2110
2111
|
);
|
|
2111
|
-
this.
|
|
2112
|
+
this.approvingTransactionIds.add(transactionMeta.id);
|
|
2112
2113
|
const signedTx = await new Promise((resolve, reject) => {
|
|
2113
2114
|
this.sign?.(
|
|
2114
2115
|
unsignedEthTx,
|
|
@@ -2134,7 +2135,7 @@ var TransactionController = class extends BaseController {
|
|
|
2134
2135
|
return void 0;
|
|
2135
2136
|
}
|
|
2136
2137
|
const transactionMetaWithRsv = {
|
|
2137
|
-
...
|
|
2138
|
+
...this.updateTransactionMetaRSV(transactionMeta, signedTx),
|
|
2138
2139
|
status: "signed" /* signed */
|
|
2139
2140
|
};
|
|
2140
2141
|
this.updateTransaction(
|
|
@@ -2413,6 +2414,7 @@ updateTransactionInternal_fn = function({
|
|
|
2413
2414
|
if (updatedTransactionParams.length > 0) {
|
|
2414
2415
|
__privateMethod(this, _onTransactionParamsUpdated, onTransactionParamsUpdated_fn).call(this, transactionMeta, updatedTransactionParams);
|
|
2415
2416
|
}
|
|
2417
|
+
return transactionMeta;
|
|
2416
2418
|
};
|
|
2417
2419
|
_checkIfTransactionParamsUpdated = new WeakSet();
|
|
2418
2420
|
checkIfTransactionParamsUpdated_fn = function(newTransactionMeta) {
|
|
@@ -2547,4 +2549,4 @@ export {
|
|
|
2547
2549
|
ApprovalState,
|
|
2548
2550
|
TransactionController
|
|
2549
2551
|
};
|
|
2550
|
-
//# sourceMappingURL=chunk-
|
|
2552
|
+
//# sourceMappingURL=chunk-FBCFML64.mjs.map
|