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