private void ValidateWithdrawal(Member user, string userAddress, decimal amount, WithdrawalSourceBalance withdrawalSource) { if (!WithdrawalEnabled) { throw new MsgException("Withdrawal is currently disabled by the administrator"); } if (CryptocurrencyApi.IsAdministratorAddress(userAddress, WithdrawalApiProcessor)) { throw new MsgException("You can't withdraw to administrator-generated address."); } Money amountInCorrectType = Money.Zero; string errorMessage = String.Empty; //General validation PayoutManager.ValidatePayoutNotConnectedToAmount(user); //Amounts & Balances if (withdrawalSource == WithdrawalSourceBalance.MainBalance) { amountInCorrectType = new Money(amount); //Check the balance if (amountInCorrectType > user.MainBalance) { throw new MsgException(L1.NOTENOUGHFUNDS); } PayoutManager.ValidatePayout(user, amountInCorrectType); PayoutManager.CheckMaxPayout(CryptocurrencyTypeHelper.ConvertToPaymentProcessor(CryptocurrencyType), user, amountInCorrectType); } else //Wallets { amountInCorrectType = new CryptocurrencyMoney(this.Type, amount); //Check the balance if (amountInCorrectType > user.GetCryptocurrencyBalance(CryptocurrencyType)) { throw new MsgException(string.Format(U6012.NOFUNDSINWALLET, CryptocurrencyType.ToString())); } } //Check MIN withdrawal if (amountInCorrectType < GetMinimumWithdrawalAmount(user, withdrawalSource)) { throw new MsgException(U5003.WITHDRAWALMUSTBEHIGHER); } //Check MAX withdrawals if (amountInCorrectType > GetMaximumWithdrawalAmount(user, withdrawalSource, out errorMessage)) { throw new MsgException(errorMessage); } }