public override void Awake(JToken jd = null) { style = jd["style"]?.ToString(); float.TryParse(jd["serviceFee"]?.ToString(), out serviceFee); serviceFee = MathF.Max(0, MathF.Min(1, serviceFee)); if (style == "PPLNS") { string db_path = jd["db_path"]?.ToString(); var DatabasePath = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), db_path); PoolDBStore.Init(DatabasePath); } if (jd["OutTimeDBMiner"] != null) { long.TryParse(jd["OutTimeDBMiner"]?.ToString(), out OutTimeDBMiner); } if (jd["OutTimeDBCounted"] != null) { long.TryParse(jd["OutTimeDBCounted"]?.ToString(), out OutTimeDBCounted); } if (jd["RewardInterval"] != null) { long.TryParse(jd["RewardInterval"]?.ToString(), out RewardInterval); } httpPool = Entity.Root.GetComponentInChild <HttpPool>(); transferProcess = Entity.Root.AddComponent <TransferProcess>(); }
public override void Awake(JToken jd = null) { string db_path = jd["db_path"]?.ToString(); var DatabasePath = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), db_path); PoolDBStore.Init(DatabasePath); style = jd["style"]?.ToString(); float.TryParse(jd["serviceFee"]?.ToString(), out serviceFee); serviceFee = MathF.Max(0, MathF.Min(0.3f, serviceFee)); if (jd["registerPool"] != null) { bool.TryParse(jd["registerPool"]?.ToString(), out registerPool); } if (jd["OutTimeDBMiner"] != null) { long.TryParse(jd["OutTimeDBMiner"]?.ToString(), out OutTimeDBMiner); } if (jd["OutTimeDBCounted"] != null) { long.TryParse(jd["OutTimeDBCounted"]?.ToString(), out OutTimeDBCounted); } if (jd["RewardInterval"] != null) { long.TryParse(jd["RewardInterval"]?.ToString(), out RewardInterval); } if (registerPool) { Log.Info($"Pool.registerPool=true --> Pool.style=SOLO"); style = "SOLO"; RewardInterval = Math.Max(8, Math.Min(32, RewardInterval)); } else if (style == "PPLNS") { #if RELEASE RewardInterval = Math.Max(120, Math.Min(240 * 24, RewardInterval)); #else RewardInterval = Math.Max(32, RewardInterval); #endif } Log.Info($"HttpPool.style = {style}"); Log.Info($"HttpPool.registerPool = {registerPool}"); Log.Info($"HttpPool.RewardInterval = {RewardInterval}"); httpPool = Entity.Root.GetComponentInChild <HttpPool>(); transferProcess = Entity.Root.AddComponent <TransferProcess>(); }
public MinerView GetMinerView(string address, long transferIndex, long transferColumn, long minerIndex, long minerColumn) { if (getMinerViewTimePass.IsPassSet()) { getMinerViewCache.Clear(); } if (getMinerViewCache.TryGetValue($"{address}_{transferIndex}_{transferColumn}_{minerIndex}_{minerColumn}", out MinerView minerViewLast)) { return(minerViewLast); } transferColumn = Math.Min(transferColumn, 100); minerColumn = Math.Min(minerColumn, 100); var minerView = new MinerView(); minerView.address = address; Dictionary <string, BlockSub> minerTransferCache = null; using (DbSnapshot snapshot = PoolDBStore.GetSnapshot()) { var str = snapshot.Get($"Pool_Cache_MinerReward"); if (!string.IsNullOrEmpty(str)) { minerTransferCache = JsonHelper.FromJson <Dictionary <string, BlockSub> >(str); } } var transfers_cur = minerTransferCache?.Values.FirstOrDefault(c => c.addressOut == address); if (transfers_cur != null) { minerView.amount_cur = transfers_cur.amount; minerView.share = transfers_cur.type; } // 交易确认 using (DbSnapshot snapshot = PoolDBStore.GetSnapshot()) { int TopIndex = snapshot.Queue.GetTopIndex($"Pool_MT_{address}"); for (int ii = 1; ii <= (int)transferColumn; ii++) { var value = snapshot.Queue.Get($"Pool_MT_{address}", TopIndex - (int)transferIndex - ii); if (!string.IsNullOrEmpty(value)) { var transfer = JsonHelper.FromJson <BlockSub>(value); if (transfer != null) { minerView.transfers.Add(transfer); } } } foreach (var transfer in minerView.transfers) { // 节点使用自己的地址挖矿 if (transfer.addressIn == transfer.addressOut) { transfer.hash = transfer.addressIn; } else { transfer.hash = TransferProcess.GetMinerTansfer(snapshot, transfer.data); } } } var miners = httpPool.GetMinerRewardMin(out long miningHeight); var minerList = miners?.Values.Where((x) => x.address == address).ToList(); double totalPower = 0L; if (minerList != null) { minerList.Sort((MinerTask a, MinerTask b) => { return(a.number.CompareTo(b.number)); }); // 当前页矿机算力 for (var ii = 0; ii < minerColumn; ii++) { if ((minerIndex + ii) >= minerList.Count) { break; } var miner = minerList[(int)minerIndex + ii]; if (string.IsNullOrEmpty(miner.power_cur)) { miner.power_cur = CalculatePower.GetPowerCompany(CalculatePower.Power(miner.diff)); } var minerdata = new MinerViewData(); minerdata.number = miner.number; minerdata.lasttime = miner.time; minerdata.power_cur = miner.power_cur; double.TryParse(miner.power_average, out double power_average); minerdata.power_average = CalculatePower.GetPowerCompany(power_average); minerView.miners.Add(minerdata); } // 当前总算力 for (var ii = 0; ii < minerList.Count; ii++) { var miner = minerList[ii]; if (double.TryParse(miner.power_average, out double power_average)) { totalPower += power_average; } } minerView.totalMiners = minerList.Count; } minerView.totalPower = CalculatePower.GetPowerCompany(totalPower); getMinerViewCache.Add($"{address}_{transferIndex}_{transferColumn}_{minerIndex}_{minerColumn}", minerView); return(minerView); }