// 等于 public static bool Equals(string a, string b) { a = string.IsNullOrEmpty(a) ? "0" : a.Replace(",", ""); b = string.IsNullOrEmpty(b) ? "0" : b.Replace(",", ""); return(BigFloat.Parse(a) == BigFloat.Parse(b)); }
public static string Div(string a, string b) { a = string.IsNullOrEmpty(a) ? "0" : a.Replace(",", ""); b = string.IsNullOrEmpty(b) ? "0" : b.Replace(",", ""); return((BigFloat.Parse(a) / BigFloat.Parse(b)).ToString()); }
public static string Sqrt(string a) { a = string.IsNullOrEmpty(a) ? "0" : a.Replace(",", ""); return(BigFloat.Sqrt(BigFloat.Parse(a)).ToString()); }
public static string Abs(string a) { a = string.IsNullOrEmpty(a) ? "0" : a.Replace(",", ""); return((BigFloat.Abs(BigFloat.Parse(a))).ToString(8)); }
// Miner reward, only after confirming that it cannot be rolled back public Dictionary <string, BlockSub> MinerReward_PPLNS(string today, long minHeight, long maxHeight) { Dictionary <string, BlockSub> minerTransfer = new Dictionary <string, BlockSub>(); if (httpPool != null) { WalletKey walletKey = Wallet.GetWallet().GetCurWallet(); for (long rewardheight = minHeight; rewardheight < maxHeight; rewardheight++) { Dictionary <string, MinerTask> miners = null; using (DbSnapshot snapshot = PoolDBStore.GetSnapshot()) { string json = snapshot.Get("Pool_H_" + rewardheight); if (!string.IsNullOrEmpty(json)) { miners = JsonHelper.FromJson <Dictionary <string, MinerTask> >(json); } } //var miners = httpPool.GetMiner(rewardheight); if (miners != null) { string ownerAddress = Wallet.GetWallet().GetCurWallet().ToAddress(); var mcblk = BlockChainHelper.GetMcBlock(rewardheight); if (mcblk != null && mcblk.Address == ownerAddress) { BigFloat reward = new BigFloat(Consensus.GetReward(rewardheight)); reward = reward * (1.0f - serviceFee); var miner = miners.Values.FirstOrDefault(c => c.random == mcblk.random); if (miner == null) { continue; } // Total power BigFloat diffsum = new BigFloat(0); foreach (var dic in miners.Values) { if (string.IsNullOrEmpty(dic.address)) { continue; } if (dic.diff < 0.99999f) { continue; } diffsum += new BigFloat(dic.diff); } // Reward for participation foreach (var dic in miners.Values) { if (string.IsNullOrEmpty(dic.address)) { continue; } if (dic.diff < 0.99999f) { continue; } var v = new BigFloat(dic.diff); string pay = BigHelper.Round8((v * reward / diffsum).ToString()); if (minerTransfer.TryGetValue(dic.address, out BlockSub transfer)) { transfer.amount = BigHelper.Add(transfer.amount, pay); } else if (BigHelper.Greater(pay, "0.002", false)) { transfer = new BlockSub(); transfer.addressIn = ownerAddress; transfer.addressOut = dic.address; transfer.amount = BigHelper.Sub(pay, "0.002"); // 扣除交易手续费 transfer.type = "transfer"; transfer.data = CryptoHelper.Sha256($"{today}_{maxHeight}_{ownerAddress}_{dic.address}_MinerReward"); minerTransfer.Add(transfer.addressOut, transfer); } } } } } } return(minerTransfer); }