diff --git a/packages/bridge-controller/CHANGELOG.md b/packages/bridge-controller/CHANGELOG.md index c26d8aba4ab..f9ab75f2027 100644 --- a/packages/bridge-controller/CHANGELOG.md +++ b/packages/bridge-controller/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Export `isTronChainId` from the package entrypoint ([#7697](https://github.com/MetaMask/core/pull/7697)) + ## [64.7.0] ### Changed diff --git a/packages/bridge-controller/src/index.ts b/packages/bridge-controller/src/index.ts index 714397be2a2..4be51a55a0e 100644 --- a/packages/bridge-controller/src/index.ts +++ b/packages/bridge-controller/src/index.ts @@ -119,6 +119,7 @@ export { isNativeAddress, isSolanaChainId, isBitcoinChainId, + isTronChainId, isNonEvmChainId, getNativeAssetForChainId, getDefaultBridgeControllerState, diff --git a/packages/bridge-status-controller/CHANGELOG.md b/packages/bridge-status-controller/CHANGELOG.md index e8f277378a9..8b942a9c497 100644 --- a/packages/bridge-status-controller/CHANGELOG.md +++ b/packages/bridge-status-controller/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Bump `@metamask/bridge-controller` from `^64.5.1` to `^64.7.0` ([#7667](https://github.com/MetaMask/core/pull/7667), [#7672](https://github.com/MetaMask/core/pull/7672), [#7694](https://github.com/MetaMask/core/pull/7694)) +### Fixed + +- Fix Tron same-chain swap polling and Completed event tracking ([#7697](https://github.com/MetaMask/core/pull/7697)) + ## [64.4.3] ### Changed diff --git a/packages/bridge-status-controller/src/__snapshots__/bridge-status-controller.test.ts.snap b/packages/bridge-status-controller/src/__snapshots__/bridge-status-controller.test.ts.snap index a3a47e29fa4..dab18481ab5 100644 --- a/packages/bridge-status-controller/src/__snapshots__/bridge-status-controller.test.ts.snap +++ b/packages/bridge-status-controller/src/__snapshots__/bridge-status-controller.test.ts.snap @@ -4609,13 +4609,6 @@ Array [ "snapId": "npm:@metamask/tron-snap", }, ], - Array [ - "AccountsController:getAccountByAddress", - "TRX123...", - ], - Array [ - "TransactionController:getState", - ], ] `; diff --git a/packages/bridge-status-controller/src/bridge-status-controller.test.ts b/packages/bridge-status-controller/src/bridge-status-controller.test.ts index d9695b5dfe9..53175b1b54f 100644 --- a/packages/bridge-status-controller/src/bridge-status-controller.test.ts +++ b/packages/bridge-status-controller/src/bridge-status-controller.test.ts @@ -2275,8 +2275,8 @@ describe('BridgeStatusController', () => { expect(mockMessengerCall.mock.calls).toMatchSnapshot(); expect(result).toMatchSnapshot(); - // Swaps don't start polling (only bridges do) - expect(startPollingForBridgeTxStatusSpy).toHaveBeenCalledTimes(0); + // Tron swaps start polling for async settlement + expect(startPollingForBridgeTxStatusSpy).toHaveBeenCalledTimes(1); expect(controller.state.txHistory[result.id]).toMatchSnapshot(); }); diff --git a/packages/bridge-status-controller/src/bridge-status-controller.ts b/packages/bridge-status-controller/src/bridge-status-controller.ts index 555dde64118..7ca97013ac6 100644 --- a/packages/bridge-status-controller/src/bridge-status-controller.ts +++ b/packages/bridge-status-controller/src/bridge-status-controller.ts @@ -15,6 +15,7 @@ import { UnifiedSwapBridgeEventName, formatChainIdToCaip, isCrossChain, + isTronChainId, isEvmTxData, isHardwareWallet, MetricsActionType, @@ -362,13 +363,8 @@ export class BridgeStatusController extends StaticIntervalPollingController { - const isBridgeTx = isCrossChain( - historyItem.quote.srcChainId, - historyItem.quote.destChainId, - ); - return isBridgeTx; + return this.#shouldPollHistoryItem(historyItem, historyItem.txMetaId); }); incompleteHistoryItems.forEach((historyItem) => { @@ -507,16 +499,30 @@ export class BridgeStatusController extends StaticIntervalPollingController { + const isIntent = txMetaId.startsWith('intent:'); + const isBridgeTx = isCrossChain( + historyItem.quote.srcChainId, + historyItem.quote.destChainId, + ); + + // Tron same-chain swaps use async settlement and need polling + const isTronSameChainSwap = + !isBridgeTx && !isIntent && isTronChainId(historyItem.quote.srcChainId); + + return isBridgeTx || isIntent || isTronSameChainSwap; + }; + /** * @deprecated For EVM/Solana swap/bridge txs we add tx to history in submitTx() * For Solana swap/bridge we start polling in submitTx() @@ -1390,6 +1396,8 @@ export class BridgeStatusController extends StaticIntervalPollingController