User can get free entries if the price of any whitelisted ERC20 token is greater than the round's `valuePerEntry`
Lack of explicit separation between ERC20 and ERC721 deposits allows users to gain free entries for any round given there exists a whitelisted ERC20 token with price greater than the round's `valuePerEntry`.\\n```\\n                if (isCurrencyAllowed[tokenAddress] != 1) {\\n                    revert InvalidCollection();\\n                }\\n```\\n\\n```\\n                if (singleDeposit.tokenType == YoloV2__TokenType.ERC721) {\\n                    if (price == 0) {\\n                        price = _getReservoirPrice(singleDeposit);\\n                        prices[tokenAddress][roundId] = price;\\n                    }\\n```\\n\\n```\\n                    uint256 entriesCount = price / round.valuePerEntry;\\n                    if (entriesCount == 0) {\\n                        revert InvalidValue();\\n                    }\\n```\\n\\n```\\n            } else if (tokenType == TokenType.ERC721) {\\n                for (uint256 j; j < itemIdsLengthForSingleCollection; ) {\\n                    // rest of code\\n                    _executeERC721TransferFrom(items[i].tokenAddress, from, to, itemIds[j]);\\n```\\n\\n```\\n    function _executeERC721TransferFrom(address collection, address from, address to, uint256 tokenId) internal {\\n        // rest of code\\n        (bool status, ) = collection.call(abi.encodeCall(IERC721.transferFrom, (from, to, tokenId)));\\n        // rest of code\\n    }\\n```\\n\\nThe function signature of `transferFrom` for ERC721 and ERC20 is identical, so this will call `transferFrom` on the ERC20 contract with `amount = 0` (since 'token ids' specified in `singleDeposit.tokenIdsOrAmounts` are all 0). Consequently, the user pays nothing and the transaction executes successfully (as long as the ERC20 token does not revert on zero transfers).\\nPaste the test below into `Yolo.deposit.t.sol` with `forge-std/console.sol` imported. It demonstrates a user making 3 free deposits (in the same transaction) using the MKR token (ie. with zero MKR balance). The token used can be substituted with any token with price > `valuePerEntry = 0.01 ETH` (which is non-rebasing/non-taxable and has sufficient liquidity in their /ETH Uniswap v3 pool as specified in the README).\\n
Whitelist tokens using both the token address and the token type (ERC20/ERC721).
Users can get an arbitrary number of entries into rounds for free (which should generally allow them to significantly increase their chances of winning). In the case the winner is a free depositor, they will end up with the same profit as if they participated normally since they have to pay the fee over the total value of the deposits (which includes the price of their free deposits). If the winner is an honest depositor, they still have to pay the full fee including the free entries, but they are unable to claim the value for the free entries (since the `tokenId` (or amount) is zero). They earn less profit than if everyone had participated honestly.
```\\n                if (isCurrencyAllowed[tokenAddress] != 1) {\\n                    revert InvalidCollection();\\n                }\\n```\\n