public static AssetSettingEntity Create(IAssetSetting setting) { return(new AssetSettingEntity { PartitionKey = GeneratePartition(setting.Asset), RowKey = Guid.NewGuid().ToString(), HotWallet = setting.HotWallet, ChangeWallet = setting.ChangeWallet }); }
private async Task <IAssetSetting> CreateAssetSetting(string assetId, IAssetSetting defaultSetttings) { var clone = defaultSetttings.Clone(assetId); clone.ChangeWallet = defaultSetttings.ChangeWallet; clone.HotWallet = defaultSetttings.ChangeWallet; try { await _assetSettingRepository.Insert(clone); } catch { return(await _assetSettingRepository.GetAssetSetting(assetId) ?? defaultSetttings); } return(clone); }
public static AssetSettingEntity Create(IAssetSetting src) { return(new AssetSettingEntity { PartitionKey = GeneratePartitionKey(), RowKey = src.Asset, HotWallet = src.HotWallet, ChangeWallet = src.ChangeWallet, CashinCoef = src.CashinCoef, Dust = src.Dust, MaxOutputsCountInTx = src.MaxOutputsCountInTx, MinOutputsCount = src.MinOutputsCount, MaxOutputsCount = src.MaxOutputsCount, MinBalance = src.MinBalance, OutputSize = src.OutputSize, PrivateIncrement = src.PrivateIncrement }); }
public Task Insert(IAssetSetting setting) { return(_table.InsertAsync(AssetSettingEntity.ById.Create(setting))); }
private async Task GenerateOutputs(int generateCnt, IEnumerable <ICoin> coins, BitcoinAddress hotWallet, IMoney amount, IAsset asset, IAssetSetting setting) { var colored = amount is AssetMoney; await _logger.WriteInfoAsync("GenerateOffchainOutputsFunction", "GenerateOutputs", null, $"Start generate {generateCnt} outputs for {asset.Id}"); var generated = 0; while (generated < generateCnt) { var outputsCount = Math.Min(setting.MaxOutputsCountInTx, generateCnt - generated); var context = _transactionBuildContextFactory.Create(_connectionParams.Network); if (colored) { var total = coins.Cast <ColoredCoin>().DefaultIfEmpty().Sum(o => o?.Amount.Quantity ?? 0); if (total < ((AssetMoney)amount).Quantity * outputsCount) { return; } } else { var total = coins.Cast <Coin>().DefaultIfEmpty().Sum(o => o?.Amount ?? Money.Zero); if (total < (Money)amount * outputsCount) { return; } } await context.Build(async() => { var builder = new TransactionBuilder(); builder.AddCoins(coins); for (int i = 0; i < outputsCount; i++) { if (colored) { builder.SendAsset(hotWallet, (AssetMoney)amount); } else { builder.Send(hotWallet, amount); } } builder.SetChange(hotWallet, colored ? ChangeType.Colored : ChangeType.Uncolored); await _transactionBuildHelper.AddFee(builder, context); builder.SetChange(hotWallet, colored ? ChangeType.Colored : ChangeType.Uncolored); var tr = builder.BuildTransaction(true); await SignAndBroadcastTransaction(tr, context); var usedCoins = new HashSet <OutPoint>(tr.Inputs.Select(o => o.PrevOut)); coins = coins.Where(o => !usedCoins.Contains(o.Outpoint)).ToList(); return(""); }); generated += outputsCount; } await _logger.WriteInfoAsync("GenerateOffchainOutputsFunction", "GenerateOutputs", null, "End process"); }
public Task InsertOrReplaceSetting(IAssetSetting setting) { return(_table.InsertOrReplaceAsync(AssetSettingEntity.Create(setting))); }