Пример #1
0
        public async Task Handle(ConfirmationSavedEvent evt)
        {
            await _chainalysisTxService.ProccedAsync(evt);

            ChaosKitty.Meow();
        }
        private async Task Handle(ConfirmationSavedEvent evt, ICommandSender sender)
        {
            var hash     = evt.TransactionHash;
            var clientId = evt.ClientId;

            var balanceChangeTransaction = await _balanceChangeTransactionsRepository.GetAsync(hash);

            var operation = await _internalOperationsRepository.GetAsync(hash);

            var tx = balanceChangeTransaction.First(x => x.ClientId == clientId);

            ChaosKitty.Meow();

            if (operation != null && operation.CommandType == BitCoinCommands.Transfer)
            {
                foreach (var id in operation.OperationIds)
                {
                    if (string.IsNullOrWhiteSpace(id))
                    {
                        continue;
                    }

                    sender.SendCommand(new ProcessTransferCommand
                    {
                        TransferId = id
                    }, "transfer");
                }
            }
            else
            {
                if (tx.IsCashIn(tx.Multisig))
                {
                    var cashIns = tx.GetOperationSummary(tx.Multisig);
                    if (cashIns.Count > 1)
                    {
                        _log.WriteWarning(nameof(ConfirmationSavedEvent), evt, $"Multiple assets in a single transaction detected: {cashIns.ToJson()}");
                        // there should be only one asset in cash-in operation;
                        // code bellow with 'foreach' statement is kept for a while in case of obsolete request with multiple assets;
                    }

                    var skipBtc = (await _appGlobalSettingsRepositry.GetAsync()).BtcOperationsDisabled;

                    foreach (var cashIn in cashIns)
                    {
                        var asset = await GetAssetByBcnIdAsync(cashIn.Key);

                        ChaosKitty.Meow();

                        if (asset.Id == LykkeConstants.BitcoinAssetId && skipBtc)
                        {
                            sender.SendCommand(new SavePostponedCashInCommand
                            {
                                TransactionHash = tx.Hash
                            }, "cashin");
                        }
                        else
                        {
                            var sum = (cashIn.Value * Math.Pow(10, -asset.MultiplierPower)).TruncateDecimalPlaces(asset.Accuracy);

                            var cmd = new RegisterCashInOutCommand
                            {
                                Transaction = new Transaction {
                                    Hash = tx.Hash, ClientId = tx.ClientId, Multisig = tx.Multisig, IsSegwit = tx.IsSegwit
                                },
                                Asset = new Asset {
                                    Id = asset.Id, Accuracy = asset.Accuracy
                                },
                                Amount    = sum,
                                CommandId = Guid.NewGuid().ToString("N")
                            };

                            sender.SendCommand(cmd, "cashin");
                        }
                    }
                }
            }
        }