User deposits can fail despite using the correct method for calculation of deposit amounts
Users can use the `getAmtsNeededForDeposit()` function to get the amount of tokens that maintain the desired proportion for vault deposits. It will perform a calculation very similar to the one in `ratiosMatch()`, which will verify the deposit.\\n```\\n         for (uint256 i = 0; i < balances.length; i++) {\\n               if (i == indexOfReferenceToken) {\\n                amtsNeeded[i] = amtIn;\\n         } else {\\n         // amtsNeeded[i] = (amtIn * balances[i]) / \\n                  balances[indexOfReferenceToken];\\n                     amtsNeeded[i] = Arithmetic.overflowResistantFraction(amtIn, \\n                  balances[i], balances[indexOfReferenceToken]);\\n               }\\n            }\\n```\\n\\nHowever, a difference between the verification function and the getter function is that the getter receives any reference token, while the verification will use proportions based on the deposit amount in the largest balance in the vault. Indeed, these fractions may differ by a small amount. This could cause the `getAmtsNeededForDeposit()` function to respond with values which will not be accepted at deposit, since they will be rounded differently.
Calculation amounts needed using the ratio between largest balance and the deposit amount. This would line up the numbers as verification would expect.
```\\n         for (uint256 i = 0; i < balances.length; i++) {\\n               if (i == indexOfReferenceToken) {\\n                amtsNeeded[i] = amtIn;\\n         } else {\\n         // amtsNeeded[i] = (amtIn * balances[i]) / \\n                  balances[indexOfReferenceToken];\\n                     amtsNeeded[i] = Arithmetic.overflowResistantFraction(amtIn, \\n                  balances[i], balances[indexOfReferenceToken]);\\n               }\\n            }\\n```\\n