示例#1
0
        public async Task TransferConvertedBetweenClientsWithNotification(string destClientId, string sourceClientId,
                                                                          double amount, string assetId, double price, double amountFrom, string fromAssetId, bool fromBtcConvWallet = false)
        {
            var additionalActionsDest = new TransferContextData.AdditionalActions
            {
                CashInConvertedOkEmail = new TransferContextData.ConvertedOkEmailAction(fromAssetId, price, amountFrom, amount),
                PushNotification       = new TransferContextData.PushNotification(assetId, amount)
            };

            await GenerateTransfer(destClientId, sourceClientId, amount, assetId, fromBtcConvWallet, additionalActionsDest);
        }
示例#2
0
        public async Task <string> TransferBetweenClientsWithNotification(string destClientId, string sourceClientId,
                                                                          double amount, string assetId)
        {
            var additionalActionsDest = new TransferContextData.AdditionalActions
            {
                SendTransferEmail = new TransferContextData.EmailAction(assetId, amount),
                PushNotification  = new TransferContextData.PushNotification(assetId, amount)
            };

            return(await GenerateTransfer(destClientId, sourceClientId, amount, assetId, false, additionalActionsDest));
        }
示例#3
0
        public async Task TransferFromOrdinaryWalletWithNotification(string clientId, string sourceAddress, string sourceKey,
                                                                     double amount, string assetId)
        {
            var additionalActionsDest = new TransferContextData.AdditionalActions
            {
                SendTransferEmail = new TransferContextData.EmailAction(assetId, amount),
                PushNotification  = new TransferContextData.PushNotification(assetId, amount)
            };

            await
            GenerateTransferFromOrdinaryWallet(clientId, sourceAddress, sourceKey, amount, assetId,
                                               additionalActionsDest);
        }
示例#4
0
        public async Task GenerateTransferFromOrdinaryWallet(string clientId, string sourceAddress, string sourceKey, double amount, string assetId,
                                                             TransferContextData.AdditionalActions additionalActionsDest = null)
        {
            var asset = await _assetsRepository.GetAssetAsync(assetId);

            if (asset == null)
            {
                return;
            }

            amount = Math.Abs(amount);

            var transactionId = Guid.NewGuid().ToString("N");

            var clientCreds = await _walletCredentialsRepository.GetAsync(clientId);

            var transfer =
                await
                _transferEventsRepository.RegisterAsync(TransferEvent.CreateNew(clientId, clientCreds.MultiSig, null, assetId, amount, transactionId,
                                                                                sourceAddress, clientCreds.MultiSig));

            var contextData = TransferContextData.Create(new TransferContextData.TransferModel
            {
                ClientId    = clientId,
                OperationId = transfer.Id,
                Actions     = additionalActionsDest
            });

            if (_baseSettings.UsePushPrivateKeyService)
            {
                await _srvBlockchainHelper.PushPrivateKey(sourceKey, true);

                sourceKey = null;
            }

            var queueMsg = await
                           _bitCoinCommandProducer.ProduceGenerateTransferAsync(transactionId, sourceAddress, sourceKey,
                                                                                clientCreds.MultiSig, amount, asset.BlockChainId);

            await _bitCoinTransactionsRepository.CreateAsync(transactionId, queueMsg, contextData);
        }
示例#5
0
        public async Task <string> GenerateTransfer(string destClientId, string sourceClientId, double amount, string assetId,
                                                    bool fromBtcConvWallet = false,
                                                    TransferContextData.AdditionalActions additionalActionsDest = null,
                                                    TransferContextData.AdditionalActions additionalActionsSrc  = null)
        {
            var asset = await _assetsRepository.GetAssetAsync(assetId);

            if (asset == null)
            {
                throw new ArgumentNullException(nameof(assetId));
            }

            amount = Math.Abs(amount);

            var transactionId = Guid.NewGuid().ToString("N");

            var destClientCredentials = await _walletCredentialsRepository.GetAsync(destClientId);

            var sourceWalletCred = await _walletCredentialsRepository.GetAsync(sourceClientId);

            var destTransfer =
                await
                _transferEventsRepository.RegisterAsync(TransferEvent.CreateNew(destClientId, destClientCredentials.MultiSig, null, assetId, amount, transactionId,
                                                                                destClientCredentials.Address, destClientCredentials.MultiSig));

            var sourceTransfer =
                await
                _transferEventsRepository.RegisterAsync(TransferEvent.CreateNew(sourceClientId,
                                                                                fromBtcConvWallet ? sourceWalletCred.BtcConvertionWalletAddress : sourceWalletCred.MultiSig,
                                                                                null, assetId, -amount, transactionId,
                                                                                sourceWalletCred.Address, sourceWalletCred.MultiSig));

            var contextData = TransferContextData.Create(new TransferContextData.TransferModel
            {
                ClientId    = destClientId,
                OperationId = destTransfer.Id,
                Actions     = additionalActionsDest
            }, new TransferContextData.TransferModel
            {
                ClientId    = sourceClientId,
                OperationId = sourceTransfer.Id,
                Actions     = additionalActionsSrc
            });


            var pk = fromBtcConvWallet
                ? sourceWalletCred.BtcConvertionWalletPrivateKey
                : sourceWalletCred.PrivateKey;

            if (_baseSettings.UsePushPrivateKeyService)
            {
                await _srvBlockchainHelper.PushPrivateKey(pk, fromBtcConvWallet);
            }

            var queueMsg = await
                           _bitCoinCommandProducer.ProduceGenerateTransferAsync(transactionId,
                                                                                fromBtcConvWallet?sourceWalletCred.BtcConvertionWalletAddress : sourceWalletCred.MultiSig,
                                                                                _baseSettings.UsePushPrivateKeyService?null : pk, destClientCredentials.MultiSig, amount, asset.BlockChainId);

            await _bitCoinTransactionsRepository.CreateAsync(transactionId, queueMsg, contextData);

            return(destTransfer.Id);
        }