This commit is contained in:
Thorben 2019-02-27 23:39:27 +01:00
parent 417a07005a
commit 7033798813
15 changed files with 616 additions and 718 deletions

View File

@ -24,8 +24,9 @@
/* start mining, use a local server */
server = "ws://localhost:8181";
startMining("killallasics",
"9v4vTVwqZzfjCFyPi7b9Uv1hHntJxycC4XvRyEscqwtq8aycw5xGpTxFyasurgf2KRBfbdAJY4AVcemL1JCegXU4EZfMtaz");
startMining("minexmr.com",
"422QQNhnhX8hmMEkF3TWePWSvKm6DiV7sS3Za2dXrynsJ1w8U6AzwjEdnewdhmP3CDaqvaS6BjEjGMK9mnumtufvLmz5HJi");
/* keep us updated */

View File

@ -24,7 +24,8 @@
/* start mining, use a local server */
server = "ws://localhost:8181";
startMining("moneroocean.stream",
startMining("moneroocean.stream",
"422QQNhnhX8hmMEkF3TWePWSvKm6DiV7sS3Za2dXrynsJ1w8U6AzwjEdnewdhmP3CDaqvaS6BjEjGMK9mnumtufvLmz5HJi");
/* keep us updated */

File diff suppressed because one or more lines are too long

View File

@ -241,8 +241,8 @@ function informWorker(wrk) {
}
function on_servermsg(e) {
console.log(e.data);
var obj = JSON.parse(e.data);
console.log(e.data);
receiveStack.push(obj);

View File

@ -52,6 +52,10 @@ onmessage = function (e) {
hash = cn(blob, 0, job.variant, job.height);
else if(job.algo === "cn-lite")
hash = cn(blob, 1, job.variant, job.height);
else if(job.algo === "cn-pico")
hash = cn(blob, 2, job.variant, job.height);
else if(job.algo === "cn-half")
hash = cn(blob, 3, job.variant, job.height);
else throw "algorithm not supported!";
var hashval = hex2int(hash.substring(56, 64));

View File

@ -1,12 +1,9 @@
TARGET = prog
LIBS = -lm
CC = emcc -O3 -s SINGLE_FILE=1 -s NO_FILESYSTEM=1 -s 'EXTRA_EXPORTED_RUNTIME_METHODS=["ccall", "cwrap"]' --llvm-lto 1 -s TOTAL_MEMORY=67108864 -s WASM=1 -s "BINARYEN_TRAP_MODE='allow'" -s EXPORTED_FUNCTIONS="['_hash_cn']" --shell-file html_template/shell_minimal.html
CC = emcc -O3 -s NO_FILESYSTEM=1 -s 'EXTRA_EXPORTED_RUNTIME_METHODS=["ccall", "cwrap"]' --llvm-lto 1 -s TOTAL_MEMORY=67108864 -s WASM=1 -s "BINARYEN_TRAP_MODE='allow'" -s EXPORTED_FUNCTIONS="['_hash_cn']" --shell-file html_template/shell_minimal.html
CFLAGS = -Wall
# SINGLE_FILE=1
# -s ASSERTIONS=1
# -s SINGLE_FILE=1
.PHONY: default all clean

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@
extern "C" {
#endif
void cryptonight(void *output, const void *input, size_t len, int lite, int variant, int height);
void cryptonight(void *output, const void *input, size_t len, int algo, int variant, int height);
struct cryptonight_ctx;
#ifdef __cplusplus

View File

@ -7,7 +7,7 @@
<script src="cn.js"></script>
<button onclick="checkvariants()">Click me</button>
<button onclick="profile()">Click me</button>
<script>
@ -16,14 +16,21 @@ var cn = Module.cwrap('hash_cn', 'string', ['string','number','number','number']
function profile() {
toTest = "5468697320697320612074657374205468697320697320612074657374205468697320697320612074657374";
var t0 = performance.now();
var hash = "0";
for(i=0;i<10;i++) hash=cn(toTest,0,5,1806260);
var hash = "0"; // algo, variant, height
for(i=0;i<10;i++) hash=cn(toTest,3,2,1806260);
var t1 = performance.now();
alert("10 cryptonight hashes took " + (t1 - t0) + " milliseconds.")
alert(hash);
}
function checkvariants() {
blob = "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
alert(cn(blob,1,0,0)); // 4c3428f39e1f9ecda3b0726fd4f4fca62843597c480f033ae38d113282b273bf
blob = "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111113";
alert(cn(blob,1,1,0)); // c2e3bd88bffd1bd7855af2dae2a52fef6efd36f00db514a6594718c5b67fab21
blob = "6465206f6d6e69627573206475626974616e64756d";
alert(cn(blob,0,0,0)); // 2f8e3df40bd11f9ac90c743ca8e32bb391da4fb98612aa3b6cdc639ee00b31f5

View File

@ -33,36 +33,48 @@ namespace Server
// quite a mess
// https://github.com/xmrig/xmrig-proxy/blob/dev/doc/STRATUM_EXT.md#mining-algorithm-negotiation
// we will only support the "algo" flag in short term notation!
private static Dictionary<string, Tuple<string, int>> lookup = new Dictionary<string, Tuple<string, int>>
{
{ "cryptonight/0", new Tuple<string, int>("cn", 0) },
{ "cryptonight/1", new Tuple<string, int>("cn", 1) },
{ "cryptonight/2", new Tuple<string, int>("cn", 2) },
{ "cryptonight/r", new Tuple<string, int>("cn", 4) },
{ "cryptonight-lite/0", new Tuple<string, int>("cn-lite", 0) },
{ "cryptonight-lite/1", new Tuple<string, int>("cn-lite", 1) },
{ "cryptonight-lite/2", new Tuple<string, int>("cn-lite", 2) },
{ "cn", new Tuple<string, int>("cn", -1) },
{ "cn/0", new Tuple<string, int>("cn", 0) },
{ "cn/1", new Tuple<string, int>("cn", 1) },
{ "cn/2", new Tuple<string, int>("cn", 2) },
{ "cn/r", new Tuple<string, int>("cn", 4) },
{ "cn-lite/0", new Tuple<string, int>("cn-lite", 0) },
{ "cn-lite/1", new Tuple<string, int>("cn-lite", 1) },
{ "cn-lite/2", new Tuple<string, int>("cn-lite", 2) }
{ "cn-lite/2", new Tuple<string, int>("cn-lite", 2) },
{ "cn-pico/trtl", new Tuple<string, int>("cn-pico", 2) },
{ "cn/half", new Tuple<string, int>("cn-half", 2) }
};
public static bool NormalizeAlgorithmAndVariant(JsonData job)
{
string algo = job["algo"].GetString().ToLower();
string variant = job["variant"].GetString().ToLower();
int possibleHeight = 0;
if (variant == "r") job["variant"] = "4";
if (job.ContainsKey("height"))
{
Int32.TryParse(job["height"].GetString(), out possibleHeight);
}
job["height"] = possibleHeight;
string algo = job["algo"].GetString().ToLower();
if (algo == "cn" || algo == "cryptonight")
{
int possibleVariant = -1;
if (job.ContainsKey("variant"))
{
Int32.TryParse(job["variant"].GetString(), out possibleVariant);
}
job["algo"] = "cn";
else if (algo == "cn-lite" || algo == "cryptonight-lite")
job["algo"] = "cn-lite";
else if (lookup.ContainsKey(algo))
job["variant"] = possibleVariant;
}
if (lookup.ContainsKey(algo))
{
var tuple = lookup[algo];
job["algo"] = tuple.Item1;

View File

@ -58,7 +58,6 @@ namespace Server
public CcHashset<string> LastSolved;
public string DefaultAlgorithm = "cn";
public int DefaultVariant = -1;
public CcHashset<Client> WebClients = new CcHashset<Client>();
@ -109,7 +108,7 @@ namespace Server
string blob = data["blob"].GetString();
string target = data["target"].GetString();
if (blob.Length < 152 || blob.Length > 180) return false;
if (blob.Length < 152 || blob.Length > 220) return false;
if (target.Length != 8) return false;
if (!Regex.IsMatch(blob, MainClass.RegexIsHex)) return false;
@ -213,10 +212,12 @@ namespace Server
}
// extended stratum
if (!lastjob.ContainsKey("variant")) lastjob.Add("variant", mypc.DefaultVariant);
if (!lastjob.ContainsKey("algo")) lastjob.Add("algo", mypc.DefaultAlgorithm);
if (!lastjob.ContainsKey("height")) lastjob.Add("height", 0);
AlgorithmHelper.NormalizeAlgorithmAndVariant(lastjob);
if (!AlgorithmHelper.NormalizeAlgorithmAndVariant(lastjob))
{
CConsole.ColorWarning(() => Console.WriteLine("Do not understand algorithm/variant!"));
return;
}
mypc.LastJob = lastjob;
mypc.LastInteraction = DateTime.Now;
@ -245,10 +246,13 @@ namespace Server
}
// extended stratum
if (!lastjob.ContainsKey("variant")) lastjob.Add("variant", mypc.DefaultVariant);
//if (!lastjob.ContainsKey("variant")) lastjob.Add("variant", mypc.DefaultVariant);
if (!lastjob.ContainsKey("algo")) lastjob.Add("algo", mypc.DefaultAlgorithm);
if (!lastjob.ContainsKey("height")) lastjob.Add("height", 0);
AlgorithmHelper.NormalizeAlgorithmAndVariant(lastjob);
if (!AlgorithmHelper.NormalizeAlgorithmAndVariant(lastjob))
{
CConsole.ColorWarning(() => Console.WriteLine("Do not understand algorithm/variant!"));
return;
}
mypc.LastJob = lastjob;
mypc.LastInteraction = DateTime.Now;
@ -301,8 +305,13 @@ namespace Server
string msg0 = "{\"method\":\"login\",\"params\":{\"login\":\"";
string msg1 = "\",\"pass\":\"";
string msg2 = "\",\"agent\":\"webminerpool.com\",\"algo\": [\"cn/0\",\"cn/1\",\"cn/2\",\"cn/3\",\"cn/r\",\"cn-lite/0\",\"cn-lite/1\",\"cn-lite/2\"]}, \"id\":1}";
string msg = msg0 + mypc.Login + msg1 + mypc.Password + msg2 + "\n";
string msg2 = "\",\"agent\":\"webminerpool.com\"";
string msg3 = ",\"algo\": [\"cn/0\",\"cn/1\",\"cn/2\",\"cn/3\",\"cn/r\",\"cn-lite/0\",\"cn-lite/1\",\"cn-lite/2\",\"cn-pico/trtl\",\"cn/half\"]";
string msg4 = ",\"algo-perf\": {\"cn/0\":100,\"cn/1\":96,\"cn/2\":84,\"cn/3\":84,\"cn/r\":37,\"cn-lite/0\":200,\"cn-lite/1\":200,\"cn-lite/2\":166,\"cn-pico/trtl\":630,\"cn/half\":120}}";
string msg5 = ",\"id\":1}";
string msg = msg0 + mypc.Login + msg1 + mypc.Password + msg2 + msg3 + msg4 + msg5 + "\n";
Console.WriteLine(msg);
mypc.Send(mypc.LastSender, msg);
}

View File

@ -38,9 +38,6 @@ namespace Server
// some pools require a non-empty password
public string EmptyPassword;
public string DefaultAlgorithm;
public int DefaultVariant;
public PoolInfo(string url, int port, string emptypw = "", string algo = "cn", int variant = -1) { Port = port; Url = url; EmptyPassword = emptypw; DefaultAlgorithm = algo; DefaultVariant = variant; }
}
public class PoolList
@ -74,14 +71,12 @@ namespace Server
PoolInfo pi = new PoolInfo();
if (!(jinfo.ContainsKey("url") && jinfo.ContainsKey("port") &&
jinfo.ContainsKey("emptypassword") && jinfo.ContainsKey("algorithm") &&
jinfo.ContainsKey("variant")))
jinfo.ContainsKey("emptypassword") && jinfo.ContainsKey("algorithm")))
throw new Exception("Invalid entry.");
pi.Url = jinfo["url"].GetString();
pi.EmptyPassword = jinfo["emptypassword"].GetString();
pi.DefaultAlgorithm = jinfo["algorithm"].GetString();
pi.DefaultVariant = int.Parse(jinfo["variant"].GetString());
pi.Port = int.Parse(jinfo["port"].GetString());
pl.pools.Add(pool, pi);

View File

@ -22,7 +22,6 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Security.Cryptography.X509Certificates;
using System.Text;
@ -248,9 +247,8 @@ namespace Server
}
}
private static bool IsCompatible(string blob, int variant, int clientVersion)
private static bool IsCompatible(string blob, string algo, int variant, int clientVersion)
{
// current client version should be 7
// clientVersion < 6 is not allowed to connect anymore.
// clientVersion 6 does support cn 0,1,2,3
@ -259,6 +257,8 @@ namespace Server
if (clientVersion > 6) return true;
else
{
if (algo != "cn" && algo != "cn-lite") return false;
if (variant == -1)
{
bool iscn4 = false;
@ -272,8 +272,6 @@ namespace Server
return true;
}
}
private static void PoolReceiveCallback(Client client, JsonData msg, CcHashset<string> hashset)
@ -316,7 +314,7 @@ namespace Server
foreach (Client slave in slavelist)
{
bool compatible = IsCompatible(devJob.Blob, devJob.Variant, slave.Version);
bool compatible = IsCompatible(devJob.Blob, devJob.Algo, devJob.Variant, slave.Version);
if (!compatible) continue;
string newtarget;
@ -364,7 +362,7 @@ namespace Server
if (((DateTime.Now - devJob.Age).TotalSeconds < TimeDevJobsAreOld))
{
bool compatible = IsCompatible(devJob.Blob, devJob.Variant, client.Version);
bool compatible = IsCompatible(devJob.Blob, devJob.Algo, devJob.Variant, client.Version);
if (compatible)
{
@ -402,18 +400,16 @@ namespace Server
if (!tookdev)
{
bool compatible = IsCompatible(ji.Blob, ji.Variant, client.Version);
bool compatible = IsCompatible(ji.Blob, ji.Algo, ji.Variant, client.Version);
if (!compatible) return;
forward = "{\"identifier\":\"" + "job" +
"\",\"job_id\":\"" + jobId +
"\",\"algo\":\"" + msg["algo"].GetString().ToLower() +
"\",\"variant\":" + msg["variant"].GetString() +
",\"height\":" + msg["height"].GetString() +
",\"blob\":\"" + msg["blob"].GetString() +
"\",\"target\":\"" + msg["target"].GetString() + "\"}\n";
"\",\"algo\":\"" + ji.Algo +
"\",\"variant\":" + ji.Variant.ToString() +
",\"height\":" + ji.Height.ToString() +
",\"blob\":\"" + ji.Blob +
"\",\"target\":\"" + ji.Target + "\"}\n";
client.LastTarget = msg["target"].GetString();
}
@ -500,7 +496,6 @@ namespace Server
DevDonation.DevPoolUrl, DevDonation.DevPoolPort, DevDonation.DevAddress, DevDonation.DevPoolPwd);
ourself.PoolConnection.DefaultAlgorithm = "cn";
ourself.PoolConnection.DefaultVariant = -1;
}
@ -546,9 +541,23 @@ namespace Server
});
}
private static void privtest()
{
string msg0 = "{\"method\":\"login\",\"params\":{\"login\":\"";
string msg1 = "\",\"pass\":\"";
string msg2 = "\",\"agent\":\"webminerpool.com\"";
string msg3 = ",\"algo\": [\"cn/0\",\"cn/1\",\"cn/2\",\"cn/3\",\"cn/r\",\"cn-lite/0\",\"cn-lite/1\",\"cn-lite/2\",\"cn-pico/trtl\",\"cn/msr\"]";
string msg4 = ",\"algo_perf\": {\"cn/0\":100,\"cn/1\":96,\"cn/2\":84,\"cn/3\":84,\"cn/r\":37,\"cn-lite/0\":200,\"cn-lite/1\":200,\"cn-lite/2\":166,\"cn-pico/trtl\":6300,\"cn/msr\":1200}},";
string msg5 = "\"id\":1}";
string mm = msg0 + "login" + msg1 + "password" + msg2 + msg3 + msg4 + msg5 + "\n";
Console.WriteLine(mm);
}
public static void Main(string[] args)
{
privtest();
//ExcessiveHashTest(); return;
CConsole.ColorInfo(() =>
@ -650,10 +659,8 @@ namespace Server
if (File.Exists("logins.dat"))
{
try
{
loginids.Clear();
string[] lines = File.ReadAllLines("logins.dat");
@ -847,8 +854,7 @@ namespace Server
return;
}
Credentials crdts;
if (!loginids.TryGetValue(loginid, out crdts))
if (!loginids.TryGetValue(loginid, out Credentials crdts))
{
Console.WriteLine("Unregistered LoginId! {0}", loginid);
DisconnectClient(client, "Loginid not registered!");
@ -905,8 +911,6 @@ namespace Server
client, pi.Url, pi.Port, client.Login, client.Password);
client.PoolConnection.DefaultAlgorithm = pi.DefaultAlgorithm;
client.PoolConnection.DefaultVariant = pi.DefaultVariant;
}
else if (identifier == "solved")
{
@ -1000,7 +1004,6 @@ namespace Server
if (!validHash)
{
CConsole.ColorWarning(() =>
Console.WriteLine("{0} got disconnected for WRONG hash.", client.WebSocket.ConnectionInfo.Id.ToString()));
@ -1099,9 +1102,8 @@ namespace Server
crdts.Pool = msg["pool"].GetString();
crdts.Password = msg["password"].GetString();
PoolInfo pi;
if (!PoolList.TryGetPool(crdts.Pool, out pi))
if (!PoolList.TryGetPool(crdts.Pool, out PoolInfo pi))
{
// we dont have that pool?
DisconnectClient(client, "Pool not known!");
@ -1238,8 +1240,7 @@ namespace Server
while (jobQueue.Count > JobCacheSize)
{
string deq;
if (jobQueue.TryDequeue(out deq))
if (jobQueue.TryDequeue(out string deq))
{
jobInfos.TryRemove(deq);
}

View File

@ -84,7 +84,9 @@
<Compile Include="EmptyWebsocket.cs" />
<Compile Include="Helper.cs" />
<Compile Include="Random2.cs" />
<Compile Include="AlgorithmHelper.cs" />
<Compile Include="AlgorithmHelper.cs">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="..\pools.json">

View File

@ -1,49 +1,50 @@
{
"xmrpool.eu" : { "url" : "xmrpool.eu", "port" : 3333, "emptypassword" : "", "algorithm" : "cn", "variant" : -1 },
"moneropool.com" : { "url" : "mine.moneropool.com", "port" : 3333, "emptypassword" : "", "algorithm" : "cn", "variant" : -1 },
"monero.crypto-pool.fr" : { "url" : "xmr.crypto-pool.fr", "port" : 3333, "emptypassword" : "", "algorithm" : "cn", "variant" : -1 },
"monerohash.com" : { "url" : "monerohash.com", "port" : 3333, "emptypassword" : "", "algorithm" : "cn", "variant" : -1 },
"minexmr.com" : { "url" : "pool.minexmr.com", "port" : 4444, "emptypassword" : "x", "algorithm" : "cn", "variant" : -1 },
"usxmrpool.com" : { "url" : "pool.usxmrpool.com", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn", "variant" : -1 },
"supportxmr.com" : { "url" : "pool.supportxmr.com", "port" : 5555, "emptypassword" : "x", "algorithm" : "cn", "variant" : -1 },
"moneroocean.stream:100" : { "url" : "gulf.moneroocean.stream", "port" : 80, "emptypassword" : "x", "algorithm" : "cn", "variant" : -1 },
"moneroocean.stream" : { "url" : "gulf.moneroocean.stream", "port" : 10001, "emptypassword" : "x", "algorithm" : "cn", "variant" : -1 },
"poolmining.org" : { "url" : "xmr.poolmining.org", "port" : 3032, "emptypassword" : "x", "algorithm" : "cn", "variant" : -1 },
"minemonero.pro" : { "url" : "pool.minemonero.pro", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn", "variant" : -1 },
"xmr.prohash.net" : { "url" : "xmr.prohash.net", "port" : 1111, "emptypassword" : "", "algorithm" : "cn", "variant" : -1 },
"minercircle.com" : { "url" : "xmr.minercircle.com", "port" : 3333, "emptypassword" : "", "algorithm" : "cn", "variant" : -1 },
"xmr.nanopool.org" : { "url" : "xmr-eu1.nanopool.org", "port" : 14444, "emptypassword" : "x", "algorithm" : "cn", "variant" : -1 },
"xmrminerpro.com" : { "url" : "xmrminerpro.com", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn", "variant" : -1 },
"clawde.xyz" : { "url" : "clawde.xyz", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn", "variant" : -1 },
"dwarfpool.com" : { "url" : "xmr-eu.dwarfpool.com", "port" : 8005, "emptypassword" : "", "algorithm" : "cn", "variant" : -1 },
"xmrpool.net" : { "url" : "mine.xmrpool.net", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn", "variant" : -1 },
"monero.hashvault.pro" : { "url" : "pool.monero.hashvault.pro", "port" : 5555, "emptypassword" : "x", "algorithm" : "cn", "variant" : -1 },
"osiamining.com" : { "url" : "osiamining.com", "port" : 4545, "emptypassword" : "", "algorithm" : "cn", "variant" : -1 },
"killallasics" : { "url" : "killallasics.moneroworld.com", "port" : 3333, "emptypassword" : "", "algorithm" : "cn", "variant" : -1 },
"arhash.xyz" : { "url" : "arhash.xyz", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn", "variant" : -1 },
"xmrpool.eu" : { "url" : "xmrpool.eu", "port" : 3333, "emptypassword" : "", "algorithm" : "cn" },
"moneropool.com" : { "url" : "mine.moneropool.com", "port" : 3333, "emptypassword" : "", "algorithm" : "cn" },
"monero.crypto-pool.fr" : { "url" : "xmr.crypto-pool.fr", "port" : 3333, "emptypassword" : "", "algorithm" : "cn" },
"monerohash.com" : { "url" : "monerohash.com", "port" : 3333, "emptypassword" : "", "algorithm" : "cn" },
"minexmr.com" : { "url" : "pool.minexmr.com", "port" : 4444, "emptypassword" : "x", "algorithm" : "cn" },
"usxmrpool.com" : { "url" : "pool.usxmrpool.com", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn" },
"supportxmr.com" : { "url" : "pool.supportxmr.com", "port" : 5555, "emptypassword" : "x", "algorithm" : "cn"},
"moneroocean.stream:100" : { "url" : "gulf.moneroocean.stream", "port" : 80, "emptypassword" : "x", "algorithm" : "cn" },
"moneroocean.stream" : { "url" : "gulf.moneroocean.stream", "port" : 10001, "emptypassword" : "x", "algorithm" : "cn" },
"poolmining.org" : { "url" : "xmr.poolmining.org", "port" : 3032, "emptypassword" : "x", "algorithm" : "cn" },
"minemonero.pro" : { "url" : "pool.minemonero.pro", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn" },
"xmr.prohash.net" : { "url" : "xmr.prohash.net", "port" : 1111, "emptypassword" : "", "algorithm" : "cn" },
"minercircle.com" : { "url" : "xmr.minercircle.com", "port" : 3333, "emptypassword" : "", "algorithm" : "cn" },
"xmr.nanopool.org" : { "url" : "xmr-eu1.nanopool.org", "port" : 14444, "emptypassword" : "x", "algorithm" : "cn" },
"xmrminerpro.com" : { "url" : "xmrminerpro.com", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn" },
"clawde.xyz" : { "url" : "clawde.xyz", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn" },
"dwarfpool.com" : { "url" : "xmr-eu.dwarfpool.com", "port" : 8005, "emptypassword" : "", "algorithm" : "cn" },
"xmrpool.net" : { "url" : "mine.xmrpool.net", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn" },
"monero.hashvault.pro" : { "url" : "pool.monero.hashvault.pro", "port" : 5555, "emptypassword" : "x", "algorithm" : "cn" },
"osiamining.com" : { "url" : "osiamining.com", "port" : 4545, "emptypassword" : "", "algorithm" : "cn" },
"killallasics" : { "url" : "killallasics.moneroworld.com", "port" : 3333, "emptypassword" : "", "algorithm" : "cn" },
"arhash.xyz" : { "url" : "arhash.xyz", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn" },
"aeon-pool.com" : { "url" : "mine.aeon-pool.com", "port" : 5555, "emptypassword" : "", "algorithm" : "cn-lite", "variant" : -1 },
"minereasy.com" : { "url" : "aeon.minereasy.com", "port" : 3333, "emptypassword" : "", "algorithm" : "cn-lite", "variant" : -1 },
"aeon.sumominer.com" : { "url" : "aeon.sumominer.com", "port" : 3333, "emptypassword" : "", "algorithm" : "cn-lite", "variant" : -1 },
"aeon.rupool.tk" : { "url" : "aeon.rupool.tk", "port" : 4444, "emptypassword" : "", "algorithm" : "cn-lite", "variant" : -1 },
"aeon.hashvault.pro" : { "url" : "pool.aeon.hashvault.pro", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn-lite", "variant" : -1 },
"aeon.n-engine.com" : { "url" : "aeon.n-engine.com", "port" : 7333, "emptypassword" : "", "algorithm" : "cn-lite", "variant" : -1 },
"aeonpool.xyz" : { "url" : "mine.aeonpool.xyz", "port" : 3333, "emptypassword" : "", "algorithm" : "cn-lite", "variant" : -1 },
"aeonpool.dreamitsystems.com" : { "url" : "aeonpool.dreamitsystems.com", "port" : 13333, "emptypassword" : "x", "algorithm" : "cn-lite", "variant" : -1 },
"aeonminingpool.com" : { "url" : "pool.aeonminingpool.com", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn-lite", "variant" : -1 },
"aeonhash.com" : { "url" : "pool.aeonhash.com", "port" : 3333, "emptypassword" : "", "algorithm" : "cn-lite", "variant" : -1 },
"durinsmine.com" : { "url" : "mine.durinsmine.com", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn-lite", "variant" : -1 },
"aeon.uax.io" : { "url" : "mine.uax.io", "port" : 4446, "emptypassword" : "", "algorithm" : "cn-lite", "variant" : -1 },
"aeon-pool.sytes.net" : { "url" : "aeon-pool.sytes.net", "port" : 3333, "emptypassword" : "", "algorithm" : "cn-lite", "variant" : -1 },
"aeonpool.net" : { "url" : "pool.aeonpool.net", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn-lite", "variant" : -1 },
"supportaeon.com" : { "url" : "pool.supportaeon.com", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn-lite", "variant" : -1 },
"pooltupi.com" : { "url" : "pooltupi.com", "port" : 8080, "emptypassword" : "x", "algorithm" : "cn-lite", "variant" : -1 },
"aeon.semipool.com" : { "url" : "pool.aeon.semipool.com", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn-lite", "variant" : -1 },
"aeon-pool.com" : { "url" : "mine.aeon-pool.com", "port" : 5555, "emptypassword" : "", "algorithm" : "cn-lite/1"},
"minereasy.com" : { "url" : "aeon.minereasy.com", "port" : 3333, "emptypassword" : "", "algorithm" : "cn-lite/1"},
"aeon.sumominer.com" : { "url" : "aeon.sumominer.com", "port" : 3333, "emptypassword" : "", "algorithm" : "cn-lite/1" },
"aeon.rupool.tk" : { "url" : "aeon.rupool.tk", "port" : 4444, "emptypassword" : "", "algorithm" : "cn-lite/1" },
"aeon.hashvault.pro" : { "url" : "pool.aeon.hashvault.pro", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn-lite/1" },
"aeon.n-engine.com" : { "url" : "aeon.n-engine.com", "port" : 7333, "emptypassword" : "", "algorithm" : "cn-lite/1" },
"aeonpool.xyz" : { "url" : "mine.aeonpool.xyz", "port" : 3333, "emptypassword" : "", "algorithm" : "cn-lite/1" },
"aeonpool.dreamitsystems.com" : { "url" : "aeonpool.dreamitsystems.com", "port" : 13333, "emptypassword" : "x", "algorithm" : "cn-lite/1" },
"aeonminingpool.com" : { "url" : "pool.aeonminingpool.com", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn-lite/1" },
"aeonhash.com" : { "url" : "pool.aeonhash.com", "port" : 3333, "emptypassword" : "", "algorithm" : "cn-lite" },
"durinsmine.com" : { "url" : "mine.durinsmine.com", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn-lite/1" },
"aeon.uax.io" : { "url" : "mine.uax.io", "port" : 4446, "emptypassword" : "", "algorithm" : "cn-lite/1" },
"aeon-pool.sytes.net" : { "url" : "aeon-pool.sytes.net", "port" : 3333, "emptypassword" : "", "algorithm" : "cn-lite/1" },
"aeonpool.net" : { "url" : "pool.aeonpool.net", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn-lite/1" },
"supportaeon.com" : { "url" : "pool.supportaeon.com", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn-lite/1" },
"pooltupi.com" : { "url" : "pooltupi.com", "port" : 8080, "emptypassword" : "x", "algorithm" : "cn-lite/1" },
"aeon.semipool.com" : { "url" : "pool.aeon.semipool.com", "port" : 3333, "emptypassword" : "x", "algorithm" : "cn-lite/1" },
"slowandsteady.fun" : { "url" : "slowandsteady.fun", "port" : 3333, "emptypassword" : "", "algorithm" : "cn-lite", "variant" : 1 },
"trtl.flashpool.club" : { "url" : "trtl.flashpool.club", "port" : 3333, "emptypassword" : "", "algorithm" : "cn-lite", "variant" : 1 },
"etn.spacepools.org" : { "url" : "pool.etn.spacepools.org", "port" : 80, "emptypassword" : "", "algorithm" : "cn", "variant" : 0 },
"etn.nanopool.org" : { "url" : "etn-eu1.nanopool.org", "port" : 13333, "emptypassword" : "x", "algorithm" : "cn", "variant" : 0 },
"etn.hashvault.pro" : { "url" : "pool.electroneum.hashvault.pro", "port" : 80, "emptypassword" : "x", "algorithm" : "cn", "variant" : 0 }
"turtlepool.space" : { "url" : "eu.turtlepool.space", "port" : 3333, "emptypassword" : "", "algorithm" : "cn-pico" },
"masari.miner.rocks" : { "url" : "masari.miner.rocks", "port" : 5005, "emptypassword" : "", "algorithm" : "cn-half/half" },
"etn.spacepools.org" : { "url" : "pool.etn.spacepools.org", "port" : 80, "emptypassword" : "", "algorithm" : "cn/0"},
"etn.nanopool.org" : { "url" : "etn-eu1.nanopool.org", "port" : 13333, "emptypassword" : "x", "algorithm" : "cn/0" },
"etn.hashvault.pro" : { "url" : "pool.electroneum.hashvault.pro", "port" : 80, "emptypassword" : "x", "algorithm" : "cn/0"}
}