fix(token-analyzer): avoid underflow in transfer fee calculation#1066
Open
mev15 wants to merge 1 commit into
Open
fix(token-analyzer): avoid underflow in transfer fee calculation#1066mev15 wants to merge 1 commit into
mev15 wants to merge 1 commit into
Conversation
calculate_fee evaluated the inbound fee as `balance_before_in + (amount - balance_after_in)`. The inner subtraction underflows when the settlement already holds more of a fee-on-transfer token than the per-transfer fee, so it returned Err and the token was misclassified as Bad. Evaluate `(balance_before_in + amount) - balance_after_in` instead, restoring the original left-associative order. Apply the same fix to the recipient leg and add unit tests for the prior-balance and zero-balance cases. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.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 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.
calculate_feecomputed the inbound fee asbalance_before_in + (amount - balance_after_in). The inneramount - balance_after_inunderflows when the settlement contract already holds more of a fee-on-transfer token than the per-transfer fee, so the function returnedErrand the token was misclassified as Bad — the source of the frequent "Failed to calculate transfer fee: overflow" logs. Tokens the settlement holds none of (e.g. sDAI) were unaffected.Computing
(balance_before_in + amount) - balance_after_inrestores the original left-associative order from before the checked-arithmetic rewrite. The recipient leg gets the same change.Adds two unit tests in common.rs: one reproduces the underflow (settlement holds a prior balance above the fee), one covers the zero-prior-balance case.