public override Task Validate(ProcessorContext context) { context.ValidateNonce(); var quantum = context.Envelope.Message as RequestQuantum; var orderRequest = quantum.RequestEnvelope.Message as OrderRequest; if (orderRequest.Asset <= 0 || !context.CentaurusContext.AssetIds.Contains(orderRequest.Asset)) { throw new InvalidOperationException("Invalid asset identifier: " + orderRequest.Asset); } //estimate XLM amount var quoteAmount = OrderMatcher.EstimateQuoteAmount(orderRequest.Amount, orderRequest.Price, orderRequest.Side); //check that lot size is greater than minimum allowed lot if (quoteAmount < context.CentaurusContext.Constellation.MinAllowedLotSize) { throw new BadRequestException("Lot size is smaller than the minimum allowed lot."); } //fetch user's account record var account = orderRequest.AccountWrapper.Account; //check required balances if (orderRequest.Side == OrderSide.Sell) { var balance = account.GetBalance(orderRequest.Asset); if (!balance.HasSufficientBalance(orderRequest.Amount)) { throw new BadRequestException("Insufficient funds"); } } else { var balance = account.GetBalance(0); if (!balance.HasSufficientBalance(quoteAmount)) { throw new BadRequestException("Insufficient funds"); } } ValidateCounterOrdersCount(orderRequest, context.CentaurusContext.Exchange.GetOrderbook(orderRequest.Asset, orderRequest.Side.Inverse())); return(Task.CompletedTask); }
public override Task Validate(ProcessorContext context) { context.ValidateNonce(); return(Task.CompletedTask); }