Feeāonātransfer (FoT, ātaxā) tokens change delivery, not just price: a slice of the tokens is withheld during the transfer itself and routed elsewhere. That internal skim sits in addition to normal DEX/pool fees and network gas. Because the token reduces what the recipient actually receives, swaps can fail unless your route and minimumāreceived/slippage settings allow enough room for that deduction. Some routers handle this, others donāt.
What a normal swap is doing (and why that matters here)
When you trade any token, three layers show up:
- Network gas ā paid in the chainās native coin, it never reduces the token amount delivered.
- DEX/pool fee ā part of the AMMās economics. On STON.fi, the default trading fee is 0.3% per pool (typically 0.2% to LPs, 0.1% to the protocol, pools can be configured in a 0ā1% range). This fee is already reflected in quotes you see in the UI.
- Price impact ā if your order is big relative to the pool, the rate worsens as you trade. UIs surface this and cap or warn on high impact. On STON.fi, the guide warns when price impact exceeds ~5% and explains āminimum receivedā as the safeguard.
None of the above reduces tokens midātransfer by design. They affect price, not the transfer logic itself. FoT tokens add a fourth layer: the tokenālevel deduction that fires when the token moves. Thatās the piece that trips people up.
What changes with a feeāonātransfer token and common variants
Imagine the app quotes you 10,000 tokens out. With a standard token, if the market doesnāt move beyond your tolerance, you receive ~10,000 (less only to the extent price moves within your slippage limit). With a FoT token, the token contract itself may skim, say, 5%, and route it to holders/liquidity/burn/treasury. So even if the quote and pool fee were fine, the recipient ends up with about 9,500 tokens because the token withheld the rest on delivery. Thatās why UIs and aggregators often tell you to allow more slippage for FoT assets: your minimum received must be highāenough to survive both AMM math and the tokenās own fee.
Buy tax vs. sell tax vs. both. Some tokens charge only on buys, only on sells, or both. Tooling like 0x v2 now reports buy and sell tax separately (buyTaxBps, sellTaxBps) so UIs can warn you which side bites. User impact: you may need a higher slippage on the taxed leg, e.g., sellāonly taxes especially affect exit pricing.
Fixed vs. changeable fees. In some designs the team can modify the tax rate after launch. GoPlusās security docs flag āmodifiable taxā as a risk because owners can raise fees, sometimes to levels that render a token untradeable. User impact: centralization risk, so you rely on a switch you donāt control.
Why some routers fail and others succeed
Routers that assume āwhatever goes out of the pool arrives 1:1 at the recipientā can break on FoT tokens. Historically, e.g., Uniswap v2 added special swap methods ending in āSupportingFeeOnTransferTokensā. These check what lands with the recipient rather than what leaves the pool, so the transaction doesnāt revert just because the token trims the amount en route.
By contrast, Uniswap v3 says it plainly in its docs: feeāonātransfer tokens do not function with the v3 router. Projects would need wrappers or custom routers, and the core team doesnāt plan to support FoT tokens there. That is a strong signal that FoT behavior is nonāstandard and not universally supported.
Quotes vs. āminimum receivedā: reading the screen correctly
User interfaces usually show two different ideas:
- Estimate/quote ā the best guess given pool price and fee tiers right now.
- Minimum received ā the protective floor your transaction enforces (what many wallets label as āslippage toleranceā in percent).
For standard tokens, setting a tight tolerance (e.g., 0.5ā1%) often works in liquid pools. For FoT tokens, your tolerance has to cover the tokenās own fee plus normal price wiggles. Otherwise youāll see āinsufficient outputā or āexpected to failā type errors because the transfer lands below your floor (we will discuss them in more detail below). Interfaces explicitly warn about this behavior. Matchaās help center, for example, calls out the problem and why higher settings are sometimes required for taxed tokens.
If youāre trading on STON.fi, the app emphasizes āminimum receivedā and price impact rather than a raw āslippage slider.ā Functionally, itās the same safety valve: the contract protects you from receiving less than a chosen floor and the UI warns of high price impact.
āLooks liquid, hard to exitā ā the honeypot trap
Some tokens appear tradable (liquidity exists, buys go through) but selling is blocked or punitive. Support docs on DEXes flag unsellable tokens (āhoneypotsā) and list typical causes: very high sell fees and whitelist/blacklist checks in the token contract. Security researchers echo this pattern and show blacklistābased honeypots where nonāprivileged wallets simply cannot sell. Treat any token that demands extreme sell slippage or constantly shows āexpected to failā as a major red flag.
Common failure messages and what theyāre really telling you
- āInsufficient output amountā / āTransaction expected to fail.ā Either your floor is too tight for a FoT deduction, or the tokenās sellability/permissions are problematic.
- āIncrease slippage.ā The UI is hinting that the token, not just the market, is eating into delivery. Thatās typical for FoT tokens, so bump carefully and reācheck the math.
A simple mental model
- Router finds a route and prices your swap ā the AMM fee (e.g., STON.fiās default 0.3%) is already in there.
- You set a floor ā āminimum receivedā (implicitly a slippage tolerance).
- Transfer happens ā if the token is FoT, it skims its fee (tax) during delivery.
- Settlement checks ā if the skimming + price movement push received tokens below your floor, the swap reverts. Routers designed for FoT avoid checking the wrong amount (they look at recipient balance, not just pool exit).
How to set slippage without handing the market a blank check
Your goal is to cover the tokenās fee with a small buffer, not to invite bad fills.
- Know the fee (or assume conservatively). If docs say 5% buy tax, start a touch above that, say 6ā7%, and only increase if the UI still projects a revert. If the fee is unknown or variable, consider a tiny test swap first. (Matcha cautions that some taxed tokens may need 10 or even 20% tolerances; thatās a yellow flag, not a challenge.)
- Mind the venue. If you rely on protocols, such as Uniswap v3, remember the router wonāt support FoT tokens. In that case, use a DEX or aggregator that handles them (such as SushiSwap, PancakeSwap, Uniswap V2, or Matcha by 0x, 1inch) or youāll fight the tooling.
- Watch āminimum received,ā not just the quote. Thatās your real protection on STON.fi, Uniswap V2 and elsewhere. If your floor ends up way under the quote, ask yourself whether the trade still makes sense.
Sources & further reading
- 1inch Help ā What is a fee on a transfer token? (clear definition and behavior).
- Matcha Help ā Buy/Sell tax tokens (why naive settlement fails; slippage ranges sometimes needed).
- 0x docs & case study ā Buy/Sell tax detection & execution in 0x v2 and Matcha v2.
- STON.fi docs & guide ā perāpool fee model and UI concepts (āminimum received,ā price impact).