The NFT Fee Handling is Incompatible with BIPS Type of Fees
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.
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:
tokensCollected = (tokenTransferred * feeBips) / BIPS_PRECISION;
The exact number when zero is returned depends on the value of feeBips.
Impact
Project needs to stick to fixed fees in case of ERC721 distributions, hence fee policy flexibility is lost.
Recommendation
Multiply the claimedAmount by BIPS_PRECISION before sending it to ITTUFeeCollector::getFee().
Resolution
TokenTable: Acknowledged.

