[pull] main from MetaMask:main#417
Merged
Merged
Conversation
…onents (#23980) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** The confirmation message for successfully copying a public address to the clipboard was previously displayed as a modal in the center of the screen. This change updates the implementation to use the Toast component instead, which slides up from the bottom of the screen for a more modern and less intrusive UX. **Changes made:** - Updated AddressCopy component to use ToastContext instead of showAlert redux action - Converted AddressQRCode from class component to functional component and replaced modal with Toast - Updated AssetDetails to use Toast for address copy confirmation - Updated useCopyClipboard hook to use Toast instead of modal - Updated test to provide ToastContext.Provider wrapper ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Changed address copy confirmation from modal to Toast notification ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/MDP-203 ## **Manual testing steps** ```gherkin Feature: Copy public address to clipboard Scenario: user copies wallet address from main wallet view Given user is on the main wallet view And user can see their account address When user taps the copy address button Then a Toast notification slides up from the bottom of the screen And the Toast displays "Public address copied to clipboard" And the Toast auto-dismisses after a few seconds Scenario: user copies wallet address from QR code modal Given user has opened the receive/QR code modal And user can see their public address displayed When user taps on the address to copy it Then a Toast notification slides up from the bottom of the screen And the Toast displays "Public address copied to clipboard" Scenario: user copies token contract address from asset details Given user is viewing token details for a specific token And user can see the token contract address When user taps on the contract address to copy it Then a Toast notification slides up from the bottom of the screen And the Toast displays "Token address copied to clipboard" ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <img width="367" height="815" alt="Screenshot 2025-12-12 at 16 27 40" src="https://github.com/user-attachments/assets/11e32346-9a4c-4547-81c9-3cd844490872" /> <!-- [screenshots/recordings] --> ### **After** <img width="403" height="823" alt="Screenshot 2025-12-12 at 17 05 21" src="https://github.com/user-attachments/assets/cced2c06-488f-4f4c-b28b-ec1828483cc4" /> <!-- [screenshots/recordings] --> ## **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] > Replaces modal/showAlert clipboard confirmations with Toast across components and refactors AddressQRCode into a functional, hook-based component, updating tests accordingly. > > - **UI/Clipboard Toast migration**: > - Replace `showAlert` modals with `ToastContext` toasts in `AddressCopy.tsx`, `TokenDetailsList.tsx`, `AssetDetails/index.tsx`, and `useCopyClipboard.ts`. > - Use themed colors and `IconName.CheckBold`; keep delayed `protectWalletModalVisible` dispatch. > - **Refactor**: > - Convert `Views/AddressQRCode/index.js` from class to functional component using hooks (`useSelector`, `useDispatch`, `useTheme`, `ToastContext`). > - Implement toast on copy, delayed protect wallet prompt on close, and memoized styles; remove `connect`/`GlobalAlert`. > - **Tests**: > - Add `AddressQRCode.test.tsx` and `useCopyClipboard.test.ts`. > - Update `AddressCopy.test.tsx` and `TokenDetailsList.test.tsx` to wrap with `ToastContext.Provider`; update snapshot. > - **Misc**: > - Use `DesignSystemIconName.Copy` in `TokenDetailsList.tsx`; minor README formatting tweaks. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit aa75eb2. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: vinnyhoward <vincenguyenhoward@gmail.com>
## **Description**
Fix OHLC bar text overflow for tokens with long decimal values (e.g.,
PUMP-USD at ~$0.002877).
**Problem:** Price values with many decimals would wrap to multiple
lines, causing visual jank in the OHLC indicator bar.
**Solution:** Added text scaling properties to prevent overflow:
- `numberOfLines={1}` - Force single line
- `adjustsFontSizeToFit` - Auto-scale font to fit
- `minimumFontScale={0.7}` - Limit minimum size to 70%
## **Changelog**
CHANGELOG entry: Fixed OHLC bar text overflow for tokens with small
prices
## **Related issues**
Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2297
## **Manual testing steps**
```gherkin
Feature: OHLC bar display
Scenario: View OHLC bar for token with long decimal price
Given the user is viewing PUMP-USD chart (price ~$0.002877)
When user long presses on the price section
Then the OHLC indicator bar appears
And all values (Open, Close, High, Low, Volume) fit on single lines
And text scales down if needed to fit
```
## **Screenshots/Recordings**
### **Before**
<!-- Price values wrap to multiple lines -->
### **After**
<!-- All values fit on single line with auto-scaling -->
## **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.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Ensure OHLCV values render on a single line with auto-scaling to avoid
overflow on small-price tokens.
>
> - **UI (Perps)**:
> - `app/components/UI/Perps/components/PerpsOHLCVBar/PerpsOHLCVBar.tsx`
> - Apply `numberOfLines={1}`, `adjustsFontSizeToFit`, and
`minimumFontScale={0.7}` to value `Text` components for `open`, `close`,
`high`, `low`, and `volume` to prevent wrapping/overflow.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a6a05fb. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->
## **Description**
Extract authentication logic in RevealPrivateCredential
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry:null
## **Related issues**
Fixes:
## **Manual testing steps**
```gherkin
Feature: my feature name
Scenario: user [verb for user action]
Given [describe expected initial app state]
When user [verb for user action]
Then [describe expected outcome]
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<!-- [screenshots/recordings] -->
### **After**
<!-- [screenshots/recordings] -->
## **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**
- [x] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [x] 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]
> Moves SRP/private key reveal and reauth logic from
`RevealPrivateCredential` into `Authentication` with a new hook,
biometric-aware reauth, and tests.
>
> - **Core Authentication**:
> - Add `reauthenticate(password?)` with biometric/remember-me support
and `ReauthenticateErrorType.BIOMETRIC_NOT_ENABLED`.
> - Introduce `revealSRP(password, keyringId?)` and
`revealPrivateKey(password, address)` helpers.
> - New hook `core/Authentication/hooks/useAuthentication` exposing
these APIs.
> - Tests covering `reauthenticate`, `revealSRP`, and
`revealPrivateKey`.
> - **UI (`RevealPrivateCredential`)**:
> - Replace direct engine/mnemonic calls with `useAuthentication`
(`reauthenticate`, `revealSRP`, `revealPrivateKey`).
> - Authenticate first, then trace and reveal; auto-trigger reveal on
mount.
> - Handle `BIOMETRIC_NOT_ENABLED` without surfacing an error; update
button handlers.
> - Remove legacy biometric unlock path and related imports.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
6608cf3. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description** under-memoization was causing data changes in live prices to not trigger re-renders in the leverage slider. ## **Changelog** CHANGELOG entry: fix non-live current price in leverage slider ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2062 ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** https://github.com/user-attachments/assets/9fcc4de5-94fc-4b30-bc82-a3a9f299112c ## **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] > PerpsLeverageBottomSheet now derives current price from usePerpsLivePrices (instead of prop) to re-render on live updates, with tests adjusted to mock and validate price states. > > - **PerpsLeverageBottomSheet (`PerpsLeverageBottomSheet.tsx`)**: > - Replace `currentPrice` prop usage with live price from `usePerpsLivePrices({ symbols: [asset], throttleMs: 1000 })` and parse via `parseFloat`. > - Compute `entryPrice` from `limitPrice` for `limit` orders or from live `currentPrice` for `market` orders. > - Maintain liquidation calculations and skeleton logic; no UI changes beyond sourcing price. > - **Tests (`PerpsLeverageBottomSheet.test.tsx`)**: > - Mock `usePerpsLivePrices` and default to `'BTC-USD': { price: '3000' }`. > - Update scenarios to handle zero and missing price via mocked hook; verify "Price information unavailable" and `0.0%` cases. > - Keep liquidation formatting and behavior assertions; remove reliance on `currentPrice` prop for rendering/logic. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 905a2f4. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** This PR adds margin adjustment UI improvements and fixes the max removable margin calculation to match Hyperliquid's official documentation. **What changed:** ### UI Improvements - Added two new i18n strings: `margin_available_to_add` and `margin_available_to_remove` - Added a new info row in the adjust margin view that displays the maximum amount of margin that can be added or removed - Updated the first row to always show "Current margin" (previously showed "Perps balance" for add mode) - Re-enabled "Reduce Margin" action in the action sheet (was previously disabled pending calculation fix) ### Max Removable Margin Calculation Fix - Fixed `calculateMaxRemovableMargin` to use position's actual leverage instead of asset's max leverage - Formula now matches Hyperliquid's official documentation exactly: `transfer_margin_required = max(notional/leverage, notional*0.1)` - Removed excessive 3x safety buffer that was causing incorrect calculations - Added `unrealizedPnl` parameter for more accurate effective margin calculation **Root cause:** The calculation was using `maxLeverage` (asset's max, e.g., 50x) instead of `position.leverage.value` (actual position leverage, e.g., 10x). This caused significant discrepancies - a position at 10x leverage requires 10% initial margin, not 2% that 50x would imply. The info section now displays four rows: 1. Current margin (always shows the margin in position) 2. Margin available to add/remove (shows max amount based on mode) 3. Liquidation price (with transition arrow when adjusting) 4. Liquidation distance (with transition arrow when adjusting) ## **Changelog** CHANGELOG entry: null ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2167 ## **Manual testing steps** ```gherkin Feature: Margin adjustment with correct calculations Scenario: User views margin available to add Given user has an open perpetual position And user navigates to the position details When user taps "Adjust Margin" And user selects "Add Margin" Then user sees "Current margin" row with current margin value And user sees "Margin available to add" row with available balance Scenario: User views margin available to remove Given user has an open perpetual position And user navigates to the position details When user taps "Adjust Margin" And user selects "Reduce Margin" Then user sees "Current margin" row with current margin value And user sees "Margin available to remove" row with max removable margin Scenario: Max removable margin matches Hyperliquid Given user has an isolated position with known values And user compares max removable in MetaMask vs Hyperliquid UI When the values match (or are very close) And user attempts to remove the displayed max amount Then the transaction succeeds without rejection ``` ## **Screenshots/Recordings** ### **Before** The info section only showed: - Perps balance (add mode) / Margin in position (remove mode) - Liquidation price - Liquidation distance <img width="420" height="876" alt="image" src="https://github.com/user-attachments/assets/96364845-73bd-4dff-8712-db21afbffde5" /> ### **After** The info section now shows: - Current margin (both modes) - Margin available to add (add mode) / Margin available to remove (remove mode) - Liquidation price - Liquidation distance <img width="414" height="830" alt="image" src="https://github.com/user-attachments/assets/4ce0decd-7a88-45ee-ab65-3a1d1f4cb67f" /> <img width="425" height="822" alt="image" src="https://github.com/user-attachments/assets/e5596180-37d5-4340-a984-222c9af958c9" /> ## **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] > Refactors adjust margin to a new live-data hook and fixes max removable margin per Hyperliquid, updates UI (current/max rows), re-enables reduce action, and adds tests/docs. > > - **Logic/Calculations**: > - **New hook** `usePerpsAdjustMarginData`: centralizes live position/account/price data and computes `maxAmount`, liquidation price/distance, and mode; exported via `hooks/index`. > - **Fix** `calculateMaxRemovableMargin`: use `positionLeverage` (not asset max), accept optional `notionalValue`, rely on mark price, remove inflated safety buffer; update related tests. > - **UI**: > - **PerpsAdjustMarginView**: refactor to use new hook; remove manual/live hooks and inline calcs; pass loading state; floor values to 2 decimals; clamp inputs; slider `maximumValue` uses floored `maxAmount`. > - **Info rows**: always show `margin_in_position`; add `margin_available_to_add/remove`; keep liquidation price/distance with transition. > - **Action Sheet**: re-enable `reduce_margin` option. > - **Tests/Docs**: > - Add tests for new hook and update view/utils tests to new behavior. > - Add doc `docs/perps/hyperliquid/margining.md` describing margin rules. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit bf29e8d. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Signed-off-by: dan437 <80175477+dan437@users.noreply.github.com> Co-authored-by: Nick Gambino <35090461+gambinish@users.noreply.github.com> Co-authored-by: javiergarciavera <76975121+javiergarciavera@users.noreply.github.com> Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com> Co-authored-by: sethkfman <10342624+sethkfman@users.noreply.github.com> Co-authored-by: Jorge Carrasco <jorge.carrasco@consensys.net> Co-authored-by: Vinicius Stevam <45455812+vinistevam@users.noreply.github.com> Co-authored-by: Alejandro Garcia Anglada <aganglada@gmail.com> Co-authored-by: Daniel <80175477+dan437@users.noreply.github.com> Co-authored-by: Juanmi <95381763+juanmigdr@users.noreply.github.com> Co-authored-by: Matthew Grainger <46547583+Matt561@users.noreply.github.com> Co-authored-by: Salim TOUBAL <salim.toubal@outlook.com> Co-authored-by: CW <chris.wilcox@consensys.net> Co-authored-by: George Marshall <george.marshall@consensys.net> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Kevin Bluer <kevin@bluer.com> Co-authored-by: Michele Esposito <34438276+mikesposito@users.noreply.github.com> Co-authored-by: Pedro Pablo Aste Kompen <wachunei@gmail.com> Co-authored-by: Kylan Hurt <6249205+smilingkylan@users.noreply.github.com> Co-authored-by: Brian August Nguyen <brianacnguyen@gmail.com> Co-authored-by: Vince Howard <vincenguyenhoward@gmail.com> Co-authored-by: Curtis David <Curtis.David7@gmail.com> Co-authored-by: Bryan Fullam <bryan.fullam@consensys.net> Co-authored-by: Monte Lai <monte.lai@consensys.net> Co-authored-by: Charly Chevalier <charlyy.chevalier@gmail.com> Co-authored-by: Patryk Łucka <5708018+PatrykLucka@users.noreply.github.com> Co-authored-by: Goktug Poyraz <omergoktugpoyraz@gmail.com> Co-authored-by: Michal Szorad <michal.szorad@consensys.net> Co-authored-by: Nicholas Smith <nick.smith@consensys.net> Co-authored-by: Matthew Walsh <matthew.walsh@consensys.net> Co-authored-by: Bruno Nascimento <brunonascimentodev@gmail.com> Co-authored-by: cmd-ob <ola.bale@consensys.net> Co-authored-by: AxelGes <34173844+AxelGes@users.noreply.github.com> Co-authored-by: George Weiler <georgejweiler@gmail.com> Co-authored-by: Owen Craston <owen.craston@consensys.net> Co-authored-by: Prithpal Sooriya <prithpal.sooriya@consensys.net> Co-authored-by: Caainã Jeronimo <caainaje@gmail.com> Co-authored-by: Nicholas Gambino <nicholas.gambino@consensys.net> Co-authored-by: VGR <VanGulckRik@gmail.com> Co-authored-by: Daniel Suchý <suchydan@gmail.com> Co-authored-by: Nicholas Ellul <15018469+NicholasEllul@users.noreply.github.com> Co-authored-by: Harika <153644847+hjetpoluru@users.noreply.github.com> Co-authored-by: Maarten Zuidhoorn <maarten@zuidhoorn.com> Co-authored-by: jvbriones <1674192+jvbriones@users.noreply.github.com> Co-authored-by: Christopher Ferreira <104831203+christopherferreira9@users.noreply.github.com> Co-authored-by: Mark Stacey <markjstacey@gmail.com> Co-authored-by: António Regadas <antonio.regadas@consensys.net> Co-authored-by: Baptiste Marchand <75846779+baptiste-marchand@users.noreply.github.com> Co-authored-by: Cal Leung <cal.leung@consensys.net> Co-authored-by: sophieqgu <37032128+sophieqgu@users.noreply.github.com> Co-authored-by: George Gkasdrogkas <georgegkas@gmail.com> Co-authored-by: ffmcgee <51971598+ffmcgee725@users.noreply.github.com> Co-authored-by: Luis Taniça <matallui@gmail.com> Co-authored-by: Guillaume Roux <guillaumeroux123@gmail.com> Co-authored-by: Priya <priya.narayanaswamy@consensys.net> Co-authored-by: sahar-fehri <sahar.fehri@consensys.net> Co-authored-by: Ulisses Ferreira <ulisses@hey.com> Co-authored-by: imblue <106779544+imblue-dabadee@users.noreply.github.com> Co-authored-by: Amélie <amelie.chan@gmail.com> Co-authored-by: asalsys <sallem.ahmed@consensys.net> Co-authored-by: SteP-n-s <stylianos.panagakos@consensys.net> Co-authored-by: tommasini <46944231+tommasini@users.noreply.github.com> Co-authored-by: Bernardo Garces Chapero <bernardo.chapero@consensys.net> Co-authored-by: Gaurav Goel <grvgoel19@gmail.com> Co-authored-by: Frederik Bolding <frederik.bolding@gmail.com> Co-authored-by: jiexi <jiexiluan@gmail.com> Co-authored-by: khanti42 <florin.dzeladini@consensys.net> Co-authored-by: Ramon AC <36987446+racitores@users.noreply.github.com> Co-authored-by: ieow <4881057+ieow@users.noreply.github.com> Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Andre Pimenta <andrepimenta7@gmail.com> Co-authored-by: infiniteflower <139582705+infiniteflower@users.noreply.github.com>
This file contains hidden or 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
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )