public async Task Handle(TransferOperationStateSavedEvent evt, ICommandSender sender) { var transactionId = evt.TransactionId; // handling of ETH transfers to trusted wallets if it is ETH transfer var ethTxRequest = await _ethereumTransactionRequestRepository.GetAsync(Guid.Parse(transactionId)); if (ethTxRequest != null) { sender.SendCommand( new TransferEthereumCommand { TransactionId = Guid.Parse(transactionId) }, BoundedContexts.Ethereum); } else { sender.SendCommand( new CompleteOperationCommand { CommandId = new Guid(transactionId) }, BoundedContexts.Operations); } }
public async Task Handle(TransferOperationStateSavedEvent evt) { var message = evt.QueueMessage; var transactionId = message.Id; var amountNoFee = evt.AmountNoFee; var context = await _transactionService.GetTransactionContext <TransferContextData>(transactionId); //Get eth request if it is ETH transfer var ethTxRequest = await _ethereumTransactionRequestRepository.GetAsync(Guid.Parse(transactionId)); //Get client wallets var wallets = (await _walletCredentialsRepository.GetWalletsAsync(new[] { message.ToClientid, message.FromClientId })).ToList(); var destWallet = wallets.FirstOrDefault(x => x.ClientId == message.ToClientid); var sourceWallet = wallets.FirstOrDefault(x => x.ClientId == message.FromClientId); //Register transfer events var transferState = ethTxRequest == null ? TransactionStates.SettledOffchain : ethTxRequest.OperationType == OperationType.TransferBetweenTrusted ? TransactionStates.SettledNoChain : TransactionStates.SettledOnchain; var asset = await _assetsServiceWithCache.TryGetAssetAsync(message.AssetId); var toOperation = new TransferEvent { Id = context.Transfers.Single(x => x.ClientId == message.ToClientid).OperationId, ClientId = message.ToClientid, DateTime = DateTime.UtcNow, FromId = null, AssetId = message.AssetId, Amount = amountNoFee, TransactionId = transactionId, IsHidden = false, AddressFrom = destWallet?.Address, AddressTo = destWallet?.MultiSig, Multisig = destWallet?.MultiSig, IsSettled = false, State = transferState }; var fromOperation = new TransferEvent { Id = context.Transfers.Single(x => x.ClientId == message.FromClientId).OperationId, ClientId = message.FromClientId, DateTime = DateTime.UtcNow, FromId = null, AssetId = message.AssetId, Amount = -amountNoFee, TransactionId = transactionId, IsHidden = false, AddressFrom = sourceWallet?.Address, AddressTo = sourceWallet?.MultiSig, Multisig = sourceWallet?.MultiSig, IsSettled = false, State = transferState }; toOperation.AddFeeDataToOperation(message, asset); fromOperation.AddFeeDataToOperation(message, asset); await RegisterOperation(toOperation); await RegisterOperation(fromOperation); }