From e0dd19e3716116f60756b0c8c3ecb8659a4331ef Mon Sep 17 00:00:00 2001
From: Useless Guru <30080938+UselessGuru@users.noreply.github.com>
Date: Tue, 26 Dec 2023 11:33:35 +0100
Subject: [PATCH] v5.0.2.5
Changes:
- Remove all references to NemosMiner web page and rig monitor (web page is down, cannot contact Nemo)
Enhancements:
- Core: Minor speed optimizations
Fixes:
- Core: Benchmarking / Power consumption measuring miner count incorrect (Regression from 5.0.2.3)
- Core: Error 'Miner data reader exited unexpectedly' (no more thread jobs available)
- Main text window: Fix hash rate formatting of previously run miners
- Legay GUI: Fix hash rate formatting of previously run miners
Miner changes:
- OneZeroMiner-v1.2.8
- TeamRedMiner-v0.10.15
- Wildrig-v0.40.4
---
Balances/HashCryptos.ps1 | 4 +-
Balances/HiveON.ps1 | 4 +-
Balances/MiningDutch.ps1 | 4 +-
Balances/MiningPoolHub.ps1 | 4 +-
Balances/NiceHash External.ps1 | 4 +-
Balances/NiceHash Internal.ps1 | 4 +-
Balances/ProHashing.ps1 | 4 +-
Balances/ZergPool.ps1 | 4 +-
Balances/Zpool.ps1 | 4 +-
Brains/HashCryptos.ps1 | 2 +-
Brains/MiningDutch.ps1 | 2 +-
Brains/ProHashing.ps1 | 2 +-
Brains/ZPool.ps1 | 2 +-
Brains/ZergPool.ps1 | 2 +-
ChangeLog.txt | 24 +-
Data/Algorithms.json | 1 +
Data/CoinNames.json | 3 +
Data/CurrencyAlgorithm.json | 3 +
Data/DagData.json | 456 ++---
Data/UnprofitableAlgorithms.json | 1 -
Includes/APIServer.psm1 | 4 +-
Includes/BalancesTracker.ps1 | 2 +-
Includes/Core.ps1 | 17 +-
Includes/Core_dev.ps1 | 1502 +++++++++++++++++
Includes/Downloader.ps1 | 4 +-
Includes/Include.psm1 | 26 +-
Includes/LegacyGUI.ps1 | 115 +-
Includes/MinerAPIs/BzMiner.ps1 | 4 +-
Includes/MinerAPIs/Ccminer.ps1 | 4 +-
Includes/MinerAPIs/EthMiner.ps1 | 4 +-
Includes/MinerAPIs/FireIce.ps1 | 4 +-
Includes/MinerAPIs/Gminer.ps1 | 4 +-
Includes/MinerAPIs/HellMiner.ps1 | 4 +-
Includes/MinerAPIs/MiniZ.ps1 | 4 +-
Includes/MinerAPIs/NBMiner.ps1 | 4 +-
Includes/MinerAPIs/NanoMiner.ps1 | 4 +-
Includes/MinerAPIs/OneZero.ps1 | 4 +-
Includes/MinerAPIs/Rigel.ps1 | 4 +-
Includes/MinerAPIs/SRBMiner.ps1 | 4 +-
Includes/MinerAPIs/TeamBlackMiner.ps1 | 4 +-
Includes/MinerAPIs/Trex.ps1 | 4 +-
Includes/MinerAPIs/Xgminer.ps1 | 6 +-
Includes/MinerAPIs/XmRig.ps1 | 4 +-
Includes/MinerAPIs/lolMiner.ps1 | 4 +-
Miners/BzMiner-v19.0.1.ps1 | 4 +-
Miners/CcminerAlexis78-v1.5.2.ps1 | 4 +-
Miners/CcminerDyn-v1.0.2.ps1 | 4 +-
Miners/CcminerKlausT-v8.25.ps1 | 4 +-
Miners/CcminerKlausT-v8.26x2.ps1 | 4 +-
Miners/CcminerLyra2z330-v8.21r9.ps1 | 4 +-
Miners/CcminerLyraYesscrypt-v8.21r18v5.ps1 | 4 +-
Miners/CcminerMemeHash-v2.5.5.9.ps1 | 4 +-
Miners/CcminerNeoscryptXaya-v0.2.ps1 | 4 +-
Miners/CcminerVerusCpu-v3.8.3.ps1 | 6 +-
Miners/CcminerVerusGpu-v3.8.3.ps1 | 4 +-
Miners/ClaymoreDualME-v2.7.ps1 | 4 +-
Miners/ClaymoreNeoscrypt-v1.2.ps1 | 4 +-
Miners/CpuMiner-v1.4.ps1 | 4 +-
Miners/CryptoDredge-v0.16.0.ps1 | 4 +-
Miners/CryptoDredge-v0.27.0.ps1 | 4 +-
Miners/EthMiner-v0.19.0.18.ps1 | 4 +-
Miners/EvrProgPow-v1p3p0.ps1 | 4 +-
Miners/GMiner-v2.75.ps1 | 4 +-
Miners/GMiner-v3.43.ps1 | 4 +-
Miners/HellMiner-v0.59.1.ps1 | 4 +-
Miners/JayddeeCpu-v23.15.ps1 | 4 +-
Miners/KawpowMiner-v1.2.4cl.ps1 | 4 +-
Miners/KawpowMiner-v1.2.4cuda.ps1 | 4 +-
Miners/Kudaraidee-v1.2.0a.ps1 | 4 +-
Miners/MiniZ-v2.2c.ps1 | 4 +-
Miners/NBMiner-v42.3.ps1 | 4 +-
Miners/NSFMiner-v1.3.14.ps1 | 4 +-
Miners/NanoMiner-v3.8.6.ps1 | 6 +-
Miners/Ninjarig-1.0.3.ps1 | 4 +-
Miners/NosuchCpu-v3.8.8.1.ps1 | 4 +-
Miners/OneZeroMiner-v1.2.5.ps1 | 4 +-
Miners/OneZeroMiner-v1.2.8.ps1 | 77 +
Miners/PhoenixMiner-v6.2c.ps1 | 4 +-
Miners/Radiator-v1.0.0.ps1 | 4 +-
Miners/Raptor3umCpu-v2.0.ps1 | 4 +-
Miners/Rigel-v1.11.0.ps1 | 4 +-
Miners/RplantCpu-v5.0.34.ps1 | 6 +-
Miners/RplantCpu-v5.0.36.ps1 | 6 +-
Miners/RrkzCpu-v4.2.ps1 | 4 +-
Miners/SRBMinerMulti-v0.9.4.ps1 | 4 +-
Miners/SRBMinerMulti-v2.4.4.ps1 | 6 +-
Miners/SgMinerFancyIX-v0.9.4.ps1 | 4 +-
Miners/Suprminer-v2.31v2.ps1 | 4 +-
Miners/TTMiner-v2023.4.3.ps1 | 4 +-
Miners/TTMiner-v5.0.3.ps1 | 4 +-
Miners/TeamBlackMiner-v2.16.ps1 | 4 +-
Miners/TeamRedMiner-v0.10.14.ps1 | 148 --
Miners/TeamRedMiner-v0.10.15.ps1 | 148 ++
Miners/Trex-v0.26.8.ps1 | 4 +-
...ldrig-v0.40.2a.ps1 => Wildrig-v0.40.4.ps1} | 10 +-
Miners/XmRig-v6.20.0.ps1 | 8 +-
Miners/XmrStak-v2.10.8.ps1 | 8 +-
Miners/ZealotEnemy-v2.6.2.ps1 | 4 +-
Miners/ZealotEnemy-v2.6.3.ps1 | 4 +-
Miners/lolMiner-v1.81.ps1 | 4 +-
NemosMiner.ps1 | 40 +-
Pools/HashCryptos.ps1 | 2 +-
Pools/HiveON.ps1 | 2 +-
Pools/MiningDutch.ps1 | 2 +-
Pools/MiningPoolHub.ps1 | 2 +-
Pools/NiceHash.ps1 | 2 +-
Pools/ProHashing.ps1 | 2 +-
Pools/ZPool.ps1 | 2 +-
Pools/ZergPool.ps1 | 2 +-
Version.txt | 2 +-
Web/APIdocs.html | 8 +-
Web/parts/head.html | 4 +-
Web/poolsall.html | 6 +
Web/poolsbest.html | 6 +
Web/poolsunavailable.html | 6 +
Web/scripts/demo.ps1 | 4 +-
116 files changed, 2309 insertions(+), 666 deletions(-)
create mode 100644 Includes/Core_dev.ps1
create mode 100644 Miners/OneZeroMiner-v1.2.8.ps1
delete mode 100644 Miners/TeamRedMiner-v0.10.14.ps1
create mode 100644 Miners/TeamRedMiner-v0.10.15.ps1
rename Miners/{Wildrig-v0.40.2a.ps1 => Wildrig-v0.40.4.ps1} (99%)
diff --git a/Balances/HashCryptos.ps1 b/Balances/HashCryptos.ps1
index d3f1e96d30..e790484147 100644
--- a/Balances/HashCryptos.ps1
+++ b/Balances/HashCryptos.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Balances\HashCryptos.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Balances/HiveON.ps1 b/Balances/HiveON.ps1
index e678e4768f..a516806e19 100644
--- a/Balances/HiveON.ps1
+++ b/Balances/HiveON.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Balances\Hiveon.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Balances/MiningDutch.ps1 b/Balances/MiningDutch.ps1
index 79cb30adab..5d2e55357d 100644
--- a/Balances/MiningDutch.ps1
+++ b/Balances/MiningDutch.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Balances\MiningDutch.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Balances/MiningPoolHub.ps1 b/Balances/MiningPoolHub.ps1
index 099765fff0..9b1c0ea595 100644
--- a/Balances/MiningPoolHub.ps1
+++ b/Balances/MiningPoolHub.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Balances\MiningPoolHub.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Balances/NiceHash External.ps1 b/Balances/NiceHash External.ps1
index 88045f2d4d..9b39f66949 100644
--- a/Balances/NiceHash External.ps1
+++ b/Balances/NiceHash External.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Balances\NiceHash Internal.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Balances/NiceHash Internal.ps1 b/Balances/NiceHash Internal.ps1
index 7a3fe1b550..5df6e01c92 100644
--- a/Balances/NiceHash Internal.ps1
+++ b/Balances/NiceHash Internal.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Balances\NiceHash Internal.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Balances/ProHashing.ps1 b/Balances/ProHashing.ps1
index 5907774ede..788fa58eac 100644
--- a/Balances/ProHashing.ps1
+++ b/Balances/ProHashing.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Balances\ProHashing.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Balances/ZergPool.ps1 b/Balances/ZergPool.ps1
index d557d4fb32..30e57f1206 100644
--- a/Balances/ZergPool.ps1
+++ b/Balances/ZergPool.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Balances\ZergPool.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Balances/Zpool.ps1 b/Balances/Zpool.ps1
index 67d89c00fc..1faf3b9e1e 100644
--- a/Balances/Zpool.ps1
+++ b/Balances/Zpool.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Balances\Zpool.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Brains/HashCryptos.ps1 b/Brains/HashCryptos.ps1
index f97f5fa355..1283b68296 100644
--- a/Brains/HashCryptos.ps1
+++ b/Brains/HashCryptos.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Brains\MiningDutch.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Brains/MiningDutch.ps1 b/Brains/MiningDutch.ps1
index 635cd5e55f..ae9cf1998c 100644
--- a/Brains/MiningDutch.ps1
+++ b/Brains/MiningDutch.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Brains\MiningDutch.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Brains/ProHashing.ps1 b/Brains/ProHashing.ps1
index c923555597..52a3e5eb40 100644
--- a/Brains/ProHashing.ps1
+++ b/Brains/ProHashing.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Brains\ProHashing.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Brains/ZPool.ps1 b/Brains/ZPool.ps1
index 0e8687ba46..bbc0a19acb 100644
--- a/Brains/ZPool.ps1
+++ b/Brains/ZPool.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Brains\ZPool.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 08 July 2023
#>
diff --git a/Brains/ZergPool.ps1 b/Brains/ZergPool.ps1
index 6c9ff4c716..ae0b27fe3d 100644
--- a/Brains/ZergPool.ps1
+++ b/Brains/ZergPool.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Brains\ZergPool.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/ChangeLog.txt b/ChangeLog.txt
index dd4d9d26f7..60262a1477 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -9,11 +9,32 @@ If you are coming from 3.8.x.x it is highly recommended that you install NemosMi
Known issues:
- Balance Tracker / Earnings Graph: Date change take does not respect local time zone (accumulated data is calculated in UTC time)
+ChangeLog NemosMiner 5.0.2.5 2023/12/26
+=======================================
+
+Changes:
+- Remove all references to NemosMiner web page and rig monitor (web page is down, cannot contact Nemo)
+
+Enhancements:
+- Core: Minor speed optimizations
+
+Fixes:
+- Core: Benchmarking / Power consumption measuring miner count incorrect (Regression from 5.0.2.3)
+- Core: Error 'Miner data reader exited unexpectedly' (no more thread jobs available)
+- Main text window: Fix hash rate formatting of previously run miners
+- Legay GUI: Fix hash rate formatting of previously run miners
+
+Miner changes:
+- OneZeroMiner-v1.2.8
+- TeamRedMiner-v0.10.15
+- Wildrig-v0.40.4
+
+
ChangeLog NemosMiner 5.0.2.4 2023/12/20
=======================================
Enhancements:
-- Pool: Add 'PoolUri' property with link to algorithms web page
+- Pools: Add 'PoolUri' property with link to algorithms web page
Fixes:
- PhoenixMiner: Did not create single algorithm miner objects (Regression from 5.0.0.0)
@@ -21,6 +42,7 @@ Fixes:
Miner updates:
- lolMiner-v1.81
- Rigel-v1.11.0
+- SRBMinerMulti-v2.4.4
- TeamBlackMiner-v2.16
- Wildrig-v0.40.2a
diff --git a/Data/Algorithms.json b/Data/Algorithms.json
index 74acc81123..b60a6047b6 100644
--- a/Data/Algorithms.json
+++ b/Data/Algorithms.json
@@ -27,6 +27,7 @@
"blake2bbtcc": "Blake2bBtcc",
"blake2bglt": "Blake2bGlt",
"blake2bsha3": "Blake2bSha3",
+ "blake3decred": "Decred",
"blake3ironfish": "Ironfish",
"chainox": "0x10",
"chukwa": "Argon2Chukwa",
diff --git a/Data/CoinNames.json b/Data/CoinNames.json
index 1c8a833b3c..8a86344881 100644
--- a/Data/CoinNames.json
+++ b/Data/CoinNames.json
@@ -3,6 +3,7 @@
"ACM": "Actinium",
"ADOT": "Alterdot",
"AE": "Aeternity",
+ "AIPG": "Aipowergrid",
"AKA": "AKA",
"ALPH": "Alephium",
"ALT": "Altcoinchain",
@@ -68,6 +69,7 @@
"CURVE": "Curve",
"CY": "Cyberyen",
"DASH": "Dash",
+ "DCR": "Decred",
"DEM": "DeutscheEmark",
"DGB": "Digibyte",
"DGC": "Digital",
@@ -79,6 +81,7 @@
"DMS": "Documentchain",
"DNX": "DynexCoin",
"DOGE": "DogeCoin",
+ "DOGETHER": "Dogether",
"DVT": "Devault",
"DYN": "Dynamic",
"EAC": "EarthCoin",
diff --git a/Data/CurrencyAlgorithm.json b/Data/CurrencyAlgorithm.json
index 69b5594c12..a4aac64302 100644
--- a/Data/CurrencyAlgorithm.json
+++ b/Data/CurrencyAlgorithm.json
@@ -4,6 +4,7 @@
"ADOT": "Argon2d16000",
"AE": "Cuckoo29",
"AIB": "Scrypt",
+ "AIPG": "KawPow",
"AKA": "Ethash",
"ALPH": "Blake3",
"ALT": "Ethash",
@@ -74,6 +75,7 @@
"D": "Tribus",
"DASH": "X11",
"DBIX": "Ethash",
+ "DCR": "Decred",
"DEM": "SHA256",
"DGB": "Qubit",
"DGC": "X11",
@@ -85,6 +87,7 @@
"DMS": "YescryptR32",
"DNX": "DynexSolve",
"DOGE": "Scrypt",
+ "DOGETHER": "Ethash",
"DVT": "SHA256",
"DYN": "Argon2dDyn",
"DYNAMO": "DynamoCoin",
diff --git a/Data/DagData.json b/Data/DagData.json
index 143c95ac87..41dc6d1f39 100644
--- a/Data/DagData.json
+++ b/Data/DagData.json
@@ -1,28 +1,28 @@
{
"Algorithm": {
"Autolykos2": {
- "BlockHeight": 1159484,
+ "BlockHeight": 1164233,
"CoinName": "ERG",
"DAGsize": 3558121875,
- "Epoch": 727
+ "Epoch": 731
},
"EtcHash": {
- "BlockHeight": 18948128,
+ "BlockHeight": 18986961,
"CoinName": "ETC",
- "DAGsize": 3732925568,
- "Epoch": 317
+ "DAGsize": 3741318016,
+ "Epoch": 318
},
"Ethash": {
- "BlockHeight": 18564951,
+ "BlockHeight": 18609772,
"CoinName": "ETHF",
- "DAGsize": 6274676864,
- "Epoch": 620
+ "DAGsize": 6291454336,
+ "Epoch": 622
},
"EthashB3": {
- "BlockHeight": 1505793,
+ "BlockHeight": 1565198,
"CoinName": "HYP",
- "DAGsize": 1509948032,
- "Epoch": 52
+ "DAGsize": 1526726528,
+ "Epoch": 54
},
"EvrProgPow": {
"BlockHeight": 0,
@@ -31,80 +31,89 @@
"Epoch": 2
},
"FiroPow": {
- "BlockHeight": 802906,
+ "BlockHeight": 806393,
"CoinName": "FIRO",
- "DAGsize": 6266287744,
- "Epoch": 619
+ "DAGsize": 6291454336,
+ "Epoch": 622
},
"FiroPowSCC": {
- "BlockHeight": 802906,
+ "BlockHeight": 806393,
"CoinName": "FIRO",
- "DAGsize": 6266287744,
- "Epoch": 619
+ "DAGsize": 6291454336,
+ "Epoch": 622
},
"KawPow": {
- "BlockHeight": 3112676,
+ "BlockHeight": 3121268,
"CoinName": "RVN",
- "DAGsize": 4571790208,
- "Epoch": 417
+ "DAGsize": 4580174464,
+ "Epoch": 418
},
"Octopus": {
- "BlockHeight": 85778067,
+ "BlockHeight": 86222967,
"CoinName": "CFX",
- "DAGsize": 7063207168,
- "Epoch": 165
+ "DAGsize": 7079974144,
+ "Epoch": 166
},
"ProgPowSero": {
- "BlockHeight": 11640347,
+ "BlockHeight": 11684672,
"CoinName": "SERO",
- "DAGsize": 4345295488,
- "Epoch": 390
+ "DAGsize": 4353687424,
+ "Epoch": 391
},
"ProgPowZ": {
- "BlockHeight": 2422444,
+ "BlockHeight": 2431041,
"CoinName": "ZANO",
- "DAGsize": 1761606272,
- "Epoch": 82
+ "DAGsize": 1769995904,
+ "Epoch": 83
},
"UbqHash": {
- "BlockHeight": 4689593,
+ "BlockHeight": 4714765,
"CoinName": "UBQ",
- "DAGsize": 2399139968,
- "Epoch": 158
+ "DAGsize": 2407530368,
+ "Epoch": 159
}
},
"Currency": {
"*": {
- "BlockHeight": 85778067,
+ "BlockHeight": 86222967,
"CoinName": "*",
- "DAGsize": 7063207168,
- "Epoch": 727
+ "DAGsize": 7079974144,
+ "Epoch": 731
+ },
+ "AIPG": {
+ "Algorithm": "KawPow",
+ "BlockHeight": 24694,
+ "CoinName": "Aipowergrid",
+ "DAGsize": 1115684224,
+ "Date": "2023-12-26T09:41:36.8488729Z",
+ "Epoch": 5,
+ "Url": "https://zergpool.com/api/currencies"
},
"AKA": {
"Algorithm": "Ethash",
- "BlockHeight": 10882453,
+ "BlockHeight": 10924154,
"CoinName": "AKA",
- "DAGsize": 4127194496,
- "Date": "2023-12-19T18:14:33.9546405Z",
- "Epoch": 364,
+ "DAGsize": 4143971968,
+ "Date": "2023-12-26T08:53:20.4092115Z",
+ "Epoch": 366,
"Url": "https://minerstat.com/dag-size-calculator"
},
"ALT": {
"Algorithm": "Ethash",
- "BlockHeight": 2500405,
+ "BlockHeight": 2540597,
"CoinName": "Altcoinchain",
- "DAGsize": 1786772864,
- "Date": "2023-12-20T09:26:13.0074179Z",
- "Epoch": 85,
+ "DAGsize": 1795157888,
+ "Date": "2023-12-26T09:41:36.9589704Z",
+ "Epoch": 86,
"Url": "https://zergpool.com/api/currencies"
},
"AVS": {
"Algorithm": "Ethash",
- "BlockHeight": 2539984,
+ "BlockHeight": 2580212,
"CoinName": "Aves",
- "DAGsize": 1795157888,
- "Date": "2023-12-20T09:26:13.0521586Z",
- "Epoch": 86,
+ "DAGsize": 1811937664,
+ "Date": "2023-12-26T09:41:37.0230314Z",
+ "Epoch": 88,
"Url": "https://zergpool.com/api/currencies"
},
"BLACK": {
@@ -118,83 +127,92 @@
},
"BTN": {
"Algorithm": "Ethash",
- "BlockHeight": 1082499,
+ "BlockHeight": 1122722,
"CoinName": "Bitnetmoney",
- "DAGsize": 1392507008,
- "Date": "2023-12-20T09:26:13.0935012Z",
- "Epoch": 38,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 1400897408,
+ "Date": "2023-12-26T09:41:37.3719159Z",
+ "Epoch": 39,
+ "Url": "https://whattomine.com/coins.json"
},
"CAU": {
"Algorithm": "Ethash",
- "BlockHeight": 2334653,
+ "BlockHeight": 2394505,
"CoinName": "Canxium",
- "DAGsize": 1736434816,
- "Date": "2023-12-20T09:26:13.1899918Z",
- "Epoch": 79,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 1753218944,
+ "Date": "2023-12-26T09:41:37.336545Z",
+ "Epoch": 81,
+ "Url": "https://whattomine.com/coins.json"
},
"CFX": {
"Algorithm": "Octopus",
- "BlockHeight": 85778067,
+ "BlockHeight": 86222967,
"CoinName": "Conflux",
- "DAGsize": 7063207168,
- "Date": "2023-12-19T18:14:31.7347202Z",
- "Epoch": 165,
- "Url": "https://whattomine.com/coins.json"
+ "DAGsize": 7079974144,
+ "Date": "2023-12-26T09:41:40.1505083Z",
+ "Epoch": 166,
+ "Url": "https://prohashing.com/api/v1/currencies"
},
"CLO": {
"Algorithm": "Ethash",
- "BlockHeight": 13795338,
+ "BlockHeight": 13835591,
"CoinName": "Callisto",
- "DAGsize": 4940889728,
- "Date": "2023-12-20T09:26:13.2431631Z",
- "Epoch": 461,
+ "DAGsize": 4957666432,
+ "Date": "2023-12-26T09:41:37.1800298Z",
+ "Epoch": 463,
"Url": "https://zergpool.com/api/currencies"
},
"CLORE": {
"Algorithm": "KawPow",
- "BlockHeight": 537588,
+ "BlockHeight": 546155,
"CoinName": "Clore",
- "DAGsize": 1686109312,
- "Date": "2023-12-20T09:26:13.2672281Z",
- "Epoch": 73,
+ "DAGsize": 1694497664,
+ "Date": "2023-12-26T09:41:36.4402845Z",
+ "Epoch": 74,
+ "Url": "https://whattomine.com/coins.json"
+ },
+ "DOGETHER": {
+ "Algorithm": "Ethash",
+ "BlockHeight": 64181,
+ "CoinName": "Dogether",
+ "DAGsize": 1107293056,
+ "Date": "2023-12-26T09:41:37.2234136Z",
+ "Epoch": 4,
"Url": "https://zergpool.com/api/currencies"
},
"EGAZ": {
"Algorithm": "EtcHash",
- "BlockHeight": 4096665,
+ "BlockHeight": 4140304,
"CoinName": "Etica",
- "DAGsize": 2231367808,
- "Date": "2023-12-19T18:14:33.3095647Z",
- "Epoch": 138,
+ "DAGsize": 2248145024,
+ "Date": "2023-12-26T09:41:37.7833868Z",
+ "Epoch": 140,
"Url": "https://whattomine.com/coins.json"
},
"EGEM": {
"Algorithm": "Ethash",
- "BlockHeight": 14550978,
+ "BlockHeight": 14597858,
"CoinName": "Ethergem",
- "DAGsize": 5158993024,
- "Date": "2023-12-19T18:14:32.8607684Z",
- "Epoch": 487,
+ "DAGsize": 5167382144,
+ "Date": "2023-12-26T09:41:38.0425766Z",
+ "Epoch": 488,
"Url": "https://whattomine.com/coins.json"
},
"ELH": {
"Algorithm": "Ethash",
- "BlockHeight": 1517374,
+ "BlockHeight": 1557280,
"CoinName": "Elhereum",
- "DAGsize": 1509948032,
- "Date": "2023-12-20T09:26:13.3008294Z",
- "Epoch": 52,
+ "DAGsize": 1518337664,
+ "Date": "2023-12-26T09:41:37.2634754Z",
+ "Epoch": 53,
"Url": "https://zergpool.com/api/currencies"
},
"ERG": {
"Algorithm": "Autolykos2",
- "BlockHeight": 1159484,
+ "BlockHeight": 1164233,
"CoinName": "Ergo",
"DAGsize": 3558121875,
- "Date": "2023-12-19T18:14:35.907547Z",
- "Epoch": 727,
+ "Date": "2023-12-26T09:41:39.913379Z",
+ "Epoch": 731,
"Url": "https://prohashing.com/api/v1/currencies"
},
"ESN": {
@@ -202,52 +220,52 @@
"BlockHeight": 6408009,
"CoinName": "Ethersocial",
"DAGsize": 2877286784,
- "Date": "2023-12-19T18:14:34.2383367Z",
+ "Date": "2023-12-26T09:41:38.5547853Z",
"Epoch": 215,
"Url": "https://minerstat.com/dag-size-calculator"
},
"ETC": {
"Algorithm": "EtcHash",
- "BlockHeight": 18948128,
+ "BlockHeight": 18986961,
"CoinName": "EthereumClassic",
- "DAGsize": 3732925568,
- "Date": "2023-12-20T09:26:13.3668549Z",
- "Epoch": 317,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 3741318016,
+ "Date": "2023-12-26T09:41:37.8810307Z",
+ "Epoch": 318,
+ "Url": "https://whattomine.com/coins.json"
},
"ETHF": {
"Algorithm": "Ethash",
- "BlockHeight": 18564951,
+ "BlockHeight": 18609772,
"CoinName": "EthereumFair",
- "DAGsize": 6274676864,
- "Date": "2023-12-19T18:14:33.6568724Z",
- "Epoch": 620,
- "Url": "https://minerstat.com/dag-size-calculator"
+ "DAGsize": 6291454336,
+ "Date": "2023-12-26T09:41:37.5230223Z",
+ "Epoch": 622,
+ "Url": "https://whattomine.com/coins.json"
},
"ETHO": {
"Algorithm": "Ethash",
- "BlockHeight": 13094419,
+ "BlockHeight": 13133935,
"CoinName": "EthoProtocol",
- "DAGsize": 4747951744,
- "Date": "2023-12-20T09:26:13.4497498Z",
- "Epoch": 438,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 4756340608,
+ "Date": "2023-12-26T09:41:37.5912744Z",
+ "Epoch": 439,
+ "Url": "https://whattomine.com/coins.json"
},
"ETHW": {
"Algorithm": "Ethash",
- "BlockHeight": 18518707,
+ "BlockHeight": 18557557,
"CoinName": "EthereumPow",
- "DAGsize": 6266287744,
- "Date": "2023-12-20T09:26:13.5132882Z",
- "Epoch": 619,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 6274676864,
+ "Date": "2023-12-26T09:41:37.7083497Z",
+ "Epoch": 620,
+ "Url": "https://whattomine.com/coins.json"
},
"ETP": {
"Algorithm": "Ethash",
"BlockHeight": 8700191,
"CoinName": "Metaverse",
"DAGsize": 3523213952,
- "Date": "2023-12-19T18:14:34.1637052Z",
+ "Date": "2023-12-26T09:41:38.479262Z",
"Epoch": 292,
"Url": "https://minerstat.com/dag-size-calculator"
},
@@ -271,30 +289,30 @@
},
"FIRO": {
"Algorithm": "FiroPow",
- "BlockHeight": 802906,
+ "BlockHeight": 806393,
"CoinName": "Firo",
- "DAGsize": 6266287744,
- "Date": "2023-12-20T09:26:13.5641925Z",
- "Epoch": 619,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 6291454336,
+ "Date": "2023-12-26T09:41:37.1308456Z",
+ "Epoch": 622,
+ "Url": "https://whattomine.com/coins.json"
},
"FLORA": {
"Algorithm": "Ethash",
"BlockHeight": 789635,
"CoinName": "",
"DAGsize": 1308619904,
- "Date": "2023-12-19T18:14:34.6614903Z",
+ "Date": "2023-12-26T09:41:38.6298809Z",
"Epoch": 28,
"Url": "https://minerstat.com/dag-size-calculator"
},
"FREN": {
"Algorithm": "KawPow",
- "BlockHeight": 646612,
+ "BlockHeight": 663829,
"CoinName": "FrenCoin",
- "DAGsize": 1811937664,
- "Date": "2023-12-20T09:26:13.6217817Z",
- "Epoch": 88,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 1828711552,
+ "Date": "2023-12-26T09:41:36.6709946Z",
+ "Epoch": 90,
+ "Url": "https://whattomine.com/coins.json"
},
"FTC": {
"Algorithm": "EvrProgPow",
@@ -307,102 +325,102 @@
},
"GPN": {
"Algorithm": "KawPow",
- "BlockHeight": 335539,
+ "BlockHeight": 344079,
"CoinName": "Gamepass",
- "DAGsize": 1459615616,
- "Date": "2023-12-20T09:26:13.6973265Z",
- "Epoch": 46,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 1468006016,
+ "Date": "2023-12-26T09:41:36.5058087Z",
+ "Epoch": 47,
+ "Url": "https://whattomine.com/coins.json"
},
"HVQ": {
"Algorithm": "KawPow",
- "BlockHeight": 1391169,
+ "BlockHeight": 1399740,
"CoinName": "HiveCoin",
- "DAGsize": 2642407552,
- "Date": "2023-12-20T09:26:13.7943915Z",
- "Epoch": 187,
+ "DAGsize": 2650796416,
+ "Date": "2023-12-26T09:41:37.5148246Z",
+ "Epoch": 188,
"Url": "https://zergpool.com/api/currencies"
},
"HYP": {
"Algorithm": "EthashB3",
- "BlockHeight": 1505793,
+ "BlockHeight": 1565198,
"CoinName": "Hypra",
- "DAGsize": 1509948032,
- "Date": "2023-12-20T09:26:13.8357202Z",
- "Epoch": 52,
+ "DAGsize": 1526726528,
+ "Date": "2023-12-26T09:41:37.549369Z",
+ "Epoch": 54,
"Url": "https://zergpool.com/api/currencies"
},
"KIIRO": {
"Algorithm": "FiroPow",
- "BlockHeight": 88854,
+ "BlockHeight": 92182,
"CoinName": "KiiroCoin",
- "DAGsize": 1660943488,
- "Date": "2023-12-20T09:26:13.911466Z",
- "Epoch": 70,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 1677721216,
+ "Date": "2023-12-26T09:41:36.7183016Z",
+ "Epoch": 72,
+ "Url": "https://whattomine.com/coins.json"
},
"MEWC": {
"Algorithm": "KawPow",
- "BlockHeight": 673160,
+ "BlockHeight": 681752,
"CoinName": "MeowCoin",
- "DAGsize": 1837102976,
- "Date": "2023-12-20T09:26:14.0222152Z",
- "Epoch": 91,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 1845488768,
+ "Date": "2023-12-26T09:41:37.0559496Z",
+ "Epoch": 92,
+ "Url": "https://whattomine.com/coins.json"
},
"MOAC": {
"Algorithm": "Ethash",
- "BlockHeight": 13069954,
+ "BlockHeight": 13104674,
"CoinName": "",
- "DAGsize": 4739562368,
- "Date": "2023-12-19T18:14:33.8503976Z",
- "Epoch": 437,
+ "DAGsize": 4747951744,
+ "Date": "2023-12-26T09:41:38.3328587Z",
+ "Epoch": 438,
"Url": "https://minerstat.com/dag-size-calculator"
},
"NEOX": {
"Algorithm": "KawPow",
- "BlockHeight": 830878,
+ "BlockHeight": 839496,
"CoinName": "Neoxa",
- "DAGsize": 2013262208,
- "Date": "2023-12-20T09:26:14.1865775Z",
- "Epoch": 112,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 2021653888,
+ "Date": "2023-12-26T09:41:36.540155Z",
+ "Epoch": 113,
+ "Url": "https://whattomine.com/coins.json"
},
"NILU": {
"Algorithm": "Ethash",
- "BlockHeight": 6239398,
+ "BlockHeight": 6239664,
"CoinName": "",
"DAGsize": 2826959488,
- "Date": "2023-12-19T18:14:34.3113766Z",
+ "Date": "2023-12-26T08:53:21.7334068Z",
"Epoch": 209,
"Url": "https://minerstat.com/dag-size-calculator"
},
"NUKO": {
"Algorithm": "Ethash",
- "BlockHeight": 8830114,
+ "BlockHeight": 8832526,
"CoinName": "",
"DAGsize": 3556763264,
- "Date": "2023-12-19T18:14:34.1166887Z",
+ "Date": "2023-12-26T09:41:38.4265047Z",
"Epoch": 296,
"Url": "https://minerstat.com/dag-size-calculator"
},
"OCTA": {
"Algorithm": "Ethash",
- "BlockHeight": 3657876,
+ "BlockHeight": 3698047,
"CoinName": "Octaspace",
- "DAGsize": 2105539712,
- "Date": "2023-12-20T09:26:14.2525017Z",
- "Epoch": 123,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 2122315136,
+ "Date": "2023-12-26T09:41:37.4557806Z",
+ "Epoch": 125,
+ "Url": "https://whattomine.com/coins.json"
},
"PAPRY": {
"Algorithm": "KawPow",
- "BlockHeight": 435594,
+ "BlockHeight": 444136,
"CoinName": "Paprika",
- "DAGsize": 1577056384,
- "Date": "2023-12-20T09:26:14.309639Z",
- "Epoch": 60,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 1585446272,
+ "Date": "2023-12-26T09:41:37.1832464Z",
+ "Epoch": 61,
+ "Url": "https://whattomine.com/coins.json"
},
"PGC": {
"Algorithm": "Ethash",
@@ -415,21 +433,21 @@
},
"PRCO": {
"Algorithm": "KawPow",
- "BlockHeight": 800580,
+ "BlockHeight": 809202,
"CoinName": "ProcyonCoin",
- "DAGsize": 1979707264,
- "Date": "2023-12-20T09:26:14.4263344Z",
- "Epoch": 108,
+ "DAGsize": 1988093056,
+ "Date": "2023-12-26T09:41:37.780533Z",
+ "Epoch": 109,
"Url": "https://zergpool.com/api/currencies"
},
"QKC": {
"Algorithm": "Ethash",
- "BlockHeight": 14932830,
+ "BlockHeight": 14991420,
"CoinName": "Quarkchain",
- "DAGsize": 5259654016,
- "Date": "2023-12-19T18:14:33.7926493Z",
- "Epoch": 499,
- "Url": "https://minerstat.com/dag-size-calculator"
+ "DAGsize": 5276434304,
+ "Date": "2023-12-26T09:41:37.9608797Z",
+ "Epoch": 501,
+ "Url": "https://whattomine.com/coins.json"
},
"REDE": {
"Algorithm": "KawPow",
@@ -442,11 +460,11 @@
},
"REDEV2": {
"Algorithm": "Ethash",
- "BlockHeight": 1188866,
+ "BlockHeight": 1228912,
"CoinName": "Redev2",
- "DAGsize": 1417673344,
- "Date": "2023-12-20T09:26:14.4842734Z",
- "Epoch": 41,
+ "DAGsize": 1426062464,
+ "Date": "2023-12-26T09:41:37.8243988Z",
+ "Epoch": 42,
"Url": "https://zergpool.com/api/currencies"
},
"RTH": {
@@ -460,38 +478,38 @@
},
"RVN": {
"Algorithm": "KawPow",
- "BlockHeight": 3112676,
+ "BlockHeight": 3121268,
"CoinName": "RavenCoin",
- "DAGsize": 4571790208,
- "Date": "2023-12-20T09:26:14.5634663Z",
- "Epoch": 417,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 4580174464,
+ "Date": "2023-12-26T09:41:40.0040332Z",
+ "Epoch": 418,
+ "Url": "https://prohashing.com/api/v1/currencies"
},
"SATOX": {
"Algorithm": "KawPow",
- "BlockHeight": 486563,
+ "BlockHeight": 495149,
"CoinName": "Sato",
- "DAGsize": 1627386752,
- "Date": "2023-12-20T09:26:14.6121167Z",
- "Epoch": 66,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 1644164224,
+ "Date": "2023-12-26T09:41:36.4750341Z",
+ "Epoch": 68,
+ "Url": "https://whattomine.com/coins.json"
},
"SCC": {
"Algorithm": "FiroPowSCC",
- "BlockHeight": 802906,
+ "BlockHeight": 806393,
"CoinName": "StakeCubeCoin",
- "DAGsize": 6266287744,
- "Date": "2023-12-20T09:26:13.5641925Z",
- "Epoch": 619,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 6291454336,
+ "Date": "2023-12-26T09:41:37.1308456Z",
+ "Epoch": 622,
+ "Url": "https://whattomine.com/coins.json"
},
"SERO": {
"Algorithm": "ProgPowSero",
- "BlockHeight": 11640347,
+ "BlockHeight": 11684672,
"CoinName": "Sero",
- "DAGsize": 4345295488,
- "Date": "2023-12-19T18:14:32.6437537Z",
- "Epoch": 390,
+ "DAGsize": 4353687424,
+ "Date": "2023-12-26T09:41:37.2976459Z",
+ "Epoch": 391,
"Url": "https://whattomine.com/coins.json"
},
"SLX": {
@@ -505,46 +523,46 @@
},
"UBQ": {
"Algorithm": "UbqHash",
- "BlockHeight": 4689593,
+ "BlockHeight": 4714765,
"CoinName": "Ubiq",
- "DAGsize": 2399139968,
- "Date": "2023-12-20T09:26:15.1059904Z",
- "Epoch": 158,
+ "DAGsize": 2407530368,
+ "Date": "2023-12-26T09:41:37.9529776Z",
+ "Epoch": 159,
"Url": "https://zergpool.com/api/currencies"
},
"XNA": {
"Algorithm": "KawPow",
- "BlockHeight": 352078,
+ "BlockHeight": 360682,
"CoinName": "Neurai",
- "DAGsize": 1476394112,
- "Date": "2023-12-20T09:26:15.5898043Z",
- "Epoch": 48,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 1493171584,
+ "Date": "2023-12-26T09:41:36.373289Z",
+ "Epoch": 50,
+ "Url": "https://whattomine.com/coins.json"
},
"XPB": {
"Algorithm": "Ethash",
- "BlockHeight": 684738,
+ "BlockHeight": 724192,
"CoinName": "Powblocks",
- "DAGsize": 1275067264,
- "Date": "2023-12-20T09:26:15.6165177Z",
- "Epoch": 24,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 1291844992,
+ "Date": "2023-12-26T09:41:37.4195572Z",
+ "Epoch": 26,
+ "Url": "https://whattomine.com/coins.json"
},
"ZANO": {
"Algorithm": "ProgPowZ",
- "BlockHeight": 2422444,
+ "BlockHeight": 2431041,
"CoinName": "Zano",
- "DAGsize": 1761606272,
- "Date": "2023-12-20T09:26:15.6602269Z",
- "Epoch": 82,
- "Url": "https://zergpool.com/api/currencies"
+ "DAGsize": 1769995904,
+ "Date": "2023-12-26T09:41:36.4133048Z",
+ "Epoch": 83,
+ "Url": "https://whattomine.com/coins.json"
}
},
"Updated": {
"https://evr.cryptoscope.io/api/getblockcount": "2023-12-03T10:02:57.2420652Z",
- "https://minerstat.com/dag-size-calculator": "2023-12-19T18:14:34.6921969Z",
- "https://prohashing.com/api/v1/currencies": "2023-12-19T18:14:35.9495145Z",
- "https://whattomine.com/coins.json": "2023-12-19T18:14:33.3978571Z",
- "https://zergpool.com/api/currencies": "2023-12-20T09:26:15.660556Z"
+ "https://minerstat.com/dag-size-calculator": "2023-12-26T09:41:38.6718501Z",
+ "https://prohashing.com/api/v1/currencies": "2023-12-26T09:41:40.1509445Z",
+ "https://whattomine.com/coins.json": "2023-12-26T09:41:38.0429425Z",
+ "https://zergpool.com/api/currencies": "2023-12-26T09:41:37.9533476Z"
}
}
diff --git a/Data/UnprofitableAlgorithms.json b/Data/UnprofitableAlgorithms.json
index 9c58cd3d47..ac3431913c 100644
--- a/Data/UnprofitableAlgorithms.json
+++ b/Data/UnprofitableAlgorithms.json
@@ -15,7 +15,6 @@
"CryptonightR": "*",
"Cuckatoo31": "*",
"Cuckatoo32": "*",
- "Decred": "1",
"Dedal": "*",
"Eaglesong": "1",
"Equihash2009": "*",
diff --git a/Includes/APIServer.psm1 b/Includes/APIServer.psm1
index 201bb00e8e..4954cb3db0 100644
--- a/Includes/APIServer.psm1
+++ b/Includes/APIServer.psm1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\APIServer.psm1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/BalancesTracker.ps1 b/Includes/BalancesTracker.ps1
index a78423d2e5..2cd646acde 100644
--- a/Includes/BalancesTracker.ps1
+++ b/Includes/BalancesTracker.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\BalancesTracker.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/Core.ps1 b/Includes/Core.ps1
index 4adef85858..2f94c91cc5 100644
--- a/Includes/Core.ps1
+++ b/Includes/Core.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: Core.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
@@ -429,7 +429,7 @@ Do {
)
}
)
- Remove-Variable Name, Pool, PoolGroup, PoolGroups -ErrorAction Ignore
+ Remove-Variable Key, Name, Pool, PoolGroup, PoolGroups -ErrorAction Ignore
If ($Variables.CycleStarts.Count -ge $Config.SyncWindow) {
# Remove Pools that have not been updated for 1 day
$Pools = @($Pools.Where({ $_.Updated -ge ([DateTime]::Now).ToUniversalTime().AddDays(-1) }))
@@ -935,7 +935,7 @@ Do {
DownloadList = $DownloadList
Variables = $Variables
}
- $Variables.Downloader = Start-ThreadJob -Name Downloader -StreamingHost $null -FilePath ".\Includes\Downloader.ps1" -InitializationScript ([scriptblock]::Create("Set-Location '$($Variables.MainPath)'")) -ArgumentList $Downloader_Parameters
+ $Variables.Downloader = Start-ThreadJob -Name Downloader -StreamingHost $null -FilePath ".\Includes\Downloader.ps1" -InitializationScript ([scriptblock]::Create("Set-Location '$($Variables.MainPath)'")) -ArgumentList $Downloader_Parameters -ThrottleLimit (2 * $Variables.Devices.Count + 2)
Remove-Variable Downloader_Parameters
}
ElseIf (-not $Miners.Where({ $_.Available })) {
@@ -1008,10 +1008,10 @@ Do {
$Variables.BasePowerCost = [Double]($Variables.PowerConsumptionIdleSystemW / 1000 * 24 * $Variables.PowerPricekWh / $Variables.Rates."BTC".($Config.MainCurrency))
- $Variables.MiningEarning = [Double]($Variables.MinersBestPerDevice_Combo | Measure-Object Earning -Sum | Select-Object -ExpandProperty Sum)
+ $Variables.MiningEarning = [Double]($Variables.MinersBestPerDevice_Combo | Measure-Object Earning_Bias -Sum | Select-Object -ExpandProperty Sum)
$Variables.MiningPowerCost = [Double]($Variables.MinersBestPerDevice_Combo | Measure-Object PowerCost -Sum | Select-Object -ExpandProperty Sum)
$Variables.MiningPowerConsumption = [Double]($Variables.MinersBestPerDevice_Combo | Measure-Object PowerConsumption -Sum | Select-Object -ExpandProperty Sum)
- $Variables.MiningProfit = [Double](($Variables.MinersBestPerDevice_Combo | Measure-Object Profit -Sum | Select-Object -ExpandProperty Sum) - $Variables.BasePowerCost)
+ $Variables.MiningProfit = [Double](($Variables.MinersBestPerDevice_Combo | Measure-Object Profit_Bias -Sum | Select-Object -ExpandProperty Sum) - $Variables.BasePowerCost)
}
Else {
$Variables.MiningEarning = $Variables.MiningProfit = $Variables.MiningPowerCost = $Variables.MiningPowerConsumption = [Double]0
@@ -1313,13 +1313,12 @@ Do {
# Display benchmarking progress
If ($MinersDeviceGroupNeedingBenchmark) {
- $Count = ($MinersDeviceGroupNeedingBenchmark | Select-Object -Property { $_.Algorithms, $_.Name } -Unique).Count
+ $Count = ($MinersDeviceGroupNeedingBenchmark | Select-Object -Property { $_.Algorithms }, { $_.Name } -Unique).Count
Write-Message -Level Info "Benchmarking for '$($_.Name)' in progress. $Count miner$(If ($Count -gt 1) { 's' }) left to complete benchmark."
}
- $Count = ($MinersDeviceGroupNeedingBenchmark | Select-Object -Property { $_.Algorithms, $_.Name } -Unique).Count
# Display power consumption measurement progress
- $Count = ($MinersDeviceGroupNeedingPowerConsumptionMeasurement | Select-Object -Property { $_.Algorithms, $_.Name } -Unique).Count
If ($MinersDeviceGroupNeedingPowerConsumptionMeasurement) {
+ $Count = ($MinersDeviceGroupNeedingPowerConsumptionMeasurement | Select-Object -Property { $_.Algorithms }, { $_.Name } -Unique).Count
Write-Message -Level Info "Power consumption measurement for '$($_.Name)' in progress. $Count miner$(If ($Count -gt 1) { 's' }) left to complete measuring."
}
}
@@ -1363,7 +1362,7 @@ Do {
}
ElseIf ($Miner.DataReaderJob.State -ne [MinerStatus]::Running) {
# Miner data reader process failed
- $Miner.StatusInfo = "Error: '$($Miner.Info)' Miner data reader exited unexpectedly"
+ $Miner.StatusInfo = "Error: '$($Miner.Info)' miner data reader exited unexpectedly"
$Miner.SetStatus([MinerStatus]::Failed)
$Variables.FailedMiners += $Miner
}
diff --git a/Includes/Core_dev.ps1 b/Includes/Core_dev.ps1
new file mode 100644
index 0000000000..abb5c52145
--- /dev/null
+++ b/Includes/Core_dev.ps1
@@ -0,0 +1,1502 @@
+<#
+Copyright (c) 2018-2023 Nemo, MrPlus & UselessGuru
+
+
+NemosMiner is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+NemosMiner is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+#>
+
+<#
+Product: NemosMiner
+File: Core.ps1
+Version: 5.0.2.5
+Version date: 2023/12/20
+#>
+
+using module .\Include.psm1
+using module .\APIServer.psm1
+
+If ($Config.Transcript) { Start-Transcript -Path ".\Debug\$((Get-Item $MyInvocation.MyCommand.Path).BaseName)-Transcript_$(Get-Date -Format "yyyy-MM-dd_HH-mm-ss").log" }
+
+Do {
+ If ($LegacyGUIForm) { $LegacyGUIForm.Text = "$($Variables.Branding.ProductLabel) $($Variables.Branding.Version) - Runtime: {0:dd} days {0:hh} hrs {0:mm} mins - Path: $($Variables.Mainpath)" -f [TimeSpan](([DateTime]::Now).ToUniversalTime() - $Variables.ScriptStartTime) }
+
+ Try {
+ # Set master timer
+ $Variables.Timer = ([DateTime]::Now).ToUniversalTime()
+
+ (Get-ChildItem -Path ".\Includes\MinerAPIs" -File).ForEach({ . $_.FullName })
+
+ # Internet connection check when no new pools
+ If (-not $Variables.PoolsNew) {
+ If (-not ($Variables.MyIP = (Get-NetIPAddress -InterfaceIndex ((Get-NetRoute).Where({ $_.DestinationPrefix -eq "0.0.0.0/0" }) | Get-NetIPInterface).Where({ $_.ConnectionState -eq "Connected" }).ifIndex -AddressFamily IPV4).IPAddress)) {
+ $Variables.MyIP = $null
+ Write-Message -Level Error "No internet connection - will retry in 60 seconds..."
+ #Stop all miners
+ ForEach ($Miner in $Variables.Miners.Where({ $_.Status -ne [MinerStatus]::Idle })) {
+ $Miner.SetStatus([MinerStatus]::Idle)
+ $Variables.Devices.Where({ $_.Name -in $Miner.DeviceNames }).ForEach({ $_.Status = $Miner.Status; $_.StatusInfo = $Miner.StatusInfo; $_.SubStatus = $Miner.SubStatus })
+ }
+ Remove-Variable Miner -ErrorAction Ignore
+ $Variables.RunningMiners = [Miner[]]@()
+ $Variables.BenchmarkingOrMeasuringMiners = [Miner[]]@()
+ $Variables.FailedMiners = [Miner[]]@()
+ $Variables.MinersBestPerDevice_Combos = [Miner[]]@()
+ Start-Sleep -Seconds 60
+ Continue
+ }
+ }
+
+ $Variables.PoolsConfig = $Config.PoolsConfig.Clone()
+
+ If ($Config.IdleDetection) {
+ If (-not $Variables.IdleRunspace) {
+ Start-IdleDetection
+ }
+ If ($Variables.IdleRunspace.MiningStatus -eq "Idle") {
+ # Stop all miners
+ ForEach ($Miner in $Variables.Miners.Where({ $_.Status -ne [MinerStatus]::Idle })) {
+ $Miner.SetStatus([MinerStatus]::Idle)
+ $Miner.StatusInfo = "Waiting for system to become idle '$($Miner.Info)'"
+ $Variables.Devices.Where({ $_.Name -in $Miner.DeviceNames }).ForEach({ $_.Status = $Miner.Status; $_.StatusInfo = $Miner.StatusInfo; $_.SubStatus = $Miner.SubStatus })
+ }
+ Remove-Variable Miner -ErrorAction Ignore
+ $Variables.RunningMiners = [Miner[]]@()
+ $Variables.BenchmarkingOrMeasuringMiners = [Miner[]]@()
+ $Variables.FailedMiners = [Miner[]]@()
+ $Variables.Summary = "Mining is suspended until system is idle
again for $($Config.IdleSec) second$(If ($Config.IdleSec -ne 1) { "s" })..."
+ Write-Message -Level Verbose ($Variables.Summary -replace '
', ' ')
+ $Variables.IdleRunspace | Add-Member MiningStatus "Idle" -Force
+
+ While ($Variables.NewMiningStatus -eq "Running" -and $Config.IdleDetection -and $Variables.IdleRunspace.MiningStatus -eq "Idle") { Start-Sleep -Seconds 1 }
+
+ If ($Config.IdleDetection) { Write-Message -Level Info "Started new cycle (System was idle for $($Config.IdleSec) seconds)." }
+ }
+ }
+ Else {
+ If ($Variables.IdleRunspace) { Stop-IdleDetection }
+ Write-Message -Level Info "Started new cycle."
+ }
+
+ # Use values from config
+ $Variables.PoolName = $Config.PoolName
+ $Variables.NiceHashWalletIsInternal = $Config.NiceHashWalletIsInternal
+ $Variables.PoolTimeout = [Math]::Floor($Config.PoolTimeout)
+
+ # Update enabled devices
+ $Variables.EnabledDevices = [Device[]]@($Variables.Devices.Where({ $_.State -ne [DeviceState]::Unsupported -and $_.Name -notin $Config.ExcludeDeviceName }).ForEach({ Copy-Object $_ }))
+ If ($Variables.EnabledDevices) {
+ $Variables.EnabledDevices.ForEach(
+ {
+ # Miner name must not contain spaces
+ $_.Model = $_.Model -replace ' '
+ If ($_.Type -eq "GPU") {
+ # For GPUs set type equal to vendor
+ $_.Type = $_.Vendor
+ # Remove model information from devices -> will create only one miner instance
+ If (-not $Config.MinerInstancePerDeviceModel) { $_.Model = $_.Vendor }
+ }
+ }
+ )
+
+ # Skip some stuff when previous cycle was shorter than half of what it should
+ If ($Variables.BenchmarkingOrMeasuringMiners -or -not $Variables.Miners -or -not $Variables.BeginCycleTime -or (Compare-Object @($Config.PoolName | Select-Object) @($Variables.PoolName | Select-Object)) -or $Variables.BeginCycleTime.AddSeconds([Math]::Floor($Config.Interval / 2)) -lt ([DateTime]::Now).ToUniversalTime() -or ((Compare-Object @($Config.ExtraCurrencies | Select-Object) @($Variables.AllCurrencies | Select-Object)).Where({ $_.SideIndicator -eq "<=" }))) {
+ $Variables.BeginCycleTime = $Variables.Timer
+ $Variables.EndCycleTime = $Variables.Timer.AddSeconds($Config.Interval)
+
+ $Variables.CycleStarts += $Variables.Timer
+ $Variables.CycleStarts = @($Variables.CycleStarts | Sort-Object -Bottom (3, ($Config.SyncWindow + 1) | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum))
+
+ # Set minimum Watchdog count 3
+ $Variables.WatchdogCount = (3, $Config.WatchdogCount | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum)
+ $Variables.WatchdogReset = $Variables.WatchdogCount * $Variables.WatchdogCount * $Variables.WatchdogCount * $Variables.WatchdogCount * $Config.Interval
+
+ # Expire watchdog timers
+ If ($Config.Watchdog) { $Variables.WatchdogTimers = @($Variables.WatchdogTimers.Where({ $_.Kicked -ge $Variables.Timer.AddSeconds( - $Variables.WatchdogReset) })) }
+ Else { $Variables.WatchdogTimers = @() }
+
+ # Check for new version
+ If ($Config.AutoUpdateCheckInterval -and $Variables.CheckedForUpdate -lt ([DateTime]::Now).AddDays(-$Config.AutoUpdateCheckInterval)) { Get-NMVersion }
+
+ If ($Config.Donation -gt 0) {
+ If (-not $Variables.DonationStart) {
+ # Re-Randomize donation start once per day, do not donate if remaing time for today is less than donation duration
+ If (($Variables.DonationLog.Start | Sort-Object -Bottom 1).Date -ne [DateTime]::Today) {
+ If ($Config.Donation -lt (1440 - [Math]::Floor(([DateTime]::Now).TimeOfDay.TotalMinutes))) {
+ $Variables.DonationStart = ([DateTime]::Now).AddMinutes((Get-Random -Minimum 0 -Maximum (1440 - [Math]::Floor(([DateTime]::Now).TimeOfDay.TotalMinutes) - $Config.Donation)))
+ }
+ }
+ }
+ If ($Variables.DonationStart -and ([DateTime]::Now) -ge $Variables.DonationStart) {
+ If (-not $Variables.DonationEnd) {
+ $Variables.DonationStart = Get-Date
+ # Ensure full donation period
+ $Variables.DonationEnd = $Variables.DonationStart.AddMinutes($Config.Donation)
+ $Variables.EndCycleTime = ($Variables.DonationEnd).ToUniversalTime()
+ # Add pool config to config (in-memory only)
+ $Variables.DonationRandomPoolsConfig = Get-RandomDonationPoolsConfig
+ # Activate donation
+ $Variables.PoolName = $Variables.DonationRandomPoolsConfig.psBase.Keys
+ $Variables.PoolsConfig = $Variables.DonationRandomPoolsConfig
+ $Variables.NiceHashWalletIsInternal = $false
+ Write-Message -Level Info "Donation run: Mining for '$($Variables.DonationRandom.Name)' for the next $(If (($Config.Donation - (([DateTime]::Now) - $Variables.DonationStart).Minutes) -gt 1) { "$($Config.Donation - (([DateTime]::Now) - $Variables.DonationStart).Minutes) minutes" } Else { "minute" }). While donating $($Variables.Branding.ProductLabel) will use pools '$($Variables.PoolName -join ', ')'."
+ $Variables.DonationRunning = $true
+ }
+ }
+ }
+
+ If ($Variables.DonationRunning -and ([DateTime]::Now) -gt $Variables.DonationEnd) {
+ $Variables.DonationLog = $Variables.DonationLog | Select-Object -Last 365 # Keep data for one year
+ [Array]$Variables.DonationLog += [PSCustomObject]@{
+ Start = $Variables.DonationStart
+ End = $Variables.DonationEnd
+ Name = $Variables.DonationRandom.Name
+ }
+ $Variables.DonationLog | ConvertTo-Json | Out-File -LiteralPath ".\Logs\DonateLog.json" -Force -ErrorAction Ignore
+ $Variables.DonationRandomPoolsConfig = $null
+ $Variables.DonationStart = $null
+ $Variables.DonationEnd = $null
+ $Variables.PoolsConfig = $Config.PoolsConfig.Clone()
+ Write-Message -Level Info "Donation run complete - thank you! Mining for you again. :-)"
+ $Variables.DonationRunning = $false
+ }
+
+ # Stop / Start brain background jobs
+ [Void](Stop-Brain @($Variables.Brains.psBase.Keys.Where({ $_ -notin @(Get-PoolBaseName $Variables.PoolName) })))
+ [Void](Start-Brain @(Get-PoolBaseName $Variables.PoolName))
+
+ # Wait for pool data messaage
+ If ($Variables.PoolName) {
+ If ($Variables.Brains.psBase.Keys.Where({ $Variables.Brains[$_].StartTime -gt $Variables.Timer.AddSeconds(- $Config.Interval) })) {
+ # Newly started brains, allow extra time for brains to get ready
+ $Variables.PoolTimeout = 60
+ Write-Message -Level Info "Requesting initial pool data from '$((Get-PoolBaseName $Variables.PoolName) -join ', ')'...
This may take up to $($Variables.PoolTimeout) seconds."
+ }
+ Else {
+ Write-Message -Level Info "Requesting pool data from '$((Get-PoolBaseName $Variables.PoolName) -join ', ')'..."
+ }
+ }
+
+ # Core suspended with P in MainLoop
+ While ($Variables.SuspendCycle) { Start-Sleep -Seconds 1 }
+
+ # Remove stats that have been deleted from disk
+ Try {
+ If ($StatFiles = [String[]](Get-ChildItem -Path "Stats" -File).BaseName) {
+ If ($Keys = [String[]]($Stats.psBase.Keys)) {
+ (Compare-Object $StatFiles $Keys -PassThru).Where({ $_.SideIndicator -eq "=>"}).ForEach(
+ {
+ # Remove stat if deleted on disk
+ $Stats.Remove($_)
+ }
+ )
+ }
+ }
+ } Catch {}
+ Remove-Variable Keys, StatFiles -ErrorAction Ignore
+
+ # Load currency exchange rates
+ [Void](Get-Rate)
+
+ # Get DAG data
+ [Void](Update-DAGdata)
+
+ # Faster shutdown
+ If ($Variables.NewMiningStatus -ne "Running" -or $Variables.IdleRunspace.MiningStatus -eq "Idle") { Continue }
+
+ # Core suspended with P in MainLoop
+ While ($Variables.SuspendCycle) { Start-Sleep -Seconds 1 }
+
+ # Power cost preparations
+ $Variables.CalculatePowerCost = $Config.CalculatePowerCost
+ If ($Config.CalculatePowerCost) {
+ If ($Variables.EnabledDevices.Count -ge 1) {
+ # HWiNFO64 verification
+ $RegKey = "HKCU:\Software\HWiNFO64\VSB"
+ If ($RegValue = Get-ItemProperty -Path $RegKey -ErrorAction Ignore) {
+ If ([String]$Variables.HWInfo64RegValue -eq [String]$RegValue) {
+ Write-Message -Level Warn "Power consumption data in registry has not been updated [HWiNFO64 not running???] - disabling power consumption and profit calculations."
+ $Variables.CalculatePowerCost = $false
+ }
+ Else {
+ $PowerConsumptionData = @{ }
+ $DeviceName = ""
+ $RegValue.PSObject.Properties.Where({ $_.Name -match '^Label[0-9]+$' -and (Compare-Object @($_.Value -split ' ' | Select-Object) @($Variables.EnabledDevices.Name) -IncludeEqual -ExcludeDifferent) }).ForEach(
+ {
+ $DeviceName = ($_.Value -split ' ') | Select-Object -Last 1
+ Try {
+ $PowerConsumptionData[$DeviceName] = $RegValue.($_.Name -replace 'Label', 'Value')
+ }
+ Catch {
+ Write-Message -Level Warn "HWiNFO64 sensor naming is invalid [duplicate sensor for $DeviceName] - disabling power consumption and profit calculations."
+ $Variables.CalculatePowerCost = $false
+ }
+ }
+ )
+ # Add configured power consumption
+ $Variables.Devices.Name.ForEach(
+ {
+ $DeviceName = $_
+ If ($ConfiguredPowerConsumption = $Config.PowerConsumption.$_ -as [Double]) {
+ If ($_ -in @($Variables.EnabledDevices.Name) -and -not $PowerConsumptionData.$_) { Write-Message -Level Warn "HWiNFO64 cannot read power consumption data for device ($_). Using configured value of $ConfiguredPowerConsumption) W." }
+ $PowerConsumptionData[$_] = "$ConfiguredPowerConsumption W"
+ }
+ $Variables.EnabledDevices.Where({ $_.Name -eq $DeviceName }).ForEach({ $_.ConfiguredPowerConsumption = $ConfiguredPowerConsumption })
+ $Variables.Devices.Where({ $_.Name -eq $DeviceName }).ForEach({ $_.ConfiguredPowerConsumption = $ConfiguredPowerConsumption })
+ }
+ )
+ If ($DeviceNamesMissingSensor = (Compare-Object @($Variables.EnabledDevices.Name) @($PowerConsumptionData.psBase.Keys) -PassThru).Where({ $_.SideIndicator -eq "<=" })) {
+ Write-Message -Level Warn "HWiNFO64 sensor naming is invalid [missing sensor configuration for $($DeviceNamesMissingSensor -join ', ')] - disabling power consumption and profit calculations."
+ $Variables.CalculatePowerCost = $false
+ }
+ Remove-Variable DeviceNamesMissingSensor
+
+ # Enable read power consumption for configured devices
+ $Variables.EnabledDevices.ForEach({ $_.ReadPowerConsumption = $_.Name -in @($PowerConsumptionData.psBase.Keys) })
+ Remove-Variable ConfiguredPowerConsumption, DeviceName, PowerConsumptionData -ErrorAction Ignore
+ }
+ }
+ Else {
+ Write-Message -Level Warn "Cannot read power consumption data from registry [Key '$RegKey' does not exist - HWiNFO64 not running???] - disabling power consumption and profit calculations."
+ $Variables.CalculatePowerCost = $false
+ }
+ Remove-Variable RegKey, RegValue -ErrorAction Ignore
+ }
+ Else { $Variables.CalculatePowerCost = $false }
+ }
+ If (-not $Variables.CalculatePowerCost) {
+ $Variables.EnabledDevices.ForEach({ $_.ReadPowerConsumption = $false })
+ }
+
+ # Power price
+ If (-not $Config.PowerPricekWh.psBase.Keys) { $Config.PowerPricekWh."00:00" = 0 }
+ ElseIf ($null -eq $Config.PowerPricekWh."00:00") {
+ # 00:00h power price is the same as the latest price of the previous day
+ $Config.PowerPricekWh."00:00" = $Config.PowerPricekWh.($Config.PowerPricekWh.psBase.Keys | Sort-Object -Bottom 1)
+ }
+ $Variables.PowerPricekWh = [Double]($Config.PowerPricekWh.($Config.PowerPricekWh.psBase.Keys.Where({ $_ -le (Get-Date -Format HH:mm).ToString() }) | Sort-Object -Bottom 1))
+ $Variables.PowerCostBTCperW = [Double](1 / 1000 * 24 * $Variables.PowerPricekWh / $Variables.Rates."BTC".($Config.MainCurrency))
+
+ # Load unprofitable algorithms
+ Try {
+ If (-not $Variables.UnprofitableAlgorithms -or (Get-ChildItem -Path ".\Data\UnprofitableAlgorithms.json").LastWriteTime -gt $Variables.Timer.AddSeconds( - $Config.Interval)) {
+ $Variables.UnprofitableAlgorithms = Get-Content -Path ".\Data\UnprofitableAlgorithms.json" | ConvertFrom-Json -ErrorAction Stop -AsHashtable | Get-SortedObject
+ Write-Message -Level Info "Loaded list of unprofitable algorithms ($($Variables.UnprofitableAlgorithms.Count) $(If ($Variables.UnprofitableAlgorithms.Count -ne 1) { "entries" } Else { "entry" }))."
+ }
+ }
+ Catch {
+ Write-Message -Level Error "Error loading list of unprofitable algorithms. File '.\Data\UnprofitableAlgorithms.json' is not a valid $($Variables.Branding.ProductLabel) JSON data file. Please restore it from your original download."
+ $Variables.UnprofitableAlgorithms = @{ }
+ }
+
+ # Faster shutdown
+ If ($Variables.NewMiningStatus -ne "Running" -or $Variables.IdleRunspace.MiningStatus -eq "Idle") { Continue }
+
+ # Core suspended with P in MainLoop
+ While ($Variables.SuspendCycle) { Start-Sleep -Seconds 1 }
+
+ $PoolTimestamp = If ($Variables.MinerDataCollectedTimeStamp) { $Variables.MinerDataCollectedTimeStamp } Else { $Variables.ScriptStartTime }
+
+ # Wait for all brains
+ While (([DateTime]::Now).ToUniversalTime() -lt $Variables.Timer.AddSeconds($Variables.PoolTimeout) -and ($Variables.Brains.psBase.Keys.Where({ $Variables.Brains[$_] -and $Variables.Brains[$_].Updated -lt $PoolTimestamp }))) {
+ Start-Sleep -Seconds 1
+ }
+
+ # Collect pool data
+ $Variables.PoolsCount = $Variables.Pools.Count
+ If ($Variables.PoolName) {
+ $Variables.PoolsNew = ($Variables.PoolName.ForEach(
+ {
+ $PoolName = Get-PoolBaseName $_
+ If (Test-Path -LiteralPath ".\Pools\$PoolName.ps1") {
+ Try {
+ & ".\Pools\$PoolName.ps1" -Config $Config -PoolVariant $_ -Variables $Variables
+ }
+ Catch {
+ Write-Message -Level Error "Error in pool file '$PoolName.ps1'."
+ "$(Get-Date -Format "yyyy-MM-dd_HH:mm:ss")" >> "Logs\Error_Dev.txt"
+ $_.Exception | Format-List -Force >> "Logs\Error_Dev.txt"
+ $_.InvocationInfo | Format-List -Force >> "Logs\Error_Dev.txt"
+ }
+ }
+ }).Where({
+ $_.Updated -gt $PoolTimestamp
+ }).ForEach(
+ {
+ Try {
+ $Pool = [Pool]$_
+ $Pool.Fee = If ($Config.IgnorePoolFee -or $Pool.Fee -lt 0 -or $Pool.Fee -gt 1) { 0 } Else { $Pool.Fee }
+ $Factor = $Pool.EarningsAdjustmentFactor * (1 - $Pool.Fee)
+ $Pool.Price *= $Factor
+ $Pool.Price_Bias = $Pool.Price * $Pool.Accuracy
+ $Pool.StablePrice *= $Factor
+ $Pool.CoinName = $Variables.CoinNames[$Pool.Currency]
+ $Pool
+ }
+ Catch {
+ Write-Message -Level Error "Failed to add pool '$($Pool.Variant) [$($Pool.Algorithm)]' ($($Pool | ConvertTo-Json -Compress))"
+ }
+ }
+ )
+ )
+ Remove-Variable Factor, Pool, PoolName, PoolTimestamp -ErrorAction Ignore
+
+ If ($Variables.PoolNoData = @(Compare-Object @($Variables.PoolName) @($Variables.PoolsNew.Variant | Sort-Object -Unique) -PassThru)) {
+ Write-Message -Level Warn "No data received from pool$(If ($Variables.PoolNoData.Count -gt 1) { "s" }) '$($Variables.PoolNoData -join ', ')'."
+ }
+
+ # Faster shutdown
+ If ($Variables.NewMiningStatus -ne "Running" -or $Variables.IdleRunspace.MiningStatus -eq "Idle") { Continue }
+
+ # Remove de-configured pools
+ $PoolsDeconfigured = @($Variables.Pools.Where({ $_.Variant -notin $Variables.PoolName }))
+ $Pools = @($Variables.Pools.Where({ $_.Variant -in $Variables.PoolName }))
+
+ If ($ComparePools = @(Compare-Object @($Variables.PoolsNew | Select-Object) @($Pools | Select-Object) -Property Algorithm, MiningCurrency, Variant -IncludeEqual -PassThru)) {
+ # Find added & updated pools
+ $Variables.PoolsAdded = @($ComparePools.Where({ $_.SideIndicator -eq "<=" }))
+ $Variables.PoolsUpdated = @($ComparePools.Where({ $_.SideIndicator -eq "==" }))
+ # Clear reasons for gone pools
+ $ComparePools.Where({ $_.SideIndicator -eq "=>" }).ForEach({ $_.Reasons = [System.Collections.Generic.List[String]]@() })
+ $Pools += $Variables.PoolsAdded
+ Remove-Variable ComparePools
+
+ # Update all pools, make smaller groups for faster update
+ $PoolGroups = $Variables.PoolsUpdated | Group-Object -Property Name
+ ($Pools | Group-Object -Property Name).ForEach(
+ {
+ $Name = $_.Name
+ $PoolGroup = $PoolGroups.Where({ $_.Name -eq $Name }).Group
+ $_.Group.ForEach(
+ {
+ $Key = $_.Key
+
+ $_.Available = $true
+ $_.Best = $false
+ $_.Prioritize = $false
+
+ # Update existing pools
+ If ($Pool = $PoolGroup.Where({ $_.Key -eq $Key })) {
+ $_.Accuracy = $Pool[0].Accuracy
+ $_.Disabled = $Pool[0].Disabled
+ $_.EarningsAdjustmentFactor = $Pool[0].EarningsAdjustmentFactor
+ $_.Fee = $Pool[0].Fee
+ $_.Host = $Pool[0].Host
+ $_.Pass = $Pool[0].Pass
+ $_.Port = $Pool[0].Port
+ $_.PortSSL = $Pool[0].PortSSL
+ $_.PoolUri = $Pool[0].PoolUri
+ $_.Price = $Pool[0].Price
+ $_.Price_Bias = $Pool[0].Price_Bias
+ $_.Protocol = $Pool[0].Protocol
+ $_.Reasons = $Pool[0].Reasons
+ $_.Region = $Pool[0].Region
+ $_.SendHashrate = $Pool[0].SendHashrate
+ $_.SSLSelfSignedCertificate = $Pool[0].SSLSelfSignedCertificate
+ $_.StablePrice = $Pool[0].StablePrice
+ $_.Updated = $Pool[0].Updated
+ $_.User = $Pool[0].User
+ $_.Workers = $Pool[0].Workers
+ $_.WorkerName = $Pool[0].WorkerName
+ }
+ If (-not $Variables.PoolData.($_.Name).ProfitSwitching -and $Variables.DAGdata.Currency.($_.Currency).BlockHeight) {
+ $_.BlockHeight = $Variables.DAGdata.Currency.($_.Currency).BlockHeight
+ $_.Epoch = $Variables.DAGdata.Currency.($_.Currency).Epoch
+ $_.DAGSizeGiB = $Variables.DAGdata.Currency.($_.Currency).DAGsize / 1GB
+ $_.AlgorithmVariant = "$($_.Algorithm)-$([Math]::Ceiling($_.DAGSizeGiB))GiB"
+ }
+ ElseIf ($Variables.DAGdata.Algorithm.($_.Algorithm).BlockHeight) {
+ $_.BlockHeight = $Variables.DAGdata.Algorithm.($_.Algorithm).BlockHeight
+ $_.Epoch = $Variables.DAGdata.Algorithm.($_.Algorithm).Epoch
+ $_.DAGSizeGiB = $Variables.DAGdata.Algorithm.($_.Algorithm).DAGsize / 1GB
+ $_.AlgorithmVariant = "$($_.Algorithm)-$([Math]::Ceiling($_.DAGSizeGiB))GiB"
+ }
+ Else {
+ $_.AlgorithmVariant = "$($_.Algorithm)"
+ }
+
+ # PoolPorts[0] = non-SSL, PoolPorts[1] = SSL
+ $_.PoolPorts = @($(If ($Config.SSL -ne "Always" -and $_.Port) { [UInt16]$_.Port } Else { $null }), $(If ($Config.SSL -ne "Never" -and $_.PortSSL) { [UInt16]$_.PortSSL } Else { $null }))
+ }
+ )
+ }
+ )
+ Remove-Variable Key, Name, Pool, PoolGroup, PoolGroups -ErrorAction Ignore
+ If ($Variables.CycleStarts.Count -ge $Config.SyncWindow) {
+ # Remove Pools that have not been updated for 1 day
+ $Pools = @($Pools.Where({ $_.Updated -ge ([DateTime]::Now).ToUniversalTime().AddDays(-1) }))
+
+ $MaxPoolAgeMinutes = $Config.SyncWindow * $Config.SyncWindow * $Config.SyncWindow * ($Variables.CycleStarts[-1] - $Variables.CycleStarts[0]).TotalMinutes
+ $Pools.Where({ $_.Updated -lt $Variables.CycleStarts[0] }).ForEach(
+ {
+ # Pool data is older than earliest CycleStart
+ If ([Math]::Floor(($Variables.CycleStarts[-1] - $_.Updated).TotalMinutes) -gt $MaxPoolAgeMinutes) { $_.Reasons.Add("Data too old") }
+ Else { $_.Price_Bias *= [Math]::Pow(0.9, ($Variables.CycleStarts[0] - $_.Updated).TotalMinutes) }
+ }
+ )
+ Remove-Variable MaxPoolAgeMinutes
+ }
+ # No username or wallet
+ $Pools.Where({ -not $_.User }).ForEach({ $_.Reasons.Add("No username or wallet") })
+ # Pool disabled by stat file
+ $Pools.Where({ $_.Disabled }).ForEach({ $_.Reasons.Add("Disabled (by Stat file)") })
+ # Min accuracy not reached
+ $Pools.Where({ $_.Accuracy -LT $Config.MinAccuracy }).ForEach({ $_.Reasons.Add("MinAccuracy ($($Config.MinAccuracy * 100)%) not reached") })
+ # Filter unavailable algorithms
+ If ($Config.MinerSet -lt 3) { $Pools.Where({ $Variables.UnprofitableAlgorithms[$_.Algorithm] -eq "*" }).ForEach({ $_.Reasons.Add("Unprofitable Algorithm") }) }
+ # Pool price 0
+ $Pools.Where({ $_.Price -eq 0 }).ForEach({ $_.Reasons.Add("Price -eq 0") })
+ $Pools.Where({ $_.Price_Bias -eq 0 }).ForEach({ $_.Reasons.Add("Price bias -eq 0") })
+ # No price data
+ $Pools.Where({ $_.Price -eq [Double]::NaN }).ForEach({ $_.Reasons.Add("No price data") })
+ # Ignore pool if price is more than $Config.UnrealPoolPriceFactor higher than average of all pools with same algorithm & currency; NiceHash & MiningPoolHub are always right
+ If ($Config.UnrealPoolPriceFactor -gt 1 -and ($Pools.Name | Sort-Object -Unique).Count -gt 1) {
+ ($Pools.Where({ $_.Price_Bias -gt 0 }) | Group-Object -Property Algorithm, Currency).Where({ $_.Count -ge 2 }).ForEach(
+ {
+ If ($PriceThreshold = (($_.Group.Price_Bias | Measure-Object -Average | Select-Object -ExpandProperty Average) * $Config.UnrealPoolPriceFactor)) {
+ $_.Group.Where({ $_.Name -notin @("NiceHash|MiningPoolHub") }).Where({ $_.Price_Bias -gt $PriceThreshold }).ForEach({ $_.Reasons.Add("Unreal price ($($Config.UnrealPoolPriceFactor)x higher than average price)") })
+ }
+ }
+ )
+ Remove-Variable PriceThreshold
+ }
+ If ($Config.Algorithm -like "+*") {
+ # Filter non-enabled algorithms
+ $Pools.Where({ $Config.Algorithm -notcontains "+$($_.Algorithm)" }).ForEach({ $_.Reasons.Add("Algorithm not enabled in generic config") })
+ $Pools.Where({ $Variables.PoolsConfig[$_.Name].Algorithm -like "+*" }).Where({ $Variables.PoolsConfig.$($_.Name).Algorithm -notcontains "+$($_.Algorithm)" }).ForEach({ $_.Reasons.Add("Algorithm not enabled in $($_.Name) pool config") })
+ }
+ Else {
+ # Filter disabled algorithms
+ $Pools.Where({ $Config.Algorithm -contains "-$($_.Algorithm)" }).ForEach({ $_.Reasons.Add("Algorithm disabled (``-$($_.Algorithm)`` in generic config)") })
+ $Pools.Where({ $Variables.PoolsConfig[$_.Name].Algorithm -contains "-$($_.Algorithm)" }).ForEach({ $_.Reasons.Add("Algorithm disabled (``-$($_.Algorithm)`` in $($_.Name) pool config)") })
+ }
+ If ($Config.Currency -like "+*") {
+ # Filter non-enabled currencies
+ $Pools.Where({ $Config.Currency -notcontains "+$($_.Currency)" }).ForEach({ $_.Reasons.Add("Currency not enabled in generic config") })
+ $Pools.Where({ $Variables.PoolsConfig[$_.Name].Currency -like "+*" }).Where({ $Variables.PoolsConfig.$($_.Name).Currency -notcontains "+$($_.Currency)" }).ForEach({ $_.Reasons.Add("Currency not enabled in $($_.Name) pool config") })
+ }
+ Else {
+ # Filter disabled currencies
+ $Pools.Where({ $Config.Currency -contains "-$($_.Currency)" }).ForEach({ $_.Reasons.Add("Currency disabled (``-$($_.Currency)`` in generic config)") })
+ $Pools.Where({ $Variables.PoolsConfig[$_.Name].Currency -contains "-$($_.Currency)" }).ForEach({ $_.Reasons.Add("Currency disabled (``-$($_.Currency)`` in $($_.Name) pool config)") })
+ }
+ # MinWorkers
+ $Pools.Where({ $null -ne $_.Workers -and $_.Workers -lt $Variables.PoolsConfig[$_.Name].MinWorker }).ForEach({ $_.Reasons.Add("Not enough workers at pool (MinWorker ``$($Variables.PoolsConfig[$_.Name].MinWorker)`` in $($_.BaseName) pool config)") })
+ $Pools.Where({ $null -ne $_.Workers -and $_.Workers -lt $Config.MinWorker }).ForEach({ $_.Reasons.Add("Not enough workers at pool (MinWorker ``$($Config.MinWorker)`` in generic config)") })
+ # SSL
+ If ($Config.SSL -eq "Never") { $Pools.Where({ -not $_.PoolPorts[0] }).ForEach({ $_.Reasons.Add("Non-SSL port not available (Config.SSL -eq 'Never')") }) }
+ If ($Config.SSL -eq "Always") {$Pools.Where({ -not $_.PoolPorts[1] }).ForEach({ $_.Reasons.Add("SSL port not available (Config.SSL -eq 'Always')") }) }
+ # SSL Allow selfsigned certificate
+ If (-not $Config.SSLAllowSelfSignedCertificate) { $Pools.Where({ $_.SSLSelfSignedCertificate }).ForEach({ $_.Reasons.Add("Pool uses self signed certificate (Config.SSLAllowSelfSignedCertificate -eq '`$false')") }) }
+
+ # Apply watchdog to pools
+ If ($Config.Watchdog) {
+ ($Pools.Where({ $_.Available }) | Group-Object -Property Name).ForEach(
+ {
+ # Suspend pool if more than 50% of all algorithms@pool failed
+ $PoolName = $_.Name
+ $WatchdogCount = ($Variables.WatchdogCount, ($Variables.WatchdogCount * $_.Group.Count / 2), (($Variables.Miners.Where({ $_.Best -and $_.Workers.Pool.Name -eq $PoolName })).count) | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum)
+ If ($PoolsToSuspend = $_.Group.Where({ @($Variables.WatchdogTimers.Where({ $_.PoolName -eq $PoolName -and $_.Kicked -lt $Variables.Timer })).Count -gt $WatchdogCount })) {
+ $PoolsToSuspend.ForEach(
+ {
+ $_.Available = $false
+ $_.Reasons.Add("Pool suspended by watchdog")
+ }
+ )
+ Write-Message -Level Warn "Pool '$PoolName' is suspended by watchdog until $((($Variables.WatchdogTimers.Where({ $_.PoolName -eq $PoolName -and $_.Kicked -lt $Variables.Timer })).Kicked | Sort-Object -Top 1).AddSeconds($Variables.WatchdogReset).ToLocalTime().ToString("T"))."
+ }
+ }
+ )
+ ($Pools.Where({ $_.Available }) | Group-Object -Property Algorithm, Name).ForEach(
+ {
+ # Suspend algorithm@pool if more than 50% of all possible miners for algorithm failed
+ $WatchdogCount = ($Variables.WatchdogCount, (($Variables.Miners | Where-Object Algorithms -contains $_.Group[0].Algorithm).Count / 2) | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum) + 1
+ If ($PoolsToSuspend = $_.Group | Where-Object { @($Variables.WatchdogTimers | Where-Object Algorithm -EQ $_.Algorithm | Where-Object PoolName -EQ $_.Name | Where-Object Kicked -LT $Variables.CycleStarts[-2]).Count -gt $WatchdogCount }) {
+ $PoolsToSuspend.ForEach({ $_.Reasons.Add("Algorithm@Pool suspended by watchdog") })
+ Write-Message -Level Warn "Algorithm@Pool '$($_.Group[0].Algorithm)@$($_.Group[0].Name)' is suspended by watchdog until $((($Variables.WatchdogTimers | Where-Object Algorithm -EQ $_.Group[0].Algorithm | Where-Object PoolName -EQ $_.Group[0].Name | Where-Object Kicked -LT $Variables.Timer).Kicked | Sort-Object -Top 1).AddSeconds($Variables.WatchdogReset).ToLocalTime().ToString("T"))."
+ }
+ }
+ )
+ Remove-Variable PoolName, PoolsToSuspend, WatchdogCount -ErrorAction Ignore
+ }
+
+ # Make pools unavailable
+ $Pools.Where({ $_.Reasons }).ForEach({ $_.Available = $false })
+
+ # Filter pools on miner set
+ If ($Config.MinerSet -lt 2) {
+ $Pools.Where({ $Variables.UnprofitableAlgorithms[$_.Algorithm] -eq 1 }).ForEach({ $_.Reasons.Add("Unprofitable primary algorithm") })
+ $Pools.Where({ $Variables.UnprofitableAlgorithms[$_.Algorithm] -eq 2 }).ForEach({ $_.Reasons.Add("Unprofitable secondary algorithm") })
+ }
+ $Pools.Where({ $_.Reasons }).ForEach({ $_.Reasons = $_.Reasons | Sort-Object -Unique })
+
+ If ($Variables.Pools.Count -gt 0) {
+ Write-Message -Level Info "Had $($Variables.PoolsCount) pool$(If ($Variables.PoolsCount -ne 1) { "s" })$(If ($PoolsDeconfigured) { ", removed $($PoolsDeconfigured.Count) deconfigured pool$(If ($PoolsDeconfigured.Count -ne 1) { "s" } )" })$(If ($Variables.PoolsAdded.Count) { ", found $($Variables.PoolsAdded.Count) new pool$(If ($Variables.PoolsAdded.Count -ne 1) { "s" })" }), updated $($Variables.PoolsUpdated.Count) pool$(If ($Variables.PoolsUpdated.Count -ne 1) { "s" })$(If ($Pools.Where({ -not $_.Available })) { ", filtered out $(@($Pools.Where({ -not $_.Available })).Count) pool$(If (@($Pools.Where({ -not $_.Available })).Count -ne 1) { "s" })" }). $(@($Pools.Where({ $_.Available })).Count) available pool$(If (@($Pools.Where({ $_.Available })).Count -ne 1) { "s" }) remain$(If (@($Pools.Where({ $_.Available })).Count -eq 1) { "s" })."
+ }
+ Else {
+ Write-Message -Level Info "Found $($Variables.PoolsNew.Count) pool$(If ($Variables.PoolsNew.Count -ne 1) { "s" }), filtered out $(@($Pools.Where({ -not $_.Available })).Count) pool$(If (@($Pools.Where({ -not $_.Available })).Count -ne 1) { "s" }). $(@($Pools.Where({ $_.Available })).Count) available pool$(If (@($Pools.Where({ $_.Available })).Count -ne 1) { "s" }) remain$(If (@($Pools.Where({ $_.Available})).Count -eq 1) { "s" })."
+ }
+
+ # Keep pool balances alive; force mining at pool even if it is not the best for the algo
+ If ($Config.BalancesKeepAlive -and $BalancesTrackerRunspace -and $Variables.PoolsLastEarnings.Count -gt 0 -and $Variables.PoolsLastUsed) {
+ $Variables.PoolNamesToKeepBalancesAlive = @()
+ ForEach ($Pool in @($Pools.Where({ $_.Name -notin $Config.BalancesTrackerExcludePool }) | Sort-Object -Property Name -Unique)) {
+ If ($Variables.PoolsLastEarnings[$Pool.Name] -and $Variables.PoolsConfig[$Pool.Name].BalancesKeepAlive -gt 0 -and (([DateTime]::Now).ToUniversalTime() - $Variables.PoolsLastEarnings[$Pool.Name]).Days -ge ($Variables.PoolsConfig[$Pool.Name].BalancesKeepAlive - 10)) {
+ $Variables.PoolNamesToKeepBalancesAlive += $PoolName
+ Write-Message -Level Warn "Pool '$($Pool.Name)' prioritized to avoid forfeiting balance (pool would clear balance in 10 days)."
+ }
+ }
+ If ($Variables.PoolNamesToKeepBalancesAlive) {
+ $Pools.ForEach(
+ {
+ If ($_.Name -in $Variables.PoolNamesToKeepBalancesAlive) { $_.Available = $true; $_.Prioritize = $true; $_.Reasons = [System.Collections.Generic.List[String]]@("Prioritized by BalancesKeepAlive") }
+ Else { $_.Reasons.Add("BalancesKeepAlive prioritizes other pools") }
+ }
+ )
+ }
+ }
+
+ # Mark best pools, allow all DAG pools (optimal pool might not fit in GPU memory)
+ ($Pools.Where({ $_.Available }) | Group-Object Algorithm).ForEach({ ($_.Group | Sort-Object { $_.Prioritize }, { $_.Price_Bias } -Bottom $(If ($Config.MinerUseBestPoolsOnly -or $_.Group.Algorithm -notmatch $Variables.RegexAlgoHasDAG) { 1 } Else { $_.Group.Count })).ForEach({ $_.Best = $true }) })
+ }
+
+ # Update data in API
+ $Variables.Pools = $Pools
+
+ # Core suspended with P in MainLoop
+ While ($Variables.SuspendCycle) { Start-Sleep -Seconds 1 }
+ }
+ Else {
+ # No configuired pools, clear all pools
+ $Variables.Pools = [Pool[]]@()
+ }
+ Remove-Variable Pools, PoolsDeconfigured, PoolsNew, PoolTimestamp -ErrorAction Ignore
+
+ $Variables.PoolsBest = $Variables.Pools.Where({ $_.Best }) | Sort-Object -Property Algorithm
+
+ # Tuning parameters require local admin rights
+ $Variables.UseMinerTweaks = [Boolean]($Variables.IsLocalAdmin -and $Config.UseMinerTweaks)
+ }
+ Else {
+ $Variables.EndCycleTime = $Variables.EndCycleTime.AddSeconds([Math]::Floor($Config.Interval / 2))
+ }
+
+ # Ensure we get the hashrate for running miners prior looking for best miner
+ ForEach ($Miner in $Variables.MinersBestPerDevice_Combo | Sort-Object { ($_.Name -Split '-')[2] }) {
+ If ($Miner.DataReaderJob.HasMoreData -and $Miner.Status -ne [MinerStatus]::DryRun) {
+ $Miner.Data = @($Miner.Data | Select-Object -Last ($Miner.MinDataSample * 5)) # Reduce data to MinDataSample * 5
+ If ($Samples = @($Miner.DataReaderJob | Receive-Job | Select-Object)) {
+ $Sample = $Samples | Select-Object -Last 1
+ $Miner.Hashrates_Live = $Sample.Hashrate.PSObject.Properties.Value
+ # Hashrate from primary algorithm is relevant
+ If ($Sample.Hashrate.($Miner.Algorithms[0])) {
+ $Miner.DataSampleTimestamp = $Sample.Date
+ }
+ }
+ Remove-Variable Sample, Samples -ErrorAction Ignore
+ }
+
+ If ($Miner.Status -in @([MinerStatus]::Running, [MinerStatus]::DryRun)) {
+ If ($Miner.Status -eq [MinerStatus]::DryRun -or $Miner.GetStatus() -eq [MinerStatus]::Running) {
+ $Miner.ContinousCycle ++
+ If ($Config.Watchdog) {
+ ForEach ($Worker in $Miner.WorkersRunning) {
+ If ($WatchdogTimer = $Variables.WatchdogTimers.Where({ $_.MinerName -eq $Miner.Name -and $_.PoolName -eq $Worker.Pool.Name -and $_.PoolRegion -eq $Worker.Pool.Region -and $_.Algorithm -eq $Worker.Pool.Algorithm }) | Sort-Object -Property Kicked -Bottom 1) {
+ # Update watchdog timers
+ $WatchdogTimer.Kicked = ([DateTime]::Now).ToUniversalTime()
+ }
+ Else {
+ # Create watchdog timer
+ $Variables.WatchdogTimers += [PSCustomObject]@{
+ Algorithm = $Worker.Pool.Algorithm
+ AlgorithmVariant = $Worker.Pool.AlgorithmVariant
+ DeviceNames = $Miner.DeviceNames
+ Kicked = ([DateTime]::Now).ToUniversalTime()
+ MinerBaseName = $Miner.BaseName
+ MinerName = $Miner.Name
+ MinerVersion = $Miner.Version
+ PoolName = $Worker.Pool.Name
+ PoolRegion = $Worker.Pool.Region
+ PoolVariant = $Worker.Pool.Variant
+ }
+ }
+ }
+ Remove-Variable Worker -ErrorAction Ignore
+ }
+ If ($Config.BadShareRatioThreshold -gt 0) {
+ If ($LatestMinerSharesData = ($Miner.Data | Select-Object -Last 1 -ErrorAction Ignore).Shares) {
+ ForEach ($Algorithm in $Miner.Algorithms) {
+ If ($LatestMinerSharesData.$Algorithm -and $LatestMinerSharesData.$Algorithm[1] -gt 0 -and $LatestMinerSharesData.$Algorithm[3] -gt [Math]::Floor(1 / $Config.BadShareRatioThreshold) -and $LatestMinerSharesData.$Algorithm[1] / $LatestMinerSharesData.$Algorithm[3] -gt $Config.BadShareRatioThreshold) {
+ $Miner.StatusInfo = "Error: '$($Miner.Info)' stopped. Too many bad shares (Shares Total = $($LatestMinerSharesData.$Algorithm[3]), Rejected = $($LatestMinerSharesData.$Algorithm[1]))"
+ $Miner.SetStatus([MinerStatus]::Failed)
+ $Variables.Devices.Where({ $_.Name -in $Miner.DeviceNames }).ForEach({ $_.Status = $Miner.Status; $_.StatusInfo = $Miner.StatusInfo; $_.SubStatus = $Miner.SubStatus })
+ }
+ }
+ Remove-Variable Algorithm
+ }
+ }
+ }
+ Else {
+ $Miner.StatusInfo = "Error: '$($Miner.Info)' exited unexpectedly"
+ $Miner.SetStatus([MinerStatus]::Failed)
+ $Variables.Devices.Where({ $_.Name -in $Miner.DeviceNames }).ForEach({ $_.Status = $Miner.Status; $_.StatusInfo = $Miner.StatusInfo; $_.SubStatus = $Miner.SubStatus })
+ }
+ }
+
+ # Do not save data if stat just got removed (Miner.Activated < 1, set by API)
+ If ($Miner.Activated -gt 0 -and $Miner.Status -ne [MinerStatus]::DryRun) {
+ $Miner_Hashrates = @{ }
+ If ($Miner.Data.Count) {
+ # Collect hashrate from miner, returns an array of two values (safe, unsafe)
+ $Miner.Hashrates_Live = @()
+ ForEach ($Algorithm in $Miner.Algorithms) {
+ $CollectedHashrate = $Miner.CollectHashrate($Algorithm, (-not $Miner.Benchmark -and $Miner.Data.Count -lt $Miner.MinDataSample))
+ $Miner.Hashrates_Live += [Double]($CollectedHashrate[1])
+ $Miner_Hashrates.$Algorithm = [Double]($CollectedHashrate[0])
+ }
+ If ($Miner.ReadPowerConsumption) {
+ # Collect power consumption from miner, returns an array of two values (safe, unsafe)
+ $CollectedPowerConsumption = $Miner.CollectPowerConsumption(-not $Miner.MeasurePowerConsumption -and $Miner.Data.Count -lt $Miner.MinDataSample)
+ $Miner.PowerConsumption_Live = [Double]($CollectedPowerConsumption[1])
+ $Miner_PowerConsumption = [Double]($CollectedPowerConsumption[0])
+ }
+ }
+
+ # We don't want to store hashrates if we have less than $MinDataSample
+ If ($Miner.Data.Count -ge $Miner.MinDataSample -or $Miner.Activated -gt $Variables.WatchdogCount) {
+ $Miner.StatEnd = ([DateTime]::Now).ToUniversalTime()
+ $Stat_Span = [TimeSpan]($Miner.StatEnd - $Miner.StatStart)
+
+ ForEach ($Worker in $Miner.Workers) {
+ $Algorithm = $Worker.Pool.AlgorithmVariant
+ $Factor = 1
+ $LatestMinerSharesData = ($Miner.Data | Select-Object -Last 1 -ErrorAction Ignore).Shares
+ If ($Miner.Data.Count -gt $Miner.MinDataSample -and -not $Miner.Benchmark -and $Config.SubtractBadShares -and $LatestMinerSharesData.$Algorithm -gt 0) { # Need $Miner.MinDataSample shares before adjusting hashrate
+ $Factor = (1 - $LatestMinerSharesData.$Algorithm[1] / $LatestMinerSharesData.$Algorithm[3])
+ $Miner_Hashrates.$Algorithm *= $Factor
+ }
+ $Stat_Name = "$($Miner.Name)_$($Worker.Pool.AlgorithmVariant)_Hashrate"
+ $Stat = Set-Stat -Name $Stat_Name -Value $Miner_Hashrates.$Algorithm -Duration $Stat_Span -FaultDetection ($Miner.Data.Count -lt $Miner.MinDataSample -or $Miner.Activated -lt $Variables.WatchdogCount) -ToleranceExceeded ($Variables.WatchdogCount + 1)
+ If ($Stat.Updated -gt $Miner.StatStart) {
+ Write-Message -Level Info "Saved hashrate for '$($Stat_Name -replace '_Hashrate$')': $(($Miner_Hashrates.$Algorithm | ConvertTo-Hash) -replace ' ')$(If ($Factor -le 0.999) { " (adjusted by factor $($Factor.ToString('N3')) [Shares total: $($LatestMinerSharesData.$Algorithm[2]), rejected: $($LatestMinerSharesData.$Algorithm[1])])" })$(If ($Miner.Benchmark) { " [Benchmark done] ($($Miner.Data.Count) Sample$(If ($Miner.Data.Count -ne 1) { "s" }))" })."
+ $Miner.StatStart = $Miner.StatEnd
+ $Variables.AlgorithmsLastUsed.($Worker.Pool.Algorithm) = @{ Updated = $Stat.Updated; Benchmark = $Miner.Benchmark; MinerName = $Miner.Name }
+ $Variables.PoolsLastUsed.($Worker.Pool.Name) = $Stat.Updated # most likely this will count at the pool to keep balances alive
+ }
+ ElseIf ($Miner_Hashrates.$Algorithm -gt 0 -and $Miner.Status -eq [MinerStatus]::Running -and $Stat.Week -and ($Miner_Hashrates.$Algorithm -gt $Stat.Week * 2 -or $Miner_Hashrates.$Algorithm -lt $Stat.Week / 2)) { # Stop miner if new value is outside ±200% of current value
+ $Miner.StatusInfo = "Error: '$($Miner.Info)'' Reported hashrate is unreal ($($Algorithm): $(($Miner_Hashrates.$Algorithm | ConvertTo-Hash) -replace ' ') is not within ±200% of stored value of $(($Stat.Week | ConvertTo-Hash) -replace ' '))"
+ $Miner.SetStatus([MinerStatus]::Failed)
+ $Variables.Devices.Where({ $_.Name -in $Miner.DeviceNames }).ForEach({ $_.Status = $Miner.Status; $_.StatusInfo = $Miner.StatusInfo; $_.SubStatus = $Miner.SubStatus })
+ }
+ }
+ Remove-Variable Factor -ErrorAction Ignore
+ }
+ If ($Miner.ReadPowerConsumption) {
+ # We don't want to store power consumption if we have less than $MinDataSample, store even when fluctuating hash rates were recorded
+ If ($Miner.Data.Count -ge $Miner.MinDataSample -or $Miner.Activated -gt $Variables.WatchdogCount) {
+ If ([Double]::IsNaN($Miner_PowerConsumption )) { $Miner_PowerConsumption = 0 }
+ $Stat_Name = "$($Miner.Name)$(If ($Miner.Workers.Count -eq 1) { "_$($Miner.Workers[0].Pool.AlgorithmVariant)" })_PowerConsumption"
+ # Always update power consumption when benchmarking
+ $Stat = Set-Stat -Name $Stat_Name -Value $Miner_PowerConsumption -Duration $Stat_Span -FaultDetection (-not $Miner.Benchmark -and ($Miner.Data.Count -lt $Miner.MinDataSample -or $Miner.Activated -lt $Variables.WatchdogCount)) -ToleranceExceeded ($Variables.WatchdogCount + 1)
+ If ($Stat.Updated -gt $Miner.StatStart) {
+ Write-Message -Level Info "Saved power consumption for '$($Stat_Name -replace '_PowerConsumption$')': $($Stat.Live.ToString("N2"))W$(If ($Miner.MeasurePowerConsumption) { " [Power consumption measurement done] ($($Miner.Data.Count) Sample$(If ($Miner.Data.Count -ne 1) { "s" }))" })."
+ }
+ ElseIf ($Miner_PowerConsumption -gt 0 -and $Miner.Status -eq [MinerStatus]::Running -and $Stat.Week -and ($Miner_PowerConsumption -gt $Stat.Week * 2 -or $Miner_PowerConsumption -lt $Stat.Week / 2)) {
+ # Stop miner if new value is outside ±200% of current value
+ $Miner.StatusInfo = "Error: '$($Miner.Info)' Reported power consumption is unreal ($($PowerConsumption.ToString("N2"))W is not within ±200% of stored value of $(([Double]$Stat.Week).ToString("N2"))W)"
+ $Miner.SetStatus([MinerStatus]::Failed)
+ $Variables.Devices.Where({ $_.Name -in $Miner.DeviceNames }).ForEach({ $_.Status = $Miner.Status; $_.StatusInfo = $Miner.StatusInfo; $_.SubStatus = $Miner.SubStatus })
+ }
+ }
+ }
+ Remove-Variable Algorithm, CollectedHashrateFactor, CollectedPowerConsumption, LatestMinerSharesData, Miner_Hashrates, Miner_PowerConsumption, Stat, Stat_Name, Stat_Span, Worker -ErrorAction Ignore
+ }
+ }
+ Remove-Variable Miner -ErrorAction Ignore
+
+ # Update pools last used, required for BalancesKeepAlive
+ If ($Variables.PoolsLastUsed.values -gt $Variables.BeginCycleTime) { $Variables.PoolsLastUsed | Get-SortedObject | ConvertTo-Json | Out-File -LiteralPath ".\Data\PoolsLastUsed.json" -Force }
+ If ($Variables.AlgorithmsLastUsed.Values.Updated -gt $Variables.BeginCycleTime) { $Variables.AlgorithmsLastUsed | Get-SortedObject | ConvertTo-Json | Out-File -LiteralPath ".\Data\AlgorithmsLastUsed.json" -Force }
+
+ # Send data to monitoring server
+ If ($Config.ReportToServer) { Write-MonitoringData }
+
+ # Faster shutdown
+ If ($Variables.NewMiningStatus -ne "Running" -or $Variables.IdleRunspace.MiningStatus -eq "Idle") { Continue }
+
+ # Core suspended with P in MainLoop
+ While ($Variables.SuspendCycle) { Start-Sleep -Seconds 1 }
+
+ # Much faster
+ $Miners = $Variables.Miners.Clone()
+
+ # Get new miners
+ If ($AvailableMinerPools = If ($Config.MinerUseBestPoolsOnly) { $Variables.Pools.Where({ $_.Available -and ($_.Best -or $_.Prioritize) }) } Else { $Variables.Pools.Where({ $_.Available }) }) {
+ # $AvailableMinerPools = ($AvailableMinerPools | Group-Object Variant, AlgorithmVariant, MiningCurrency).ForEach({ $_.Group | Sort-Object -Property Updated -Bottom 1 })
+ $MinerPools = @([Ordered]@{ "" = "" }, [Ordered]@{ "" = "" } )
+ ($AvailableMinerPools.Where({ $_.Reasons -notcontains "Unprofitable primary algorithm" }) | Group-Object Algorithm).ForEach({ $MinerPools[0][$_.Name] = @($_.Group | Sort-Object -Property Price_Bias -Descending) })
+ ($AvailableMinerPools.Where({ $_.Reasons -notcontains "Unprofitable secondary algorithm" }) | Group-Object Algorithm).ForEach({ $MinerPools[1][$_.Name] = @($_.Group | Sort-Object -Property Price_Bias -Descending) })
+
+ Write-Message -Level Info "Loading miners...$(If (-not $Variables.Miners) { "
This may take a while." })"
+ $MinersNew = (Get-ChildItem -Path ".\Miners\*.ps1").ForEach(
+ {
+ $MinerFileName = $_.Name
+ Try {
+ & $_.FullName
+ }
+ Catch {
+ Write-Message -Level Error "Error in miner file '$MinerFileName': $_."
+ "$(Get-Date -Format "yyyy-MM-dd_HH:mm:ss")" >> "Logs\Error_Dev.txt"
+ $_.Exception | Format-List -Force >> "Logs\Error_Dev.txt"
+ $_.InvocationInfo | Format-List -Force >> "Logs\Error_Dev.txt"
+ }
+ }
+ ).ForEach(
+ {
+ Try {
+ $Miner = $_
+ $Miner | Add-Member MinDataSample $Config.MinDataSample
+ $Miner | Add-Member ProcessPriority $(If ($_.Type -eq "CPU") { $Config.CPUMinerProcessPriority } Else { $Config.GPUMinerProcessPriority })
+ ForEach ($Worker in $Miner.Workers) {
+ $Miner.Workers[$Miner.Workers.IndexOf($Worker)].Fee = If ($Config.IgnoreMinerFee) { 0 } Else { $Miner.Fee[$Miner.Workers.IndexOf($Worker)] }
+ }
+ $Miner.PSObject.Properties.Remove("Fee")
+ $Miner | Add-Member Algorithms $Miner.Workers.Pool.AlgorithmVariant
+ $Miner | Add-Member Info "$(($Miner.Name -split '-')[0..2] -join '-') {$($Miner.Workers.ForEach({ "$($_.Pool.AlgorithmVariant)$(If ($_.Pool.MiningCurrency) { "[$($_.Pool.MiningCurrency)]" })", $_.Pool.Name -join '@' }) -join ' & ')}$(If (($Miner.Name -split '-')[4]) { " (Dual Intensity $(($Miner.Name -split '-')[4]))"})"
+ If ($Config.UseAllPoolAlgoCombos) { $Miner.Name = $Miner.Info -replace "\{", "(" -replace "\}", ")" -replace " " }
+ $Miner -as $_.API
+ }
+ Catch {
+ Write-Message -Level Error "Failed to add Miner '$($Miner.Name)' as '$($Miner.API)' ($($Miner | ConvertTo-Json -Compress))"
+ "$(Get-Date -Format "yyyy-MM-dd_HH:mm:ss")" >> "Logs\Error_Dev.txt"
+ $_.Exception | Format-List -Force >> "Logs\Error_Dev.txt"
+ $_.InvocationInfo | Format-List -Force >> "Logs\Error_Dev.txt"
+ }
+ }
+ )
+ Remove-Variable Algorithm, Miner, MinerFileName, MinerPools -ErrorAction Ignore
+ }
+ Remove-Variable AvailableMinerPools -ErrorAction Ignore
+
+ $CompareMiners = Compare-Object @($Miners | Select-Object) @($MinersNew | Select-Object) -Property Info -IncludeEqual -PassThru
+ # Properties that need to be set only once because they are not dependent on any config or pool information
+ $MinerDevices = @($Variables.EnabledDevices | Select-Object -Property Bus, ConfiguredPowerConsumption, Name, ReadPowerConsumption, Status)
+ ForEach ($Miner in $CompareMiners.Where({ $_.SideIndicator -eq "=>" })) {
+ $Miner.BaseName, $Miner.Version, $null = $Miner.Name -split '-'
+ $Miner.Devices = @($MinerDevices.Where({ $_.Name -in $Miner.DeviceNames }))
+ }
+ Remove-Variable Miner, MinerDevices -ErrorAction Ignore
+ $Miners = [Miner[]]@($CompareMiners.Where({ $_.SideIndicator -ne "<=" }))
+
+ # Faster shutdown
+ If ($Variables.NewMiningStatus -ne "Running" -or $Variables.IdleRunspace.MiningStatus -eq "Idle") { Continue }
+
+ # Make smaller groups for faster update
+ $MinerGroups = $MinersNew | Group-Object -Property Name
+ ($Miners | Group-Object -Property Name).ForEach(
+ {
+ Try {
+ $Name = $_.Name
+ $MinerGroup = $MinerGroups.Where({ $Name -eq $_.Name }).Group
+ $_.Group.ForEach(
+ {
+ If ($_.KeepRunning = ($_.Status -in @([MinerStatus]::Running, [MinerStatus]::DryRun)) -and -not ($_.Benchmark -or $_.MeasurePowerConsumption -or $Variables.DonationRunning) -and $_.ContinousCycle -lt $Config.MinCycle ) { # Minimum numbers of full cycles not yet reached
+ $_.Restart = $false
+ }
+ Else {
+ $Info = $_.Info
+ If ($Miner = $MinerGroup.Where({ $Info -eq $_.Info })[0]) {
+ # Update existing miners
+ If ($_.Restart = $_.Arguments -ne $Miner.Arguments) {
+ $_.Arguments = $Miner.Arguments
+ $_.Port = $Miner.Port
+ }
+ $_.CommandLine = $Miner.GetCommandLine().Replace("$PWD\", "")
+ $_.PrerequisitePath = $Miner.PrerequisitePath
+ $_.PrerequisiteURI = $Miner.PrerequisiteURI
+ $_.WarmupTimes = $Miner.WarmupTimes
+ }
+ }
+ $_.Refresh($Variables.PowerCostBTCperW, $Variables.CalculatePowerCost)
+ $_.WindowStyle = If ($Config.MinerWindowStyleNormalWhenBenchmarking -and $_.Benchmark) { "normal" } Else { $Config.MinerWindowStyle }
+ }
+ )
+ }
+ Catch {
+ Start-Sleep 0
+ }
+ }
+ )
+ Remove-Variable Info, Miner, MinerGroup, MinerGroups, MinersNew, Name -ErrorAction Ignore
+
+ $Variables.MinerDataCollectedTimeStamp = ([DateTime]::Now).ToUniversalTime()
+
+ # Faster shutdown
+ If ($Variables.NewMiningStatus -ne "Running" -or $Variables.IdleRunspace.MiningStatus -eq "Idle") { Continue }
+
+ # Core suspended with P in MainLoop
+ While ($Variables.SuspendCycle) { Start-Sleep -Seconds 1 }
+
+ If ($Miners) {
+ # Filter miners
+ $Miners.Where({ $_.Disabled }).ForEach({ $_.Reasons.Add("Disabled by user"); $_.Status = [MinerStatus]::Disabled })
+ If ($Config.ExcludeMinerName.Count) { $Miners.Where({ (Compare-Object @($Config.ExcludeMinerName | Select-Object) @($_.BaseName, "$($_.BaseName)-$($_.Version)", $_.Name | Select-Object -Unique) -IncludeEqual -ExcludeDifferent | Measure-Object).Count -gt 0 }).ForEach({ $_.Reasons.Add("ExcludeMinerName ($($Config.ExcludeMinerName -join ', '))") }) }
+ $Miners.Where({ $_.Earning -eq 0 }).ForEach({ $_.Reasons.Add("Earning -eq 0") })
+ If ($Config.DisableMinersWithFee) { $Miners.Where({ $_.Workers.Fee }).ForEach({ $_.Reasons.Add("Config.DisableMinersWithFee") }) }
+ If ($Config.DisableDualAlgoMining) { $Miners.Where({ $_.Workers.Count -eq 2 }).ForEach({ $_.Reasons.Add("Config.DisableDualAlgoMining") }) }
+ ElseIf ($Config.DisableSingleAlgoMining) { $Miners.Where({ $_.Workers.Count -eq 1 }).ForEach({ $_.Reasons.Add("Config.DisableSingleAlgoMining") }) }
+
+ # Disable CPU miners when running on battery
+ If ($Config.DisableCpuMiningOnBattery -and (Get-CimInstance Win32_Battery).BatteryStatus -eq 1) { $Miners.Where( { $_.Type -eq "CPU" }).ForEach({ $_.Reasons.Add("Config.DisableCpuMiningOnBattery") }) }
+
+ # Detect miners with unreal earning (> x times higher than average of the next best 10% or at least 5 miners)
+ If ($Config.UnrealMinerEarningFactor -gt 1) {
+ ($Miners.Where({ -not $_.Reasons }) | Group-Object { [String]$_.DeviceNames }).ForEach(
+ {
+ If ($ReasonableEarning = [Double]($_.Group | Sort-Object -Descending -Property Earning_Bias | Select-Object -Skip 1 -First (5, [Math]::Floor($_.Group.Count / 10) | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum) | Measure-Object Earning -Average).Average * $Config.UnrealMinerEarningFactor) {
+ ($_.Group.Where({ $_.Earning -GT $ReasonableEarning })).ForEach(
+ { $_.Reasons.Add("Unreal profit data (-gt $($Config.UnrealMinerEarningFactor)x higher than the next best miners available miners)") }
+ )
+ }
+ }
+ )
+ }
+
+ $Bias = If ($Variables.CalculatePowerCost -and -not $Config.IgnorePowerCost) { "Profit_Bias" } Else { "Earning_Bias" }
+ If ($Config.UseAllPoolAlgoCombos) {
+ # Use best miner per algorithm family
+ $Miners.Where({ -not $_.Reasons }) | Group-Object { [String]$_.DeviceNames }, { [String]$_.Workers.Pool.Name }, { [String]$_.Workers.Pool.Algorithm } | ForEach-Object {
+ $_.Group | Select-Object -Skip 1 | ForEach-Object {
+ $_.Reasons.Add("Not best miner in algorithm family")
+ }
+ }
+ }
+
+ $Miners.Where({ $_.Workers[0].Hashrate -eq 0 }).ForEach({ $_.Reasons.Add("0 H/s Stat file") })
+
+ $Variables.MinersMissingBinary = @()
+ $Miners.Where({ -not $_.Reasons -and -not (Test-Path -LiteralPath $_.Path -Type Leaf) }).ForEach(
+ {
+ $_.Reasons.Add("Binary missing")
+ $Variables.MinersMissingBinary += $_
+ }
+ )
+
+ $Variables.MinersMissingPrerequisite = @()
+ $Miners.Where({ -not $_.Reasons -and $_.PrerequisitePath }).ForEach(
+ {
+ $_.Reasons.Add("Prerequisite missing ($(Split-Path -Path $_.PrerequisitePath -Leaf))")
+ $Variables.MinersMissingPrerequisite += $_
+ }
+ )
+
+ # Apply watchdog to miners
+ If ($Config.Watchdog) {
+ ($Miners.Where({ -not $_.Reasons }) | Group-Object -Property { "$($_.BaseName)-$($_.Version)" }).ForEach(
+ {
+ # Suspend miner if more than 50% of all available algorithms failed
+ $WatchdogMinerCount = ($Variables.WatchdogCount, [Math]::Floor($Variables.WatchdogCount * $_.Group.Count / 2) | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum)
+ If ($MinersToSuspend = @($_.Group.Where({ @($Variables.WatchdogTimers | Where-Object MinerName -EQ $_.Name | Where-Object MinerVersion -EQ $_.Version | Where-Object Kicked -LT $Variables.Timer).Count -gt $WatchdogMinerCount }))) {
+ $MinersToSuspend.ForEach({ $_.Reasons.Add("Miner suspended by watchdog (all algorithms)") })
+ Write-Message -Level Warn "Miner '$($_.Group[0].BaseName)-$($_.Group[0].Version) [all algorithms]' is suspended by watchdog until $((($Variables.WatchdogTimers | Where-Object MinerBaseName -EQ $_.Group[0].BaseName | Where-Object MinerVersion -EQ $_.Group[0].Version | Where-Object Kicked -LT $Variables.Timer).Kicked | Sort-Object -Bottom 1).AddSeconds($Variables.WatchdogReset).ToLocalTime().ToString("T"))."
+ }
+ Remove-Variable MinersToSuspend, WatchdogMinerCount
+ }
+ )
+ $Miners.Where({ -not $_.Reasons }).Where(
+ { @($Variables.WatchdogTimers | Where-Object MinerName -EQ $_.Name | Where-Object DeviceNames -EQ $_.DeviceNames | Where-Object Algorithm -EQ $_.Algorithm | Where-Object Kicked -LT $Variables.Timer).Count -ge $Variables.WatchdogCount }
+ ).ForEach(
+ {
+ $_.Reasons.Add("Miner suspended by watchdog (Algorithm $($_.Algorithm))")
+ Write-Message -Level Warn "Miner '$($_.Name) [$($_.Algorithm)]' is suspended by watchdog until $((($Variables.WatchdogTimers | Where-Object MinerName -EQ $_.Name | Where-Object DeviceNames -EQ $_.DeviceNames | Where-Object Algorithm -EQ $_.Algorithm | Where-Object Kicked -LT $Variables.Timer).Kicked | Sort-Object -Bottom 1).AddSeconds($Variables.WatchdogReset).ToLocalTime().ToString("T"))."
+ }
+ )
+ }
+
+ $Miners.Where({ $_.Reasons }).ForEach({ $_.Reasons = [System.Collections.Generic.List[String]]@($_.Reasons | Sort-Object -Unique); $_.Available = $false })
+
+ Write-Message -Level Info "Loaded $($Miners.Count) miner$(If ($Miners.Count -ne 1) { 's' }), filtered out $($Miners.Where({ -not $_.Available }).Count) miner$(If ($Miners.Where({ -not $_.Available }).Count -ne 1) { 's' }). $($Miners.Where({ $_.Available }).Count) available miner$(If ($Miners.Where({ $_.Available }).Count -ne 1) { 's' }) remain$(If ($Miners.Where({ $_.Available }).Count -eq 1) { 's' })."
+
+ $DownloadList = @($Variables.MinersMissingPrerequisite | Select-Object @{ Name = "URI"; Expression = { $_.PrerequisiteURI } }, @{ Name = "Path"; Expression = { $_.PrerequisitePath } }, @{ Name = "Searchable"; Expression = { $false } }) + @($Variables.MinersMissingBinary | Select-Object URI, Path, @{ Name = "Searchable"; Expression = { $false } }) | Select-Object * -Unique
+ If ($DownloadList) {
+ If ($Variables.Downloader.State -ne "Running") {
+ # Download miner binaries
+ Write-Message -Level Info "Some miners binaries are missing ($($DownloadList.Count) item$(If ($DownloadList.Count -ne 1) { "s" })), starting downloader..."
+ $Downloader_Parameters = @{
+ Config = $Config
+ DownloadList = $DownloadList
+ Variables = $Variables
+ }
+ $Variables.Downloader = Start-ThreadJob -Name Downloader -StreamingHost $null -FilePath ".\Includes\Downloader.ps1" -InitializationScript ([scriptblock]::Create("Set-Location '$($Variables.MainPath)'")) -ArgumentList $Downloader_Parameters -ThrottleLimit (2 * $Variables.Devices.Count + 2)
+ Remove-Variable Downloader_Parameters
+ }
+ ElseIf (-not $Miners.Where({ $_.Available })) {
+ Write-Message -Level Info "Waiting 30 seconds for downloader to install binaries..."
+ }
+ }
+ Remove-Variable DownloadList
+
+ # Open firewall ports for all miners
+ If ($Config.OpenFirewallPorts) {
+ If (Get-Command "Get-MpPreference") {
+ If ((Get-Command "Get-MpComputerStatus") -and (Get-MpComputerStatus)) {
+ If (Get-Command "Get-NetFirewallRule") {
+ If ($MissingMinerFirewallRules = (Compare-Object @(Get-NetFirewallApplicationFilter | Select-Object -ExpandProperty Program -Unique) @($Miners | Select-Object -ExpandProperty Path -Unique) -PassThru).Where({ $_.SideIndicator -eq "=>" })) {
+ Start-Process "pwsh" ("-Command Import-Module NetSecurity; ('$($MissingMinerFirewallRules | ConvertTo-Json -Compress)' | ConvertFrom-Json) | ForEach-Object { New-NetFirewallRule -DisplayName (Split-Path `$_ | Split-Path -leaf) -Program `$_ -Description 'Inbound rule added by $($Variables.Branding.ProductLabel) $($Variables.Branding.Version) on $(([DateTime]::Now).ToString())' -Group '$($Variables.Branding.ProductLabel)' }" -replace '"', '\"') -Verb runAs
+ }
+ Remove-Variable MissingMinerFirewallRules
+ }
+ }
+ }
+ }
+ }
+ Else {
+ $Miners.ForEach({ $_.Available = $false })
+ }
+ $Variables.MinersMostProfitable = $Variables.MinersBestPerDevice = $Variables.Miners_Device_Combos = $Variables.MinersBestPerDevice_Combos = $Variables.MinersBestPerDevice_Combo = [Miner[]]@()
+
+ If ($Miners.Where({ $_.Available })) {
+ Write-Message -Level Info "Selecting best miner$(If (@($Variables.EnabledDevices.Model | Select-Object -Unique).Count -gt 1) { "s" }) based on$(If ($Variables.CalculatePowerCost) { " profit (power cost $($Config.MainCurrency) $($Variables.PowerPricekWh)/kWâ‹…h)" } Else { " earning" })..."
+
+ If ($Miners.Where({ $_.Available }).Count -eq 1) {
+ $Variables.MinersBestPerDevice_Combo = $Variables.MinersBestPerDevice = $Variables.MinersMostProfitable = $Miners
+ }
+ Else {
+ # Add running miner bonus
+ $RunningMinerBonusFactor = 1 + $Config.MinerSwitchingThreshold / 100
+ $Miners.Where({ $_.Status -eq [MinerStatus]::Running }).ForEach({ $_.$Bias *= $RunningMinerBonusFactor })
+
+ # Get most profitable miners per algorithm and device
+ $Variables.MinersMostProfitable = @(($Miners.Where({ $_.Available }) | Group-Object { [String]$_.DeviceNames }, { [String]$_.Algorithms }).ForEach({ ($_.Group | Sort-Object -Descending -Property Benchmark, MeasurePowerConsumption, KeepRunning, Prioritize, $Bias, Activated, @{ Expression = { $_.WarmupTimes[1] + $_.MinDataSample }; Descending = $true }, @{ Expression = { [String]$_.Algorithms }; Descending = $false } -Top 1).ForEach({ $_.MostProfitable = $true; $_ }) }))
+ # Get the best miners per device
+ $Variables.MinersBestPerDevice = @(($Miners.Where({ $_.Available }) | Group-Object { [String]$_.DeviceNames }).ForEach({ $_.Group | Sort-Object -Descending -Property Benchmark, MeasurePowerConsumption, KeepRunning, Prioritize, $Bias, Activated, @{ Expression = { $_.WarmupTimes[1] + $_.MinDataSample }; Descending = $true } -Top 1 }))
+ $Variables.Miners_Device_Combos = @((Get-Combination @($Variables.MinersBestPerDevice | Select-Object DeviceNames -Unique)).Where({ (Compare-Object ($_.Combination | Select-Object -ExpandProperty DeviceNames -Unique) ($_.Combination | Select-Object -ExpandProperty DeviceNames) | Measure-Object).Count -eq 0 }))
+
+ # Get most best miner combination i.e. AMD+NVIDIA+CPU
+ $Variables.MinersBestPerDevice_Combos = @(
+ $Variables.Miners_Device_Combos.ForEach(
+ {
+ $Miner_Device_Combo = $_.Combination
+ [PSCustomObject]@{
+ Combination = $Miner_Device_Combo.ForEach(
+ {
+ $Miner_Device_Count = $_.DeviceNames.Count
+ [Regex]$Miner_Device_Regex = "^(" + (($_.DeviceNames.ForEach({ [Regex]::Escape($_) })) -join '|') + ")$"
+ $Variables.MinersBestPerDevice.Where({ ([Array]$_.DeviceNames -notmatch $Miner_Device_Regex).Count -eq 0 -and ([Array]$_.DeviceNames -match $Miner_Device_Regex).Count -eq $Miner_Device_Count })
+ }
+ )
+ }
+ }
+ )
+ )
+ $Variables.MinersBestPerDevice_Combo = @(($Variables.MinersBestPerDevice_Combos | Sort-Object -Descending { @($_.Combination.Where({ [Double]::IsNaN($_.$Bias) })).Count }, { ($_.Combination | Measure-Object $Bias -Sum | Select-Object -ExpandProperty Sum) }, { ($_.Combination.Where({ $_.$Bias -ne 0 }) | Measure-Object).Count } -Top 1).Combination)
+
+ # Revert running miner bonus
+ $Miners.Where({ $_.Status -eq [MinerStatus]::Running }).ForEach({ $_.$Bias /= $RunningMinerBonusFactor })
+ Remove-Variable Bias, Miner_Device_Combo, Miner_Device_Count, Miner_Device_Regex, RunningMinerBonusFactor -ErrorAction Ignore
+ }
+
+ $Variables.PowerConsumptionIdleSystemW = (($Config.PowerConsumptionIdleSystemW - ($Variables.MinersBestPerDevice_Combo.Where({ $_.Type -eq "CPU" }) | Measure-Object PowerConsumption -Sum | Select-Object -ExpandProperty Sum)), 0 | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum)
+
+ $Variables.BasePowerCost = [Double]($Variables.PowerConsumptionIdleSystemW / 1000 * 24 * $Variables.PowerPricekWh / $Variables.Rates."BTC".($Config.MainCurrency))
+
+ $Variables.MiningEarning = [Double]($Variables.MinersBestPerDevice_Combo | Measure-Object Earning_Bias -Sum | Select-Object -ExpandProperty Sum)
+ $Variables.MiningPowerCost = [Double]($Variables.MinersBestPerDevice_Combo | Measure-Object PowerCost -Sum | Select-Object -ExpandProperty Sum)
+ $Variables.MiningPowerConsumption = [Double]($Variables.MinersBestPerDevice_Combo | Measure-Object PowerConsumption -Sum | Select-Object -ExpandProperty Sum)
+ $Variables.MiningProfit = [Double](($Variables.MinersBestPerDevice_Combo | Measure-Object Profit_Bias -Sum | Select-Object -ExpandProperty Sum) - $Variables.BasePowerCost)
+ }
+ Else {
+ $Variables.MiningEarning = $Variables.MiningProfit = $Variables.MiningPowerCost = $Variables.MiningPowerConsumption = [Double]0
+ }
+ }
+
+ $Variables.MinersNeedingBenchmark = @($Miners.Where({ $_.Available -and $_.Benchmark }) | Sort-Object -Property { [String]$_.Algorithms, $_.Name } -Unique)
+ $Variables.MinersNeedingPowerConsumptionMeasurement = @($Miners.Where({ $_.Available -and $_.MeasurePowerConsumption }) | Sort-Object -Property { [String]$_.Algorithms, $_.Name } -Unique)
+
+ # ProfitabilityThreshold check - OK to run miners?
+ If ($Variables.DonationRunning -or (-not $Config.CalculatePowerCost -and $Variables.MiningEarning -ge ($Config.ProfitabilityThreshold / $Variables.Rates.BTC.($Config.MainCurrency))) -or ($Config.CalculatePowerCost -and $Variables.MiningProfit -ge ($Config.ProfitabilityThreshold / $Variables.Rates.BTC.($Config.MainCurrency))) -or $Variables.MinersNeedingBenchmark -or $Variables.MinersNeedingPowerConsumptionMeasurement) {
+ $Variables.MinersBestPerDevice_Combo.ForEach({ $_.Best = $true })
+ If ($Variables.Rates."BTC") {
+ If ($Variables.MinersNeedingBenchmark.Count) {
+ $Variables.Summary = "Earning / day: n/a (Benchmarking: $($Variables.MinersNeedingBenchmark.Count) $(If ($Variables.MinersNeedingBenchmark.Count -eq 1) { "miner" } Else { "miners" }) left$(If (($Variables.EnabledDevices | Sort-Object -Property { $_.DeviceNames }).Count -gt 1) { " [$((($Variables.MinersNeedingBenchmark | Group-Object -Property { $_.DeviceNames } | Sort-Object -Property Name).ForEach({ "$($_.Name): $($_.Count)" })) -join ', ')]"}))"
+ }
+ ElseIf ($Variables.MiningEarning -gt 0) {
+ $Variables.Summary = "Earning / day: {0:n} {1}" -f ($Variables.MiningEarning * $Variables.Rates."BTC".($Config.MainCurrency)), $Config.MainCurrency
+ }
+ Else {
+ $Variables.Summary = ""
+ }
+
+ If ($Variables.CalculatePowerCost -and $Variables.PoolsBest) {
+ If ($Variables.Summary -ne "") { $Variables.Summary += " " }
+
+ If ($Variables.MinersNeedingPowerConsumptionMeasurement.Count -or [Double]::IsNaN($Variables.MiningPowerCost)) {
+ $Variables.Summary += "Profit / day: n/a (Measuring power consumption: $($Variables.MinersNeedingPowerConsumptionMeasurement.Count) $(If ($Variables.MinersNeedingPowerConsumptionMeasurement.Count -eq 1) { "miner" } Else { "miners" }) left$(If (($Variables.EnabledDevices | Sort-Object -Property { $_.DeviceNames }).Count -gt 1) { " [$((($Variables.MinersNeedingPowerConsumptionMeasurement | Group-Object -Property { $_.DeviceNames } | Sort-Object -Property Name).ForEach({ "$($_.Name): $($_.Count)" })) -join ', ')]"}))"
+ }
+ ElseIf ($Variables.MinersNeedingBenchmark.Count) {
+ $Variables.Summary += "Profit / day: n/a"
+ }
+ ElseIf ($Variables.MiningPowerConsumption -gt 0) {
+ $Variables.Summary += "Profit / day: {0:n} {1}" -f ($Variables.MiningProfit * $Variables.Rates."BTC".($Config.MainCurrency)), $Config.MainCurrency
+ }
+ Else {
+ $Variables.Summary += "Profit / day: n/a (no power data)"
+ }
+
+ If ($Variables.CalculatePowerCost) {
+ If ($Variables.Summary -ne "") { $Variables.Summary += " " }
+
+ If ([Double]::IsNaN($Variables.MiningEarning) -or [Double]::IsNaN($Variables.MiningPowerCost)) {
+ $Variables.Summary += "Power Cost / day: n/a [Miner$(If ($Variables.MinersBestPerDevice_Combo.Count -ne 1) { "s" }): n/a; Base: {1:n} {0} ({2:n2} W)]" -f $Config.MainCurrency, ($Variables.BasePowerCost * $Variables.Rates."BTC".($Config.MainCurrency)), $Variables.PowerConsumptionIdleSystemW
+ }
+ ElseIf ($Variables.MiningPowerConsumption -gt 0) {
+ $Variables.Summary += "Power Cost / day: {1:n} {0} [Miner$(If ($Variables.MinersBestPerDevice_Combo.Count -ne 1) { "s" }): {2:n} {0} ({3:n2} W); Base: {4:n} {0} ({5:n2} W)]" -f $Config.MainCurrency, (($Variables.MiningPowerCost + $Variables.BasePowerCost) * $Variables.Rates."BTC".($Config.MainCurrency)), ($Variables.MiningPowerCost * $Variables.Rates."BTC".($Config.MainCurrency)), $Variables.MiningPowerConsumption, ($Variables.BasePowerCost * $Variables.Rates."BTC".($Config.MainCurrency)), $Variables.PowerConsumptionIdleSystemW
+ }
+ Else {
+ $Variables.Summary += "Power Cost / day: n/a [Miner: n/a; Base: {1:n} {0} ({2:n2} W)]" -f $Config.MainCurrency, ($Variables.BasePowerCost * $Variables.Rates.BTC.($Config.MainCurrency)), $Variables.PowerConsumptionIdleSystemW
+ }
+ }
+ }
+ If ($Variables.Summary -ne "") { $Variables.Summary += "
" }
+
+ # Add currency conversion rates
+ @((@(If ($Config.UsemBTC) { "mBTC" } Else { "BTC" }) + @($Config.ExtraCurrencies)) | Select-Object -Unique).Where({ $Variables.Rates.$_.($Config.MainCurrency) }).ForEach(
+ {
+ $Variables.Summary += "1 $_ = {0:N$(Get-DecimalsFromValue -Value $Variables.Rates.$_.($Config.MainCurrency) -DecimalsMax $Config.DecimalsMax)} $($Config.MainCurrency) " -f $Variables.Rates.$_.($Config.MainCurrency)
+ }
+ )
+ }
+ Else {
+ $Variables.Summary = "Error:
Could not get BTC exchange rate from min-api.cryptocompare.com"
+ }
+ }
+ Else {
+ # Mining earning/profit is below threshold
+ $Variables.MinersBestPerDevice_Combo = [Miner[]]@()
+ If ($Config.CalculatePowerCost) {
+ $Variables.Summary = "Mining profit {0} {1:n$($Config.DecimalsMax)} / day is below the configured threshold of {0} {2:n$($Config.DecimalsMax)} / day. Mining is suspended until threshold is reached." -f $Config.MainCurrency, (($Variables.MiningEarning - $Variables.MiningPowerCost - $Variables.BasePowerCost) * $Variables.Rates."BTC".($Config.MainCurrency)), $Config.ProfitabilityThreshold
+ }
+ Else {
+ $Variables.Summary = "Mining earning {0} {1:n$($Config.DecimalsMax)} / day is below the configured threshold of {0} {2:n$($Config.DecimalsMax)} / day. Mining is suspended until threshold is reached." -f $Config.MainCurrency, ($Variables.MiningEarning * $Variables.Rates."BTC".($Config.MainCurrency)), $Config.ProfitabilityThreshold
+ }
+ Write-Message -Level Warn ($Variables.Summary -replace '
', ' ' -replace ' / day', '/day')
+ If ($Variables.Rates) {
+ # Add currency conversion rates
+ If ($Variables.Summary -ne "") { $Variables.Summary += "
" }
+ @((@(If ($Config.UsemBTC) { "mBTC" } Else { "BTC" }) + @($Config.ExtraCurrencies)) | Select-Object -Unique).Where({ $Variables.Rates.$_.($Config.MainCurrency) }).ForEach(
+ {
+ $Variables.Summary += "1 $_ = {0:N$(Get-DecimalsFromValue -Value $Variables.Rates.$_.($Config.MainCurrency) -DecimalsMax $Config.DecimalsMax)} $($Config.MainCurrency) " -f $Variables.Rates.$_.($Config.MainCurrency)
+ }
+ )
+ }
+ }
+
+ If (-not $Variables.MinersBestPerDevice_Combo -and $Miners) { $Miners.ForEach({ $_.Best = $false }) }
+
+ # Stop running miners
+ ForEach ($Miner in @($CompareMiners.Where({ $_.WorkersRunning }) | Sort-Object { ($_.Name -Split '-')[2] })) {
+ If ($Miner.Status -ne [MinerStatus]::DryRun -and $Miner.GetStatus() -ne [MinerStatus]::Running) {
+ $Miner.StatusInfo = "Error: '$($Miner.Info)' exited unexpectedly"
+ $Miner.SetStatus([MinerStatus]::Failed)
+ }
+ Else {
+ If ($Config.DryRun -and $Miner.GetStatus() -eq [MinerStatus]::Running) { $Miner.Restart = $true }
+ If (-not $Config.DryRun -and $Miner.Status -eq [MinerStatus]::DryRun) { $Miner.Restart = $true }
+ If ($Miner.Benchmark -or $Miner.MeasurePowerConsumption) { $Miner.Restart = $true }
+ If (-not $Miner.Best -or $Miner.Restart -or $Miner.SideIndicator -eq "<=" -or $Variables.NewMiningStatus -ne "Running") {
+ ForEach ($Worker in $Miner.WorkersRunning) {
+ If ($WatchdogTimers = @($Variables.WatchdogTimers.Where({ $_.MinerName -eq $Miner.Name -and $_.PoolName -eq $Worker.Pool.Name -and $_.PoolRegion -eq $Worker.Pool.Region -and $_.Algorithm -eq $Worker.Pool.Algorithm -and $_.DeviceNames -eq $Miner.DeviceNames }))) {
+ # Remove Watchdog timers
+ $Variables.WatchdogTimers = @($Variables.WatchdogTimers.Where({ $_ -notin $WatchdogTimers }))
+ }
+ }
+ Remove-Variable WatchdogTimers, Worker -ErrorAction Ignore
+ $Miner.SetStatus([MinerStatus]::Idle)
+ }
+ }
+ $Variables.Devices.Where({ $_.Name -in $Miner.DeviceNames }).ForEach({ $_.Status = $Miner.Status; $_.StatusInfo = $Miner.StatusInfo; $_.SubStatus = $Miner.SubStatus })
+ }
+ Remove-Variable CompareMiners, Miner, WatchdogTimers, Worker -ErrorAction Ignore
+
+ # Kill stuck miners on subsequent cycles when not in dry run mode
+ If (-not $Config.DryRun -or $Variables.CycleStarts.Count -eq 1 -or $Variables.MinersNeedingBenchmark -or $Variables.MinersNeedingPowerConsumptionMeasurement) {
+ $Loops = 0
+ While ($StuckMinerProcessIDs = @((Get-CimInstance CIM_Process).Where({ $_.ExecutablePath -and ($Miners.Path | Sort-Object -Unique) -contains $_.ExecutablePath -and $Miners.ProcessID -notcontains $_.ProcessID }) | Select-Object -ExpandProperty ProcessID)) {
+ $StuckMinerProcessIDs.ForEach(
+ {
+ If ($Miner = $Miners | Where-Object ProcessID -EQ $_) { Write-Message -Level Verbose "Killing stuck miner '$($Miner.Name)'." }
+ Stop-Process -Id $_ -Force -ErrorAction Ignore
+ }
+ )
+ Start-Sleep -Milliseconds 500
+ $Loops ++
+ If ($Loops -gt 100) {
+ $Message = "Cannot stop all miners graciously."
+ If ($Config.AutoReboot) {
+ Write-Message -Level Error "$Message Restarting computer in 30 seconds..."
+ shutdown.exe /r /t 30 /c "$($Variables.Branding.ProductLabel) detected stuck miner$(If ($StuckMinerProcessIDs.Count -ne 1) { "s" }) and will reboot the computer in 30 seconds."
+ Start-Sleep -Seconds 60
+ }
+ Else {
+ Write-Message -Level Error $Message
+ Start-Sleep -Seconds 30
+ }
+ }
+ }
+ Remove-Variable Loops, Message, Miner, StuckMinerProcessIDs -ErrorAction Ignore
+ }
+
+ $Miners.ForEach(
+ {
+ $_.PSObject.Properties.Remove("SideIndicator")
+ If ($_.Reasons -and $_.Status -ne [MinerStatus]::Disabled) {
+ $_.Status = "Unavailable"
+ $_.SubStatus = "Unavailable"
+ }
+ ElseIf ($_.Status -eq [MinerStatus]::Idle) {
+ $_.SubStatus = "Idle"
+ }
+ ElseIf ($_.Status -eq [MinerStatus]::Unavailable) {
+ $_.Status = "Idle"
+ $_.SubStatus = "Idle"
+ }
+ }
+ )
+
+ If (-not ($Variables.EnabledDevices -and $Miners.Where({ $_.Available }))) {
+ $Variables.Miners.ForEach({ $_.Status = [MinerStatus]::Idle; $_.StatusInfo = "Idle" })
+ $Variables.Devices.Where({ $_.State -eq [DeviceState]::Enabled }).ForEach({ $_.Status = [MinerStatus]::Idle; $_.StatusInfo = "Idle" })
+ $Variables.Miners = [Miner[]]@()
+ If (-not $Variables.EnabledDevices) {
+ Write-Message -Level Warn "No enabled devices - retrying in $($Config.Interval) seconds..."
+ Start-Sleep -Seconds $Config.Interval
+ Write-Message -Level Info "Ending cycle (No enabled devices)."
+ }
+ ElseIf (-not $Variables.PoolName) {
+ Write-Message -Level Warn "No configured pools - retrying in $($Config.Interval) seconds..."
+ Start-Sleep -Seconds $Config.Interval
+ Write-Message -Level Info "Ending cycle (No configured pools)."
+ }
+ ElseIf (-not $Variables.PoolsBest) {
+ Write-Message -Level Warn "No available pools - retrying in $($Config.Interval) seconds..."
+ Start-Sleep -Seconds $Config.Interval
+ Write-Message -Level Info "Ending cycle (No available pools)."
+ }
+ Else {
+ Write-Message -Level Warn "No available miners - retrying in $($Config.Interval) seconds..."
+ Start-Sleep -Seconds $Config.Interval
+ Write-Message -Level Info "Ending cycle (No available miners)."
+ }
+ Continue
+ }
+ ElseIf (-not $Variables.MinersBestPerDevice_Combo) {
+ $Variables.Miners.ForEach({ $_.Status = [MinerStatus]::Idle; $_.StatusInfo = "Idle" })
+ $Variables.Devices.Where({ $_.State -eq [DeviceState]::Enabled }).ForEach({ $_.Status = [MinerStatus]::Idle; $_.StatusInfo = "Idle" })
+ Write-Message -Level Warn "No profitable miners - retrying in $($Config.Interval) seconds..."
+ Start-Sleep -Seconds $Config.Interval
+ Write-Message -Level Info "Ending cycle (No profitable miners)."
+ Continue
+ }
+
+ # Update data in API
+ $Variables.Miners = $Miners
+ Remove-Variable Miners
+
+ # Core suspended with P in MainLoop
+ While ($Variables.SuspendCycle) { Start-Sleep -Seconds 1 }
+
+ # Faster shutdown
+ If ($Variables.NewMiningStatus -ne "Running" -or $Variables.IdleRunspace.MiningStatus -eq "Idle") { Continue }
+
+ # Optional delay to avoid blue screens
+ Start-Sleep -Seconds $Config.Delay
+
+ ForEach ($Miner in ($Variables.MinersBestPerDevice_Combo | Sort-Object { ($_.Name -Split '-')[2] })) {
+
+ If ($Miner.Status -ne [MinerStatus]::DryRun -and $Miner.GetStatus() -ne [MinerStatus]::Running) {
+ If ($Miner.Status -ne [MinerStatus]::DryRun) {
+ # Launch prerun if exists
+ If ($Miner.Type -eq "AMD" -and (Test-Path -LiteralPath ".\Utils\Prerun\AMDPrerun.bat" -PathType Leaf)) {
+ Start-Process ".\Utils\Prerun\AMDPrerun.bat" -WorkingDirectory ".\Utils\Prerun" -WindowStyle hidden
+ }
+ ElseIf ($Miner.Type -eq "CPU" -and (Test-Path -LiteralPath ".\Utils\Prerun\CPUPrerun.bat" -PathType Leaf)) {
+ Start-Process ".\Utils\Prerun\CPUPrerun.bat" -WorkingDirectory ".\Utils\Prerun" -WindowStyle hidden
+ }
+ ElseIf ($Miner.Type -eq "INTEL" -and (Test-Path -LiteralPath ".\Utils\Prerun\INTELPrerun.bat" -PathType Leaf)) {
+ Start-Process ".\Utils\Prerun\INTELPrerun.bat" -WorkingDirectory ".\Utils\Prerun" -WindowStyle hidden
+ }
+ ElseIf ($Miner.Type -eq "NVIDIA" -and (Test-Path -LiteralPath ".\Utils\Prerun\NVIDIAPrerun.bat" -PathType Leaf)) {
+ Start-Process ".\Utils\Prerun\NVIDIAPrerun.bat" -WorkingDirectory ".\Utils\Prerun" -WindowStyle hidden
+ }
+ $MinerAlgorithmPrerunName = ".\Utils\Prerun\$($Miner.Name)$(If ($Miner.Algorithms.Count -eq 1) { "_$($Miner.Algorithms[0])" }).bat"
+ $AlgorithmPrerunName = ".\Utils\Prerun\$($Miner.Algorithms -join '-').bat"
+ $DefaultPrerunName = ".\Utils\Prerun\default.bat"
+ If (Test-Path -LiteralPath $MinerAlgorithmPrerunName -PathType Leaf) {
+ Write-Message -Level Info "Launching Prerun: $MinerAlgorithmPrerunName"
+ Start-Process $MinerAlgorithmPrerunName -WorkingDirectory ".\Utils\Prerun" -WindowStyle hidden
+ Start-Sleep -Seconds 2
+ }
+ ElseIf (Test-Path -LiteralPath $AlgorithmPrerunName -PathType Leaf) {
+ Write-Message -Level Info "Launching Prerun: $AlgorithmPrerunName"
+ Start-Process $AlgorithmPrerunName -WorkingDirectory ".\Utils\Prerun" -WindowStyle hidden
+ Start-Sleep -Seconds 2
+ }
+ ElseIf (Test-Path -LiteralPath $DefaultPrerunName -PathType Leaf) {
+ Write-Message -Level Info "Launching Prerun: $DefaultPrerunName"
+ Start-Process $DefaultPrerunName -WorkingDirectory ".\Utils\Prerun" -WindowStyle hidden
+ Start-Sleep -Seconds 2
+ }
+ Remove-Variable AlgorithmPrerunName, DefaultPrerunName, MinerAlgorithmPrerunName -ErrorAction Ignore
+ }
+
+ # Add extra time when CPU mining and miner requires DAG creation
+ If ($Miner.Workers.Pool.DAGSizeGiB -and $Variables.MinersBestPerDevice_Combo.Type -contains "CPU") { $Miner.WarmupTimes[0] += 15 <# seconds #>}
+ # Add extra time when notebook runs on battery
+ If ($Miner.Workers.Pool.DAGSizeGiB -and (Get-CimInstance Win32_Battery).BatteryStatus -eq 1) { $Miner.WarmupTimes[0] += 90 <# seconds #>}
+
+ If ($Config.DryRun -and -not ($Miner.Benchmark -or $Miner.MeasurePowerConsumption)) {
+ $Miner.SetStatus([MinerStatus]::DryRun)
+ }
+ Else {
+ $Miner.SetStatus([MinerStatus]::Running)
+ }
+ $Variables.Devices.Where({ $_.Name -in $Miner.DeviceNames }).ForEach({ $_.Status = $Miner.Status; $_.StatusInfo = $Miner.StatusInfo; $_.SubStatus = $Miner.SubStatus })
+
+ # Add watchdog timer
+ If ($Config.Watchdog) {
+ ForEach ($Worker in $Miner.Workers) {
+ $Variables.WatchdogTimers += [PSCustomObject]@{
+ Algorithm = $Worker.Pool.Algorithm
+ AlgorithmVariant = $Worker.Pool.AlgorithmVariant
+ DeviceNames = $Miner.DeviceNames
+ Kicked = ([DateTime]::Now).ToUniversalTime()
+ MinerBaseName = $Miner.BaseName
+ MinerName = $Miner.Name
+ MinerVersion = $Miner.Version
+ PoolName = $Worker.Pool.Name
+ PoolRegion = $Worker.Pool.Region
+ PoolVariant = $Worker.Pool.Variant
+ CommandLine = $Miner.CommandLine
+ }
+ }
+ Remove-Variable Worker -ErrorAction Ignore
+ }
+ }
+ Else {
+ $DataCollectInterval = If ($Miner.Benchmark -or $Miner.MeasurePowerConsumption) { 1 } Else { 5 }
+ If ($Miner.DataCollectInterval -ne $DataCollectInterval) {
+ $Miner.DataCollectInterval = $DataCollectInterval
+ $Miner.RestartDataReader()
+ }
+ }
+
+ $Message = "$(If ($Miner.Benchmark) { "Benchmark" })$(If ($Miner.Benchmark -and $Miner.MeasurePowerConsumption) { " and " })$(If($Miner.MeasurePowerConsumption) { "Power consumption measurement" })"
+ If ($Message) {
+ $Message = $Message.Substring(0, 1).toUpper() + $Message.Substring(1).toLower()
+ Write-Message -Level Verbose "$Message for miner '$($Miner.Info)' in progress [Attempt $($Miner.Activated) of $($Variables.WatchdogCount + 1); min. $($Miner.MinDataSample) samples]..."
+ }
+ }
+ Remove-Variable Miner, Message -ErrorAction Ignore
+
+ ($Variables.Miners.Where({ $_.Available }) | Group-Object { ($_.Name -Split '-|\(')[2] }).ForEach(
+ {
+ $MinersDeviceGroupNeedingBenchmark = $_.Group.Where({ $_.Benchmark })
+ $MinersDeviceGroupNeedingPowerConsumptionMeasurement = $_.Group.Where({ $_.MeasurePowerConsumption })
+
+ # Display benchmarking progress
+ If ($MinersDeviceGroupNeedingBenchmark) {
+ $Count = ($MinersDeviceGroupNeedingBenchmark | Select-Object -Property { $_.Algorithms }, { $_.Name } -Unique).Count
+ Write-Message -Level Info "Benchmarking for '$($_.Name)' in progress. $Count miner$(If ($Count -gt 1) { 's' }) left to complete benchmark."
+ }
+ # Display power consumption measurement progress
+ If ($MinersDeviceGroupNeedingPowerConsumptionMeasurement) {
+ $Count = ($MinersDeviceGroupNeedingPowerConsumptionMeasurement | Select-Object -Property { $_.Algorithms }, { $_.Name } -Unique).Count
+ Write-Message -Level Info "Power consumption measurement for '$($_.Name)' in progress. $Count miner$(If ($Count -gt 1) { 's' }) left to complete measuring."
+ }
+ }
+ )
+ Remove-Variable Count, MinersDeviceGroupNeedingBenchmark, MinersDeviceGroupNeedingPowerConsumptionMeasurement -ErrorAction Ignore
+
+ Get-Job -State "Completed" | Receive-Job | Out-Null
+ Get-Job -State "Completed" | Remove-Job -Force -ErrorAction Ignore | Out-Null
+ Get-Job -State "Failed" | Receive-Job | Out-Null
+ Get-Job -State "Failed" | Remove-Job -Force -ErrorAction Ignore | Out-Null
+ Get-Job -State "Stopped" | Receive-Job | Out-Null
+ Get-Job -State "Stopped" | Remove-Job -Force -ErrorAction Ignore | Out-Null
+
+ If ($Variables.CycleStarts.Count -eq 1) {
+ # Ensure a full cycle on first loop
+ $Variables.EndCycleTime = ([DateTime]::Now).ToUniversalTime().AddSeconds($Config.Interval)
+ }
+
+ $Variables.RunningMiners = @($Variables.MinersBestPerDevice_Combo | Sort-Object -Descending -Property Benchmark, MeasurePowerConsumption)
+ $Variables.BenchmarkingOrMeasuringMiners = [Miner[]]@()
+ $Variables.FailedMiners = [Miner[]]@()
+
+ # Core suspended with P in MainLoop
+ While ($Variables.SuspendCycle) { Start-Sleep -Seconds 1 }
+
+ $Variables.EndCycleMessage = ""
+ $Variables.RefreshTimestamp = ([DateTime]::Now).ToUniversalTime()
+ $Variables.RefreshNeeded = $true
+
+ Write-Message -Level Info "Collecting miner data while waiting for next cycle..."
+
+ Do {
+ Start-Sleep -Milliseconds 100
+ ForEach ($Miner in $Variables.RunningMiners.Where({ $_.Status -ne [MinerStatus]::DryRun })) {
+ Try {
+ If ($DebugMinerGetData) {
+ [Void]$Miner.GetMinerData()
+ }
+ If ($Miner.GetStatus() -ne [MinerStatus]::Running) {
+ # Miner crashed
+ $Miner.StatusInfo = "Error: '$($Miner.Info)' exited unexpectedly"
+ $Miner.SetStatus([MinerStatus]::Failed)
+ $Variables.FailedMiners += $Miner
+ }
+ ElseIf ($Miner.DataReaderJob.State -ne [MinerStatus]::Running) {
+ # Miner data reader process failed
+ $Miner.StatusInfo = "Error: '$($Miner.Info)' miner data reader exited unexpectedly"
+ $Miner.SetStatus([MinerStatus]::Failed)
+ $Variables.FailedMiners += $Miner
+ }
+ Else {
+ If ($Samples = @($Miner.DataReaderJob | Receive-Job | Select-Object)) {
+ $Sample = $Samples | Select-Object -Last 1
+ $Miner.Hashrates_Live = $Sample.Hashrate.PSObject.Properties.Value
+ $Miner.DataSampleTimestamp = $Sample.Date
+ If ($Miner.ReadPowerConsumption) { $Miner.PowerConsumption_Live = $Sample.PowerConsumption }
+ If ($Sample.Hashrate.PSObject.Properties.Value -notcontains 0) {
+ # Need hashrates for all algorithms to count as a valid sample
+ If ($Miner.ValidDataSampleTimestamp -eq [DateTime]0) {
+ $Miner.ValidDataSampleTimestamp = $Sample.Date.AddSeconds($Miner.WarmupTimes[1])
+ }
+ If ([Math]::Floor(($Sample.Date - $Miner.ValidDataSampleTimestamp).TotalSeconds) -ge 0) {
+ $Miner.Data += $Samples
+ Write-Message -Level Verbose "$($Miner.Name) data sample retrieved [$(($Sample.Hashrate.PSObject.Properties.Name.ForEach({ "$($_): $(($Sample.Hashrate.$_ | ConvertTo-Hash) -replace ' ')$(If ($Config.BadShareRatioThreshold) { " / Shares Total: $($Sample.Shares.$_[3]), Rejected: $($Sample.Shares.$_[1]), Ignored: $($Sample.Shares.$_[2])" })" })) -join ' & ')$(If ($Sample.PowerConsumption) { " / Power consumption: $($Sample.PowerConsumption.ToString("N2"))W" })] ($($Miner.Data.Count) Sample$(If ($Miner.Data.Count -ne 1) { "s" }))"
+ If ($Miner.Benchmark -or $Miner.MeasurePowerConsumption) {
+ $Miner.SubStatus = "Benchmarking"
+ $Miner.StatusInfo = "$($(If ($Miner.Benchmark) { "Benchmarking" }), $(If ($Miner.Benchmark -and $Miner.MeasurePowerConsumption) { " and " }), $(If ($Miner.MeasurePowerConsumption) { "Measuring power consumption" }) -join '') '$($Miner.Info)'"
+ }
+ Else {
+ $Miner.SubStatus = "Running"
+ $Miner.StatusInfo = "Mining '$($Miner.Info)'"
+ }
+ }
+ Else {
+ Write-Message -Level Verbose "$($Miner.Name) data sample discarded [$(($Sample.Hashrate.PSObject.Properties.Name.ForEach({ "$($_): $(($Sample.Hashrate.$_ | ConvertTo-Hash) -replace ' ')$(If ($Config.BadShareRatioThreshold) { " / Shares Total: $($Sample.Shares.$_[3]), Rejected: $($Sample.Shares.$_[1]), Ignored: $($Sample.Shares.$_[2])" })" })) -join ' & ')$(If ($Sample.PowerConsumption) { " / Power consumption: $($Sample.PowerConsumption.ToString("N2"))W" })] (Miner is warming up [$((([DateTime]::Now).ToUniversalTime() - $Miner.ValidDataSampleTimestamp).TotalSeconds.ToString("0")) sec])"
+ $Miner.SubStatus = "WarmingUp"
+ $Miner.StatusInfo = "Warming up '$($Miner.Info)'"
+ }
+ }
+ }
+ ElseIf ($Variables.NewMiningStatus -eq "Running") {
+ # Stop miner, it has not provided hash rate on time
+ If ($Miner.ValidDataSampleTimestamp -eq [DateTime]0 -and ([DateTime]::Now).ToUniversalTime() -gt $Miner.BeginTime.AddSeconds($Miner.WarmupTimes[0])) {
+ $Miner.StatusInfo = "Error: '$($Miner.Info)' has not provided first valid data sample in $($Miner.WarmupTimes[0]) seconds"
+ $Miner.SetStatus([MinerStatus]::Failed)
+ $Variables.FailedMiners += $Miner
+ }
+ # Miner stuck - no sample received in last few data collect intervals
+ ElseIf ($Miner.ValidDataSampleTimestamp -gt [DateTime]0 -and ([DateTime]::Now).ToUniversalTime() -gt $Miner.DataSampleTimestamp.AddSeconds((($Miner.DataCollectInterval * 5), 10 | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum) * $Miner.Algorithms.Count)) {
+ $Miner.StatusInfo = "Error: '$($Miner.Info)' has not updated data for more than $((($Miner.DataCollectInterval * 5), 10 | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum) * $Miner.Algorithms.Count) seconds"
+ $Miner.SetStatus([MinerStatus]::Failed)
+ $Variables.FailedMiners += $Miner
+ }
+ }
+ Try {
+ # Set miner priority, some miners reset priority on their own
+ $Miner.Process.PriorityClass = $Global:PriorityNames.($Miner.ProcessPriority)
+
+ # Set window title
+ [Void][Win32]::SetWindowText($Miner.Process.MainWindowHandle, $Miner.StatusInfo)
+ } Catch { }
+ }
+ $Variables.Devices.Where({ $_.Name -in $Miner.DeviceNames }).ForEach({ $_.Status = $Miner.Status; $_.StatusInfo = $Miner.StatusInfo; $_.SubStatus = $Miner.SubStatus })
+ }
+ Catch {
+ "$(Get-Date -Format "yyyy-MM-dd_HH:mm:ss")" >> "Logs\Error_Dev.txt"
+ $_.Exception | Format-List -Force >> "Logs\Error_Dev.txt"
+ $_.InvocationInfo | Format-List -Force >> "Logs\Error_Dev.txt"
+ }
+ }
+ Remove-Variable Miner, Sample, Samples -ErrorAction Ignore
+
+ $Variables.RunningMiners = @($Variables.RunningMiners.Where({ $_ -notin $Variables.FailedMiners }))
+ $Variables.BenchmarkingOrMeasuringMiners = @($Variables.RunningMiners.Where({ $_.Activated -gt 0 -and ($_.Benchmark -or $_.MeasurePowerConsumption) }))
+
+ If ($Variables.FailedMiners -and -not $Variables.BenchmarkingOrMeasuringMiners) {
+ # A miner crashed and we're not benchmarking, exit loop immediately
+ $Variables.EndCycleMessage = " prematurely (Miner failed)"
+ }
+ ElseIf ($Variables.BenchmarkingOrMeasuringMiners -and -not ($Variables.BenchmarkingOrMeasuringMiners.Where({ $_.Data.Count -lt $_.MinDataSample }))) {
+ # Enough samples collected for this loop, exit loop immediately
+ $Variables.EndCycleMessage = " (All running$(If ($Variables.BenchmarkingOrMeasuringMiners.Where({ $_.Benchmark })) { " benchmarking" })$(If ($Variables.BenchmarkingOrMeasuringMiners.Where({ $_.Benchmark -and $_.MeasurePowerConsumption })) { " and" })$(If ($Variables.BenchmarkingOrMeasuringMiners.Where({ $_.MeasurePowerConsumption })) { " power consumption measuring" }) miners have collected enough samples for this cycle)"
+ }
+
+ # Core suspended with P in MainLoop
+ While ($Variables.SuspendCycle) { Start-Sleep -Seconds 1 }
+
+ # Exit loop when
+ # - a miner crashed (and no other miners are benchmarking or measuring power consumption)
+ # - all benchmarking miners have collected enough samples
+ # - WarmupTimes[0] is reached (no readout from miner)
+ # - Interval time is over
+ } While (-not $Variables.EndCycleMessage -and $Variables.NewMiningStatus -eq "Running" -and $Variables.IdleRunspace.MiningStatus -ne "Idle" -and (([DateTime]::Now).ToUniversalTime() -le $Variables.EndCycleTime -or $Variables.BenchmarkingOrMeasuringMiners))
+
+ If ($Variables.IdleRunspace.MiningStatus -eq "Idle") { $Variables.EndCycleMessage = " (System activity detected)" }
+
+ # Expire brains loop to collect data
+ If ($Variables.EndCycleMessage) {
+ $Variables.EndCycleTime = ([DateTime]::Now).ToUniversalTime()
+ Start-Sleep -Seconds 1
+ }
+ }
+ Catch {
+ Write-Message -Level Error "Error in file $(($_.InvocationInfo.ScriptName -split "\\" | Select-Object -Last 2) -join "\") line $($_.InvocationInfo.ScriptLineNumber) detected. Restarting core..."
+ "$(Get-Date -Format "yyyy-MM-dd_HH:mm:ss")" >> "Logs\Error_Dev.txt"
+ $_.Exception | Format-List -Force >> "Logs\Error_Dev.txt"
+ $_.InvocationInfo | Format-List -Force >> "Logs\Error_Dev.txt"
+ $Variables.EndCycleTime = $Variables.StartCycleTime.AddSeconds($Config.Interval) # Reset timers
+ Continue
+ }
+
+ $Error.Clear()
+ [System.GC]::Collect()
+
+ Write-Message -Level Info "Ending cycle$($Variables.EndCycleMessage)."
+
+ If ($Variables.NewMiningStatus -eq "Running") {
+ # Read config only if config files have changed
+ If ($Variables.ConfigFileTimestamp -ne (Get-Item -Path $Variables.ConfigFile).LastWriteTime -or $Variables.PoolsConfigFileTimestamp -ne (Get-Item -Path $Variables.PoolsConfigFile).LastWriteTime) {
+ [Void](Read-Config -ConfigFile $Variables.ConfigFile)
+ Write-Message -Level Verbose "Activated changed configuration."
+ }
+ }
+
+ $Variables.RestartCycle = $true
+
+} While ($Variables.NewMiningStatus -eq "Running")
+
+# Stop all running miners
+ForEach ($Miner in $Variables.Miners.Where({ $_.Status -ne [MinerStatus]::Idle })) {
+ $Miner.SetStatus([MinerStatus]::Idle)
+ $Variables.Devices.Where({ $_.Name -in $Miner.DeviceNames }).ForEach({ $_.Status = $Miner.Status; $_.StatusInfo = $Miner.StatusInfo; $_.SubStatus = $Miner.SubStatus })
+}
+$Variables.RunningMiners = [Miner[]]@()
+$Variables.BenchmarkingOrMeasuringMiners = [Miner[]]@()
+$Variables.FailedMiners = [Miner[]]@()
+Remove-Variable Miner -ErrorAction Ignore
+
+$Variables.RestartCycle = $true
\ No newline at end of file
diff --git a/Includes/Downloader.ps1 b/Includes/Downloader.ps1
index d6b3947847..3f3d214df9 100644
--- a/Includes/Downloader.ps1
+++ b/Includes/Downloader.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\Downloader.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/Include.psm1 b/Includes/Include.psm1
index bcc03f14c8..54b42e2179 100644
--- a/Includes/Include.psm1
+++ b/Includes/Include.psm1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\include.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
@@ -289,7 +289,6 @@ Class Miner {
# Start Miner data reader, devices property required for GetPowerConsumption/ConfiguredPowerConsumption
$this.DataReaderJob = Start-ThreadJob -Name "$($this.Name)_DataReader" -StreamingHost $null -InitializationScript ([ScriptBlock]::Create("Set-Location('$(Get-Location)')")) -ScriptBlock $ScriptBlock -ArgumentList ($this.API), ($this | Select-Object -Property Algorithms, DataCollectInterval, Devices, Name, Path, Port, ReadPowerConsumption | ConvertTo-Json -Depth 5 -WarningAction Ignore)
- # $this.DataReaderJob = Start-Job -Name "$($this.Name)_DataReader" -InitializationScript ([ScriptBlock]::Create("Set-Location('$(Get-Location)')")) -ScriptBlock $ScriptBlock -ArgumentList ($this.API), ($this | Select-Object -Property Algorithms, DataCollectInterval, Devices, Name, Path, Port, ReadPowerConsumption | ConvertTo-Json -Depth 5 -WarningAction Ignore)
Remove-Variable ScriptBlock -ErrorAction Ignore
}
@@ -536,7 +535,7 @@ Class Miner {
$Hashrate_Samples = @($this.Data.Where({ $_.Hashrate.$Algorithm })) # Do not use 0 valued samples
$Hashrate_Average = ($Hashrate_Samples.Hashrate.$Algorithm | Measure-Object -Average | Select-Object -ExpandProperty Average)
- $Hashrate_Variance = ($Hashrate_Samples.Hashrate.$Algorithm | Measure-Object -Average -Minimum -Maximum).ForEach({ If ($_.Average) { ($_.Maximum - $_.Minimum) / $_.Average } })
+ $Hashrate_Variance = $Hashrate_Samples.Hashrate.$Algorithm | Measure-Object -Average -Minimum -Maximum | ForEach-Object { If ($_.Average) { ($_.Maximum - $_.Minimum) / $_.Average } }
If ($Safe) {
If ($Hashrate_Samples.Count -lt 10 -or $Hashrate_Variance -gt 0.1) {
@@ -559,7 +558,7 @@ Class Miner {
$PowerConsumption_Samples = @($this.Data.Where({ $_.PowerConsumption})) # Do not use 0 valued samples
$PowerConsumption_Average = ($PowerConsumption_Samples.PowerConsumption | Measure-Object -Average | Select-Object -ExpandProperty Average)
- ($PowerConsumption_Variance = $PowerConsumption_Samples.PowerConsumption | Measure-Object -Average -Minimum -Maximum).ForEach({ If ($_.Average) { ($_.Maximum - $_.Minimum) / $_.Average } })
+ $PowerConsumption_Variance = $PowerConsumption_Samples.PowerUsage | Measure-Object -Average -Minimum -Maximum | ForEach-Object { If ($_.Average) { ($_.Maximum - $_.Minimum) / $_.Average } }
If ($Safe) {
If ($PowerConsumption_Samples.Count -lt 10 -or $PowerConsumption_Variance -gt 0.1) {
@@ -1922,7 +1921,7 @@ Function Set-Stat {
If ($Value -gt 0 -and $Stat.ToleranceExceeded -gt 0 -and $Stat.ToleranceExceeded -lt $ToleranceExceeded -and $Stat.Week -gt 0) {
If ($Name -match '.+_Hashrate$') {
- Write-Message -Level Warn "Error saving hashrate for '$($Name -replace '_Hashrate$')'. $(($Value | ConvertTo-Hash) -replace '\s+', ' ') is outside fault tolerance ($(($ToleranceMin | ConvertTo-Hash) -replace '\s+', ' ') to $(($ToleranceMax | ConvertTo-Hash) -replace '\s+', ' ')) [Iteration $($Stats.($Stat.Name).ToleranceExceeded) of $ToleranceExceeded until enforced update]."
+ Write-Message -Level Warn "Error saving hashrate for '$($Name -replace '_Hashrate$')'. $(($Value | ConvertTo-Hash)) is outside fault tolerance ($(($ToleranceMin | ConvertTo-Hash)) to $(($ToleranceMax | ConvertTo-Hash))) [Iteration $($Stats.($Stat.Name).ToleranceExceeded) of $ToleranceExceeded until enforced update]."
}
ElseIf ($Name -match '.+_PowerConsumption') {
Write-Message -Level Warn "Error saving power consumption for '$($Name -replace '_PowerConsumption$')'. $($Value.ToString("N2"))W is outside fault tolerance ($($ToleranceMin.ToString("N2"))W to $($ToleranceMax.ToString("N2"))W) [Iteration $($Stats.($Stat.Name).ToleranceExceeded) of $ToleranceExceeded until enforced update]."
@@ -1933,7 +1932,7 @@ Function Set-Stat {
If (-not $Stat.Disabled -and ($Value -eq 0 -or $Stat.ToleranceExceeded -ge $ToleranceExceeded -or $Stat.Week_Fluctuation -ge 1)) {
If ($Value -gt 0 -and $Stat.ToleranceExceeded -ge $ToleranceExceeded) {
If ($Name -match '.+_Hashrate$') {
- Write-Message -Level Warn "Hashrate '$($Name -replace '_Hashrate$')' was forcefully updated. $(($Value | ConvertTo-Hash) -replace '\s+', ' ') was outside fault tolerance ($(($ToleranceMin | ConvertTo-Hash) -replace '\s+', ' ') to $(($ToleranceMax | ConvertTo-Hash) -replace '\s+', ' '))$(If ($Stat.Week_Fluctuation -lt 1) { " for $($Stats.($Stat.Name).ToleranceExceeded) times in a row." })"
+ Write-Message -Level Warn "Hashrate '$($Name -replace '_Hashrate$')' was forcefully updated. $(($Value | ConvertTo-Hash)) was outside fault tolerance ($(($ToleranceMin | ConvertTo-Hash)) to $(($ToleranceMax | ConvertTo-Hash)))$(If ($Stat.Week_Fluctuation -lt 1) { " for $($Stats.($Stat.Name).ToleranceExceeded) times in a row." })"
}
ElseIf ($Name -match '.+_PowerConsumption$') {
Write-Message -Level Warn "Power consumption for '$($Name -replace '_PowerConsumption$')' was forcefully updated. $($Value.ToString("N2"))W was outside fault tolerance ($($ToleranceMin.ToString("N2"))W to $($ToleranceMax.ToString("N2"))W)$(If ($Stat.Week_Fluctuation -lt 1) { " for $($Stats.($Stat.Name).ToleranceExceeded) times in a row." })"
@@ -2393,7 +2392,7 @@ Function Get-Device {
"Intel" { "INTEL" }
"NVIDIA" { "NVIDIA" }
"AMD" { "AMD" }
- Default { $Device_CIM.Manufacturer -replace '\(R\)|\(TM\)|\(C\)|Series|GeForce|Radeon|Intel' -replace '[^A-Z0-9]' -replace '\s+', ' ' }
+ Default { $Device_CIM.Manufacturer -replace '\(R\)|\(TM\)|\(C\)|Series|GeForce|Radeon|Intel' -replace '[^A-Z0-9]' }
}
)
Memory = $null
@@ -2455,7 +2454,7 @@ Function Get-Device {
"Intel" { "INTEL" }
"NVIDIA" { "NVIDIA" }
"AMD" { "AMD" }
- Default { $Device_CIM.AdapterCompatibility -replace '\(R\)|\(TM\)|\(C\)|Series|GeForce|Radeon|Intel' -replace '[^A-Z0-9]' -replace '\s+', ' ' }
+ Default { $Device_CIM.AdapterCompatibility -replace '\(R\)|\(TM\)|\(C\)|Series|GeForce|Radeon|Intel' -replace '[^A-Z0-9]' }
}
)
Memory = [Math]::Max(([UInt64]$Device_CIM.AdapterRAM), ([uInt64]$Device_Reg.'HardwareInformation.qwMemorySize'))
@@ -2516,7 +2515,7 @@ Function Get-Device {
Switch -Regex ([String]$Device_OpenCL.Type) {
"CPU" { "CPU" }
"GPU" { "GPU" }
- Default { [String]$Device_OpenCL.Type -replace '\(R\)|\(TM\)|\(C\)|Series|GeForce|Radeon|Intel' -replace '[^A-Z0-9]' -replace '\s+', ' ' }
+ Default { [String]$Device_OpenCL.Type -replace '\(R\)|\(TM\)|\(C\)|Series|GeForce|Radeon|Intel' -replace '[^A-Z0-9]' }
}
)
Bus = $(
@@ -2530,7 +2529,7 @@ Function Get-Device {
"Intel" { "INTEL" }
"NVIDIA" { "NVIDIA" }
"AMD" { "AMD" }
- Default { [String]$Device_OpenCL.Vendor -replace '\(R\)|\(TM\)|\(C\)|Series|GeForce|Radeon|Intel' -replace '[^A-Z0-9]' -replace '\s+', ' ' }
+ Default { [String]$Device_OpenCL.Vendor -replace '\(R\)|\(TM\)|\(C\)|Series|GeForce|Radeon|Intel' -replace '[^A-Z0-9]' }
}
)
Memory = [UInt64]$Device_OpenCL.GlobalMemSize
@@ -2553,7 +2552,7 @@ Function Get-Device {
Else {
$Device.Name = "$($Device.Type)#$('{0:D2}' -f $UnsupportedGPUVendorID ++)"
}
- $Device.Model = ((($Device.Model -split ' ' -replace 'Processor', 'CPU' -replace 'Graphics', 'GPU') -notmatch $Device.Type -notmatch $Device.Vendor -notmatch "$([UInt64]($Device.Memory/1GB))GB") + "$([UInt64]($Device.Memory/1GB))GB") -join ' ' -replace '\(R\)|\(TM\)|\(C\)|Series|GeForce|Radeon|Intel' -replace '[^A-Z0-9 ]' -replace '\s+', ' '
+ $Device.Model = ((($Device.Model -split ' ' -replace 'Processor', 'CPU' -replace 'Graphics', 'GPU') -notmatch $Device.Type -notmatch $Device.Vendor -notmatch "$([UInt64]($Device.Memory/1GB))GB") + "$([UInt64]($Device.Memory/1GB))GB") -join ' ' -replace '\(R\)|\(TM\)|\(C\)|Series|GeForce|Radeon|Intel' -replace '[^A-Z0-9 ]'
If (-not $Type_Vendor_Id.($Device.Type)) {
$Type_Vendor_Id.($Device.Type) = @{ }
@@ -2667,7 +2666,7 @@ Function Get-Device {
Filter ConvertTo-Hash {
- $Units = " kMGTPEZY" # k(ilo) in small letters, see https://en.wikipedia.org/wiki/Metric_prefix
+ $Units = "kMGTPEZY" # k(ilo) in small letters, see https://en.wikipedia.org/wiki/Metric_prefix
If ( $_ -eq $null -or [Double]::IsNaN($_)) { Return 'n/a' }
$Base1000 = [Math]::Truncate([Math]::Log([Math]::Abs([Double]$_), [Math]::Pow(1000, 1)))
@@ -2755,7 +2754,6 @@ Function Invoke-CreateProcess {
)
$Job = Start-ThreadJob -Name $JobName -StreamingHost $null -ArgumentList $BinaryPath, $ArgumentList, $WorkingDirectory, $EnvBlock, $CreationFlags, $WindowStyle, $StartF, $PID {
- # $Job = Start-Job -Name $JobName -ArgumentList $BinaryPath, $ArgumentList, $WorkingDirectory, $EnvBlock, $CreationFlags, $WindowStyle, $StartF, $PID {
Param($BinaryPath, $ArgumentList, $WorkingDirectory, $EnvBlock, $CreationFlags, $WindowStyle, $StartF, $ControllerProcessID)
$ControllerProcess = Get-Process -Id $ControllerProcessID
diff --git a/Includes/LegacyGUI.ps1 b/Includes/LegacyGUI.ps1
index 79e7298666..5bbac53499 100644
--- a/Includes/LegacyGUI.ps1
+++ b/Includes/LegacyGUI.ps1
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\LegacyGUI.psm1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
@@ -160,7 +160,7 @@ Function Update-TabControl {
@{ Name = "Power Consumption"; Expression = { If (-not $_.MeasurePowerConsumption) { If ([Double]::IsNaN($_.PowerConsumption)) { "n/a" } Else { "$($_.PowerConsumption.ToString("N2")) W"} } Else { If ($_.Status -eq "Running") { "Measuring..." } Else { "Unmeasured" } } } }
@{ Name = "Algorithm(s)"; Expression = { $_.Algorithms -join ' & ' } },
@{ Name = "Pool(s)"; Expression = { $_.WorkersRunning.Pool.Name -join ' & ' } }
- @{ Name = "Hashrate(s)"; Expression = { If (-not $_.Benchmark) { ($_.Workers.ForEach({ "$($_.Hashrate | ConvertTo-Hash)/s" -replace '\s+', ' ' })) -join ' & ' } Else { If ($_.Status -eq "Running") { "Benchmarking..." } Else { "Benchmark pending" } } } }
+ @{ Name = "Hashrate(s)"; Expression = { If (-not $_.Benchmark) { $_.Workers.ForEach({ $_.Hashrate | ConvertTo-Hash }) -join ' & ' } Else { If ($_.Status -eq "Running") { "Benchmarking..." } Else { "Benchmark pending" } } } }
@{ Name = "Running Time`r(hhh:mm:ss)"; Expression = { "{0}:{1:mm}:{1:ss}" -f [Math]::floor((([DateTime]::Now).ToUniversalTime() - $_.BeginTime).TotalDays * 24), (([DateTime]::Now).ToUniversalTime() - $_.BeginTime) } }
@{ Name = "Total active`r(hhh:mm:ss)"; Expression = { "{0}:{1:mm}:{1:ss}" -f [Math]::floor($_.TotalMiningDuration.TotalDays * 24), $_.TotalMiningDuration } }
If ($RadioButtonPoolsUnavailable.checked) { @{ Name = "Reason"; Expression = { $_.Reasons -join ', ' } } }
@@ -371,7 +371,7 @@ Function Update-TabControl {
@{ Name = "Power Consumption"; Expression = { If (-not $_.MeasurePowerConsumption) { If ([Double]::IsNaN($_.PowerConsumption)) { "n/a" } Else { "$($_.PowerConsumption.ToString("N2")) W"} } Else { If ($_.Status -eq "Running") { "Measuring..." } Else { "Unmeasured" } } } }
@{ Name = "Algorithm(s)"; Expression = { $_.Algorithms -join ' & ' } },
@{ Name = "Pool(s)"; Expression = { $_.Workers.Pool.Name -join ' & ' } },
- @{ Name = "Hashrate(s)"; Expression = { If (-not $_.Benchmark) { ($_.Workers.ForEach({ "$($_.Hashrate | ConvertTo-Hash)/s" -replace '\s+', ' ' })) -join ' & ' } Else { If ($_.Status -eq "Running") { "Benchmarking..." } Else { "Benchmark pending" } } } }
+ @{ Name = "Hashrate(s)"; Expression = { If (-not $_.Benchmark) { $_.Workers.ForEach({ $_.Hashrate | ConvertTo-Hash }) -join ' & ' } Else { If ($_.Status -eq "Running") { "Benchmarking..." } Else { "Benchmark pending" } } } }
If ($RadioButtonMinersUnavailable.checked -or $RadioButtonMiners.checked) { @{ Name = "Reason(s)"; Expression = { $_.Reasons -join ', '} } }
) | Sort-Object @{ Expression = { $_.Best }; Descending = $true }, "Device(s)", Miner | Out-DataTable
If ($MinersDGV.Columns) {
@@ -458,59 +458,59 @@ Function Update-TabControl {
}
Break
}
- "Rig Monitor" {
- $WorkersDGV.Visible = $Config.ShowWorkerStatus
- $EditMonitoringLink.Visible = $Variables.APIRunspace.APIPort
-
- If ($Config.ShowWorkerStatus) {
-
- Read-MonitoringData | Out-Null
-
- If ($Variables.Workers) {
- $WorkersLabel.Text = "Worker Status - Updated $($Variables.WorkersLastUpdated.ToString())"
-
- $nl = "`n" # Must use variable, cannot join with '`n' directly
-
- $WorkersDGV.BeginInit()
- $WorkersDGV.ClearSelection()
- $WorkersDGV.DataSource = $Variables.Workers | Select-Object @(
- @{ Name = "Worker"; Expression = { $_.worker } },
- @{ Name = "Status"; Expression = { $_.status } },
- @{ Name = "Last seen"; Expression = { (Get-TimeSince $_.date) } },
- @{ Name = "Version"; Expression = { $_.version } },
- @{ Name = "Currency"; Expression = { $_.data.Currency | Select-Object -Unique } },
- @{ Name = "Estimated Earning/day"; Expression = { If ($null -ne $_.Data) { "{0:n$($Config.DecimalsMax)}" -f (($_.Data.Earning.Where({ -not [Double]::IsNaN($_) }) | Measure-Object -Sum | Select-Object -ExpandProperty Sum) * $Variables.Rates.BTC.($_.data.Currency | Select-Object -Unique)) } } },
- @{ Name = "Estimated Profit/day"; Expression = { If ($null -ne $_.Data) { " {0:n$($Config.DecimalsMax)}" -f (($_.Data.Profit.Where({ -not [Double]::IsNaN($_) }) | Measure-Object -Sum | Select-Object -ExpandProperty Sum) * $Variables.Rates.BTC.($_.data.Currency | Select-Object -Unique)) } } },
- @{ Name = "Miner(s)"; Expression = { $_.data.Name -join $nl } },
- @{ Name = "Pool(s)"; Expression = { $_.data.ForEach({ $_.Pool -split "," -join ' & ' }) -join $nl } },
- @{ Name = "Algorithm(s)"; Expression = { $_.data.ForEach({ $_.Algorithm -split "," -join ' & ' }) -join $nl } },
- @{ Name = "Live Hashrate(s)"; Expression = { $_.data.ForEach({ ($_.CurrentSpeed.ForEach({ If ([Double]::IsNaN($_)) { "n/a" } Else { "$($_ | ConvertTo-Hash)/s" -replace '\s+' } })) -join ' & ' }) -join $nl } },
- @{ Name = "Benchmark Hashrate(s)"; Expression = { $_.data.ForEach({ ($_.EstimatedSpeed.ForEach({ If ([Double]::IsNaN($_)) { "n/a" } Else { "$($_ | ConvertTo-Hash)/s" -replace '\s+' } })) -join ' & ' }) -join $nl } }
- ) | Sort-Object -Property "Worker" | Out-DataTable
- If ($WorkersDGV.Columns) {
- $WorkersDGV.Columns[0].FillWeight = 70
- $WorkersDGV.Columns[1].FillWeight = 60
- $WorkersDGV.Columns[2].FillWeight = 80
- $WorkersDGV.Columns[3].FillWeight = 70
- $WorkersDGV.Columns[4].FillWeight = 40
- $WorkersDGV.Columns[5].FillWeight = 65; $WorkersDGV.Columns[5].DefaultCellStyle.Alignment = "MiddleRight"; $WorkersDGV.Columns[5].HeaderCell.Style.Alignment = "MiddleRight"
- $WorkersDGV.Columns[6].FillWeight = 65; $WorkersDGV.Columns[6].DefaultCellStyle.Alignment = "MiddleRight"; $WorkersDGV.Columns[6].HeaderCell.Style.Alignment = "MiddleRight"
- $WorkersDGV.Columns[7].FillWeight = 150
- $WorkersDGV.Columns[8].FillWeight = 95
- $WorkersDGV.Columns[9].FillWeight = 75
- $WorkersDGV.Columns[10].FillWeight = 65; $WorkersDGV.Columns[10].DefaultCellStyle.Alignment = "MiddleRight"; $WorkersDGV.Columns[10].HeaderCell.Style.Alignment = "MiddleRight"
- $WorkersDGV.Columns[11].FillWeight = 65; $WorkersDGV.Columns[11].DefaultCellStyle.Alignment = "MiddleRight"; $WorkersDGV.Columns[11].HeaderCell.Style.Alignment = "MiddleRight"
- }
- Set-WorkerColor
- $WorkersDGV.EndInit()
- }
- Else { $WorkersLabel.Text = "Worker Status - no workers" }
- }
- Else {
- $WorkersLabel.Text = "Worker status reporting is disabled$(If (-not $Variables.APIRunspace) { " (Configuration item 'ShowWorkerStatus' -eq `$false)" })."
- }
- Break
- }
+ # "Rig Monitor" {
+ # $WorkersDGV.Visible = $Config.ShowWorkerStatus
+ # $EditMonitoringLink.Visible = $Variables.APIRunspace.APIPort
+
+ # If ($Config.ShowWorkerStatus) {
+
+ # Read-MonitoringData | Out-Null
+
+ # If ($Variables.Workers) {
+ # $WorkersLabel.Text = "Worker Status - Updated $($Variables.WorkersLastUpdated.ToString())"
+
+ # $nl = "`n" # Must use variable, cannot join with '`n' directly
+
+ # $WorkersDGV.BeginInit()
+ # $WorkersDGV.ClearSelection()
+ # $WorkersDGV.DataSource = $Variables.Workers | Select-Object @(
+ # @{ Name = "Worker"; Expression = { $_.worker } },
+ # @{ Name = "Status"; Expression = { $_.status } },
+ # @{ Name = "Last seen"; Expression = { (Get-TimeSince $_.date) } },
+ # @{ Name = "Version"; Expression = { $_.version } },
+ # @{ Name = "Currency"; Expression = { $_.data.Currency | Select-Object -Unique } },
+ # @{ Name = "Estimated Earning/day"; Expression = { If ($null -ne $_.Data) { "{0:n$($Config.DecimalsMax)}" -f (($_.Data.Earning.Where({ -not [Double]::IsNaN($_) }) | Measure-Object -Sum | Select-Object -ExpandProperty Sum) * $Variables.Rates.BTC.($_.data.Currency | Select-Object -Unique)) } } },
+ # @{ Name = "Estimated Profit/day"; Expression = { If ($null -ne $_.Data) { " {0:n$($Config.DecimalsMax)}" -f (($_.Data.Profit.Where({ -not [Double]::IsNaN($_) }) | Measure-Object -Sum | Select-Object -ExpandProperty Sum) * $Variables.Rates.BTC.($_.data.Currency | Select-Object -Unique)) } } },
+ # @{ Name = "Miner(s)"; Expression = { $_.data.Name -join $nl } },
+ # @{ Name = "Pool(s)"; Expression = { $_.data.ForEach({ $_.Pool -split "," -join ' & ' }) -join $nl } },
+ # @{ Name = "Algorithm(s)"; Expression = { $_.data.ForEach({ $_.Algorithm -split "," -join ' & ' }) -join $nl } },
+ # @{ Name = "Live Hashrate(s)"; Expression = { $_.data.ForEach({ $_.CurrentSpeed.ForEach({ If ([Double]::IsNaN($_)) { "n/a" } Else { $_ | ConvertTo-Hash } }) -join ' & ' }) -join $nl } },
+ # @{ Name = "Benchmark Hashrate(s)"; Expression = { $_.data.ForEach({ $_.EstimatedSpeed.ForEach({ If ([Double]::IsNaN($_)) { "n/a" } Else { $_ | ConvertTo-Hash } }) -join ' & ' }) -join $nl } }
+ # ) | Sort-Object -Property "Worker" | Out-DataTable
+ # If ($WorkersDGV.Columns) {
+ # $WorkersDGV.Columns[0].FillWeight = 70
+ # $WorkersDGV.Columns[1].FillWeight = 60
+ # $WorkersDGV.Columns[2].FillWeight = 80
+ # $WorkersDGV.Columns[3].FillWeight = 70
+ # $WorkersDGV.Columns[4].FillWeight = 40
+ # $WorkersDGV.Columns[5].FillWeight = 65; $WorkersDGV.Columns[5].DefaultCellStyle.Alignment = "MiddleRight"; $WorkersDGV.Columns[5].HeaderCell.Style.Alignment = "MiddleRight"
+ # $WorkersDGV.Columns[6].FillWeight = 65; $WorkersDGV.Columns[6].DefaultCellStyle.Alignment = "MiddleRight"; $WorkersDGV.Columns[6].HeaderCell.Style.Alignment = "MiddleRight"
+ # $WorkersDGV.Columns[7].FillWeight = 150
+ # $WorkersDGV.Columns[8].FillWeight = 95
+ # $WorkersDGV.Columns[9].FillWeight = 75
+ # $WorkersDGV.Columns[10].FillWeight = 65; $WorkersDGV.Columns[10].DefaultCellStyle.Alignment = "MiddleRight"; $WorkersDGV.Columns[10].HeaderCell.Style.Alignment = "MiddleRight"
+ # $WorkersDGV.Columns[11].FillWeight = 65; $WorkersDGV.Columns[11].DefaultCellStyle.Alignment = "MiddleRight"; $WorkersDGV.Columns[11].HeaderCell.Style.Alignment = "MiddleRight"
+ # }
+ # Set-WorkerColor
+ # $WorkersDGV.EndInit()
+ # }
+ # Else { $WorkersLabel.Text = "Worker Status - no workers" }
+ # }
+ # Else {
+ # $WorkersLabel.Text = "Worker status reporting is disabled$(If (-not $Variables.APIRunspace) { " (Configuration item 'ShowWorkerStatus' -eq `$false)" })."
+ # }
+ # Break
+ # }
"Switching Log" {
$CheckShowSwitchingCPU.Enabled = [Boolean]($Variables.Devices.Where({ $_.State -ne [DeviceState]::Unsupported -and $_.Name -notin $Config.ExcludeDeviceName -and $_.Type -EQ "CPU" }))
$CheckShowSwitchingAMD.Enabled = [Boolean]($Variables.Devices.Where({ $_.State -ne [DeviceState]::Unsupported -and $_.Name -notin $Config.ExcludeDeviceName -and $_.Type -EQ "GPU" -and $_.Vendor -EQ "AMD" }))
@@ -1599,7 +1599,8 @@ $TabControl.Name = "TabControl"
$TabControl.ShowToolTips = $true
$TabControl.Height = 0
$TabControl.Width = 0
-$TabControl.Controls.AddRange(@($RunPage, $EarningsPage, $MinersPage, $PoolsPage, $RigMonitorPage, $SwitchingPage, $WatchdogTimersPage))
+# $TabControl.Controls.AddRange(@($RunPage, $EarningsPage, $MinersPage, $PoolsPage, $RigMonitorPage, $SwitchingPage, $WatchdogTimersPage))
+$TabControl.Controls.AddRange(@($RunPage, $EarningsPage, $MinersPage, $PoolsPage, $SwitchingPage, $WatchdogTimersPage))
$TabControl.Add_Click({ Update-TabControl })
$LegacyGUIForm.Controls.Add($TabControl)
diff --git a/Includes/MinerAPIs/BzMiner.ps1 b/Includes/MinerAPIs/BzMiner.ps1
index 4a9aabb1ff..a872fdafcd 100644
--- a/Includes/MinerAPIs/BzMiner.ps1
+++ b/Includes/MinerAPIs/BzMiner.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\BzMiner.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/Ccminer.ps1 b/Includes/MinerAPIs/Ccminer.ps1
index 573d04d145..acb71b3aaa 100644
--- a/Includes/MinerAPIs/Ccminer.ps1
+++ b/Includes/MinerAPIs/Ccminer.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\CCminer.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/EthMiner.ps1 b/Includes/MinerAPIs/EthMiner.ps1
index cdcfe0b6bd..acdf557294 100644
--- a/Includes/MinerAPIs/EthMiner.ps1
+++ b/Includes/MinerAPIs/EthMiner.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\EthMiner.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/FireIce.ps1 b/Includes/MinerAPIs/FireIce.ps1
index 0f70639797..9915b7154b 100644
--- a/Includes/MinerAPIs/FireIce.ps1
+++ b/Includes/MinerAPIs/FireIce.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\FireIce.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/Gminer.ps1 b/Includes/MinerAPIs/Gminer.ps1
index de91a350af..a84ffe0dfe 100644
--- a/Includes/MinerAPIs/Gminer.ps1
+++ b/Includes/MinerAPIs/Gminer.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\GMiner.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/HellMiner.ps1 b/Includes/MinerAPIs/HellMiner.ps1
index 5eff9e03a6..a729e5fbec 100644
--- a/Includes/MinerAPIs/HellMiner.ps1
+++ b/Includes/MinerAPIs/HellMiner.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\lolMiner.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/MiniZ.ps1 b/Includes/MinerAPIs/MiniZ.ps1
index 90ef15c6f0..b4301fc20e 100644
--- a/Includes/MinerAPIs/MiniZ.ps1
+++ b/Includes/MinerAPIs/MiniZ.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\MiniZ.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/NBMiner.ps1 b/Includes/MinerAPIs/NBMiner.ps1
index d2768e9462..ed12caea86 100644
--- a/Includes/MinerAPIs/NBMiner.ps1
+++ b/Includes/MinerAPIs/NBMiner.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\NBMiner.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/NanoMiner.ps1 b/Includes/MinerAPIs/NanoMiner.ps1
index 2ccdee16c9..7cd177ceeb 100644
--- a/Includes/MinerAPIs/NanoMiner.ps1
+++ b/Includes/MinerAPIs/NanoMiner.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\NanoMiner.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/OneZero.ps1 b/Includes/MinerAPIs/OneZero.ps1
index 8351583a57..78fccd8458 100644
--- a/Includes/MinerAPIs/OneZero.ps1
+++ b/Includes/MinerAPIs/OneZero.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\Trex.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/Rigel.ps1 b/Includes/MinerAPIs/Rigel.ps1
index aee22f6ccd..394e68d030 100644
--- a/Includes/MinerAPIs/Rigel.ps1
+++ b/Includes/MinerAPIs/Rigel.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\Rigel.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/SRBMiner.ps1 b/Includes/MinerAPIs/SRBMiner.ps1
index 9d05a57ea4..bec12d79eb 100644
--- a/Includes/MinerAPIs/SRBMiner.ps1
+++ b/Includes/MinerAPIs/SRBMiner.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\SRBminer.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/TeamBlackMiner.ps1 b/Includes/MinerAPIs/TeamBlackMiner.ps1
index 20589f350f..cab51fc49e 100644
--- a/Includes/MinerAPIs/TeamBlackMiner.ps1
+++ b/Includes/MinerAPIs/TeamBlackMiner.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\lolMiner.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/Trex.ps1 b/Includes/MinerAPIs/Trex.ps1
index 5979f955c2..2c3db1454f 100644
--- a/Includes/MinerAPIs/Trex.ps1
+++ b/Includes/MinerAPIs/Trex.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\Trex.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/Xgminer.ps1 b/Includes/MinerAPIs/Xgminer.ps1
index 89c1a183fd..bc62c11bce 100644
--- a/Includes/MinerAPIs/Xgminer.ps1
+++ b/Includes/MinerAPIs/Xgminer.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\Xgminer.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
@@ -93,7 +93,7 @@ Class XgMiner : Miner {
$Shares_Rejected = [Int64]$DataSummary.rejected
$Shares_Invalid = [Int64]$DataSummary.stale
$Shares | Add-Member @{ $HashRate_Name = @($Shares_Accepted, $Shares_Rejected, $Shares_Invalid, ($Shares_Accepted + $Shares_Rejected + $Shares_Invalid)) }
- }
+ }
$PowerConsumption = [Double]0
diff --git a/Includes/MinerAPIs/XmRig.ps1 b/Includes/MinerAPIs/XmRig.ps1
index 9e150e2098..44bbb3510e 100644
--- a/Includes/MinerAPIs/XmRig.ps1
+++ b/Includes/MinerAPIs/XmRig.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\XmRig.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Includes/MinerAPIs/lolMiner.ps1 b/Includes/MinerAPIs/lolMiner.ps1
index 56e54fc185..b4e772cb0f 100644
--- a/Includes/MinerAPIs/lolMiner.ps1
+++ b/Includes/MinerAPIs/lolMiner.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Includes\MinerAPIs\lolMiner.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/BzMiner-v19.0.1.ps1 b/Miners/BzMiner-v19.0.1.ps1
index 9cb69dcad8..3c064d05ed 100644
--- a/Miners/BzMiner-v19.0.1.ps1
+++ b/Miners/BzMiner-v19.0.1.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/CcminerAlexis78-v1.5.2.ps1 b/Miners/CcminerAlexis78-v1.5.2.ps1
index 7ac5f73d4b..ea663f752d 100644
--- a/Miners/CcminerAlexis78-v1.5.2.ps1
+++ b/Miners/CcminerAlexis78-v1.5.2.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/CcminerDyn-v1.0.2.ps1 b/Miners/CcminerDyn-v1.0.2.ps1
index 00c48426fc..e33f3b6e2e 100644
--- a/Miners/CcminerDyn-v1.0.2.ps1
+++ b/Miners/CcminerDyn-v1.0.2.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/CcminerKlausT-v8.25.ps1 b/Miners/CcminerKlausT-v8.25.ps1
index 82b44f0e3f..bd2b3924b5 100644
--- a/Miners/CcminerKlausT-v8.25.ps1
+++ b/Miners/CcminerKlausT-v8.25.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/CcminerKlausT-v8.26x2.ps1 b/Miners/CcminerKlausT-v8.26x2.ps1
index c75b7f7061..3761f906b0 100644
--- a/Miners/CcminerKlausT-v8.26x2.ps1
+++ b/Miners/CcminerKlausT-v8.26x2.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/CcminerLyra2z330-v8.21r9.ps1 b/Miners/CcminerLyra2z330-v8.21r9.ps1
index d52ac84d1c..f09ea68902 100644
--- a/Miners/CcminerLyra2z330-v8.21r9.ps1
+++ b/Miners/CcminerLyra2z330-v8.21r9.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/CcminerLyraYesscrypt-v8.21r18v5.ps1 b/Miners/CcminerLyraYesscrypt-v8.21r18v5.ps1
index c0161e0ef0..377b5f7fc6 100644
--- a/Miners/CcminerLyraYesscrypt-v8.21r18v5.ps1
+++ b/Miners/CcminerLyraYesscrypt-v8.21r18v5.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/CcminerMemeHash-v2.5.5.9.ps1 b/Miners/CcminerMemeHash-v2.5.5.9.ps1
index 8711a1f283..4f8b5e542c 100644
--- a/Miners/CcminerMemeHash-v2.5.5.9.ps1
+++ b/Miners/CcminerMemeHash-v2.5.5.9.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/CcminerNeoscryptXaya-v0.2.ps1 b/Miners/CcminerNeoscryptXaya-v0.2.ps1
index aedfe8a5b2..d751aff628 100644
--- a/Miners/CcminerNeoscryptXaya-v0.2.ps1
+++ b/Miners/CcminerNeoscryptXaya-v0.2.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/CcminerVerusCpu-v3.8.3.ps1 b/Miners/CcminerVerusCpu-v3.8.3.ps1
index a3ded36694..b7a1e69659 100644
--- a/Miners/CcminerVerusCpu-v3.8.3.ps1
+++ b/Miners/CcminerVerusCpu-v3.8.3.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
@@ -29,7 +29,7 @@ $Path = "$PWD\Bin\$Name\ccminer.exe"
$DeviceEnumerator = "Type_Vendor_Index"
$Algorithms = @(
- [PSCustomObject]@{ Algorithm = "VerusHash"; Minerset = 1; WarmupTimes = @(90, 300); ExcludePools = @("NiceHash"); Arguments = " --algo verus" } # SRBMinerMulti-v2.4.3 is fastest, but has 0.85% miner fee
+ [PSCustomObject]@{ Algorithm = "VerusHash"; Minerset = 1; WarmupTimes = @(90, 300); ExcludePools = @("NiceHash"); Arguments = " --algo verus" } # SRBMinerMulti-v2.4.4 is fastest, but has 0.85% miner fee
)
$Algorithms = $Algorithms.Where({ $_.MinerSet -le $Config.MinerSet })
diff --git a/Miners/CcminerVerusGpu-v3.8.3.ps1 b/Miners/CcminerVerusGpu-v3.8.3.ps1
index a9a969e27a..b6b8cb369b 100644
--- a/Miners/CcminerVerusGpu-v3.8.3.ps1
+++ b/Miners/CcminerVerusGpu-v3.8.3.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/ClaymoreDualME-v2.7.ps1 b/Miners/ClaymoreDualME-v2.7.ps1
index 7542122dda..d0fce30251 100644
--- a/Miners/ClaymoreDualME-v2.7.ps1
+++ b/Miners/ClaymoreDualME-v2.7.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/ClaymoreNeoscrypt-v1.2.ps1 b/Miners/ClaymoreNeoscrypt-v1.2.ps1
index 39584dc907..7425cc8bc5 100644
--- a/Miners/ClaymoreNeoscrypt-v1.2.ps1
+++ b/Miners/ClaymoreNeoscrypt-v1.2.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/CpuMiner-v1.4.ps1 b/Miners/CpuMiner-v1.4.ps1
index 0e4bfe8473..3ab8bbc8e8 100644
--- a/Miners/CpuMiner-v1.4.ps1
+++ b/Miners/CpuMiner-v1.4.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/CryptoDredge-v0.16.0.ps1 b/Miners/CryptoDredge-v0.16.0.ps1
index 3ce3783650..25144a8101 100644
--- a/Miners/CryptoDredge-v0.16.0.ps1
+++ b/Miners/CryptoDredge-v0.16.0.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/CryptoDredge-v0.27.0.ps1 b/Miners/CryptoDredge-v0.27.0.ps1
index 1684d5a768..7edcf85d81 100644
--- a/Miners/CryptoDredge-v0.27.0.ps1
+++ b/Miners/CryptoDredge-v0.27.0.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/EthMiner-v0.19.0.18.ps1 b/Miners/EthMiner-v0.19.0.18.ps1
index 55edd95aca..625ac0fc99 100644
--- a/Miners/EthMiner-v0.19.0.18.ps1
+++ b/Miners/EthMiner-v0.19.0.18.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/EvrProgPow-v1p3p0.ps1 b/Miners/EvrProgPow-v1p3p0.ps1
index 2379fd3b7b..2bdbe92c8c 100644
--- a/Miners/EvrProgPow-v1p3p0.ps1
+++ b/Miners/EvrProgPow-v1p3p0.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/GMiner-v2.75.ps1 b/Miners/GMiner-v2.75.ps1
index 4198ffc330..2d489ec2c2 100644
--- a/Miners/GMiner-v2.75.ps1
+++ b/Miners/GMiner-v2.75.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/GMiner-v3.43.ps1 b/Miners/GMiner-v3.43.ps1
index ef3aae79ff..23df53e750 100644
--- a/Miners/GMiner-v3.43.ps1
+++ b/Miners/GMiner-v3.43.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/HellMiner-v0.59.1.ps1 b/Miners/HellMiner-v0.59.1.ps1
index 2fffc292fb..e2a86ecb4c 100644
--- a/Miners/HellMiner-v0.59.1.ps1
+++ b/Miners/HellMiner-v0.59.1.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/JayddeeCpu-v23.15.ps1 b/Miners/JayddeeCpu-v23.15.ps1
index b844bf8cf3..698984d7df 100644
--- a/Miners/JayddeeCpu-v23.15.ps1
+++ b/Miners/JayddeeCpu-v23.15.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/KawpowMiner-v1.2.4cl.ps1 b/Miners/KawpowMiner-v1.2.4cl.ps1
index 6d3614f3eb..59b244a718 100644
--- a/Miners/KawpowMiner-v1.2.4cl.ps1
+++ b/Miners/KawpowMiner-v1.2.4cl.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/KawpowMiner-v1.2.4cuda.ps1 b/Miners/KawpowMiner-v1.2.4cuda.ps1
index adfdef6f5e..5807c2f599 100644
--- a/Miners/KawpowMiner-v1.2.4cuda.ps1
+++ b/Miners/KawpowMiner-v1.2.4cuda.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/Kudaraidee-v1.2.0a.ps1 b/Miners/Kudaraidee-v1.2.0a.ps1
index 6efddba908..cb9c942586 100644
--- a/Miners/Kudaraidee-v1.2.0a.ps1
+++ b/Miners/Kudaraidee-v1.2.0a.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/MiniZ-v2.2c.ps1 b/Miners/MiniZ-v2.2c.ps1
index f64cd8e72b..adbeff72c8 100644
--- a/Miners/MiniZ-v2.2c.ps1
+++ b/Miners/MiniZ-v2.2c.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/NBMiner-v42.3.ps1 b/Miners/NBMiner-v42.3.ps1
index 3736080ab7..fcafdc722f 100644
--- a/Miners/NBMiner-v42.3.ps1
+++ b/Miners/NBMiner-v42.3.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/NSFMiner-v1.3.14.ps1 b/Miners/NSFMiner-v1.3.14.ps1
index fa8ea4f5da..db9a793ff3 100644
--- a/Miners/NSFMiner-v1.3.14.ps1
+++ b/Miners/NSFMiner-v1.3.14.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/NanoMiner-v3.8.6.ps1 b/Miners/NanoMiner-v3.8.6.ps1
index 774f169459..2c2eb910bd 100644
--- a/Miners/NanoMiner-v3.8.6.ps1
+++ b/Miners/NanoMiner-v3.8.6.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
@@ -39,7 +39,7 @@ $Algorithms = @(
[PSCustomObject]@{ Algorithms = @("EthashB3", "kHeavyHash"); Type = "AMD"; Fee = @(0.01, 0.01); MinMemGiB = 1.24; Minerset = 2; Tuning = " -coreClocks +20 -memClocks +100 -memTweak 2"; WarmupTimes = @(45, 60); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN4"); Arguments = @(" -algo EthashB3", " -algo Kaspa") } # https://github.com/nanopool/nanominer/issues/406
[PSCustomObject]@{ Algorithms = @("EvrProgPow"); Type = "AMD"; Fee = @(0.02); MinMemGiB = 1.08; Minerset = 1; Tuning = " -coreClocks +20 -memClocks +100 -memTweak 2"; WarmupTimes = @(45, 60); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @(); Arguments = @(" -algo Evrprogpow") }
[PSCustomObject]@{ Algorithms = @("FiroPow"); Type = "AMD"; Fee = @(0.01); MinMemGiB = 1.08; Minerset = 1; Tuning = " -coreClocks +20 -memClocks +100 -memTweak 2"; WarmupTimes = @(45, 0); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @(); Arguments = @(" -algo FiroPow") }
- [PSCustomObject]@{ Algorithms = @("KawPow"); Type = "AMD"; Fee = @(0.02); MinMemGiB = 1.08; Minerset = 2; Tuning = " -coreClocks +20 -memClocks +100 -memTweak 2"; WarmupTimes = @(45, 0); ExcludePools = @(@("ProHashing"), @()); ExcludeGPUArchitecture = @(); Arguments = @(" -algo KawPow") } # TeamRedMiner-v0.10.14 is fastest
+ [PSCustomObject]@{ Algorithms = @("KawPow"); Type = "AMD"; Fee = @(0.02); MinMemGiB = 1.08; Minerset = 2; Tuning = " -coreClocks +20 -memClocks +100 -memTweak 2"; WarmupTimes = @(45, 0); ExcludePools = @(@("ProHashing"), @()); ExcludeGPUArchitecture = @(); Arguments = @(" -algo KawPow") } # TeamRedMiner-v0.10.15 is fastest
[PSCustomObject]@{ Algorithms = @("kHeavyHash"); Type = "AMD"; Fee = @(0.02); MinMemGiB = 2; Minerset = 2; Tuning = " -coreClocks +20 -memClocks +100 -memTweak 2"; WarmupTimes = @(45, 0); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @(); Arguments = @(" -algo Kaspa") }
[PSCustomObject]@{ Algorithms = @("UbqHash"); Type = "AMD"; Fee = @(0.01); MinMemGiB = 1.08; Minerset = 1; Tuning = " -coreClocks +20 -memClocks +100 -memTweak 2"; WarmupTimes = @(45, 0); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @(); Arguments = @(" -algo Ubqhash") } # PhoenixMiner-v6.2c is fastest
[PSCustomObject]@{ Algorithms = @("VertHash"); Type = "AMD"; Fee = @(0.01); MinMemGiB = 3; Minerset = 1; Tuning = " -coreClocks +20 -memClocks +100 -memTweak 2"; WarmupTimes = @(45, 0); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @(); Arguments = @(" -algo Verthash") }
diff --git a/Miners/Ninjarig-1.0.3.ps1 b/Miners/Ninjarig-1.0.3.ps1
index d666cb262b..59ad9b4cf6 100644
--- a/Miners/Ninjarig-1.0.3.ps1
+++ b/Miners/Ninjarig-1.0.3.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/NosuchCpu-v3.8.8.1.ps1 b/Miners/NosuchCpu-v3.8.8.1.ps1
index 3f873fe101..74d03130a2 100644
--- a/Miners/NosuchCpu-v3.8.8.1.ps1
+++ b/Miners/NosuchCpu-v3.8.8.1.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/OneZeroMiner-v1.2.5.ps1 b/Miners/OneZeroMiner-v1.2.5.ps1
index 19addfac09..b45950d5c1 100644
--- a/Miners/OneZeroMiner-v1.2.5.ps1
+++ b/Miners/OneZeroMiner-v1.2.5.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/OneZeroMiner-v1.2.8.ps1 b/Miners/OneZeroMiner-v1.2.8.ps1
new file mode 100644
index 0000000000..e7294725d2
--- /dev/null
+++ b/Miners/OneZeroMiner-v1.2.8.ps1
@@ -0,0 +1,77 @@
+<#
+Copyright (c) 2018-2023 Nemo, MrPlus & UselessGuru
+
+NemosMiner is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+NemosMiner is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+#>
+
+<#
+Product: NemosMiner
+Version: 5.0.2.5
+Version date: 2023/12/20
+#>
+
+If (-not ($Devices = $Variables.EnabledDevices.Where({ $_.Type -eq "NVIDIA" -and $_.OpenCL.DriverVersion -ge [Version]"450.80.02" }))) { Return }
+
+$URI = "https://github.com/OneZeroMiner/onezerominer/releases/download/v1.2.8/onezerominer-win64-1.2.8.zip"
+$Name = (Get-Item $MyInvocation.MyCommand.Path).BaseName
+$Path = "$PWD\Bin\$Name\onezerominer.exe"
+$DeviceEnumerator = "Type_Vendor_Slot"
+
+$Algorithms = @(
+ [PSCustomObject]@{ Algorithm = "DynexSolve"; Fee = @(0.03); MinMemGiB = 2; Minerset = 0; WarmupTimes = @(180, 0); ExcludeGPUArchitecture = @(); ExcludePools = @("ZergPool"); Arguments = @(" --algo dynex") }
+)
+
+$Algorithms = $Algorithms.Where({ $_.MinerSet -le $Config.MinerSet })
+$Algorithms = $Algorithms.Where({ $MinerPools[0][$_.Algorithm] })
+$Algorithms = $Algorithms.Where({ $MinerPools[0][$_.Algorithm].Name -notin $_.ExcludePools })
+
+If ($Algorithms) {
+
+ ($Devices | Select-Object Model -Unique).ForEach(
+ {
+ $Miner_Devices = @($Devices | Where-Object Model -EQ $_.Model)
+ $MinerAPIPort = $Config.APIPort + ($Miner_Devices.Id | Sort-Object -Top 1) + 1
+
+ $Algorithms.ForEach(
+ {
+ $ExcludePools = $_.ExcludePools
+ ForEach ($Pool in ($MinerPools[0][$_.Algorithm].Where({ $_.Name -notin $ExcludePools }))) {
+
+ $ExcludeArchitecture = $_.ExcludeArchitecture
+ $MinMemGiB = $_.MinMemGiB
+ If ($AvailableMiner_Devices = $Miner_Devices.Where({ $_.MemoryGiB -ge $MinMemGiB -and $_.Architecture -notin $ExcludeArchitecture })) {
+
+ $Miner_Name = "$Name-$($AvailableMiner_Devices.Count)x$($AvailableMiner_Devices.Model | Select-Object -Unique)"
+
+ [PSCustomObject]@{
+ API = "OneZero"
+ Arguments = "$($_.Arguments) --pool $(If ($Pool.PoolPorts[1]) { "ssl://"} )$($Pool.Host):$($Pool.PoolPorts[0] | Select-Object -Last 1) --wallet $($Pool.User) --pass $($Pool.Pass)$(If ($Pool.PoolPorts[1] -and $Config.SSLAllowSelfSignedCertificate) { " --no-cert-validation" } ) --api-port $MinerAPIPort --devices $(($AvailableMiner_Devices.$DeviceEnumerator | Sort-Object -Unique).ForEach({ '{0:x}' -f $_ }) -join ',')"
+ DeviceNames = $AvailableMiner_Devices.Name
+ Fee = $_.Fee # Dev fee
+ MinerSet = $_.MinerSet
+ Name = $Miner_Name
+ Path = $Path
+ Port = $MinerAPIPort
+ Type = "NVIDIA"
+ URI = $Uri
+ WarmupTimes = $_.WarmupTimes # First value: Seconds until miner must send first sample, if no sample is received miner will be marked as failed; Second value: Seconds from first sample until miner sends stable hashrates that will count for benchmarking
+ Workers = @(@{ Pool = $Pool })
+ }
+ }
+ }
+ }
+ )
+ }
+ )
+}
\ No newline at end of file
diff --git a/Miners/PhoenixMiner-v6.2c.ps1 b/Miners/PhoenixMiner-v6.2c.ps1
index 54a8376cc2..1faca3cd7f 100644
--- a/Miners/PhoenixMiner-v6.2c.ps1
+++ b/Miners/PhoenixMiner-v6.2c.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/Radiator-v1.0.0.ps1 b/Miners/Radiator-v1.0.0.ps1
index 45cf2353de..2bee525e95 100644
--- a/Miners/Radiator-v1.0.0.ps1
+++ b/Miners/Radiator-v1.0.0.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/10/06
#>
diff --git a/Miners/Raptor3umCpu-v2.0.ps1 b/Miners/Raptor3umCpu-v2.0.ps1
index fb593aced7..f985268e6d 100644
--- a/Miners/Raptor3umCpu-v2.0.ps1
+++ b/Miners/Raptor3umCpu-v2.0.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/10/06
#>
diff --git a/Miners/Rigel-v1.11.0.ps1 b/Miners/Rigel-v1.11.0.ps1
index 39ed4b441f..cf6044c374 100644
--- a/Miners/Rigel-v1.11.0.ps1
+++ b/Miners/Rigel-v1.11.0.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/RplantCpu-v5.0.34.ps1 b/Miners/RplantCpu-v5.0.34.ps1
index 48b196ccf5..d778aa17fb 100644
--- a/Miners/RplantCpu-v5.0.34.ps1
+++ b/Miners/RplantCpu-v5.0.34.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
@@ -51,7 +51,7 @@ $Algorithms = @(
# [PSCustomObject]@{ Algorithm = "CpuPower"; Minerset = 3; WarmupTimes = @(60, 60); ExcludePools = @(); Arguments = " --algo cpupower" } # ASIC
[PSCustomObject]@{ Algorithm = "CryptoVantaA"; Minerset = 2; WarmupTimes = @(60, 60); ExcludePools = @(); Arguments = " --algo cryptovantaa" }
# [PSCustomObject]@{ Algorithm = "CurveHash"; Minerset = 2; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --algo curvehash" } # reported hashrates too high (https://github.com/rplant8/cpuminer-opt-rplant/issues/21)
-# [PSCustomObject]@{ Algorithm = "Decred"; Minerset = 3; WarmupTimes = @(60, 60); ExcludePools = @(); Arguments = " --algo Decred" } # ASIC, No hashrate in time
+# [PSCustomObject]@{ Algorithm = "Decred"; Minerset = 3; WarmupTimes = @(60, 60); ExcludePools = @(); Arguments = " --algo Decred" } # ASIC, No hashrate in time, algo is now using Blake3d
# [PSCustomObject]@{ Algorithm = "DMDGr"; Minerset = 3; WarmupTimes = @(60, 60); ExcludePools = @(); Arguments = " --algo dmd-gr" } # ASIC
[PSCustomObject]@{ Algorithm = "Ghostrider"; MinerSet = 0; WarmupTimes = @(180, 60); ExcludePools = @(); Arguments = " --algo gr" }
# [PSCustomObject]@{ Algorithm = "Groestl"; Minerset = 3; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --algo groestl" } # ASIC
diff --git a/Miners/RplantCpu-v5.0.36.ps1 b/Miners/RplantCpu-v5.0.36.ps1
index 2c04e7070d..27a6416b6a 100644
--- a/Miners/RplantCpu-v5.0.36.ps1
+++ b/Miners/RplantCpu-v5.0.36.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
@@ -53,7 +53,7 @@ $Algorithms = @(
# [PSCustomObject]@{ Algorithm = "CpuPower"; Minerset = 3; WarmupTimes = @(60, 60); ExcludePools = @(); Arguments = " --algo cpupower" } # ASIC
[PSCustomObject]@{ Algorithm = "CryptoVantaA"; Minerset = 2; WarmupTimes = @(60, 60); ExcludePools = @(); Arguments = " --algo cryptovantaa" }
# [PSCustomObject]@{ Algorithm = "CurveHash"; Minerset = 2; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --algo curvehash" } # reported hashrates too high (https://github.com/rplant8/cpuminer-opt-rplant/issues/21)
-# [PSCustomObject]@{ Algorithm = "Decred"; Minerset = 3; WarmupTimes = @(60, 60); ExcludePools = @(); Arguments = " --algo Decred" } # ASIC, No hashrate in time
+# [PSCustomObject]@{ Algorithm = "Decred"; Minerset = 3; WarmupTimes = @(60, 60); ExcludePools = @(); Arguments = " --algo Decred" } # ASIC, No hashrate in time, algo is now using Blake3d
# [PSCustomObject]@{ Algorithm = "DMDGr"; Minerset = 3; WarmupTimes = @(60, 60); ExcludePools = @(); Arguments = " --algo dmd-gr" } # ASIC
[PSCustomObject]@{ Algorithm = "Ghostrider"; MinerSet = 0; WarmupTimes = @(180, 60); ExcludePools = @(); Arguments = " --algo gr" }
# [PSCustomObject]@{ Algorithm = "Groestl"; Minerset = 3; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --algo groestl" } # ASIC
diff --git a/Miners/RrkzCpu-v4.2.ps1 b/Miners/RrkzCpu-v4.2.ps1
index 919f2702d2..85b07f7afb 100644
--- a/Miners/RrkzCpu-v4.2.ps1
+++ b/Miners/RrkzCpu-v4.2.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/SRBMinerMulti-v0.9.4.ps1 b/Miners/SRBMinerMulti-v0.9.4.ps1
index 5712ce1b63..0f391f54a5 100644
--- a/Miners/SRBMinerMulti-v0.9.4.ps1
+++ b/Miners/SRBMinerMulti-v0.9.4.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/SRBMinerMulti-v2.4.4.ps1 b/Miners/SRBMinerMulti-v2.4.4.ps1
index a15ccec03a..6d6ebf53d8 100644
--- a/Miners/SRBMinerMulti-v2.4.4.ps1
+++ b/Miners/SRBMinerMulti-v2.4.4.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
@@ -52,7 +52,7 @@ $Algorithms = @(
[PSCustomObject]@{ Algorithms = @("CryptonightGpu"); Type = "AMD"; Fee = @(0.0085); MinMemGiB = 1; MinerSet = 0; WarmupTimes = @(60, 30); ExcludeGPUArchitecture = @(); ExcludePools = @(@(), @()); Arguments = @(" --gpu-auto-tune 2 --disable-cpu --disable-gpu-intel --disable-gpu-nvidia --algorithm cryptonight_gpu") }
[PSCustomObject]@{ Algorithms = @("CryptonightHeavyXhv"); Type = "AMD"; Fee = @(0.0085); MinMemGiB = 1; MinerSet = 0; WarmupTimes = @(30, 30); ExcludeGPUArchitecture = @(); ExcludePools = @(@(), @()); Arguments = @(" --gpu-auto-tune 2 --disable-cpu --disable-gpu-intel --disable-gpu-nvidia --algorithm cryptonight_xhv") }
[PSCustomObject]@{ Algorithms = @("CryptonightTalleo"); Type = "AMD"; Fee = @(0.0085); MinMemGiB = 1; Minerset = 2; WarmupTimes = @(60, 30); ExcludeGPUArchitecture = @(); ExcludePools = @(@(), @()); Arguments = @(" --gpu-auto-tune 2 --disable-cpu --disable-gpu-intel --disable-gpu-nvidia --algorithm cryptonight_talleo") }
- [PSCustomObject]@{ Algorithms = @("CryptonightTurtle"); Type = "AMD"; Fee = @(0.0085); MinMemGiB = 1; Minerset = 2; WarmupTimes = @(30, 30); ExcludeGPUArchitecture = @(); ExcludePools = @(@(), @()); Arguments = @(" --gpu-auto-tune 2 --disable-cpu --disable-gpu-intel --disable-gpu-nvidia --algorithm cryptonight_turtle") } # TeamRedMiner-v0.10.14 is fastest
+ [PSCustomObject]@{ Algorithms = @("CryptonightTurtle"); Type = "AMD"; Fee = @(0.0085); MinMemGiB = 1; Minerset = 2; WarmupTimes = @(30, 30); ExcludeGPUArchitecture = @(); ExcludePools = @(@(), @()); Arguments = @(" --gpu-auto-tune 2 --disable-cpu --disable-gpu-intel --disable-gpu-nvidia --algorithm cryptonight_turtle") } # TeamRedMiner-v0.10.15 is fastest
[PSCustomObject]@{ Algorithms = @("CryptonightUpx"); Type = "AMD"; Fee = @(0.0085); MinMemGiB = 1; MinerSet = 0; WarmupTimes = @(60, 30); ExcludeGPUArchitecture = @(); ExcludePools = @(@(), @()); Arguments = @(" --gpu-auto-tune 2 --disable-cpu --disable-gpu-intel --disable-gpu-nvidia --algorithm cryptonight_upx") }
[PSCustomObject]@{ Algorithms = @("CurveHash"); Type = "AMD"; Fee = @(0.0085); MinMemGiB = 2; Minerset = 1; WarmupTimes = @(60, 30); ExcludeGPUArchitecture = @(); ExcludePools = @(@(), @()); Arguments = @(" --gpu-auto-tune 2 --disable-cpu --disable-gpu-intel --disable-gpu-nvidia --algorithm curvehash") }
[PSCustomObject]@{ Algorithms = @("Decred"); Type = "AMD"; Fee = @(0.01); MinMemGiB = 1; MinerSet = 0; WarmupTimes = @(30, 30); ExcludeGPUArchitecture = @(); ExcludePools = @(@(), @()); Arguments = @(" --gpu-auto-tune 2 --disable-cpu --disable-gpu-intel --disable-gpu-nvidia --algorithm blake3d_decred") }
diff --git a/Miners/SgMinerFancyIX-v0.9.4.ps1 b/Miners/SgMinerFancyIX-v0.9.4.ps1
index f7af6114b8..ac2d06e455 100644
--- a/Miners/SgMinerFancyIX-v0.9.4.ps1
+++ b/Miners/SgMinerFancyIX-v0.9.4.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/Suprminer-v2.31v2.ps1 b/Miners/Suprminer-v2.31v2.ps1
index 35c7557fc1..c4e722c721 100644
--- a/Miners/Suprminer-v2.31v2.ps1
+++ b/Miners/Suprminer-v2.31v2.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/TTMiner-v2023.4.3.ps1 b/Miners/TTMiner-v2023.4.3.ps1
index e129c2d392..356e3385d8 100644
--- a/Miners/TTMiner-v2023.4.3.ps1
+++ b/Miners/TTMiner-v2023.4.3.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/TTMiner-v5.0.3.ps1 b/Miners/TTMiner-v5.0.3.ps1
index 3c7f645542..fe7be60747 100644
--- a/Miners/TTMiner-v5.0.3.ps1
+++ b/Miners/TTMiner-v5.0.3.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/TeamBlackMiner-v2.16.ps1 b/Miners/TeamBlackMiner-v2.16.ps1
index 9b76b4606a..e3cabbea8c 100644
--- a/Miners/TeamBlackMiner-v2.16.ps1
+++ b/Miners/TeamBlackMiner-v2.16.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/TeamRedMiner-v0.10.14.ps1 b/Miners/TeamRedMiner-v0.10.14.ps1
deleted file mode 100644
index b3d92eb703..0000000000
--- a/Miners/TeamRedMiner-v0.10.14.ps1
+++ /dev/null
@@ -1,148 +0,0 @@
-<#
-Copyright (c) 2018-2023 Nemo, MrPlus & UselessGuru
-
-NemosMiner is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-NemosMiner is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-#>
-
-<#
-Product: NemosMiner
-Version: 5.0.2.4
-Version date: 2023/12/20
-#>
-
-If (-not ($Devices = $Variables.EnabledDevices.Where({ $_.Type -eq "AMD" -and $_.OpenCL.ClVersion -ge "OpenCL C 2.0" }))) { Return }
-
-$URI = "https://github.com/Minerx117/miners/releases/download/TeamRedMiner/teamredminer-v0.10.14-win.zip"
-$Name = (Get-Item $MyInvocation.MyCommand.Path).BaseName
-$Path = "$PWD\Bin\$Name\teamredminer.exe"
-$DeviceEnumerator = "Type_Vendor_Slot"
-
-$Algorithms = @(
- [PSCustomObject]@{ Algorithms = @("Autolykos2"); Fee = @(0.025); MinMemGiB = 0.77; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2"); Arguments = " --algo=autolykos2" }
- [PSCustomObject]@{ Algorithms = @("Autolykos2", "kHeavyHash"); Fee = @(0.025, 0.025); MinMemGiB = 0.77; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2"); Arguments = " --algo=autolykos2" }
- [PSCustomObject]@{ Algorithms = @("Autolykos2", "IronFish"); Fee = @(0.025, 0.025); MinMemGiB = 0.77; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2"); Arguments = " --algo=autolykos2" } # Pools with support at this time are Herominers, Flexpool and Kryptex
- [PSCustomObject]@{ Algorithms = @("Chukwa"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=trtl_chukwa" }
- [PSCustomObject]@{ Algorithms = @("Chukwa2"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=trtl_chukwa2" }
- [PSCustomObject]@{ Algorithms = @("CryptonightCcx"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cn_conceal --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" } # SRBMinerMulti-v2.4.3 is fastest
- [PSCustomObject]@{ Algorithms = @("CryptonightHeavy"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cn_heavy --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
- [PSCustomObject]@{ Algorithms = @("CryptonightHaven"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cn_haven --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
- [PSCustomObject]@{ Algorithms = @("CryptonightHeavyTube"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cn_saber --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
-# [PSCustomObject]@{ Algorithms = @("CryptonightR"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 3; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cnr --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" } # ASIC
- [PSCustomObject]@{ Algorithms = @("CryptonightV1"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cnv8 --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
- [PSCustomObject]@{ Algorithms = @("CryptonightDouble"); Fee = @(0.025); MinMemGiB = 4.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cnv8_dbl --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" } # XmRig-v6.20.0 is fastest
- [PSCustomObject]@{ Algorithms = @("CryptonightHalf"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cnv8_half --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
- [PSCustomObject]@{ Algorithms = @("CryptonightTurtle"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cnv8_trtl --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
- [PSCustomObject]@{ Algorithms = @("CryptonightRwz"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cnv8_rwz --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
- [PSCustomObject]@{ Algorithms = @("CryptonightUpx"); Fee = @(0.025); MinMemGiB = 3.0; Minerset = 1; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cnv8_upx2 --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
- [PSCustomObject]@{ Algorithms = @("CuckarooD29"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cuckarood29_grin" } # 2GB is not enough
-# [PSCustomObject]@{ Algorithms = @("Cuckatoo31"); Fee = @(0.025); MinMemGiB = 3.0; Minerset = 3; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cuckatoo31_grin" } # ASIC
- [PSCustomObject]@{ Algorithms = @("EtcHash"); Fee = @(0.01); MinMemGiB = 0.77; Minerset = 1; WarmupTimes = @(45, 60); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2"); Arguments = " --algo=etchash" } # PhoenixMiner-v6.2c is fastest
- [PSCustomObject]@{ Algorithms = @("Ethash"); Fee = @(0.01); MinMemGiB = 0.77; MinerSet = 0; WarmupTimes = @(60, 60); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2"); Arguments = " --algo=ethash" } # PhoenixMiner-v6.2c is fastest
- [PSCustomObject]@{ Algorithms = @("Ethash", "kHeavyHash"); Fee = @(0.01, 0.01); MinMemGiB = 0.77; Minerset = 2; WarmupTimes = @(60, 60); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2"); Arguments = " --algo=ethash" } # PhoenixMiner-v6.2c is fastest
-# [PSCustomObject]@{ Algorithms = @("Ethash", "IronFish"); Fee = @(0.01, 0.01); MinMemGiB = 0.77; Minerset = 2; WarmupTimes = @(60, 60); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2"); Arguments = " --algo=ethash" } # Pools with support at this time are Herominers, Flexpool and Kryptex
- [PSCustomObject]@{ Algorithms = @("FiroPow"); Fee = @(0.02); MinMemGiB = 0.77; MinerSet = 0; WarmupTimes = @(60, 60); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA3"); Arguments = " --algo=firopow" } # Wildrig-v0.40.2a is fastest on Polaris
- [PSCustomObject]@{ Algorithms = @("IronFish"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2"); Arguments = " --algo=ironfish" } # Pools with support at this time are Herominers, Flexpool and Kryptex
- [PSCustomObject]@{ Algorithms = @("KawPow"); Fee = @(0.02); MinMemGiB = 0.77; MinerSet = 0; WarmupTimes = @(60, 60); ExcludePools = @(@("MiningPoolHub"), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA3"); Arguments = " --algo=kawpow" } # Wildrig-v0.40.2a is fastest on Polaris
- [PSCustomObject]@{ Algorithms = @("kHeavyHash"); Fee = @(0.01); MinMemGiB = 2.0; MinerSet = 0; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2"); Arguments = " --algo=kas" }
-# [PSCustomObject]@{ Algorithms = @("Lyra2Z"); Fee = @(0.03); MinMemGiB = 2.0; MinerSet = 0; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=lyra2z" } # ASIC
-# [PSCustomObject]@{ Algorithms = @("Lyra2RE3"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=lyra2rev3" } # ASIC
- [PSCustomObject]@{ Algorithms = @("MTP"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(45, 45); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA3"); Arguments = " --algo=mtp" } # Algorithm is dead
- [PSCustomObject]@{ Algorithms = @("Nimiq"); Fee = @(0.025); MinMemGiB = 4.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA3"); Arguments = " --algo=nimiq" }
- [PSCustomObject]@{ Algorithms = @("Phi2"); Fee = @(0.03); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=phi2" }
- [PSCustomObject]@{ Algorithms = @("VertHash"); Fee = @(0.025); MinMemGiB = 4.0; Minerset = 1; WarmupTimes = @(75, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA3"); Arguments = " --algo=verthash --verthash_file=..\.$($Variables.VerthashDatPath)" }
-# [PSCustomObject]@{ Algorithms = @("X16r"); Fee = @(0.025); MinMemGiB = 4.0; Minerset = 3; WarmupTimes = @(60, 60); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=x16r" } # ASIC
- [PSCustomObject]@{ Algorithms = @("X16rv2"); Fee = @(0.025); MinMemGiB = 4.0; MinerSet = 0; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=x16rv2" }
- [PSCustomObject]@{ Algorithms = @("X16s"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=x16s" }
- [PSCustomObject]@{ Algorithms = @("X16rt"); Fee = @(0.025); MinMemGiB = 2.0; MinerSet = 0; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "GCN2", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=x16rt" } # FPGA
-)
-
-$Algorithms = $Algorithms.Where({ $_.MinerSet -le $Config.MinerSet })
-$Algorithms.Where({ -not $_.Algorithms[1] }) | ForEach-Object { $_.Algorithms += "" }
-$Algorithms = $Algorithms.Where({ $MinerPools[0][$_.Algorithms[0]] -and ($_.Algorithms[1] -eq "" -or $MinerPools[1][$_.Algorithms[1]]) })
-$Algorithms = $Algorithms.Where({ $Config.SSL -ne "Always" -or ($MinerPools[0][$_.Algorithms[0]].SSLSelfSignedCertificate -eq $false -and (-not $_.Algorithms[1] -or $MinerPools[1][$_.Algorithms[1]].SSLSelfSignedCertificate -ne $true)) })
-$Algorithms = $Algorithms.Where({ $MinerPools[0][$_.Algorithms[0]].Name -notin $_.ExcludePools[0] })
-$Algorithms = $Algorithms.Where({ $MinerPools[1][$_.Algorithms[1]].Name -notin $_.ExcludePools[1] })
-
-If ($Algorithms) {
-
- ($Devices | Select-Object Model -Unique).ForEach(
- {
- $Miner_Devices = $Devices | Where-Object Model -EQ $_.Model
- $MinerAPIPort = $Config.APIPort + ($Miner_Devices.Id | Sort-Object -Top 1) + 1
-
- $Algorithms.ForEach(
- {
- $ExcludePools = $_.ExcludePools
- ForEach ($Pool0 in ($MinerPools[0][$_.Algorithms[0]].Where({ $_.Name -notin $ExcludePools[0] -and ($Config.SSL -ne "Always" -or $_.SSLSelfSignedCertificate -ne $true) }))) {
- ForEach ($Pool1 in ($MinerPools[1][$_.Algorithms[1]].Where({ $_.Name -notin $ExcludePools[1] -and ($Config.SSL -ne "Always" -or $_.SSLSelfSignedCertificate -ne $true) }))) {
-
- $ExcludeGPUArchitecture = $_.ExcludeGPUArchitecture
- $MinMemGiB = $_.MinMemGiB + $Pool0.DAGSizeGiB + $Pool1.DAGSizeGiB
- If ($AvailableMiner_Devices = $Miner_Devices.Where({ $_.MemoryGiB -ge $MinMemGiB -and $_.Architecture -notin $ExcludeGPUArchitecture })) {
-
- $Miner_Name = "$Name-$($AvailableMiner_Devices.Count)x$($AvailableMiner_Devices.Model | Select-Object -Unique)$(If ($_.Algorithms[1]) { "-$($_.Algorithms[0])&$($_.Algorithms[1])" })"
-
- $Arguments = $_.Arguments
- $Arguments += " --pool_force_ensub --url=$(If ($Pool0.PoolPorts[1]) { "stratum+ssl" } Else { "stratum+tcp" })://$($Pool0.Host):$($Pool0.PoolPorts | Select-Object -Last 1)"
- $Arguments += Switch ($Pool0.Protocol) {
- "ethstratumnh" { " --eth_stratum_mode=nicehash" }
- }
- $Arguments += " --user=$($Pool0.User)$(If ($Pool0.WorkerName -and $Pool0.User -notmatch "\.$($Pool0.WorkerName)$") { ".$($Pool0.WorkerName)" })"
- $Arguments += " --pass=$($Pool0.Pass)"
-
- If ($_.Algorithms[1] -eq "IronFish") { $Arguments += " --iron" }
- If ($_.Algorithms[1] -eq "kHeavyHash") { $Arguments += " --kas" }
- If ($_.Algorithms[1]) {
- $Arguments += " --url=$(If ($Pool1.PoolPorts[1]) { "stratum+ssl" } Else { "stratum+tcp" })://$($Pool1.Host):$($Pool1.PoolPorts | Select-Object -Last 1)"
- $Arguments += " --user=$($Pool1.User)$(If ($Pool1.WorkerName -and $Pool1.User -notmatch "\.$($Pool1.WorkerName)$") { ".$($Pool1.WorkerName)" })"
- $Arguments += " --pass=$($Pool1.Pass)"
- }
- If ($_.Algorithms[1] -eq "IronFish") { $Arguments += " --iron_end" }
- If ($_.Algorithms[1] -eq "kHeavyHash") { $Arguments += " --kas_end" }
-
- If ($_.Algorithms[0] -match '^Et(c)hash.+' -and $AvailableMiner_Devices.Model -notmatch "^Radeon RX [0-9]{3} ") { $_.Fee = @(0.0075) } # Polaris cards 0.75%
-
- If ($_.Algorithms -contains "VertHash" -and (Get-Item -Path $Variables.VerthashDatPath -ErrorAction Ignore).length -ne 1283457024) {
- $PrerequisitePath = $Variables.VerthashDatPath
- $PrerequisiteURI = "https://github.com/Minerx117/miners/releases/download/Verthash.Dat/VertHash.dat"
- }
- Else {
- $PrerequisitePath = ""
- $PrerequisiteURI = ""
- }
-
- [PSCustomObject]@{
- API = "Xgminer"
- Arguments = "$Arguments --watchdog_script --no_gpu_monitor --init_style=3 --hardware=gpu --platform=$($AvailableMiner_Devices.PlatformId | Sort-Object -Unique) --api_listen=127.0.0.1:$MinerAPIPort --devices=$(($AvailableMiner_Devices.$DeviceEnumerator | Sort-Object -Unique).ForEach({ '{0:d}' -f $_ }) -join ',')"
- DeviceNames = $AvailableMiner_Devices.Name
- Fee = $_.Fee # Dev fee
- MinerSet = $_.MinerSet
- Name = $Miner_Name
- Path = $Path
- Port = $MinerAPIPort
- PrerequisitePath = $PrerequisitePath
- PrerequisiteURI = $PrerequisiteURI
- Type = "AMD"
- URI = $Uri
- WarmupTimes = $_.WarmupTimes # First value: Seconds until miner must send first sample, if no sample is received miner will be marked as failed; Second value: Seconds from first sample until miner sends stable hashrates that will count for benchmarking
- Workers = @(($Pool0, $Pool1).Where({ $_ }) | ForEach-Object { @{ Pool = $_ } })
- }
- }
- }
- }
- }
- )
- }
- )
-}
\ No newline at end of file
diff --git a/Miners/TeamRedMiner-v0.10.15.ps1 b/Miners/TeamRedMiner-v0.10.15.ps1
new file mode 100644
index 0000000000..abed7f2303
--- /dev/null
+++ b/Miners/TeamRedMiner-v0.10.15.ps1
@@ -0,0 +1,148 @@
+<#
+Copyright (c) 2018-2023 Nemo, MrPlus & UselessGuru
+
+NemosMiner is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+NemosMiner is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+#>
+
+<#
+Product: NemosMiner
+Version: 5.0.2.5
+Version date: 2023/12/20
+#>
+
+If (-not ($Devices = $Variables.EnabledDevices.Where({ $_.Type -eq "AMD" -and $_.OpenCL.ClVersion -ge "OpenCL C 2.0" }))) { Return }
+
+$URI = "https://github.com/todxx/teamredminer/releases/download/v0.10.15/teamredminer-v0.10.15-win.zip"
+$Name = (Get-Item $MyInvocation.MyCommand.Path).BaseName
+$Path = "$PWD\Bin\$Name\teamredminer.exe"
+$DeviceEnumerator = "Type_Vendor_Slot"
+
+$Algorithms = @(
+ [PSCustomObject]@{ Algorithms = @("Autolykos2"); Fee = @(0.025); MinMemGiB = 0.77; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @(); Arguments = " --algo=autolykos2" }
+ [PSCustomObject]@{ Algorithms = @("Autolykos2", "kHeavyHash"); Fee = @(0.025, 0.025); MinMemGiB = 0.77; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @(); Arguments = " --algo=autolykos2" }
+ [PSCustomObject]@{ Algorithms = @("Autolykos2", "IronFish"); Fee = @(0.025, 0.025); MinMemGiB = 0.77; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @("NiceHash")); ExcludeGPUArchitecture = @(); Arguments = " --algo=autolykos2" } # Pools with support at this time are Herominers, Flexpool and Kryptex
+ [PSCustomObject]@{ Algorithms = @("Chukwa"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=trtl_chukwa" }
+ [PSCustomObject]@{ Algorithms = @("Chukwa2"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=trtl_chukwa2" }
+ [PSCustomObject]@{ Algorithms = @("CryptonightCcx"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cn_conceal --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" } # SRBMinerMulti-v2.4.4 is fastest
+ [PSCustomObject]@{ Algorithms = @("CryptonightHeavy"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cn_heavy --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
+ [PSCustomObject]@{ Algorithms = @("CryptonightHaven"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cn_haven --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
+ [PSCustomObject]@{ Algorithms = @("CryptonightHeavyTube"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cn_saber --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
+# [PSCustomObject]@{ Algorithms = @("CryptonightR"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 3; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cnr --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" } # ASIC
+ [PSCustomObject]@{ Algorithms = @("CryptonightV1"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cnv8 --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
+ [PSCustomObject]@{ Algorithms = @("CryptonightDouble"); Fee = @(0.025); MinMemGiB = 4.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cnv8_dbl --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" } # XmRig-v6.20.0 is fastest
+ [PSCustomObject]@{ Algorithms = @("CryptonightHalf"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cnv8_half --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
+ [PSCustomObject]@{ Algorithms = @("CryptonightTurtle"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cnv8_trtl --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
+ [PSCustomObject]@{ Algorithms = @("CryptonightRwz"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cnv8_rwz --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
+ [PSCustomObject]@{ Algorithms = @("CryptonightUpx"); Fee = @(0.025); MinMemGiB = 3.0; Minerset = 1; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cnv8_upx2 --auto_tune=QUICK --auto_tune_runs=2 --allow_large_alloc --no_lean" }
+ [PSCustomObject]@{ Algorithms = @("CuckarooD29"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cuckarood29_grin" } # 2GB is not enough
+# [PSCustomObject]@{ Algorithms = @("Cuckatoo31"); Fee = @(0.025); MinMemGiB = 3.0; Minerset = 3; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=cuckatoo31_grin" } # ASIC
+ [PSCustomObject]@{ Algorithms = @("EtcHash"); Fee = @(0.01); MinMemGiB = 0.77; Minerset = 1; WarmupTimes = @(45, 60); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @(); Arguments = " --algo=etchash" } # PhoenixMiner-v6.2c is fastest
+ [PSCustomObject]@{ Algorithms = @("Ethash"); Fee = @(0.01); MinMemGiB = 0.77; MinerSet = 0; WarmupTimes = @(60, 60); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @(); Arguments = " --algo=ethash" } # PhoenixMiner-v6.2c is fastest
+ [PSCustomObject]@{ Algorithms = @("Ethash", "kHeavyHash"); Fee = @(0.01, 0.01); MinMemGiB = 0.77; Minerset = 2; WarmupTimes = @(60, 60); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @(); Arguments = " --algo=ethash" } # PhoenixMiner-v6.2c is fastest
+# [PSCustomObject]@{ Algorithms = @("Ethash", "IronFish"); Fee = @(0.01, 0.01); MinMemGiB = 0.77; Minerset = 2; WarmupTimes = @(60, 60); ExcludePools = @(@(), @("NiceHash")); ExcludeGPUArchitecture = @(); Arguments = " --algo=ethash" } # Pools with support at this time are Herominers, Flexpool and Kryptex
+ [PSCustomObject]@{ Algorithms = @("FiroPow"); Fee = @(0.02); MinMemGiB = 0.77; MinerSet = 0; WarmupTimes = @(60, 60); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("RDNA3"); Arguments = " --algo=firopow" } # Wildrig-v0.40.4 is fastest on Polaris
+ [PSCustomObject]@{ Algorithms = @("IronFish"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@("NiceHash"), @()); ExcludeGPUArchitecture = @(); Arguments = " --algo=ironfish" } # Pools with support at this time are Herominers, Flexpool and Kryptex
+ [PSCustomObject]@{ Algorithms = @("KawPow"); Fee = @(0.02); MinMemGiB = 0.77; MinerSet = 0; WarmupTimes = @(60, 60); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("RDNA3"); Arguments = " --algo=kawpow" } # Wildrig-v0.40.4 is fastest on Polaris
+ [PSCustomObject]@{ Algorithms = @("kHeavyHash"); Fee = @(0.01); MinMemGiB = 2.0; MinerSet = 0; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @(); Arguments = " --algo=kas" }
+# [PSCustomObject]@{ Algorithms = @("Lyra2Z"); Fee = @(0.03); MinMemGiB = 2.0; MinerSet = 0; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=lyra2z" } # ASIC
+# [PSCustomObject]@{ Algorithms = @("Lyra2RE3"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=lyra2rev3" } # ASIC
+ [PSCustomObject]@{ Algorithms = @("MTP"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(45, 45); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA3"); Arguments = " --algo=mtp" } # Algorithm is dead
+ [PSCustomObject]@{ Algorithms = @("Nimiq"); Fee = @(0.025); MinMemGiB = 4.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA3"); Arguments = " --algo=nimiq" }
+ [PSCustomObject]@{ Algorithms = @("Phi2"); Fee = @(0.03); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=phi2" }
+ [PSCustomObject]@{ Algorithms = @("VertHash"); Fee = @(0.025); MinMemGiB = 4.0; Minerset = 1; WarmupTimes = @(75, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1"); Arguments = " --algo=verthash --verthash_file=..\.$($Variables.VerthashDatPath)" }
+# [PSCustomObject]@{ Algorithms = @("X16r"); Fee = @(0.025); MinMemGiB = 4.0; Minerset = 3; WarmupTimes = @(60, 60); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=x16r" } # ASIC
+ [PSCustomObject]@{ Algorithms = @("X16rv2"); Fee = @(0.025); MinMemGiB = 4.0; MinerSet = 0; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=x16rv2" }
+ [PSCustomObject]@{ Algorithms = @("X16s"); Fee = @(0.025); MinMemGiB = 2.0; Minerset = 2; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=x16s" }
+ [PSCustomObject]@{ Algorithms = @("X16rt"); Fee = @(0.025); MinMemGiB = 2.0; MinerSet = 0; WarmupTimes = @(60, 15); ExcludePools = @(@(), @()); ExcludeGPUArchitecture = @("GCN1", "RDNA1", "RDNA2", "RDNA3"); Arguments = " --algo=x16rt" } # FPGA
+)
+
+$Algorithms = $Algorithms.Where({ $_.MinerSet -le $Config.MinerSet })
+$Algorithms.Where({ -not $_.Algorithms[1] }) | ForEach-Object { $_.Algorithms += "" }
+$Algorithms = $Algorithms.Where({ $MinerPools[0][$_.Algorithms[0]] -and ($_.Algorithms[1] -eq "" -or $MinerPools[1][$_.Algorithms[1]]) })
+$Algorithms = $Algorithms.Where({ $Config.SSL -ne "Always" -or ($MinerPools[0][$_.Algorithms[0]].SSLSelfSignedCertificate -eq $false -and (-not $_.Algorithms[1] -or $MinerPools[1][$_.Algorithms[1]].SSLSelfSignedCertificate -ne $true)) })
+$Algorithms = $Algorithms.Where({ $MinerPools[0][$_.Algorithms[0]].Name -notin $_.ExcludePools[0] })
+$Algorithms = $Algorithms.Where({ $MinerPools[1][$_.Algorithms[1]].Name -notin $_.ExcludePools[1] })
+
+If ($Algorithms) {
+
+ ($Devices | Select-Object Model -Unique).ForEach(
+ {
+ $Miner_Devices = $Devices | Where-Object Model -EQ $_.Model
+ $MinerAPIPort = $Config.APIPort + ($Miner_Devices.Id | Sort-Object -Top 1) + 1
+
+ $Algorithms.ForEach(
+ {
+ $ExcludePools = $_.ExcludePools
+ ForEach ($Pool0 in ($MinerPools[0][$_.Algorithms[0]].Where({ $_.Name -notin $ExcludePools[0] -and ($Config.SSL -ne "Always" -or $_.SSLSelfSignedCertificate -ne $true) }))) {
+ ForEach ($Pool1 in ($MinerPools[1][$_.Algorithms[1]].Where({ $_.Name -notin $ExcludePools[1] -and ($Config.SSL -ne "Always" -or $_.SSLSelfSignedCertificate -ne $true) }))) {
+
+ $ExcludeGPUArchitecture = $_.ExcludeGPUArchitecture
+ $MinMemGiB = $_.MinMemGiB + $Pool0.DAGSizeGiB + $Pool1.DAGSizeGiB
+ If ($AvailableMiner_Devices = $Miner_Devices.Where({ $_.MemoryGiB -ge $MinMemGiB -and $_.Architecture -notin $ExcludeGPUArchitecture })) {
+
+ $Miner_Name = "$Name-$($AvailableMiner_Devices.Count)x$($AvailableMiner_Devices.Model | Select-Object -Unique)$(If ($_.Algorithms[1]) { "-$($_.Algorithms[0])&$($_.Algorithms[1])" })"
+
+ $Arguments = $_.Arguments
+ $Arguments += " --pool_force_ensub --url=$(If ($Pool0.PoolPorts[1]) { "stratum+ssl" } Else { "stratum+tcp" })://$($Pool0.Host):$($Pool0.PoolPorts | Select-Object -Last 1)"
+ $Arguments += Switch ($Pool0.Protocol) {
+ "ethstratumnh" { " --eth_stratum_mode=nicehash" }
+ }
+ $Arguments += " --user=$($Pool0.User)$(If ($Pool0.WorkerName -and $Pool0.User -notmatch "\.$($Pool0.WorkerName)$") { ".$($Pool0.WorkerName)" })"
+ $Arguments += " --pass=$($Pool0.Pass)"
+
+ If ($_.Algorithms[1] -eq "IronFish") { $Arguments += " --iron" }
+ If ($_.Algorithms[1] -eq "kHeavyHash") { $Arguments += " --kas" }
+ If ($_.Algorithms[1]) {
+ $Arguments += " --url=$(If ($Pool1.PoolPorts[1]) { "stratum+ssl" } Else { "stratum+tcp" })://$($Pool1.Host):$($Pool1.PoolPorts | Select-Object -Last 1)"
+ $Arguments += " --user=$($Pool1.User)$(If ($Pool1.WorkerName -and $Pool1.User -notmatch "\.$($Pool1.WorkerName)$") { ".$($Pool1.WorkerName)" })"
+ $Arguments += " --pass=$($Pool1.Pass)"
+ }
+ If ($_.Algorithms[1] -eq "IronFish") { $Arguments += " --iron_end" }
+ If ($_.Algorithms[1] -eq "kHeavyHash") { $Arguments += " --kas_end" }
+
+ If ($_.Algorithms[0] -match '^Et(c)hash.+' -and $AvailableMiner_Devices.Model -notmatch "^Radeon RX [0-9]{3} ") { $_.Fee = @(0.0075) } # Polaris cards 0.75%
+
+ If ($_.Algorithms -contains "VertHash" -and (Get-Item -Path $Variables.VerthashDatPath -ErrorAction Ignore).length -ne 1283457024) {
+ $PrerequisitePath = $Variables.VerthashDatPath
+ $PrerequisiteURI = "https://github.com/Minerx117/miners/releases/download/Verthash.Dat/VertHash.dat"
+ }
+ Else {
+ $PrerequisitePath = ""
+ $PrerequisiteURI = ""
+ }
+
+ [PSCustomObject]@{
+ API = "Xgminer"
+ Arguments = "$Arguments --watchdog_script --no_gpu_monitor --init_style=3 --hardware=gpu --platform=$($AvailableMiner_Devices.PlatformId | Sort-Object -Unique) --api_listen=127.0.0.1:$MinerAPIPort --devices=$(($AvailableMiner_Devices.$DeviceEnumerator | Sort-Object -Unique).ForEach({ '{0:d}' -f $_ }) -join ',')"
+ DeviceNames = $AvailableMiner_Devices.Name
+ Fee = $_.Fee # Dev fee
+ MinerSet = $_.MinerSet
+ Name = $Miner_Name
+ Path = $Path
+ Port = $MinerAPIPort
+ PrerequisitePath = $PrerequisitePath
+ PrerequisiteURI = $PrerequisiteURI
+ Type = "AMD"
+ URI = $Uri
+ WarmupTimes = $_.WarmupTimes # First value: Seconds until miner must send first sample, if no sample is received miner will be marked as failed; Second value: Seconds from first sample until miner sends stable hashrates that will count for benchmarking
+ Workers = @(($Pool0, $Pool1).Where({ $_ }) | ForEach-Object { @{ Pool = $_ } })
+ }
+ }
+ }
+ }
+ }
+ )
+ }
+ )
+}
\ No newline at end of file
diff --git a/Miners/Trex-v0.26.8.ps1 b/Miners/Trex-v0.26.8.ps1
index 736bf64e8b..e056b39f5c 100644
--- a/Miners/Trex-v0.26.8.ps1
+++ b/Miners/Trex-v0.26.8.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/Wildrig-v0.40.2a.ps1 b/Miners/Wildrig-v0.40.4.ps1
similarity index 99%
rename from Miners/Wildrig-v0.40.2a.ps1
rename to Miners/Wildrig-v0.40.4.ps1
index 865e90cdf8..f8e6fd535b 100644
--- a/Miners/Wildrig-v0.40.2a.ps1
+++ b/Miners/Wildrig-v0.40.4.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,13 +17,13 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
If (-not ($Devices = $Variables.EnabledDevices.Where({ ($_.Type -eq "AMD" -and $_.OpenCL.ClVersion -ge "OpenCL C 1.2") -or $_.Type -eq "INTEL" -or ($_.OpenCL.ComputeCapability -ge "5.0" -and $_.OpenCL.DriverVersion -ge [Version]"452.39.00") }))) { Return }
-$URI = "https://github.com/andru-kun/wildrig-multi/releases/download/0.40.2a/wildrig-multi-windows-0.40.2a.zip"
+$URI = "https://github.com/andru-kun/wildrig-multi/releases/download/0.40.4/wildrig-multi-windows-0.40.4.zip"
$Name = (Get-Item $MyInvocation.MyCommand.Path).BaseName
$Path = "$PWD\Bin\$Name\wildrig.exe"
$DeviceEnumerator = "Type_Slot"
@@ -51,7 +51,7 @@ $Algorithms = @(
[PSCustomObject]@{ Algorithm = "Hex"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 2; Minerset = 2; WarmupTimes = @(30, 15); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo hex" }
[PSCustomObject]@{ Algorithm = "HMQ1725"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 2; MinerSet = 0; WarmupTimes = @(60, 15); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo hmq1725" } # CryptoDredge-v0.27.0 is fastest
[PSCustomObject]@{ Algorithm = "JeongHash"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 2; Minerset = 2; WarmupTimes = @(30, 15); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo glt-jeonghash" }
- [PSCustomObject]@{ Algorithm = "KawPow"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 0.62; Minerset = 1; WarmupTimes = @(45, 0); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo kawpow" } # TeamRedMiner-v0.10.14 is fastest on Navi
+ [PSCustomObject]@{ Algorithm = "KawPow"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 0.62; Minerset = 1; WarmupTimes = @(45, 0); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo kawpow" } # TeamRedMiner-v0.10.15 is fastest on Navi
# [PSCustomObject]@{ Algorithm = "Lyra2RE2"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 2; Minerset = 2; WarmupTimes = @(30, 15); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo lyra2v2" } # ASIC
# [PSCustomObject]@{ Algorithm = "Lyra2RE3"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 2; Minerset = 2; WarmupTimes = @(30, 15); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo lyra2v3" } # ASIC
[PSCustomObject]@{ Algorithm = "Lyra2TDC"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 2; Minerset = 2; WarmupTimes = @(30, 15); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo lyra2tdc" }
@@ -99,7 +99,7 @@ $Algorithms = @(
[PSCustomObject]@{ Algorithm = "X16s"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 2; Minerset = 2; WarmupTimes = @(30, 15); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo x16s" } # FPGA
[PSCustomObject]@{ Algorithm = "X17"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 2; MinerSet = 0; WarmupTimes = @(30, 15); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo x17" }
[PSCustomObject]@{ Algorithm = "X18"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 2; MinerSet = 0; WarmupTimes = @(30, 15); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo x18" }
- [PSCustomObject]@{ Algorithm = "X21s"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 2; MinerSet = 0; WarmupTimes = @(120, 45); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo x21s" } # TeamRedMiner-v0.10.14 is fastest
+ [PSCustomObject]@{ Algorithm = "X21s"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 2; MinerSet = 0; WarmupTimes = @(120, 45); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo x21s" } # TeamRedMiner-v0.10.15 is fastest
[PSCustomObject]@{ Algorithm = "X22"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 2; Minerset = 2; WarmupTimes = @(60, 15); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo x22" }
[PSCustomObject]@{ Algorithm = "X22i"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 2; Minerset = 2; WarmupTimes = @(60, 15); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo x22i" }
[PSCustomObject]@{ Algorithm = "X25x"; Type = "AMD"; Fee = @(0.0075); MinMemGiB = 2; Minerset = 2; WarmupTimes = @(60, 15); ExcludeGPUArchitecture = @(); ExcludeGPUModel = ""; ExcludePools = @(); Arguments = " --algo x25x" }
diff --git a/Miners/XmRig-v6.20.0.ps1 b/Miners/XmRig-v6.20.0.ps1
index 6c5078b965..4b4dce7b38 100644
--- a/Miners/XmRig-v6.20.0.ps1
+++ b/Miners/XmRig-v6.20.0.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
@@ -47,7 +47,7 @@ $DeviceEnumerator = "PlatformId_Index"
$Algorithms = @(
[PSCustomObject]@{ Algorithm = "Cryptonight"; Type = "AMD"; MinMemGiB = 2; Minerset = 2; WarmupTimes = @(45, 0); ExcludePools = @(); Arguments = " --algo cn/0" }
- [PSCustomObject]@{ Algorithm = "CryptonightCcx"; Type = "AMD"; MinMemGiB = 2; Minerset = 2; WarmupTimes = @(45, 0); ExcludePools = @(); Arguments = " --algo cn/ccx" } # SRBMinerMulti-v2.4.3 is fastest, but has 0.85% miner fee
+ [PSCustomObject]@{ Algorithm = "CryptonightCcx"; Type = "AMD"; MinMemGiB = 2; Minerset = 2; WarmupTimes = @(45, 0); ExcludePools = @(); Arguments = " --algo cn/ccx" } # SRBMinerMulti-v2.4.4 is fastest, but has 0.85% miner fee
[PSCustomObject]@{ Algorithm = "CryptonightDouble"; Type = "AMD"; MinMemGiB = 2; Minerset = 2; WarmupTimes = @(45, 0); ExcludePools = @(); Arguments = " --algo cn/double" }
[PSCustomObject]@{ Algorithm = "CryptonightFast"; Type = "AMD"; MinMemGiB = 2; Minerset = 2; WarmupTimes = @(45, 0); ExcludePools = @(); Arguments = " --algo cn/fast" }
[PSCustomObject]@{ Algorithm = "CryptonightLite"; Type = "AMD"; MinMemGiB = 1; Minerset = 2; WarmupTimes = @(45, 0); ExcludePools = @(); Arguments = " --algo cn-lite/0" }
@@ -103,7 +103,7 @@ $Algorithms = @(
[PSCustomObject]@{ Algorithm = "RandomxArq"; Type = "CPU"; Minerset = 2; WarmupTimes = @(45, 0); ExcludePools = @(); Arguments = " --algo rx/arq" } # FPGA
[PSCustomObject]@{ Algorithm = "RandomxKeva"; Type = "CPU"; Minerset = 2; WarmupTimes = @(45, 0); ExcludePools = @(); Arguments = " --algo rx/keva" }
[PSCustomObject]@{ Algorithm = "RandomxLoki"; Type = "CPU"; Minerset = 2; WarmupTimes = @(45, 0); ExcludePools = @(); Arguments = " --algo rx/loki" }
- [PSCustomObject]@{ Algorithm = "RandomxSfx"; Type = "CPU"; Minerset = 2; WarmupTimes = @(45, 0); ExcludePools = @(); Arguments = " --algo rx/sfx" } # SRBMinerMulti-v2.4.3 is fastest, but has 0.85% miner fee
+ [PSCustomObject]@{ Algorithm = "RandomxSfx"; Type = "CPU"; Minerset = 2; WarmupTimes = @(45, 0); ExcludePools = @(); Arguments = " --algo rx/sfx" } # SRBMinerMulti-v2.4.4 is fastest, but has 0.85% miner fee
[PSCustomObject]@{ Algorithm = "RandomxWow"; Type = "CPU"; Minerset = 2; WarmupTimes = @(45, 0); ExcludePools = @(); Arguments = " --algo rx/wow" }
[PSCustomObject]@{ Algorithm = "Uplexa"; Type = "CPU"; Minerset = 0; WarmupTimes = @(45, 0); ExcludePools = @(); Arguments = " --algo rx/upx2" }
diff --git a/Miners/XmrStak-v2.10.8.ps1 b/Miners/XmrStak-v2.10.8.ps1
index 998eb7f595..a8e044a410 100644
--- a/Miners/XmrStak-v2.10.8.ps1
+++ b/Miners/XmrStak-v2.10.8.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
@@ -30,12 +30,12 @@ $DeviceEnumerator = "Type_Vendor_Index"
$Algorithms = @(
[PSCustomObject]@{ Algorithm = "CryptonightBittube2"; MinMemGiB = 4; Type = "AMD"; Minerset = 2; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --noCPU --noNVIDIA --amd" }
- [PSCustomObject]@{ Algorithm = "CryptonightGpu"; MinMemGiB = 2; Type = "AMD"; Minerset = 1; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --noCPU --noNVIDIA --amd" } # SRBMinerMulti-v2.4.3 is fastest, but has 0.85% miner fee
+ [PSCustomObject]@{ Algorithm = "CryptonightGpu"; MinMemGiB = 2; Type = "AMD"; Minerset = 1; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --noCPU --noNVIDIA --amd" } # SRBMinerMulti-v2.4.4 is fastest, but has 0.85% miner fee
[PSCustomObject]@{ Algorithm = "CryptonightLite"; MinMemGiB = 1; Type = "AMD"; Minerset = 2; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --noCPU --noNVIDIA --amd" }
[PSCustomObject]@{ Algorithm = "CryptonightLiteV1"; MinMemGiB = 1; Type = "AMD"; Minerset = 2; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --noCPU --noNVIDIA --amd" }
[PSCustomObject]@{ Algorithm = "CryptonightLiteItbc"; MinMemGiB = 1; Type = "AMD"; Minerset = 2; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --noCPU --noNVIDIA --amd" }
[PSCustomObject]@{ Algorithm = "CryptonightHeavy"; MinMemGiB = 1; Type = "AMD"; Minerset = 2; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --noCPU --noNVIDIA --amd" } # XmRig-v6.20.0 is fastest
-# [PSCustomObject]@{ Algorithm = "CryptonightHeavyXhv"; MinMemGiB = 4; Type = "AMD"; Minerset = 1; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --noCPU --noNVIDIA --amd" } # PARSE error: Invalid job length; SRBMinerMulti-v2.4.3 is fastest, but has 0.85% miner fee
+# [PSCustomObject]@{ Algorithm = "CryptonightHeavyXhv"; MinMemGiB = 4; Type = "AMD"; Minerset = 1; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --noCPU --noNVIDIA --amd" } # PARSE error: Invalid job length; SRBMinerMulti-v2.4.4 is fastest, but has 0.85% miner fee
[PSCustomObject]@{ Algorithm = "CryptonightMsr"; MinMemGiB = 2; Type = "AMD"; Minerset = 2; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --noCPU --noNVIDIA --amd" }
# [PSCustomObject]@{ Algorithm = "CryptonightR"; MinMemGiB = 2; Type = "AMD"; Minerset = 3; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --noCPU --noNVIDIA --amd" } # ASIC
[PSCustomObject]@{ Algorithm = "CryptonightDouble"; MinMemGiB = 2; Type = "AMD"; Minerset = 2; WarmupTimes = @(90, 15); ExcludePools = @(); Arguments = " --noCPU --noNVIDIA --amd" } # XmRig-v6.20.0 is fastest
diff --git a/Miners/ZealotEnemy-v2.6.2.ps1 b/Miners/ZealotEnemy-v2.6.2.ps1
index 51434da058..1c56ab1106 100644
--- a/Miners/ZealotEnemy-v2.6.2.ps1
+++ b/Miners/ZealotEnemy-v2.6.2.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/ZealotEnemy-v2.6.3.ps1 b/Miners/ZealotEnemy-v2.6.3.ps1
index e1831d78de..94d0e5ca4f 100644
--- a/Miners/ZealotEnemy-v2.6.3.ps1
+++ b/Miners/ZealotEnemy-v2.6.3.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Miners/lolMiner-v1.81.ps1 b/Miners/lolMiner-v1.81.ps1
index 5794fa6f57..89ddf60a56 100644
--- a/Miners/lolMiner-v1.81.ps1
+++ b/Miners/lolMiner-v1.81.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/NemosMiner.ps1 b/NemosMiner.ps1
index 9e255043a7..1d0f5987bc 100644
--- a/NemosMiner.ps1
+++ b/NemosMiner.ps1
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: NemosMiner.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
@@ -295,7 +295,7 @@ $Variables.Branding = [PSCustomObject]@{
BrandName = "NemosMiner"
BrandWebSite = "https://nemosminer.com"
ProductLabel = "NemosMiner"
- Version = [System.Version]"5.0.2.4"
+ Version = [System.Version]"5.0.2.5"
}
$WscriptShell = New-Object -ComObject Wscript.Shell
@@ -493,9 +493,9 @@ If ((Get-Content -Path ".\Cache\DriverVersion.json" | ConvertFrom-Json | Convert
$Variables.VerthashDatPath = ".\Cache\VertHash.dat"
If (Test-Path -LiteralPath $Variables.VerthashDatPath -PathType Leaf) {
Write-Message -Level Verbose "Verifying integrity of VertHash data file '$($Variables.VerthashDatPath)'..."
- $VertHashDatCheckJob = Start-Job -ScriptBlock { (Get-FileHash -Path ".\Cache\VertHash.dat").Hash -eq "A55531E843CD56B010114AAF6325B0D529ECF88F8AD47639B6EDEDAFD721AA48" }
- $VertHashDatCheckJob = Start-ThreadJob -ScriptBlock { (Get-FileHash -Path ".\Cache\VertHash.dat").Hash -eq "A55531E843CD56B010114AAF6325B0D529ECF88F8AD47639B6EDEDAFD721AA48" } -StreamingHost $null -ThrottleLimit (2 * $Variables.Devices.Count + 1)
}
+# Alwas run thread job to set throttle limit
+$VertHashDatCheckJob = Start-ThreadJob -ScriptBlock { (Get-FileHash -Path ".\Cache\VertHash.dat").Hash -eq "A55531E843CD56B010114AAF6325B0D529ECF88F8AD47639B6EDEDAFD721AA48" } -StreamingHost $null -ThrottleLimit (2 * $Variables.Devices.Count + 2)
# Start API server
If ($Config.WebGUI) { Start-APIServer }
@@ -503,15 +503,16 @@ If ($Config.WebGUI) { Start-APIServer }
# Rename existing switching log
If (Test-Path -LiteralPath ".\Logs\SwitchingLog.csv" -PathType Leaf) { Get-ChildItem -Path ".\Logs\SwitchingLog.csv" -File | Rename-Item -NewName { "SwitchingLog$($_.LastWriteTime.toString('_yyyy-MM-dd_HH-mm-ss')).csv" } }
-If (Test-Path -LiteralPath $Variables.VerthashDatPath -PathType Leaf) {
- If ($VertHashDatCheckJob | Wait-Job -Timeout 60 | Receive-Job -Wait -AutoRemoveJob) {
- Write-Message -Level Verbose "VertHash data file integrity check: OK."
- }
- Else {
+If ($VertHashDatCheckJob | Wait-Job -Timeout 60 | Receive-Job -Wait -AutoRemoveJob) {
+ Write-Message -Level Verbose "VertHash data file integrity check: OK."
+}
+Else {
+ If (Test-Path -LiteralPath $Variables.VerthashDatPath -PathType Leaf -ErrorAction Ignore) {
Remove-Item -Path $Variables.VerthashDatPath -Force
Write-Message -Level Warn "VertHash data file '$($Variables.VerthashDatPath)' is corrupt -> file deleted. It will be re-downloaded if needed."
}
}
+Remove-Variable VertHashDatCheckJob
If ($Variables.FreshConfig) {
$Variables.Summary = "Change your settings and apply the configuration.
Then Click the 'Start mining' button."
@@ -664,7 +665,7 @@ Function MainLoop {
}
"f" {
$Variables.ShowPoolFee = -not $Variables.ShowPoolFee
- Write-Host "'Pool "-NoNewline; Write-Host "f" -ForegroundColor Cyan -NoNewline; Write-Host "ees' column visibility set to " -NoNewline; If ($Variables.ShowPoolFee) { Write-Host "on" -ForegroundColor Green -NoNewline } Else { Write-Host "off" -ForegroundColor Red -NoNewline }; Write-Host "."
+ Write-Host "'Pool "-NoNewline; Write-Host "F" -ForegroundColor Cyan -NoNewline; Write-Host "ees' column visibility set to " -NoNewline; If ($Variables.ShowPoolFee) { Write-Host "on" -ForegroundColor Green -NoNewline } Else { Write-Host "off" -ForegroundColor Red -NoNewline }; Write-Host "."
Start-Sleep -Seconds 2
$Variables.RefreshNeeded = $true
Break
@@ -851,7 +852,7 @@ Function MainLoop {
If ($Variables.ShowEarning) { @{ Label = "Earning"; Expression = { If ([Double]::IsNaN($_.Earning)) { "n/a" } Else { "{0:n$($Config.DecimalsMax)}" -f ($_.Earning * $Variables.Rates.BTC.($Config.MainCurrency)) } }; Align = "right" } }
If ($Config.IgnorePowerCost -and $Variables.ShowProfitBias -and $Config.CalculatePowerCost -and $Variables.MiningPowerCost) { @{ Label = "ProfitBias"; Expression = { If ([Double]::IsNaN($_.Profit_Bias)) { "n/a" } Else { "{0:n$($Config.DecimalsMax)}" -f ($_.Profit_Bias * $Variables.Rates.BTC.($Config.MainCurrency)) } }; Align = "right" } }
If ($Config.IgnorePowerCost -and $Variables.ShowProfit -and $Config.CalculatePowerCost -and $Variables.MiningPowerCost) { @{ Label = "Profit"; Expression = { If ([Double]::IsNaN($_.Profit)) { "n/a" } Else { "{0:n$($Config.DecimalsMax)}" -f ($_.Profit * $Variables.Rates.BTC.($Config.MainCurrency)) } }; Align = "right" } }
- If ($Variables.ShowPowerConsumption -and $Config.CalculatePowerCost) { @{ Label = "PowerConsumption"; Expression = { If (-not $_.MeasurePowerConsumption) { If ([Double]::IsNaN($_.PowerConsumption)) { "n/a" } Else { "$($_.PowerConsumption.ToString("N2")) W"} } Else { If ($_.Status -eq "Running") { "Measuring..." } Else { "Unmeasured" } } }; Align = "right" } }
+ If ($Variables.ShowPowerConsumption -and $Config.CalculatePowerCost) { @{ Label = "Power Consumption"; Expression = { If (-not $_.MeasurePowerConsumption) { If ([Double]::IsNaN($_.PowerConsumption)) { "n/a" } Else { "$($_.PowerConsumption.ToString("N2")) W"} } Else { If ($_.Status -eq "Running") { "Measuring..." } Else { "Unmeasured" } } }; Align = "right" } }
If ($Variables.ShowPowerCost -and $Config.CalculatePowerCost -and $Variables.MiningPowerCost) { @{ Label = "PowerCost"; Expression = { If ([Double]::IsNaN($_.PowerConsumption)) { "n/a" } Else { "-{0:n$($Config.DecimalsMax)}" -f ($_.PowerCost * $Variables.Rates.($Config.PayoutCurrency).($Config.MainCurrency)) } }; Align = "right" } }
If ($Variables.ShowAccuracy) { @{ Label = "Accuracy"; Expression = { $_.Workers.Pool.Accuracy.ForEach({ "{0:P0}" -f [Double]$_ }) }; Align = "right" } }
@{ Label = "Algorithm"; Expression = { $_.Workers.Pool.Algorithm -join ' & ' } }
@@ -859,7 +860,7 @@ Function MainLoop {
If ($Variables.ShowPool) { @{ Label = "Pool"; Expression = { $_.Workers.Pool.Name -join ' & ' } } }
If ($Variables.ShowUser) { @{ Label = "User"; Expression = { $_.Workers.Pool.User -join ' & ' } } }
If ($Variables.ShowPoolFee -and ($Variables.Miners.Workers.Pool.Fee)) { @{ Label = "Fee"; Expression = { $_.Workers.Pool.Fee.ForEach({ "{0:P2}" -f [Double]$_ }) }; Align = "right" } }
- @{ Label = "Hashrate"; Expression = { If (-not $_.Benchmark) { $_.Workers.ForEach({ "$($_.Hashrate | ConvertTo-Hash)/s" }) } Else { If ($_.Status -eq "Running") { "Benchmarking..." } Else { "Benchmark pending" } } }; Align = "right" }
+ @{ Label = "Hashrate"; Expression = { If (-not $_.Benchmark) { $_.Workers.ForEach({ $_.Hashrate | ConvertTo-Hash }) } Else { If ($_.Status -eq "Running") { "Benchmarking..." } Else { "Benchmark pending" } } }; Align = "right" }
If ($Variables.ShowCurrency) { @{ Label = "Currency"; Expression = { If ($_.Workers.Pool.Currency) { $_.Workers.Pool.Currency } } } }
If ($Variables.ShowCoinName) { @{ Label = "CoinName"; Expression = { If ($_.Workers.Pool.CoinName) { $_.Workers.Pool.CoinName } } } }
)
@@ -896,7 +897,7 @@ Function MainLoop {
If ($Variables.MinersBestPerDevice_Combo) {
Write-Host "`nRunning $(If ($Variables.MinersBestPerDevice_Combo.Count -eq 1) { "miner:" } Else { "miners: $($Variables.MinersBestPerDevice_Combo.Count)" })"
[System.Collections.ArrayList]$Miner_Table = @(
- @{ Label = "Hashrate(s)"; Expression = { (($_.Hashrates_Live.ForEach({ If ([Double]::IsNaN($_)) { "n/a" } Else { "$($_ | ConvertTo-Hash)/s" } })) -join ' & ') -replace '\s+', ' ' }; Align = "right" }
+ @{ Label = "Hashrate("; Expression = { $_.Hashrates_Live.ForEach({ If ([Double]::IsNaN($_)) { "n/a" } Else { $_ | ConvertTo-Hash } }) -join ' & ' }; Align = "right" }
If ($Config.CalculatePowerCost -and $Variables.ShowPowerConsumption) { @{ Label = "Power Consumption"; Expression = { If ([Double]::IsNaN($_.PowerConsumption_Live)) { "n/a" } Else { "$($_.PowerConsumption_Live.ToString("N2")) W" } }; Align = "right" } }
@{ Label = "Active (this run)"; Expression = { "{0:dd}d {0:hh}h {0:mm}m {0:ss}s" -f (([DateTime]::Now).ToUniversalTime() - $_.BeginTime) } }
@{ Label = "Active (total)"; Expression = { "{0:dd}d {0:hh}h {0:mm}m {0:ss}s" -f ($_.TotalMiningDuration) } }
@@ -910,12 +911,12 @@ Function MainLoop {
}
If ($Variables.UIStyle -eq "full" -or $Variables.MinersNeedingBenchmark -or $Variables.MinersNeedingPowerConsumptionMeasurement) {
- If ($ProcessesIdle = @($Variables.Miners.Where({ $_.Activated -and $_.Status -eq "Idle" -and $_.GetActiveLast().ToLocalTime().AddHours(24) -gt ([DateTime]::Now) }))) {
+ If ($ProcessesIdle = @($Variables.Miners.Where({ $_.Activated -and $_.Status -eq "Idle" -and $_.GetActiveLast().ToLocalTime().AddHours(24) -gt [DateTime]::Now }))) {
Write-Host "$($ProcessesIdle.Count) previously executed miner$(If ($ProcessesIdle.Count -ne 1) { "s" }) in the past 24 hrs:"
[System.Collections.ArrayList]$Miner_Table = @(
- @{ Label = "Hashrate(s)"; Expression = { (($_.Workers.Hashrate.ForEach({ "$($_ | ConvertTo-Hash)/s" })) -join ' & ') -replace '\s+', ' ' }; Align = "right" }
+ @{ Label = "Hashrate"; Expression = { $_.Workers.Hashrate.ForEach({ $_ | ConvertTo-Hash }) -join ' & ' }; Align = "right" }
If ($Config.CalculatePowerCost -and $Variables.ShowPowerConsumption) { @{ Label = "Power Consumption"; Expression = { If ([Double]::IsNaN($_.PowerConsumption)) { "n/a" } Else { "$($_.PowerConsumption.ToString("N2")) W" } }; Align = "right" } }
- @{ Label = "Time since last run"; Expression = { "{0:dd}d {0:hh}h {0:mm}m {0:ss}s" -f $(([DateTime]::Now) - $_.GetActiveLast().ToLocalTime()) } }
+ @{ Label = "Time since last run"; Expression = { "{0:dd}d {0:hh}h {0:mm}m {0:ss}s" -f $([DateTime]::Now - $_.GetActiveLast().ToLocalTime()) } }
@{ Label = "Active (total)"; Expression = { "{0:dd}d {0:hh}h {0:mm}m {0:ss}s" -f $_.TotalMiningDuration } }
@{ Label = "Cnt"; Expression = { Switch ($_.Activated) { 0 { "Never" } 1 { "Once" } Default { "$_" } } } }
@{ Label = "Device(s)"; Expression = { $_.DeviceNames -join ',' } }
@@ -927,12 +928,12 @@ Function MainLoop {
}
Remove-Variable ProcessesIdle
- If ($ProcessesFailed = @($Variables.Miners.Where({ $_.Activated -and $_.Status -eq "Failed" -and $_.GetActiveLast().ToLocalTime().AddHours(24) -gt ([DateTime]::Now)}))) {
+ If ($ProcessesFailed = @($Variables.Miners.Where({ $_.Activated -and $_.Status -eq "Failed" -and $_.GetActiveLast().ToLocalTime().AddHours(24) -gt [DateTime]::Now }))) {
Write-Host -ForegroundColor Red "$($ProcessesFailed.Count) failed $(If ($ProcessesFailed.Count -eq 1) { "miner" } Else { "miners" }) in the past 24 hrs:"
[System.Collections.ArrayList]$Miner_Table = @(
- @{ Label = "Hashrate(s)"; Expression = { (($_.Workers.Hashrate.ForEach({ "$($_ | ConvertTo-Hash)/s" })) -join ' & ') -replace '\s+', ' ' }; Align = "right" }
+ @{ Label = "Hashrate"; Expression = { $_.Workers.Hashrate.ForEach({ $_ | ConvertTo-Hash }) -join ' & ' }; Align = "right" }
If ($Config.CalculatePowerCost -and $Variables.ShowPowerConsumption) { @{ Label = "Power Consumption"; Expression = { If ([Double]::IsNaN($_.PowerConsumption)) { "n/a" } Else { "$($_.PowerConsumption.ToString("N2")) W" } }; Align = "right" } }
- @{ Label = "Time since last fail"; Expression = { "{0:dd}d {0:hh}h {0:mm}m {0:ss}s" -f $(([DateTime]::Now) - $_.GetActiveLast().ToLocalTime()) } }
+ @{ Label = "Time since last fail"; Expression = { "{0:dd}d {0:hh}h {0:mm}m {0:ss}s" -f $([DateTime]::Now - $_.GetActiveLast().ToLocalTime()) } }
@{ Label = "Active (total)"; Expression = { "{0:dd}d {0:hh}h {0:mm}m {0:ss}s" -f $_.TotalMiningDuration } }
@{ Label = "Cnt"; Expression = { Switch ($_.Activated) { 0 { "Never" } 1 { "Once" } Default { "$_" } } } }
@{ Label = "Device(s)"; Expression = { $_.DeviceNames -join ',' } }
@@ -940,6 +941,7 @@ Function MainLoop {
@{ Label = "Command"; Expression = { $_.CommandLine } }
)
$ProcessesFailed | Sort-Object { If ($_.Process) { $_.Process.StartTime } Else { [DateTime]0 } } | Format-Table $Miner_Table -Wrap | Out-Host
+ Remove-Variable Miner_Table
}
Remove-Variable ProcessesFailed
diff --git a/Pools/HashCryptos.ps1 b/Pools/HashCryptos.ps1
index 758180d66e..67e987e6d7 100644
--- a/Pools/HashCryptos.ps1
+++ b/Pools/HashCryptos.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Pools\HashCryptos.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Pools/HiveON.ps1 b/Pools/HiveON.ps1
index faf2be88fe..34a60b0bf0 100644
--- a/Pools/HiveON.ps1
+++ b/Pools/HiveON.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Pools\Hiveon.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Pools/MiningDutch.ps1 b/Pools/MiningDutch.ps1
index cad1dffa81..ab4607ad5c 100644
--- a/Pools/MiningDutch.ps1
+++ b/Pools/MiningDutch.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Pools\MiningDutch.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Pools/MiningPoolHub.ps1 b/Pools/MiningPoolHub.ps1
index b106807c5f..0a927120da 100644
--- a/Pools/MiningPoolHub.ps1
+++ b/Pools/MiningPoolHub.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Pools\MiningPoolHub.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Pools/NiceHash.ps1 b/Pools/NiceHash.ps1
index d1959c1a4f..97118db8b2 100644
--- a/Pools/NiceHash.ps1
+++ b/Pools/NiceHash.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Pools\NiceHash.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Pools/ProHashing.ps1 b/Pools/ProHashing.ps1
index 4fc86a3694..1313d37c03 100644
--- a/Pools/ProHashing.ps1
+++ b/Pools/ProHashing.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Pools\ProHashing.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Pools/ZPool.ps1 b/Pools/ZPool.ps1
index 939abbdf35..8a63e97bae 100644
--- a/Pools/ZPool.ps1
+++ b/Pools/ZPool.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Pools\ZPool.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Pools/ZergPool.ps1 b/Pools/ZergPool.ps1
index bdc0df3ccb..5d8c3ccc98 100644
--- a/Pools/ZergPool.ps1
+++ b/Pools/ZergPool.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: \Pools\ZergPool.ps1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 2023/12/20
#>
diff --git a/Version.txt b/Version.txt
index 82720acb89..bffc466071 100644
--- a/Version.txt
+++ b/Version.txt
@@ -1,6 +1,6 @@
{
"Product": "NemosMiner",
- "Version": "5.0.2.4",
+ "Version": "5.0.2.5",
"AutoUpdate": true,
"RequireRestart": true,
"Uri": "https://github.com/Minerx117/NemosMiner/archive/refs/heads/master.zip",
diff --git a/Web/APIdocs.html b/Web/APIdocs.html
index 130fef805b..80b8a3930b 100644
--- a/Web/APIdocs.html
+++ b/Web/APIdocs.html
@@ -7,7 +7,7 @@
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -16,7 +16,7 @@
Product: NemosMiner
File: API.psm1
-version: 5.0.2.4
+version: 5.0.2.5
version date: 2023/12/20-->
@@ -274,7 +274,7 @@ Functions
/functions/config/set
Write full config
Parameters: full config (JSON)
-
e.g.: /functions/config/set?{"Algorithm"%3A%5B%5D%2C"APILogfile"%3A""%2C"APIPort"%3A3999%2C"AutoReboot"%3Atrue%2C"AutoUpdate"%3Atrue%2C"AutoUpdateCheckInterval"%3A1%2C"BackupOnAutoUpdate"%3Atrue%2C"BadShareRatioThreshold"%3A0.05%2C"BalancesKeepAlive"%3Atrue%2C"BalancesShowInAllCurrencies"%3Atrue%2C"BalancesTrackerExcludePool"%3A%5B%5D%2C"BalancesTrackerLog"%3Afalse%2C"BalancesTrackerPollInterval"%3A10%2C"CalculatePowerCost"%3Atrue%2C"ConfigFileVersion"%3A"5.0.2.4"%2C"CPUMinerProcessPriority"%3A-2%2C"Currency"%3A"CHF"%2C"DecimalsMax"%3A6%2C"Delay"%3A0%2C"DisableDualAlgoMining"%3Afalse%2C"DisableMinerFee"%3Afalse%2C"DisableMinersWithFee"%3Afalse%2C"DisableSingleAlgoMining"%3Afalse%2C"Donate"%3A13%2C"EarningsAdjustmentFactor"%3A1%2C"ExcludeDeviceName"%3A%5B%5D%2C"ExcludeMinerName"%3A%5B%5D%2C"ExtraCurrencies"%3A%5B"ETC"%2C"ETH"%2C"mBTC"%5D%2C"GPUMinerProcessPriority"%3A-1%2C"IdleDetection"%3Afalse%2C"IdleSec"%3A120%2C"IgnoreMinerFee"%3Afalse%2C"IgnorePoolFee"%3Afalse%2C"IgnorePowerCost"%3Afalse%2C"Interval"%3A90%2C"LogBalanceAPIResponse"%3Afalse%2C"LogToFile"%3A%5B"Info"%2C"Warn"%2C"Error"%2C"Verbose"%5D%2C"LogToScreen"%3A%5B"Info"%2C"Warn"%2C"Error"%2C"Verbose"%5D%2C"MinAccuracy"%3A0.5%2C"MinDataSample"%3A20%2C"MinDataSampleAlgoMultiplier"%3A{"X16r"%3A3}%2C"MinerInstancePerDeviceModel"%3Afalse%2C"MinerSet"%3A1%2C"MinerSwitchingThreshold"%3A10%2C"MinerWindowStyle"%3A"minimized"%2C"MinerWindowStyleNormalWhenBenchmarking"%3Atrue%2C"MiningPoolHubAPIKey"%3A""%2C"MiningPoolHubUserName"%3A"Nemo"%2C"MinInterval"%3A1%2C"MinWorker"%3A25%2C"MonitoringServer"%3A"https%3A%2F%2Fnemosminer.com"%2C"MonitoringUser"%3A""%2C"NiceHashAPIKey"%3A""%2C"NiceHashAPISecret"%3A""%2C"NiceHashOrganizationId"%3A""%2C"NiceHashWallet"%3A""%2C"NiceHashWalletIsInternal"%3Afalse%2C"OpenFirewallPorts"%3Atrue%2C"PayoutCurrency"%3A"BTC"%2C"PoolAPIAllowedFailureCount"%3A3%2C"PoolAPIRetryInterval"%3A3%2C"PoolAPITimeout"%3A20%2C"PoolName"%3A%5B"MiningPoolHubCoins"%2C"NiceHash"%5D%2C"PoolsConfigFile"%3A".%5C%5CConfig%5C%5CPoolsConfig.json"%2C"PoolTimeout"%3A20%2C"PowerPricekWh"%3A{"00%3A00"%3A0.26%2C"12%3A00"%3A0.3}%2C"PowerUsage"%3A{}%2C"PowerUsageIdleSystemW"%3A60%2C"ProfitabilityThreshold"%3A-99%2C"ProHashingAPIKey"%3A""%2C"ProHashingMiningMode"%3A"PPS"%2C"ProHashingUserName"%3A"UselessGuru"%2C"Proxy"%3A""%2C"Region"%3A"Europe"%2C"ReportToServer"%3Afalse%2C"ShowAccuracy"%3Atrue%2C"ShowAllMiners"%3Afalse%2C"ShowChangeLog"%3Afalse%2C"ShowCoinName"%3Atrue%2C"ShowCurrency"%3Atrue%2C"ShowEarning"%3Atrue%2C"ShowEarningBias"%3Atrue%2C"ShowMinerFee"%3Atrue%2C"ShowPoolBalances"%3Afalse%2C"ShowPoolFee"%3Atrue%2C"ShowPowerCost"%3Atrue%2C"ShowPowerUsage"%3Atrue%2C"ShowProfit"%3Atrue%2C"ShowProfitBias"%3Atrue%2C"ShowUser"%3Afalse%2C"ShowWorkerStatus"%3Atrue%2C"SnakeTailConfig"%3A".%5C%5CUtils%5C%5CNemosMiner_LogReader.xml"%2C"SnakeTailExe"%3A".%5C%5CUtils%5C%5CSnakeTail.exe"%2C"SSL"%3A"prefer"%2C"StartGUIMinimized"%3Atrue%2C"StartupMode"%3A"Idle"%2C"SubtractBadShares"%3Atrue%2C"SyncWindow"%3A3%2C"Transcript"%3Afalse%2C"UIStyle"%3A"light"%2C"UnrealMinerEarningFactor"%3A5%2C"UnrealPoolPriceFactor"%3A1.5%2C"UseAnycast"%3Atrue%2C"UsemBTC"%3Atrue%2C"UseMinerTweaks"%3Afalse%2C"Wallets"%3A{"BTC"%3A"1GPSq8txFnyrYdXL8t6S94mYdF8cGqVQJF"%2C"ETC"%3A""%2C"ETH"%3A""}%2C"Watchdog"%3Atrue%2C"WatchdogCount"%3A3%2C"WebGUI"%3Atrue%2C"UseColorForMinerStatus"%3Atrue%2C"WorkerName"%3A"BLACKBOX"}
+
e.g.: /functions/config/set?{"Algorithm"%3A%5B%5D%2C"APILogfile"%3A""%2C"APIPort"%3A3999%2C"AutoReboot"%3Atrue%2C"AutoUpdate"%3Atrue%2C"AutoUpdateCheckInterval"%3A1%2C"BackupOnAutoUpdate"%3Atrue%2C"BadShareRatioThreshold"%3A0.05%2C"BalancesKeepAlive"%3Atrue%2C"BalancesShowInAllCurrencies"%3Atrue%2C"BalancesTrackerExcludePool"%3A%5B%5D%2C"BalancesTrackerLog"%3Afalse%2C"BalancesTrackerPollInterval"%3A10%2C"CalculatePowerCost"%3Atrue%2C"ConfigFileVersion"%3A"5.0.2.5"%2C"CPUMinerProcessPriority"%3A-2%2C"Currency"%3A"CHF"%2C"DecimalsMax"%3A6%2C"Delay"%3A0%2C"DisableDualAlgoMining"%3Afalse%2C"DisableMinerFee"%3Afalse%2C"DisableMinersWithFee"%3Afalse%2C"DisableSingleAlgoMining"%3Afalse%2C"Donate"%3A13%2C"EarningsAdjustmentFactor"%3A1%2C"ExcludeDeviceName"%3A%5B%5D%2C"ExcludeMinerName"%3A%5B%5D%2C"ExtraCurrencies"%3A%5B"ETC"%2C"ETH"%2C"mBTC"%5D%2C"GPUMinerProcessPriority"%3A-1%2C"IdleDetection"%3Afalse%2C"IdleSec"%3A120%2C"IgnoreMinerFee"%3Afalse%2C"IgnorePoolFee"%3Afalse%2C"IgnorePowerCost"%3Afalse%2C"Interval"%3A90%2C"LogBalanceAPIResponse"%3Afalse%2C"LogToFile"%3A%5B"Info"%2C"Warn"%2C"Error"%2C"Verbose"%5D%2C"LogToScreen"%3A%5B"Info"%2C"Warn"%2C"Error"%2C"Verbose"%5D%2C"MinAccuracy"%3A0.5%2C"MinDataSample"%3A20%2C"MinDataSampleAlgoMultiplier"%3A{"X16r"%3A3}%2C"MinerInstancePerDeviceModel"%3Afalse%2C"MinerSet"%3A1%2C"MinerSwitchingThreshold"%3A10%2C"MinerWindowStyle"%3A"minimized"%2C"MinerWindowStyleNormalWhenBenchmarking"%3Atrue%2C"MiningPoolHubAPIKey"%3A""%2C"MiningPoolHubUserName"%3A"Nemo"%2C"MinInterval"%3A1%2C"MinWorker"%3A25%2C"MonitoringServer"%3A"https%3A%2F%2Fnemosminer.com"%2C"MonitoringUser"%3A""%2C"NiceHashAPIKey"%3A""%2C"NiceHashAPISecret"%3A""%2C"NiceHashOrganizationId"%3A""%2C"NiceHashWallet"%3A""%2C"NiceHashWalletIsInternal"%3Afalse%2C"OpenFirewallPorts"%3Atrue%2C"PayoutCurrency"%3A"BTC"%2C"PoolAPIAllowedFailureCount"%3A3%2C"PoolAPIRetryInterval"%3A3%2C"PoolAPITimeout"%3A20%2C"PoolName"%3A%5B"MiningPoolHubCoins"%2C"NiceHash"%5D%2C"PoolsConfigFile"%3A".%5C%5CConfig%5C%5CPoolsConfig.json"%2C"PoolTimeout"%3A20%2C"PowerPricekWh"%3A{"00%3A00"%3A0.26%2C"12%3A00"%3A0.3}%2C"PowerUsage"%3A{}%2C"PowerUsageIdleSystemW"%3A60%2C"ProfitabilityThreshold"%3A-99%2C"ProHashingAPIKey"%3A""%2C"ProHashingMiningMode"%3A"PPS"%2C"ProHashingUserName"%3A"UselessGuru"%2C"Proxy"%3A""%2C"Region"%3A"Europe"%2C"ReportToServer"%3Afalse%2C"ShowAccuracy"%3Atrue%2C"ShowAllMiners"%3Afalse%2C"ShowChangeLog"%3Afalse%2C"ShowCoinName"%3Atrue%2C"ShowCurrency"%3Atrue%2C"ShowEarning"%3Atrue%2C"ShowEarningBias"%3Atrue%2C"ShowMinerFee"%3Atrue%2C"ShowPoolBalances"%3Afalse%2C"ShowPoolFee"%3Atrue%2C"ShowPowerCost"%3Atrue%2C"ShowPowerUsage"%3Atrue%2C"ShowProfit"%3Atrue%2C"ShowProfitBias"%3Atrue%2C"ShowUser"%3Afalse%2C"ShowWorkerStatus"%3Atrue%2C"SnakeTailConfig"%3A".%5C%5CUtils%5C%5CNemosMiner_LogReader.xml"%2C"SnakeTailExe"%3A".%5C%5CUtils%5C%5CSnakeTail.exe"%2C"SSL"%3A"prefer"%2C"StartGUIMinimized"%3Atrue%2C"StartupMode"%3A"Idle"%2C"SubtractBadShares"%3Atrue%2C"SyncWindow"%3A3%2C"Transcript"%3Afalse%2C"UIStyle"%3A"light"%2C"UnrealMinerEarningFactor"%3A5%2C"UnrealPoolPriceFactor"%3A1.5%2C"UseAnycast"%3Atrue%2C"UsemBTC"%3Atrue%2C"UseMinerTweaks"%3Afalse%2C"Wallets"%3A{"BTC"%3A"1GPSq8txFnyrYdXL8t6S94mYdF8cGqVQJF"%2C"ETC"%3A""%2C"ETH"%3A""}%2C"Watchdog"%3Atrue%2C"WatchdogCount"%3A3%2C"WebGUI"%3Atrue%2C"UseColorForMinerStatus"%3Atrue%2C"WorkerName"%3A"BLACKBOX"}
/functions/file/edit
@@ -339,7 +339,7 @@ Functions
/functions/stat/set
Set miner hashrate value, not useful for pool stats:
Parameters: (JSON, pool list as array, requires properties Name=StatName, Algorithm=Algorithm(s), Type=Hashrate, Value (0=failed; -1=disabled))
-
e.g.: /functions/stat/set?Miners%3D%5B{"Name"%3A"SRBMinerMulti-v2.4.3-1xRadeonRX5700XT8GB"%2C"Algorithms"%3A%5B"Argon2d16000"%5D}%5D%26Type%3DHashrate%26Value%3D-1
+
e.g.: /functions/stat/set?Miners%3D%5B{"Name"%3A"SRBMinerMulti-v2.4.4-1xRadeonRX5700XT8GB"%2C"Algorithms"%3A%5B"Argon2d16000"%5D}%5D%26Type%3DHashrate%26Value%3D-1
/functions/pool/enable
Enable disabled pool
diff --git a/Web/parts/head.html b/Web/parts/head.html
index 34834e010a..60e2000d2a 100644
--- a/Web/parts/head.html
+++ b/Web/parts/head.html
@@ -279,11 +279,11 @@
+
Github
diff --git a/Web/poolsall.html b/Web/poolsall.html
index 595628e146..d73985e81d 100644
--- a/Web/poolsall.html
+++ b/Web/poolsall.html
@@ -93,6 +93,12 @@ All Pools
} catch {}
},
+ onColumnSwitch: function() {
+ $(".addm").each(function () {
+ if (config.UsemBTC) this.childNodes[0].innerText = "m" + this.childNodes[0].innerText;
+ });
+ },
+
autoRefreshInterval: parseInt(Math.max(config.Interval, 30)), // refresh once per interval, at least 30 seconds
height: $(window).height() - $table.offset().top + 30
});
diff --git a/Web/poolsbest.html b/Web/poolsbest.html
index 156ccbe957..a4bda0ca81 100644
--- a/Web/poolsbest.html
+++ b/Web/poolsbest.html
@@ -88,6 +88,12 @@ Best Pools
} catch {}
},
+ onColumnSwitch: function() {
+ $(".addm").each(function () {
+ if (config.UsemBTC) this.childNodes[0].innerText = "m" + this.childNodes[0].innerText;
+ });
+ },
+
autoRefreshInterval: parseInt(Math.max(config.Interval, 30)), // refresh once per interval, at least 30 seconds
height: $(window).height() - $table.offset().top + 30
});
diff --git a/Web/poolsunavailable.html b/Web/poolsunavailable.html
index 05d64be792..583414b667 100644
--- a/Web/poolsunavailable.html
+++ b/Web/poolsunavailable.html
@@ -93,6 +93,12 @@ Unavailable Pools
} catch {}
},
+ onColumnSwitch: function() {
+ $(".addm").each(function () {
+ if (config.UsemBTC) this.childNodes[0].innerText = "m" + this.childNodes[0].innerText;
+ });
+ },
+
aautoRefreshInterval: parseInt(Math.max(config.Interval, 30)), // refresh once per interval, at least 30 seconds
height: $(window).height() - $table.offset().top + 30
});
diff --git a/Web/scripts/demo.ps1 b/Web/scripts/demo.ps1
index 23838bfe5c..c2f7c462b7 100644
--- a/Web/scripts/demo.ps1
+++ b/Web/scripts/demo.ps1
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 3 of the License, or
NemosMiner is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: demo.psm1
-Version: 5.0.2.4
+Version: 5.0.2.5
Version date: 20 October 2022
#>