Allo#_fundPool
Let's see the code of the `_fundPool` function:\\n```\\nfunction _fundPool(uint256 _amount, uint256 _poolId, IStrategy _strategy) internal {\\n        uint256 feeAmount;\\n        uint256 amountAfterFee = _amount;\\n\\n        Pool storage pool = pools[_poolId];\\n        address _token = pool.token;\\n\\n        if (percentFee > 0) {\\n            feeAmount = (_amount * percentFee) / getFeeDenominator();\\n            amountAfterFee -= feeAmount;\\n\\n            _transferAmountFrom(_token, TransferData({from: msg.sender, to: treasury, amount: feeAmount}));\\n        }\\n\\n        _transferAmountFrom(_token, TransferData({from: msg.sender, to: address(_strategy), amount: amountAfterFee}));\\n        _strategy.increasePoolAmount(amountAfterFee);\\n\\n        emit PoolFunded(_poolId, amountAfterFee, feeAmount);\\n    }\\n```\\n\\nThe `feeAmount` is calculated as follows:\\n```\\nfeeAmount = (_amount * percentFee) / getFeeDenominator();\\n```\\n\\nwhere `getFeeDenominator` returns `1e18` and `percentFee` is represented like that: `1e18` = 100%, 1e17 = 10%, 1e16 = 1%, 1e15 = 0.1% (from the comments when declaring the variable).\\nLet's say the pool uses a token like GeminiUSD which is a token with 300M+ market cap, so it's widely used, and `percentFee` == 1e15 (0.1%)\\nA user could circumvent the fee by depositing a relatively small amount. In our example, he can deposit 9 GeminiUSD. In that case, the calculation will be: `feeAmount = (_amount * percentFee) / getFeeDenominator() = (9e2 * 1e15) / 1e18 = 9e17/1e18 = 9/10 = 0;`\\nSo the user ends up paying no fee. There is nothing stopping the user from funding his pool by invoking the `fundPool` with such a small amount as many times as he needs to fund the pool with whatever amount he chooses, circumventing the fee.\\nEspecially with the low gas fees on L2s on which the protocol will be deployed, this will be a viable method to fund a pool without paying any fee to the protocol.
Add a `minFundAmount` variable and check for it when funding a pool.
The protocol doesn't collect fees from pools with low decimal tokens.
```\\nfunction _fundPool(uint256 _amount, uint256 _poolId, IStrategy _strategy) internal {\\n        uint256 feeAmount;\\n        uint256 amountAfterFee = _amount;\\n\\n        Pool storage pool = pools[_poolId];\\n        address _token = pool.token;\\n\\n        if (percentFee > 0) {\\n            feeAmount = (_amount * percentFee) / getFeeDenominator();\\n            amountAfterFee -= feeAmount;\\n\\n            _transferAmountFrom(_token, TransferData({from: msg.sender, to: treasury, amount: feeAmount}));\\n        }\\n\\n        _transferAmountFrom(_token, TransferData({from: msg.sender, to: address(_strategy), amount: amountAfterFee}));\\n        _strategy.increasePoolAmount(amountAfterFee);\\n\\n        emit PoolFunded(_poolId, amountAfterFee, feeAmount);\\n    }\\n```\\n