/// <summary> /// Process one payment event. Try to transfer from contract to main account (if failed, then it is duplicated event) /// </summary> /// <param name="log"></param> /// <returns></returns> private async Task <bool> ProcessLogItem(UserPaymentEvent log) { try { await _logger.WriteInfo("EthereumWebJob", "ProcessLogItem", "", $"Start proces: event from {log.Address} for {log.Amount} WEI."); var transaction = await _paymentService.TransferFromUserContract(log.Address, log.Amount); await _logger.WriteInfo("EthereumWebJob", "ProcessLogItem", "", $"Finish process: Event from {log.Address} for {log.Amount} WEI. Transaction: {transaction}"); await _queueOutService.FirePaymentEvent(log.Address, UnitConversion.Convert.FromWei(log.Amount)); await _logger.WriteInfo("EthereumWebJob", "ProcessLogItem", "", $"Message sended to queue: Event from {log.Address}"); Console.WriteLine($"Event from {log.Address} for {log.Amount} WEI processed! Transaction: {transaction}"); return(true); } catch (Exception e) { await _logger.WriteError("EthereumWebJob", "ProcessLogItem", "Failed to process item", e); } return(false); }
public override async Task <RequestModel> Create([FromBody] PaymentDTO entity) { if (entity == null) { return(await base.Create(entity)); } entity.UserId = User?.GetUserId(); entity.UserName = User?.GetUserName(); var result = await base.Create(entity); if (result.ErrorId == 0) { var newPayment = new UserPaymentEvent() { UserId = entity.Id, Amount = entity.Amount }; _eventBus.Publish(newPayment); } return(result); }