-
Notifications
You must be signed in to change notification settings - Fork 5.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: exclude smart transaction status page from rate limiting #30537
Open
httpJunkie
wants to merge
3
commits into
main
Choose a base branch
from
fix/sequential-tx-popup-state
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This change adds 'smartTransaction:showSmartTransactionStatusPage' to the typesExcludedFromRateLimiting array when initializing the ApprovalController. This prevents the "Request of type 'smartTransaction:showSmartTransactionStatusPage' already pending" error that was occurring when users executed sequential transactions in quick succession. Fixes TXL-679
CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes. |
Builds ready [8a9a42a]
Page Load Metrics (1726 ± 61 ms)
Bundle size diffs [🚨 Warning! Bundle size has increased!]
|
I have read the CLA Document and I hereby sign the CLA |
Builds ready [646d34e]
Page Load Metrics (1645 ± 60 ms)
Bundle size diffs [🚨 Warning! Bundle size has increased!]
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
release-12.14.0
Issue or pull request that will be included in release 12.14.0
team-transactions
Transactions team
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This change adds
smartTransaction:showSmartTransactionStatusPage
to thetypesExcludedFromRateLimiting
array when initializing the ApprovalController.This prevents the "Request of type 'smartTransaction:showSmartTransactionStatusPage' already pending" error that was occurring when users executed sequential transactions in quick succession.
Description
Before the fix, MetaMask's ApprovalController was rate-limiting sequential
smartTransaction:showSmartTransactionStatusPage
requests, causing errors when users attempted multiple transactions.What is being Rate Limited by the
typesExcludedFromRateLimiting
?The rate limiting is happening on API request types within MetaMask's internal architecture. Specifically: When a user initiates a transaction ie:
eth_sendTransaction
, MetaMask makes an internal request of typesmartTransaction:showSmartTransactionStatusPage
.A "request type" in this context refers to a specific category of internal API calls within MetaMask's architecture. Each request type is a string identifier (like
smartTransaction:showSmartTransactionStatusPage
) that represents an operation that extension needs to perform. The ApprovalController tracks these "request types" to manage permissions, prevent spam, and handle confirmations from users.The ApprovalController component in MetaMask was designed to prevent many identical "request types" from the same source in a short time period, ie: "rate limiting".
This means that when a user tried to make multiple transactions quickly (simulated by the test dapp included below), they could see the status page for the first transaction, but subsequent status pages were being BLOCKED by this rate-limiting mechanism.
Our fix tells the ApprovalController to exclude this particular request type from its rate limiting checks, so that multiple transaction status pages can be displayed in sequence without error.
Related issues
Fixes: #30387
Manual testing steps
Repro Setup:
Manually Test the Extension:
Expected Results
Screenshots/Recordings
Before
before-seq-tx.mov
After
after-seq-tx.mov
Pre-merge author checklist
Pre-merge reviewer checklist