/// <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);
        }
Ejemplo n.º 2
0
        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);
        }