Skip to content

Release v2.9.4#3690

Merged
CedrikNikita merged 12 commits intomasterfrom
release/v2.9.4
Mar 26, 2026
Merged

Release v2.9.4#3690
CedrikNikita merged 12 commits intomasterfrom
release/v2.9.4

Conversation

@CedrikNikita
Copy link
Copy Markdown
Collaborator

@CedrikNikita CedrikNikita commented Mar 26, 2026

Note

Medium Risk
Changes how Aeternity transfers are constructed (custom fee/nonce, total recalculation, and pending-tx reconciliation), which can affect transaction submission and user balances if miscomputed. Also alters SDK TTL behavior and pending-transaction lifecycle, so edge cases around network instability and mempool state need review.

Overview
Bumps the app to v2.9.4 (Changelog, package.json/lockfile, Android versionCode/versionName, iOS MARKETING_VERSION).

Adds Aeternity advanced transaction settings on the transfer review screen, letting users override fee and nonce with validation/warnings, propagating these values through send flows (including multi-recipient fee splitting) and AirGap QR generation; transfer totals are recalculated against the estimated fee via new helpers and unit/e2e coverage.

Adjusts transaction tracking to avoid aggressively dropping pending entries: pending txs are now removed when a mined tx matches by hash or nonce, and periodic cleanup based on a fixed “certainly mined” timeout is removed. Misc UI fixes include a muted AccordionItem variant, corrected InfiniteScroll rendering over actual items, and minor BrowserActions spacing.

Written by Cursor Bugbot for commit 098b146. This will update automatically on new commits. Configure here.

@CedrikNikita CedrikNikita requested a review from davidyuk March 26, 2026 07:56
Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Autofix Details

Bugbot Autofix prepared fixes for both issues found in the latest run.

  • ✅ Fixed: Fee divided by recipients falls below minimum per-transaction
    • I removed the per-recipient fee division in Aeternity transfer submission so each transaction now uses the validated minimum-or-higher fee.
  • ✅ Fixed: Unused locale key added but never referenced
    • I deleted the unused advancedFeeLowWarning translation key from both English and Chinese locale files since it is not referenced anywhere.

Create PR

Or push these changes by commenting:

@cursor push ca60c106e2
Preview (ca60c106e2)
diff --git a/src/popup/locales/en-US.json b/src/popup/locales/en-US.json
--- a/src/popup/locales/en-US.json
+++ b/src/popup/locales/en-US.json
@@ -556,7 +556,6 @@
     "advancedDetails": "Advanced transaction details",
     "advancedFeeInvalid": "Enter a valid fee greater than 0.",
     "advancedFeeTooLow": "Fee must be at least the estimated minimum fee.",
-    "advancedFeeLowWarning": "Setting a fee below the estimated minimum may cause this transaction to be rejected or remain pending in the mempool.",
     "advancedNonceInvalid": "Enter a valid nonce greater than 0.",
     "advancedNonceLowWarning": "Setting a nonce lower than the current account nonce usually leads to rejection unless a transaction with that nonce is still pending in the mempool.",
     "advancedNonceReplacementWarning": "A pending transaction with this nonce may be replaced by this new transaction if you continue.",

diff --git a/src/popup/locales/zh-CN.json b/src/popup/locales/zh-CN.json
--- a/src/popup/locales/zh-CN.json
+++ b/src/popup/locales/zh-CN.json
@@ -556,7 +556,6 @@
     "advancedDetails": "高级交易详情",
     "advancedFeeInvalid": "请输入大于 0 的有效手续费。",
     "advancedFeeTooLow": "手续费不能低于预估的最低手续费。",
-    "advancedFeeLowWarning": "如果手续费低于预估最低值,交易可能会被拒绝,或长时间停留在内存池中等待处理。",
     "advancedNonceInvalid": "请输入大于 0 的有效 nonce。",
     "advancedNonceLowWarning": "如果 nonce 低于当前账户 nonce,且内存池中没有使用该 nonce 的待处理交易,这笔交易通常会被拒绝。",
     "advancedNonceReplacementWarning": "如果内存池中已有使用该 nonce 的待处理交易,继续发送可能会让这笔新交易替换掉原来的待处理交易。",

diff --git a/src/protocols/aeternity/components/TransferReview.vue b/src/protocols/aeternity/components/TransferReview.vue
--- a/src/protocols/aeternity/components/TransferReview.vue
+++ b/src/protocols/aeternity/components/TransferReview.vue
@@ -705,9 +705,7 @@
       } else {
         let hash;
         const customFee = props.transferData.fee
-          ? aeToAettos(
-            new BigNumber(props.transferData.fee).dividedBy(recipients.length || 1),
-          )
+          ? aeToAettos(new BigNumber(props.transferData.fee))
           : undefined;
         let currentNonce = props.transferData.nonce || await fetchCurrentAccountNonce();
         // eslint-disable-next-line no-restricted-syntax

This Bugbot Autofix run was free. To enable autofix for future PRs, go to the Cursor dashboard.

@github-actions
Copy link
Copy Markdown

Deployed to release-v2-9-4.wallet.z52da5wt.xyz, artifacts

@github-actions
Copy link
Copy Markdown

Deployed to release-v2-9-4.wallet.z52da5wt.xyz, artifacts

Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

}

function removeAccountPendingTransactionByNonce(address: AccountAddress, nonce?: number) {
if (!nonce) return;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Falsy check on nonce skips valid zero value

Low Severity

removeAccountPendingTransactionByNonce uses if (!nonce) return; which treats nonce 0 as falsy, skipping removal. Similarly, in submit(), effectiveTransferData.nonce || await fetchCurrentAccountNonce() uses || instead of ??, causing nonce 0 to be discarded in favor of a fetched value. Both locations conflate "not provided" with "zero." Using nonce == null and ?? respectively would be more precise.

Additional Locations (1)
Fix in Cursor Fix in Web

@CedrikNikita CedrikNikita merged commit cebf2a4 into master Mar 26, 2026
3 of 5 checks passed
@CedrikNikita CedrikNikita deleted the release/v2.9.4 branch March 26, 2026 09:40
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