public bool Set(string key, object value) { bool result = false; using (X42DbContext dbContext = new X42DbContext(databaseSettings.ConnectionString)) { var item = dbContext.DictionaryItems.Where(d => d.Key == key).FirstOrDefault(); if (item == null) { var newDictionaryItem = new DictionaryData() { Key = key, Value = ConvertType <string>(value) }; var addedItem = dbContext.Add(newDictionaryItem); if (addedItem.State == EntityState.Added) { dbContext.SaveChanges(); result = true; } } else { item.Value = ConvertType <string>(value); dbContext.SaveChanges(); result = true; } } return(result); }
public async Task <PriceLockResult> CreatePriceLock(CreatePriceLockRequest priceLockRequest, string validPriceLockId = "") { var result = new PriceLockResult(); var fiatPair = FiatPairs.Where(f => (int)f.Currency == priceLockRequest.RequestAmountPair).FirstOrDefault(); if (fiatPair != null) { var averagePrice = fiatPair.GetPrice(); if (averagePrice != -1) { var price = Math.Round(priceLockRequest.RequestAmount / averagePrice, 8).Normalize(); var fee = Math.Round(price * priceLockFeePercent / 100, 8).Normalize(); var feeAddress = networkFeatures.GetMyFeeAddress(); var signAddress = networkFeatures.GetMySignAddress(); if (price < 42000000) { var expirationBlock = Convert.ToInt32(networkFeatures.BestBlockHeight + Convert.ToInt32(priceLockRequest.ExpireBlock)); if (!string.IsNullOrEmpty(validPriceLockId)) { expirationBlock = Convert.ToInt32(priceLockRequest.ExpireBlock); } using (X42DbContext dbContext = new X42DbContext(databaseSettings.ConnectionString)) { var newPriceLock = new PriceLockData() { DestinationAddress = priceLockRequest.DestinationAddress, DestinationAmount = price, FeeAmount = fee, SignAddress = signAddress, FeeAddress = feeAddress, ExpireBlock = expirationBlock, RequestAmount = priceLockRequest.RequestAmount, RequestAmountPair = priceLockRequest.RequestAmountPair, Status = (int)Status.New }; if (!string.IsNullOrEmpty(validPriceLockId)) { newPriceLock.PriceLockId = new Guid(validPriceLockId); } var newPriceLockRecord = dbContext.Add(newPriceLock); if (newPriceLockRecord.State == EntityState.Added) { string signature = await networkFeatures.SignPriceLock($"{newPriceLock.PriceLockId}{newPriceLock.DestinationAddress}{newPriceLock.DestinationAmount}{newPriceLock.FeeAddress}{newPriceLock.FeeAmount}"); if (!string.IsNullOrEmpty(signature)) { newPriceLock.PriceLockSignature = signature; dbContext.SaveChanges(); result.DestinationAddress = newPriceLock.DestinationAddress; result.DestinationAmount = newPriceLock.DestinationAmount; result.FeeAddress = newPriceLock.FeeAddress; result.SignAddress = newPriceLock.SignAddress; result.FeeAmount = newPriceLock.FeeAmount; result.RequestAmount = newPriceLock.RequestAmount; result.RequestAmountPair = newPriceLock.RequestAmountPair; result.PriceLockId = newPriceLock.PriceLockId.ToString(); result.PriceLockSignature = newPriceLock.PriceLockSignature; result.ExpireBlock = newPriceLock.ExpireBlock; result.Status = (int)Status.New; result.Success = true; List <ServerNodeData> tier3Nodes = dbContext.ServerNodes.Where(s => s.Active && s.Tier == (int)TierLevel.Three).ToList(); await networkFeatures.RelayPriceLock(newPriceLock, tier3Nodes, networkCancellationTokenSource.Token); } else { result.ResultMessage = "Problem with node, Failed to sign price lock."; result.Success = false; } } } } else { result.ResultMessage = "Price not valid, max cap exceeded."; result.Success = false; } } else { result.ResultMessage = "Node could not create price lock because insufficient price data."; result.Success = false; } } else { result.ResultMessage = "The supplied pair does not exist."; result.Success = false; } return(result); }