Skip to content
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: simulation should handle NFT mints #4217

Merged
merged 4 commits into from
Apr 29, 2024
Merged

fix: simulation should handle NFT mints #4217

merged 4 commits into from
Apr 29, 2024

Conversation

dbrans
Copy link
Contributor

@dbrans dbrans commented Apr 26, 2024

Explanation

This PR updates the token balance change simulation logic to correctly handle NFT mints. Previously, the code was attempting to simulate a "before" balance check transaction for newly minted NFTs using ownerOf, which would revert since the token ID does not exist prior to the mint.

Key changes:

  • Updated getTokenBalanceTransactions to only include an "after" balance transaction for NFT mints, identified by the from address being the zero address in the Transfer event.
  • Modified getTokenBalanceChanges to assume a previous balance of zero for newly minted NFTs and skip the "before" balance check transaction.
  • Adjusted the tests to cover the NFT mint scenario and ensure that the "before" balance check transaction is not simulated for minted tokens.

References

Changelog

@metamask/transaction-controller

  • FIXED: simulation should handle NFT mints

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've highlighted breaking changes using the "BREAKING" category above as appropriate

@dbrans dbrans added the team-confirmations-system DEPRECATED: please use "team-confirmations" label instead label Apr 26, 2024
@dbrans dbrans marked this pull request as ready for review April 26, 2024 00:05
@dbrans dbrans requested a review from a team as a code owner April 26, 2024 00:05
matthewwalsh0
matthewwalsh0 previously approved these changes Apr 26, 2024
packages/transaction-controller/src/utils/simulation.ts Outdated Show resolved Hide resolved
packages/transaction-controller/src/utils/simulation.ts Outdated Show resolved Hide resolved
@dbrans dbrans merged commit 342023d into main Apr 29, 2024
139 checks passed
@dbrans dbrans deleted the dbrans/sim-nft-mint branch April 29, 2024 17:35
@dbrans dbrans mentioned this pull request Apr 29, 2024
dbrans added a commit that referenced this pull request Apr 30, 2024
Creates release 145, to release v28.1.1 of the TransactionController.

The intention is to hotfix transaction-controller 28.1.1 into the
Extension along with #4217

---------

Co-authored-by: Elliot Winkler <elliot.winkler@gmail.com>
dbrans added a commit to MetaMask/metamask-extension that referenced this pull request Apr 30, 2024
…on (#24306)

## **Description**
Update transaction-controller core package to bring in this fix to NFT
mint simulation: MetaMask/core#4217

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/24306?quickstart=1)

## **Related issues**

Fixes: #24251

## **Manual testing steps**

1. Visit https://www.fxhash.xyz/generative/slug/g-l-y-p-h 
2. Try minting the nft
3. Simulation should work and show the nft in the "You receive" section.

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

(Simulation Failed message)

### **After**


![image](https://github.com/MetaMask/metamask-extension/assets/507015/ded0173a-088c-4f12-b3b6-09b823db7756)

## **Pre-merge author checklist**

- [ ] I’ve followed [MetaMask Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/develop/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/develop/.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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
team-confirmations-system DEPRECATED: please use "team-confirmations" label instead
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants