fix(withdrawal): normalize balance to USD before capping in VerifiedFiatCalculator#763
Merged
Merged
Conversation
…iatCalculator When a user local currency is stronger than USD (e.g. GBP at fx=0.79), the balance in local currency quarks is smaller than the USD equivalent. The min() comparison picked the local-currency Fiat, corrupting underlyingTokenAmount with a non-USD currency code. This caused TransactionService.withdrawUsdf to throw "Cannot subtract different currencies" when subtracting the fee (correctly in USD) from the corrupted amount. Convert balance to USD via convertingToUsdIfNeeded before the min() comparison so cappedValue always preserves the USD currency code. Also adds withdrawal breadcrumb traces in TransactionController for both withdraw and withdrawUsdf paths, and two regression tests covering the cap fix and the full subtraction path. Bugsnag: 6a0f534a8c3285d1a5b1aea3 Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
62a738a to
f086666
Compare
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
When a user local currency is stronger than USD (e.g. GBP at fx=0.79), the balance in local currency quarks is smaller than the USD equivalent. The min() comparison picked the local-currency Fiat, corrupting underlyingTokenAmount with a non-USD currency code. This caused TransactionService.withdrawUsdf to throw "Cannot subtract different currencies" when subtracting the fee (correctly in USD) from the corrupted amount.
Convert balance to USD via convertingToUsdIfNeeded before the min() comparison so cappedValue always preserves the USD currency code.
Also adds withdrawal breadcrumb traces in TransactionController for both withdraw and withdrawUsdf paths, and two regression tests covering the cap fix and the full subtraction path.
Bugsnag: 6a0f534a8c3285d1a5b1aea3