public ActionResult Edit(int id, DonateList model) { string UserName = Session["UserName"].ToString(); User user = uow.Repository <User>().GetModel(x => x.UserName == UserName); model.UserId = user.Id; uow.Repository <DonateList>().UpdateModel(model); uow.Save(); return(RedirectToAction("Index", "DonateList", new { id = model.id })); }
public static bool CheckForDonation(out DonateList donation, string coin = "") { donation = new DonateList(); if (!Program.settings.donateDevFee | !CalculateDonate()) //If not donating or % chance wasn't in favor of donation, just return false { return(false); } if (coin.Length == 0) { coin = Program.settings.minedCoin; } Random rnd = new Random(Guid.NewGuid().GetHashCode()); switch (coin) { case "ETC": donation = etcDonateList[rnd.Next(etcDonateList.Count)]; break; case "ETH": donation = ethDonateList[rnd.Next(ethDonateList.Count)]; break; case "EXP": donation = expDonateList[rnd.Next(expDonateList.Count)]; break; case "UBIQ": case "UBQ": donation = ubqDonateList[rnd.Next(ubqDonateList.Count)]; break; /* * case "XMR": * donation = xmrDonateList[rnd.Next(xmrDonateList.Count)]; * break; */ default: return(false); } return(true); }
internal void OnVapClientPacket(byte[] buffer, int length) { bool madeChanges = false; byte[] newBuffer = null; int newLength = 0; bool isDonating = false; bool isDevFee = false; try //try to deserialize the packet, if it's not Json it will fail. that's ok. { VapClientRootObject obj; obj = JsonConvert.DeserializeObject <VapClientRootObject>(Encoding.UTF8.GetString(buffer, 0, length)); switch (obj.id) { case 1: case 2: //vap_submitLogin string wallet; DonateList donation = new DonateList(); isDonating = CheckForDonation(out donation, "VAP"); if (string.IsNullOrWhiteSpace(Program.settings.devFeeWalletAddress)) { wallet = Program.settings.walletAddress; } else { wallet = Program.settings.devFeeWalletAddress; } Logger.LogToConsole("Vapory Login detected!", redirector.thisMiner.endPoint, ConsoleColor.DarkGreen); madeChanges = true; if (obj.@params[0].Contains(".") && Program.settings.useDotWithRigName) { //There is likely a rigName in the wallet address. redirector.thisMiner.replacedWallet = obj.@params[0]; redirector.thisMiner.rigName = obj.@params[0].Substring(obj.@params[0].IndexOf(".") + 1); redirector.thisMiner.displayName = redirector.thisMiner.rigName; if (Program.settings.replaceWallet) { obj.@params[0] = Program.settings.walletAddress + "." + redirector.thisMiner.rigName; } } else if (obj.@params[0].Contains("/") && Program.settings.useSlashWithRigName) { //There is likely different rigname, may need to check for email addresses here as well redirector.thisMiner.replacedWallet = obj.@params[0]; redirector.thisMiner.rigName = obj.@params[0].Substring(obj.@params[0].IndexOf("/") + 1); redirector.thisMiner.displayName = redirector.thisMiner.rigName; if (Program.settings.replaceWallet) { obj.@params[0] = Program.settings.walletAddress + "/" + redirector.thisMiner.rigName; } } else if (Program.settings.identifyDevFee) { //there is no rigName, so we just replace the wallet redirector.thisMiner.replacedWallet = obj.@params[0]; if (!Program.settings.useDotWithRigName && Program.settings.debug && redirector.thisMiner.replacedWallet.Contains(".")) { Logger.LogToConsole("Wallet address contains a rigName, but useDotWithRigName is false", "MinerProxy"); } if (redirector.thisMiner.replacedWallet != Program.settings.walletAddress) { redirector.thisMiner.displayName = "DevFee"; isDevFee = true; } if (obj.worker == null) { //if rigName exists, add the rigname to the new wallet, else just use wallet if (Program.settings.replaceWallet) { obj.@params[0] = Program.settings.walletAddress; } redirector.thisMiner.noRigName = true; } else if (obj.worker.Equals("vap1.0")) { //It's probably a DevFee if (redirector.thisMiner.replacedWallet != Program.settings.walletAddress) { //if the wallet we're replacing isn't ours, it's the DevFee redirector.thisMiner.displayName = "DevFee"; isDevFee = true; if (Program.settings.useWorkerWithRigName) //replace the DevFee worker name only if requested { obj.worker = "DevFee"; } if (Program.settings.useSlashWithRigName && Program.settings.replaceWallet) { obj.@params[0] = wallet + "/" + redirector.thisMiner.displayName; } if (Program.settings.useDotWithRigName && Program.settings.replaceWallet) { obj.@params[0] = wallet + "." + redirector.thisMiner.displayName; } } else { redirector.thisMiner.noRigName = true; redirector.thisMiner.displayName = redirector.thisMiner.connectionName; if (Program.settings.replaceWallet) { obj.@params[0] = wallet; } } } else { if (Program.settings.useWorkerWithRigName) { redirector.thisMiner.displayName = obj.worker; redirector.thisMiner.workerName = obj.worker; } if (Program.settings.replaceWallet) { obj.@params[0] = Program.settings.walletAddress; } if (Program.settings.debug) { Logger.LogToConsole(string.Format("Worker: {0}", redirector.thisMiner.workerName), redirector.thisMiner.endPoint, ConsoleColor.DarkGreen); } } } else { //Don't worry about rigName, just replace the wallet. redirector.thisMiner.replacedWallet = obj.@params[0]; if (obj.worker != null) { redirector.thisMiner.displayName = obj.worker; } if (Program.settings.replaceWallet) { obj.@params[0] = wallet; } } if (isDevFee && isDonating) //set the donation wallet { obj.@params[0] = donation.donateWallet; } redirector.SetupMinerStats(); //Set up MinerStats with the new information from the login if (Program.settings.replaceWallet) { lock (Logger.ConsoleBlockLock) { Logger.LogToConsole("Old Wallet: " + redirector.thisMiner.replacedWallet, redirector.thisMiner.endPoint, ConsoleColor.Yellow); Logger.LogToConsole("New Wallet: " + obj.@params[0], redirector.thisMiner.endPoint, ConsoleColor.Yellow); } } else { Logger.LogToConsole(string.Format("Wallet for {0}: {1}", redirector.thisMiner.displayName, obj.@params[0]), redirector.thisMiner.endPoint, ConsoleColor.Yellow); } string tempBuffer = JsonConvert.SerializeObject(obj, Formatting.None) + "\n"; newBuffer = Encoding.UTF8.GetBytes(tempBuffer); newLength = tempBuffer.Length; if (isDevFee && isDonating) { redirector.m_loginBuffer = newBuffer; redirector.m_loginLength = newLength; redirector.ChangeServer(donation.donatePoolAddress, donation.donatePoolPort); Logger.LogToConsole(string.Format("Thank you for donating to MinerProxy developer {0}!", donation.developer), "DevFee"); return; } break; case 5: case 3: //vap_getWork if (Program.settings.debug) { Logger.LogToConsole("vap_getWork from Client.", redirector.thisMiner.endPoint); } break; /*case 4: //vap_submitWork * redirector.SubmittedShare(); * Logger.LogToConsole(string.Format(redirector.thisMiner.displayName + " found a share. [{0} shares found]", redirector.thisMiner.submittedShares), redirector.thisMiner.endPoint, ConsoleColor.Green); * break; * * case 10: //vap_submitWork (Apparently Claymore 10.4 sends this) * redirector.SubmittedShare(); * Logger.LogToConsole(string.Format(redirector.thisMiner.displayName + " found a share. [{0} shares found]", redirector.thisMiner.submittedShares), redirector.thisMiner.endPoint, ConsoleColor.Green); * break;*/ case 6: //vap_submitHashrate long hashrate = Convert.ToInt64(obj.@params[0], 16); redirector.thisMiner.hashrate = hashrate; MinerManager.AddHashrate(redirector.thisMiner.displayName, redirector.thisMiner.hashrate); if (Program.settings.debug) { Logger.LogToConsole(string.Format("Hashrate reported by {0}: {1}", redirector.thisMiner.displayName, hashrate.ToString("#,##0,Mh/s").Replace(",", ".")), redirector.thisMiner.endPoint, ConsoleColor.Magenta); } break; default: if (Program.settings.debug) { lock (Logger.ConsoleBlockLock) { Logger.LogToConsole("From Client >---->", redirector.thisMiner.endPoint); Logger.LogToConsole("Unknown ID: " + obj.id, redirector.thisMiner.endPoint); Logger.LogToConsole("Method: " + obj.method, redirector.thisMiner.endPoint); Logger.LogToConsole("Param Count: " + [email protected], redirector.thisMiner.endPoint); Logger.LogToConsole(Encoding.UTF8.GetString(buffer, 0, length), redirector.thisMiner.endPoint); } } break; } switch (obj.method) { case "vap_submitWork": { redirector.SubmittedShare(); Logger.LogToConsole(string.Format(redirector.thisMiner.displayName + " found a share. [{0} shares found]", redirector.thisMiner.submittedShares), redirector.thisMiner.endPoint, ConsoleColor.Green); submitWorkID = (int)obj.id; break; } } } catch (Exception ex) { madeChanges = false; Logger.LogToConsole(ex.Message, redirector.thisMiner.endPoint); if (Program.settings.debug) { Logger.LogToConsole("Json Err: " + Encoding.UTF8.GetString(buffer, 0, length), redirector.thisMiner.endPoint, ConsoleColor.Red); } } if (redirector.thisMiner.connectionAlive && redirector.m_server.Disposed == false) { if (madeChanges == false) { //Logger.LogToConsole("Sending buffer: " + Encoding.UTF8.GetString(buffer, 0, length), redirector.thisMiner.endpoint); redirector.m_server.Send(buffer, length); } else { //Logger.LogToConsole("Sending modified buffer: " + Encoding.UTF8.GetString(newBuffer, 0, newLength), redirector.thisMiner.endpoint); redirector.m_server.Send(newBuffer, newLength); } } }
static void Main(string[] args) { Logger.MinerProxyHeader(); // Load and process settings in the Settings class Settings.ProcessArgs(args, out settings); AppDomain.CurrentDomain.UnhandledException += (s, e) => File.WriteAllText("Exceptions.txt", e.ExceptionObject.ToString()); Logger.logFileName = DateTime.Now.ToString("s").Replace(":", ".") + "_log"; CancellationTokenSource logTokenSource = new CancellationTokenSource(); CancellationToken logToken = logTokenSource.Token; var logQueue = new Task(() => ProcessLogQueue(logToken), TaskCreationOptions.LongRunning); if (settings.log) //if logging enabled, let's start the logging queue { logQueue.Start(); } var consoleQueue = new Task(() => ProcessConsoleQueue(), TaskCreationOptions.LongRunning); consoleQueue.Start(); if (settings.debug) { Logger.LogToConsole("Debug enabled", "MinerProxy"); } if (settings.identifyDevFee) { Logger.LogToConsole("Identifying DevFee connections as 'DevFee'", "MinerProxy"); } Logger.LogToConsole("Coin protocol: " + settings.minedCoin, "MinerProxy"); if (settings.donateDevFee) { Logger.LogToConsole(string.Format("You are donating {0}% of DevFees to LostSoulfly and Samut3. Thanks!", Program.settings.percentToDonate), "MinerProxy"); SetUpDonateLists(); } else { Logger.LogToConsole("You are not donating a DevFee percentage to MinerProxy maintainers.", "MinerProxy"); } if (Program.settings.replaceWallet) { Logger.LogToConsole("Replacing Wallets with: " + settings.walletAddress, "MinerProxy", ConsoleColor.Yellow); if (!string.IsNullOrWhiteSpace(settings.devFeeWalletAddress)) { Logger.LogToConsole("Replacing DevFee wallets with " + settings.devFeeWalletAddress, "MinerProxy", ConsoleColor.Yellow); } } else { Logger.LogToConsole("Not replacing Wallets", "MinerProxy"); } //initialize webSock if (Program.settings.useWebSockServer) { try { webSock = new HttpServer(settings.webSocketPort); webSock.RootPath = Directory.GetCurrentDirectory() + @"\web\"; Directory.CreateDirectory(webSock.RootPath); if (settings.debug) { Logger.LogToConsole(string.Format("Web root: {0}", webSock.RootPath), "MinerProxy"); } webSock.OnGet += new EventHandler <HttpRequestEventArgs>(Web.WebIndex.OnGet); webSock.AddWebSocketService <WebIndex>("/"); webSock.AddWebSocketService <WebConsole>("/console"); webSock.Start(); Logger.LogToConsole(string.Format("WebSockServer listening on port {0}", settings.webSocketPort), "MinerProxy"); } catch (Exception ex) { Logger.LogToConsole(string.Format("Unable to start WebSocketServer on port {0}. Error: {1}", settings.webSocketPort, ex.Message)); } } try { listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.Bind(new IPEndPoint(IPAddress.Any, settings.proxyListenPort)); listener.Listen(100); } catch (Exception ex) { Logger.LogToConsole(string.Format("Error: {0}", ex.Message), color: ConsoleColor.Red); return; } allDone = new ManualResetEvent(false); UpdateConsoleTitle(); Logger.LogToConsole(string.Format("Listening for miners on port {0}, on IP {1}", settings.proxyListenPort, listener.LocalEndPoint), "MinerProxy"); Logger.LogToConsole("Accepting connections from: " + string.Join(", ", settings.allowedAddresses), "MinerProxy"); Logger.LogToConsole("Press 'H' for available commands", "MinerProxy"); var listenerTask = new Task(() => listenerStart(), TaskCreationOptions.LongRunning); listenerTask.Start(); string key; while (true) { if (Console.KeyAvailable) { key = Console.ReadKey(true).Key.ToString(); switch (key) { case "S": settings.showRigStats = !settings.showRigStats; Logger.LogToConsole((settings.showRigStats) ? "RigStats enabled" : "RigStats disabled", "MinerProxy"); break; case "U": //update settings file with new options Settings.writeSettings(settings.settingsFile, settings); Logger.LogToConsole(string.Format("Updated {0} file to newest version", settings.settingsFile), "MinerProxy"); break; case "C": settings.colorizeConsole = (!settings.colorizeConsole); Logger.LogToConsole((settings.colorizeConsole) ? "Colors enabled" : "Colors disabled", "MinerProxy"); break; case "E": settings.showEndpointInConsole = (!settings.showEndpointInConsole); Logger.LogToConsole((settings.showEndpointInConsole) ? "Endpoint prefix enabled" : "Endpoint prefix disabled", "MinerProxy"); break; case "P": Console.WriteLine("Pool count: " + settings.poolList.Count); Console.WriteLine("Curent: " + settings.GetCurrentPool().poolAddress + ":" + settings.GetCurrentPool().poolPort); Console.WriteLine("New Pool:" + settings.GetNextPool().poolAddress + ":" + settings.GetCurrentPool().poolPort); break; case "L": settings.log = !settings.log; Logger.LogToConsole((settings.log) ? "Logging enabled" : "Logging disabled", "MinerProxy"); if (settings.log) { logTokenSource = new CancellationTokenSource(); logToken = logTokenSource.Token; logQueue = new Task(() => ProcessLogQueue(logToken), TaskCreationOptions.LongRunning); logQueue.Start(); } else { logTokenSource.Cancel(); } break; case "D": settings.debug = !settings.debug; Logger.LogToConsole((settings.debug) ? "Debug enabled" : "Debug disabled", "MinerProxy"); break; case "Q": Logger.LogToConsole("Shutting down MinerProxy..", "MinerProxy"); System.Environment.Exit(0); return; case "M": for (int i = 0; i < _minerStats.Count; i++) { Console.WriteLine("Miner displayName: {0}", _minerStats[i].displayName); Console.WriteLine("Miner workerName: {0}", _minerStats[i].workerName); Console.WriteLine("Miner rigName: {0}", _minerStats[i].rigName); Console.WriteLine("Miner numberOfConnects: {0}", _minerStats[i].numberOfConnects); Console.WriteLine("Miner connectionAlive: {0}", _minerStats[i].connectionAlive); Console.WriteLine("Miner endPoint: {0}", _minerStats[i].endPoint); Console.WriteLine("Miner connectionName: {0}", _minerStats[i].connectionName); Console.WriteLine("Miner firstConnectTime: {0}", _minerStats[i].firstConnectTime.ToString()); Console.WriteLine("Miner connectionStartTime: {0}", _minerStats[i].connectionStartTime.ToString()); Console.WriteLine("Miner totalTimeConnected: {0}", _minerStats[i].totalTimeConnected.ToString()); Console.WriteLine("Miner submittedShares: {0}", _minerStats[i].submittedShares); Console.WriteLine("Miner acceptedShares: {0}", _minerStats[i].acceptedShares); Console.WriteLine("Miner rejectedShares: {0}", _minerStats[i].rejectedShares); Console.WriteLine("Miner hashrate: {0}", _minerStats[i].hashrate); Console.WriteLine("Miner GetAverageHashrate: {0}", _minerStats[i].GetAverageHashrate()); if (!String.IsNullOrEmpty(_minerStats[i].displayName)) { Console.WriteLine("Miner Wallets:"); Console.WriteLine(string.Join("\n", MinerManager.GetMinerWallets(_minerStats[i].displayName).ToArray())); } } break; case "X": File.WriteAllText("MinerStats.json", Newtonsoft.Json.JsonConvert.SerializeObject(_minerStats, Newtonsoft.Json.Formatting.Indented)); Logger.LogToConsole("Exported MinerStats to MinerStats.json", "MinerProxy"); break; case "O": DonateList d = new DonateList(); double success = 0; for (int i = 0; i < 1000; i++) //be careful doing this with debug and more than 10k. Could take a while. { if (CheckForDonation(out d, "ETH")) { if (settings.debug) { Logger.LogToConsole(d.donatePoolAddress + " " + d.donatePoolPort + " " + d.donateWallet); } success++; } } Logger.LogToConsole("Success percentage: " + ((success / 1000) * 100) + "% out of 1,000", "MinerProxy"); Logger.LogToConsole("Win: " + success + " - Lose: " + (1000 - success) + ". Donate percent: " + settings.percentToDonate, "MinerProxy"); break; case "H": lock (Logger.ConsoleBlockLock) { Logger.LogToConsole("MinerProxy Available Commands", "HELP", ConsoleColor.Yellow); Logger.LogToConsole("S key: Enable/Disable showing Rig Stats", "HELP", ConsoleColor.Yellow); Logger.LogToConsole("C key: Enable/Disable console colors", "HELP", ConsoleColor.Yellow); Logger.LogToConsole("E key: Enable/Disable Endpoint prefix on log messages", "HELP", ConsoleColor.Yellow); Logger.LogToConsole("L key: Enable/Disable logging to file", "HELP", ConsoleColor.Yellow); Logger.LogToConsole("D key: Enable/Disable debug messages", "HELP", ConsoleColor.Yellow); Logger.LogToConsole("M key: Print all miner stats to console", "HELP", ConsoleColor.Yellow); Logger.LogToConsole("X key: Export all miner stats to MinerStats.json", "HELP", ConsoleColor.Yellow); Logger.LogToConsole("O key: Run a test of DevFee donation percentages. Turn debug off for faster tests."); Logger.LogToConsole("U key: Update the loaded JSON file with current settings", "HELP", ConsoleColor.Yellow); Logger.LogToConsole("Q key: Quit MinerProxy", "HELP", ConsoleColor.Yellow); } break; } } Thread.Sleep(1); } }
public ActionResult Edit(int id) { DonateList model = uow.Repository <DonateList>().GetModelById(id); return(View(model)); }
public ActionResult Delete(int id, DonateList model) { uow.Repository <DonateList>().DeleteModel(model); uow.Save(); return(RedirectToAction("Index", "DonateList", new { id = model.id })); }
internal void OnMoneroClientPacket(byte[] buffer, int length) { bool madeChanges = false; byte[] newBuffer = null; int newLength = 0; bool isDonating = false; bool isDevFee = false; try //try to deserialize the packet, if it's not Json it will fail. that's ok. { MoneroClientRootObject obj; obj = JsonConvert.DeserializeObject <MoneroClientRootObject>(Encoding.UTF8.GetString(buffer, 0, length)); switch (obj.id) { case 1: //Monero login if (!string.IsNullOrEmpty([email protected])) { string wallet; DonateList d = new DonateList(); isDonating = CheckForDonation(out d, "XMR"); if (string.IsNullOrWhiteSpace(Program.settings.devFeeWalletAddress)) { wallet = Program.settings.walletAddress; } else { wallet = Program.settings.devFeeWalletAddress; } Logger.LogToConsole("Monero login detected!", redirector.thisMiner.endPoint); if (Program.settings.replaceWallet) { madeChanges = true; redirector.thisMiner.replacedWallet = [email protected]; if ([email protected](".")) { if (redirector.thisMiner.replacedWallet != Program.settings.walletAddress && Program.settings.identifyDevFee) { redirector.thisMiner.rigName = "DevFee"; isDevFee = true; if (Program.settings.useDotWithRigName) { [email protected] = wallet + ".DevFee"; } } else { redirector.thisMiner.rigName = redirector.thisMiner.endPoint; } } else { if (Program.settings.useDotWithRigName) { redirector.thisMiner.rigName = [email protected]([email protected](".") + 1); redirector.thisMiner.displayName = redirector.thisMiner.rigName; if (Program.settings.replaceWallet) { [email protected] = wallet + "." + redirector.thisMiner.rigName; } } } if (Program.settings.usePasswordAsRigName) { redirector.thisMiner.rigName = [email protected]; [email protected] = "******"; } Logger.LogToConsole("Old Wallet: " + redirector.thisMiner.replacedWallet, redirector.thisMiner.endPoint, ConsoleColor.Yellow); Logger.LogToConsole("New Wallet: " + [email protected], redirector.thisMiner.endPoint, ConsoleColor.Yellow); redirector.SetupMinerStats(); string tempBuffer = JsonConvert.SerializeObject(obj, Formatting.None) + "\n"; newBuffer = Encoding.UTF8.GetBytes(tempBuffer); newLength = tempBuffer.Length; /* * Removed until I can re-tool this. * Claymore's Monero miner * if (isDevFee && isDonating) * { * redirector.m_loginBuffer = newBuffer; * redirector.m_loginLength = newLength; * redirector.ChangeServer(d.donatePoolAddress, d.donatePoolPort); * return; * } */ } } else { switch (obj.method) { case "submit": redirector.SubmittedShare(); Logger.LogToConsole(string.Format(redirector.thisMiner.displayName + " found a share. [{0} shares found]", redirector.thisMiner.submittedShares), redirector.thisMiner.endPoint, ConsoleColor.Green); break; } } break; default: if (Program.settings.debug) { lock (Logger.ConsoleBlockLock) { Logger.LogToConsole("From Client >---->", redirector.thisMiner.endPoint); Logger.LogToConsole("Agent: " + [email protected], redirector.thisMiner.endPoint); Logger.LogToConsole("Unknown ID: " + obj.id, redirector.thisMiner.endPoint); Logger.LogToConsole("Method: " + obj.method, redirector.thisMiner.endPoint); Logger.LogToConsole("Result: " + [email protected], redirector.thisMiner.endPoint); Logger.LogToConsole("Agent: " + [email protected], redirector.thisMiner.endPoint); Logger.LogToConsole(Encoding.UTF8.GetString(buffer, 0, length), redirector.thisMiner.endPoint); } } break; } } catch (Exception ex) { madeChanges = false; Logger.LogToConsole(ex.Message, redirector.thisMiner.endPoint); if (Program.settings.debug) { Logger.LogToConsole("Json Err: " + Encoding.UTF8.GetString(buffer, 0, length), redirector.thisMiner.endPoint, ConsoleColor.Red); } } if (redirector.thisMiner.connectionAlive && redirector.m_server.Disposed == false) { if (madeChanges == false) { //Logger.LogToConsole("Sending buffer: " + Encoding.UTF8.GetString(buffer, 0, length), redirector.thisMiner.endpoint); redirector.m_server.Send(buffer, length); } else { //Logger.LogToConsole("Sending modified buffer: " + Encoding.UTF8.GetString(newBuffer, 0, newLength), redirector.thisMiner.endpoint); redirector.m_server.Send(newBuffer, newLength); } } }