Esempio n. 1
0
        private void addTransferToPosition(AssetTransferData transferRequest)
        {
            ClientPositionData ClientPosition = new ClientPositionData();
            TokenRateData      TokenRate      = new TokenRateData();
            ClientPosition     clientPositionRecord;

            lock (ClientPositionLock)
            {
                if (ClientPositions.TryGetValue(transferRequest.clientId, out clientPositionRecord) == false)
                {
                    clientPositionRecord = new ClientPosition(transferRequest.clientId);
                    ClientPositions.TryAdd(transferRequest.clientId, clientPositionRecord);
                }

                if (clientPositionRecord == null)
                {
                    throw new Exception("Unable to find/create client position record");
                }

                if (transferRequest.transferType == TransferTypeEnum.Deposit)
                {
                    if (clientPositionRecord.ClientPositions.TryGetValue(transferRequest.tokenId, out ClientPosition) == true)
                    {
                        ClientPosition.TokenAmount += transferRequest.tokenAmount;
                        ClientPosition.TokenValue   = ClientPosition.TokenAmount * ClientPosition.TokenRate;
                    }
                    else
                    {
                        ClientPosition = new ClientPositionData();

                        ClientPosition.TokenId     = transferRequest.tokenId;
                        ClientPosition.TokenAmount = transferRequest.tokenAmount;

                        ClientPosition.TokenRate   = 0.0m;
                        ClientPosition.TokenRateIn = "USD";

                        if (TokenRates.TryGetValue(ClientPosition.TokenId, out TokenRate) == true)
                        {
                            ClientPosition.TokenRate   = (decimal)TokenRate.AskRate;
                            ClientPosition.TokenRateIn = TokenRate.PriceCurrency;
                        }

                        ClientPosition.TokenValue = ClientPosition.TokenAmount * ClientPosition.TokenRate;
                        clientPositionRecord.ClientPositions.TryAdd(ClientPosition.TokenId, ClientPosition);
                    }
                }
                else
                {
                    if (clientPositionRecord.ClientPositions.TryGetValue(transferRequest.tokenId, out ClientPosition) == true)
                    {
                        ClientPosition.TokenAmount -= transferRequest.tokenAmount;
                        ClientPosition.TokenValue   = ClientPosition.TokenAmount * ClientPosition.TokenRate;
                    }
                }
            }
        }
Esempio n. 2
0
        public AssetDepositData AddDeposit(AssetDepositData depositNotification)
        {
            //depositNotification.referenceId = Guid.NewGuid().ToString();

            lock (DepositNotificationLock)
            {
                DepositNotifications.TryAdd(depositNotification.referenceId, depositNotification);

                Console.WriteLine("Asset Deposit Notification {0} Added", depositNotification.referenceId);

                AssetTransferData newTransfer = new AssetTransferData();

                newTransfer.clientId = depositNotification.clientId;

                newTransfer.referenceId = depositNotification.referenceId;
                newTransfer.assetId     = depositNotification.assetId;
                newTransfer.assetAmount = depositNotification.amount;

                newTransfer.transferStatus = TransferStatusEnum.InProgress;
                newTransfer.transferType   = TransferTypeEnum.Deposit;

                newTransfer.tokenId     = '@' + depositNotification.assetId;
                newTransfer.tokenAmount = depositNotification.amount;

                switch (newTransfer.clientId)
                {
                case 1:
                    newTransfer.forAccountOf = "TradezDigital";
                    break;

                case 4:
                    newTransfer.forAccountOf = "VinceSmall";
                    break;

                case 5:
                    newTransfer.forAccountOf = "MarkVanRoon";
                    break;

                default:
                    newTransfer.forAccountOf = String.Format("Abacas Exchange Client {0}", newTransfer.clientId);
                    break;
                }

                lock (AssetTransferLock)
                {
                    AssetTransfers.TryAdd(newTransfer.referenceId, newTransfer);
                    Console.WriteLine("Asset Deposit Transfer Added {0}", newTransfer.referenceId);
                }
            }

            return(depositNotification);
        }
