예제 #1
0
        private async Task ProcessHotWalletCashout(ProcessHotWalletErc20EventCommand queueMessage)
        {
            string             transactionId = queueMessage.OperationId;
            CashOutContextData context       = await _transactionService.GetTransactionContext <CashOutContextData>(transactionId);

            if (context == null)
            {
                _log.Error(new NullReferenceException("Context is null for hotwallet cashout"),
                           context: queueMessage.ToJson());

                return;
            }

            string clientId        = context.ClientId;
            string hash            = queueMessage.TransactionHash;
            string cashOperationId = context.CashOperationId;

            var clientAcc = await _clientAccountClient.GetByIdAsync(clientId);

            var clientEmail = await _personalDataService.GetEmailAsync(clientId);

            await _cashOperationsRepositoryClient.UpdateBlockchainHashAsync(clientId, cashOperationId, hash);

            await _srvEmailsFacade.SendNoRefundOCashOutMail(clientAcc.PartnerId, clientEmail, context.Amount, context.AssetId, hash);
        }
        public async Task Process(HashEvent ev)
        {
            var tx = await _bitcoinTransactionRepository.FindByTransactionIdAsync(ev.Id);

            if (tx == null)
            {
                return;
            }

            string hash = ev.Hash;

            switch (tx.CommandType)
            {
            case BitCoinCommands.CashOut:
                var cashOutContext = await _transactionService.GetTransactionContext <CashOutContextData>(tx.TransactionId);

                var clientAcc = await _сlientAccountClient.GetByIdAsync(cashOutContext.ClientId);

                var clientEmail = await _personalDataService.GetEmailAsync(cashOutContext.ClientId);

                await _cashOperationsRepositoryClient.UpdateBlockchainHashAsync(cashOutContext.ClientId, cashOutContext.CashOperationId, hash);

                await _srvEmailsFacade.SendNoRefundOCashOutMail(clientAcc.PartnerId, clientEmail, cashOutContext.Amount, cashOutContext.AssetId, hash);

                break;
            }
        }
        private async Task FinalizeCashOut(IBitcoinTransaction transaction, IOffchainTransfer offchainTransfer)
        {
            var amount = Math.Abs((double)offchainTransfer.Amount);

            var data = await _exchangeOperationsService.FinishCashOutAsync(transaction.TransactionId, offchainTransfer.ClientId, (double)offchainTransfer.Amount, offchainTransfer.AssetId);

            await CreateHubCashoutIfNeed(offchainTransfer);

            if (!data.IsOk())
            {
                await _log.WriteWarningAsync("CashOutController", "CashOut", data.ToJson(), "ME operation failed");

                await _srvSlackNotifications.SendNotification(ChannelTypes.Errors, $"Cashout failed in ME, client: {offchainTransfer.ClientId}, transfer: {transaction.TransactionId}, ME code result: {data.Code}");
            }

            var contextData = await _bitcoinTransactionService.GetTransactionContext <CashOutContextData>(transaction.TransactionId);

            var swiftData = contextData.AddData?.SwiftData;

            if (swiftData != null)
            {
                await _cashOutAttemptRepository.SetIsSettledOffchain(contextData.ClientId, swiftData.CashOutRequestId);
            }
            else
            {
                if (offchainTransfer.AssetId == LykkeConstants.SolarAssetId)
                {
                    await PostSolarCashOut(offchainTransfer.ClientId, contextData.Address, amount, transaction.TransactionId);
                }
                else if (offchainTransfer.AssetId == LykkeConstants.ChronoBankAssetId)
                {
                    await PostChronoBankCashOut(contextData.Address, amount, transaction.TransactionId);
                }
                else if (offchainTransfer.AssetId == LykkeConstants.QuantaAssetId)
                {
                    await PostQuantaCashOut(contextData.Address, amount, transaction.TransactionId);
                }
                else
                {
                    var clientData = await _personalDataService.GetAsync(contextData.ClientId);

                    await _srvEmailsFacade.SendNoRefundOCashOutMail(clientData.Email, contextData.Amount, contextData.AssetId, transaction.BlockchainHash);
                }
            }
        }