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"); } } } } }