F-2025-0003·precision-loss

The NFT Fee Handling is Incompatible with BIPS Type of Fees

Acknowledgedairdropmerkle-prooftoken-distributionmerkle-token-distributor
TL;DR

claimedAmount for ERC-721 distributions is small (e.g. 1 or 2). When the BIPS-style fee formula multiplies by feeBips and divides by BIPS_PRECISION, low values round to zero, breaking BIPS-based fee policies for NFT distributions.

Severity
INFO
Impact
LOW
Likelihood
LOW
Method
MManual review
CAT.
Complexity
LOW
Exploitability
LOW
02Section · Description

Description

In case of ERC721 token distribution, the claimedAmount of the individual claim is representing the amount of tokens to be minted or transferred. As is the case with NFTs that variable can be small, i.e. 1 or 2. The claimedAmount is then passed into the ITTUFeeCollector::getFee() to calculate the exact fee amount charged to the claimer. While it works fine in case fixed fees are configured, it may not work as expected in case the protocol owner would like to charge fees based on bips, as the following calculation from the ITTUFeeCollector::getFee() may return zero in case of a low value of claimedAmount:

solidity
tokensCollected = (tokenTransferred * feeBips) / BIPS_PRECISION;

The exact number when zero is returned depends on the value of feeBips.

03Section · Impact

Impact

Project needs to stick to fixed fees in case of ERC721 distributions, hence fee policy flexibility is lost.

04Section · Recommendation

Recommendation

Multiply the claimedAmount by BIPS_PRECISION before sending it to ITTUFeeCollector::getFee().

05Section · Resolution

Resolution

TokenTable: Acknowledged.

F-2025-0003

oog
zealynx

Smart Contract Security Digest

Monthly exploit breakdowns, audit checklists, and DeFi security research — straight to your inbox

© 2026 Zealynx