Esempio n. 3
0
        public AssetWithdrawalData AddWithdrawal(AssetWithdrawalData withdrawalRequest)
        {
            lock (WithdrawalRequestLock)
            {
                //withdrawalRequest.referenceId = Guid.NewGuid().ToString();
                WithdrawalRequests.TryAdd(withdrawalRequest.referenceId, withdrawalRequest);

                Console.WriteLine("Asset Withdrawal Notification {0} Added", withdrawalRequest.referenceId);

                AssetTransferData newTransfer = new AssetTransferData();

                newTransfer.clientId = withdrawalRequest.clientId;

                newTransfer.referenceId = withdrawalRequest.referenceId;
                newTransfer.assetId     = withdrawalRequest.tokenId.Substring(1);
                newTransfer.assetAmount = withdrawalRequest.amount;

                newTransfer.transferStatus = TransferStatusEnum.InProgress;
                newTransfer.transferType   = TransferTypeEnum.Withdrawal;

                newTransfer.tokenId     = withdrawalRequest.tokenId;
                newTransfer.tokenAmount = withdrawalRequest.amount;

                switch (newTransfer.clientId)
                {
                case 1:
                    newTransfer.forAccountOf = "TradezDigital";
                    break;

                case 4:
                    newTransfer.forAccountOf = "VinceSmall";
                    break;

                case 5:
                    newTransfer.forAccountOf = "MarkVanRoon";
                    break;

                default:
                    newTransfer.forAccountOf = String.Format("Abacas Exchange Client {0}", newTransfer.clientId);
                    break;
                }

                lock (AssetTransferLock)
                {
                    AssetTransfers.TryAdd(newTransfer.referenceId, newTransfer);
                    Console.WriteLine("Asset Withdrawal Transfer Added {0}", newTransfer.referenceId);
                }
            }

            return(withdrawalRequest);
        }
Esempio n. 4
0
        private void FillOpenOrders(object state)
        {
            lock (OrderListLock)
            {
                if (!_fillingOpenOrders)
                {
                    _fillingOpenOrders = true;


                    // Add the processing of transfer requests

                    //Console.WriteLine("Processing Asset Transfer Requests");

                    foreach (var transfer in AssetTransfers)
                    {
                        AssetTransferData transferRequest = transfer.Value;

                        if (transferRequest.transferStatus == TransferStatusEnum.InProgress)
                        {
                            if (transferRequest.transferType == TransferTypeEnum.Deposit)
                            {
                                AssetDepositData depositRecord;

                                addTransferToPosition(transferRequest);
                                addTransferToBlockChain(transferRequest);

                                // Update the Transfer Activity to Completed, and remove the deposit notification
                                transferRequest.transferStatus = TransferStatusEnum.Completed;
                                DepositNotifications.TryRemove(transferRequest.referenceId, out depositRecord);
                            }
                            else
                            {
                                AssetWithdrawalData withdrawalRecord;

                                addTransferToPosition(transferRequest);
                                addTransferToBlockChain(transferRequest);

                                // Update the Transfer Activity to Completed, and remove the deposit notification
                                transferRequest.transferStatus = TransferStatusEnum.Completed;
                                WithdrawalRequests.TryRemove(transferRequest.referenceId, out withdrawalRecord);
                            }
                        }
                    }

                    _fillingOpenOrders = false;
                }
            }
        }
Esempio n. 5
0
        private void addTransferToBlockChain(AssetTransferData transferRequest)
        {
            BlockChainData blockChainRecord = new BlockChainData();
            KeyPairData    KeyPair          = new KeyPairData();

            lock (BlockChainTransactionsLock)
            {
                blockChainRecord = new BlockChainData();

                blockChainRecord.Date        = DateTime.Now.ToShortDateString();
                blockChainRecord.BlockNumber = blockCount++;
                blockChainRecord.OrderId     = orderCount++;
                blockChainRecord.clientId    = transferRequest.clientId;

                if (transferRequest.transferType == TransferTypeEnum.Deposit)
                {
                    blockChainRecord.PayReceive  = "Receive";
                    blockChainRecord.TokenAmount = transferRequest.tokenAmount;
                    blockChainRecord.TokenId     = transferRequest.tokenId;
                }
                else
                {
                    blockChainRecord.PayReceive  = "Pay";
                    blockChainRecord.TokenAmount = transferRequest.tokenAmount;
                    blockChainRecord.TokenId     = transferRequest.tokenId;
                }

                if (KeyPairs.TryGetValue(1, out KeyPair) == true)
                {
                    blockChainRecord.Address = KeyPair.publicKey;
                }

                blockChainRecord.TransactionHash = HashOrder(blockChainRecord);
                BlockChainTransactions.TryAdd(blockChainRecord.BlockNumber, blockChainRecord);
            }
        }