Skip to content

Release 1102.0.0 - #9421

Merged
cloudonshore merged 3 commits into
mainfrom
release/1102.0.0
Jul 7, 2026
Merged

cloudonshore merged 3 commits into
mainfrom
release/1102.0.0

Conversation

@cloudonshore

@cloudonshore cloudonshore commented Jul 7, 2026 •

Copy link
Copy Markdown
Contributor

Explanation

Releases two packages needed to fix stuck/underpriced bridge smart transactions in the clients (extension + mobile).

@metamask/transaction-controller — 68.2.2 → 68.3.0 (minor)

  • Added: failTransaction method + TransactionController:failTransaction messenger action (#9400) — fails a tx through the standard path, emitting transactionFailed/transactionStatusUpdated/transactionFinished.
  • Fixed: Only apply user-saved (advanced) gas fees to dApp transactions; ignored for internal (isInternal) txs such as swaps and bridges (#9401).
  • Changed: Bump @metamask/messenger ^1.2.0 → ^2.0.0 (#9392).

@metamask/smart-transactions-controller — 24.2.4 → 25.0.0 (major)

  • Changed (BREAKING): Fail the associated regular transaction via TransactionController:failTransaction instead of updateTransaction when a smart transaction is cancelled (#9400). Consumers must now grant the STX messenger access to TransactionController:failTransaction.
  • Changed: Bump @metamask/messenger ^1.2.0 → ^2.0.0 (#9392).

All other changed packages are intentionally-skip (owned by other teams); dependent version ranges were updated automatically.

References

Checklist

  • I've followed the release process
  • Changelogs reviewed and categorized (no Uncategorized; breaking change marked)
  • Version bumps follow SemVer (STX major for the breaking messenger change)

Note

Medium Risk
Touches transaction failure signaling and gas on internal bridge flows; STX 25.0.0 is a breaking messenger permission change for extension/mobile integrators.

Overview
Monorepo release 1102.0.0 that publishes @metamask/transaction-controller 68.3.0 and @metamask/smart-transactions-controller 25.0.0, and rolls @metamask/transaction-controller ^68.2.2 → ^68.3.0 through dependent packages and yarn.lock.

transaction-controller 68.3.0 (documented in its changelog for this release): adds failTransaction / TransactionController:failTransaction so out-of-band failures emit normal lifecycle events; fixes advanced gas fees so they apply only to dApp txs, not isInternal bridge/swap txs.

smart-transactions-controller 25.0.0 (breaking): on smart-tx cancel, calls failTransaction instead of updateTransaction; hosts must delegate TransactionController:failTransaction on the STX messenger.

Other touched packages in the diff are mainly version/changelog dependency bumps tied to this release, not new feature code in those files.

Reviewed by Cursor Bugbot for commit c423a08. Bugbot is set up for automated code reviews on this repo. Configure here.

@cloudonshore
cloudonshore requested review from a team as code owners July 7, 2026 21:54
@metamask-ci

metamask-ci Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

✅ Changelogs updated and pushed.

@cloudonshore
cloudonshore added this pull request to the merge queue Jul 7, 2026
Merged via the queue into main with commit 6b38b9a Jul 7, 2026
417 checks passed
@cloudonshore
cloudonshore deleted the release/1102.0.0 branch July 7, 2026 22:42
@maxime-oe maxime-oe mentioned this pull request Jul 9, 2026
4 tasks
pull Bot pushed a commit to Reality2byte/metamask-mobile that referenced this pull request Jul 21, 2026
…ask#33175)

## **Description**

Integrates the published core fix for stuck bridge smart transactions
into mobile.

Changes:
- Bump `@metamask/smart-transactions-controller` `^24.2.2` → `25.0.0`
- Bump `@metamask/transaction-controller` to `68.4.0` (dependency
`^68.3.0` + resolution `68.4.0`)
- Update the smart transactions controller messenger to delegate
`TransactionController:failTransaction` instead of
`TransactionController:updateTransaction`

**Why:** When the relay cancelled a smart transaction, the STX
controller previously called `updateTransaction`, which only patches
state and does not emit transaction lifecycle events. Consumers that
react to `transactionFailed`/`transactionStatusUpdated` (the bridge
status controller and metrics) were never notified, so cancelled bridge
smart transactions stayed **stuck pending indefinitely**. The core fix
([MetaMask/core#9400](MetaMask/core#9400)) adds
a `failTransaction` action that fails the tx through the standard path
and emits those events; this PR wires mobile's STX messenger to use it.

**Note on versions:** `smart-transactions-controller` is pinned to
`25.0.0` (and the `transaction-controller` resolution to `68.4.0`) to
keep `transaction-controller` within `68.x`. `stx@25.0.1` requires
`transaction-controller@^69.0.0`, a larger major bump out of scope for
this fix.

## **Changelog**

CHANGELOG entry: Fixed bridge smart transactions that could remain stuck
as pending after being cancelled by the relay

## **Related issues**

Refs:
- [MetaMask/core#9400](MetaMask/core#9400) —
fail cancelled smart transactions through the standard path
- [MetaMask/core#9401](MetaMask/core#9401) —
ignore saved gas fees for internal transactions
- Released in
[MetaMask/core#9421](MetaMask/core#9421)

## **Manual testing steps**

1. Build the branch and set up a wallet with a bridge route on a
supported chain.
2. Initiate a bridge that is submitted as a smart transaction.
3. Observe a relay-side cancellation of the smart transaction.
4. Confirm the transaction transitions to **failed** in the activity
list (instead of remaining pending) and the bridge status updates
accordingly.

## **Screenshots/Recordings**

N/A — dependency bump + messenger wiring (no UI changes).

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches transaction lifecycle integration for smart transactions;
incorrect wiring could affect how cancelled STX are surfaced, but scope
is limited to messenger delegation and a controlled dependency bump.
> 
> **Overview**
> **Integrates the core fix for bridge smart transactions that stayed
pending after relay cancellation.**
> 
> Bumps `@metamask/smart-transactions-controller` from `^24.2.2` to
`25.0.0` and updates the Smart Transactions controller messenger (and
related test harnesses) to delegate
**`TransactionController:failTransaction`** instead of
**`TransactionController:updateTransaction`**. The upgraded STX
controller uses the fail path when a relay cancels a smart transaction
so **`transactionFailed` / `transactionStatusUpdated`** fire and bridge
status and activity UI can leave the pending state.
> 
> No app-layer transaction logic changes beyond messenger wiring and
dependency lock updates.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
02840f1. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
pull Bot pushed a commit to Reality2byte/metamask-extension that referenced this pull request Jul 21, 2026
…ask#44372)

## **Description**

Integrates the published core fix for stuck bridge smart transactions
into the extension.

Changes:
- Bump `@metamask/smart-transactions-controller` `^24.2.2` → `25.0.0`
- Bump `@metamask/transaction-controller` `^68.2.2` → `^68.3.0`
(resolves to `68.4.0`)
- Update the smart transactions controller messenger to delegate
`TransactionController:failTransaction` instead of
`TransactionController:updateTransaction`

**Why:** When the relay cancelled a smart transaction, the STX
controller previously called `updateTransaction`, which only patches
state and does not emit transaction lifecycle events. Consumers that
react to `transactionFailed`/`transactionStatusUpdated` (the bridge
status controller and metrics) were never notified, so cancelled bridge
smart transactions stayed **stuck pending indefinitely**. The core fix
([MetaMask/core#9400](MetaMask/core#9400)) adds
a `failTransaction` action that fails the tx through the standard path
and emits those events; this PR wires the extension's STX messenger to
use it.

**Note on versions:** `smart-transactions-controller` is pinned to
`25.0.0` (not a caret range) to keep `transaction-controller` within
`68.x`. `stx@25.0.1` requires `transaction-controller@^69.0.0`, a larger
major bump out of scope for this fix.

## **Changelog**

CHANGELOG entry: Fixed bridge smart transactions that could remain stuck
as pending after being cancelled by the relay

## **Related issues**

Integrates the published core fix:
- [MetaMask/core#9400](MetaMask/core#9400) —
fail cancelled smart transactions through the standard path
- [MetaMask/core#9401](MetaMask/core#9401) —
ignore saved gas fees for internal transactions
- Released in
[MetaMask/core#9421](MetaMask/core#9421)

## **Manual testing steps**

1. Build the branch and set up a wallet with a bridge route on a
supported chain.
2. Initiate a bridge that is submitted as a smart transaction.
3. Observe a relay-side cancellation of the smart transaction.
4. Confirm the transaction transitions to **failed** in the activity
list (instead of remaining pending) and the bridge status updates
accordingly.

## **Screenshots/Recordings**

N/A — dependency bump + messenger wiring (no UI changes).

### **Before**

Cancelled bridge smart transactions stayed pending indefinitely.

### **After**

Cancelled bridge smart transactions transition to failed and notify the
bridge status controller / metrics.

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches smart-transaction and transaction lifecycle integration;
behavior change when relays cancel STXs, but scoped to messenger
delegation and a targeted dependency bump.
> 
> **Overview**
> Integrates the core fix for **bridge smart transactions stuck
pending** after relay cancellation by bumping
`@metamask/smart-transactions-controller` to **25.0.0** (pinned) and
aligning the lockfile.
> 
> The extension wires the smart transactions controller messenger to
delegate **`TransactionController:failTransaction`** instead of
**`TransactionController:updateTransaction`**, in both production init
and unit test setup, so cancelled STXs go through the standard failure
path and emit **`transactionFailed`** / **`transactionStatusUpdated`**
for bridge status and metrics.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
3985dc9. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
seaona pushed a commit to MetaMask/metamask-extension that referenced this pull request Jul 22, 2026
## **Description**

Integrates the published core fix for stuck bridge smart transactions
into the extension.

Changes:
- Bump `@metamask/smart-transactions-controller` `^24.2.2` → `25.0.0`
- Bump `@metamask/transaction-controller` `^68.2.2` → `^68.3.0`
(resolves to `68.4.0`)
- Update the smart transactions controller messenger to delegate
`TransactionController:failTransaction` instead of
`TransactionController:updateTransaction`

**Why:** When the relay cancelled a smart transaction, the STX
controller previously called `updateTransaction`, which only patches
state and does not emit transaction lifecycle events. Consumers that
react to `transactionFailed`/`transactionStatusUpdated` (the bridge
status controller and metrics) were never notified, so cancelled bridge
smart transactions stayed **stuck pending indefinitely**. The core fix
([MetaMask/core#9400](MetaMask/core#9400)) adds
a `failTransaction` action that fails the tx through the standard path
and emits those events; this PR wires the extension's STX messenger to
use it.

**Note on versions:** `smart-transactions-controller` is pinned to
`25.0.0` (not a caret range) to keep `transaction-controller` within
`68.x`. `stx@25.0.1` requires `transaction-controller@^69.0.0`, a larger
major bump out of scope for this fix.

## **Changelog**

CHANGELOG entry: Fixed bridge smart transactions that could remain stuck
as pending after being cancelled by the relay

## **Related issues**

Integrates the published core fix:
- [MetaMask/core#9400](MetaMask/core#9400) —
fail cancelled smart transactions through the standard path
- [MetaMask/core#9401](MetaMask/core#9401) —
ignore saved gas fees for internal transactions
- Released in
[MetaMask/core#9421](MetaMask/core#9421)

## **Manual testing steps**

1. Build the branch and set up a wallet with a bridge route on a
supported chain.
2. Initiate a bridge that is submitted as a smart transaction.
3. Observe a relay-side cancellation of the smart transaction.
4. Confirm the transaction transitions to **failed** in the activity
list (instead of remaining pending) and the bridge status updates
accordingly.

## **Screenshots/Recordings**

N/A — dependency bump + messenger wiring (no UI changes).

### **Before**

Cancelled bridge smart transactions stayed pending indefinitely.

### **After**

Cancelled bridge smart transactions transition to failed and notify the
bridge status controller / metrics.

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches smart-transaction and transaction lifecycle integration;
behavior change when relays cancel STXs, but scoped to messenger
delegation and a targeted dependency bump.
> 
> **Overview**
> Integrates the core fix for **bridge smart transactions stuck
pending** after relay cancellation by bumping
`@metamask/smart-transactions-controller` to **25.0.0** (pinned) and
aligning the lockfile.
> 
> The extension wires the smart transactions controller messenger to
delegate **`TransactionController:failTransaction`** instead of
**`TransactionController:updateTransaction`**, in both production init
and unit test setup, so cancelled STXs go through the standard failure
path and emit **`transactionFailed`** / **`transactionStatusUpdated`**
for bridge status and metrics.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
3985dc9. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants