示例#1
0
        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);
            }
        }
示例#2
0
        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);
        }