diff --git a/Balances/HashCryptos.ps1 b/Balances/HashCryptos.ps1
index c6d34c79c7..04ac6d6c59 100644
--- a/Balances/HashCryptos.ps1
+++ b/Balances/HashCryptos.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: Zpool.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Balances/HiveON.ps1 b/Balances/HiveON.ps1
index 95ec8034a6..50cc3b0b7a 100644
--- a/Balances/HiveON.ps1
+++ b/Balances/HiveON.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: Hiveon.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Balances/MiningDutch.ps1 b/Balances/MiningDutch.ps1
index 70da0a583f..b89423ec9b 100644
--- a/Balances/MiningDutch.ps1
+++ b/Balances/MiningDutch.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: MiningDutch.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Balances/MiningPoolHub.ps1 b/Balances/MiningPoolHub.ps1
index cfd265d853..82667775fc 100644
--- a/Balances/MiningPoolHub.ps1
+++ b/Balances/MiningPoolHub.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: MiningPoolHub.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Balances/NiceHash External.ps1 b/Balances/NiceHash External.ps1
index 143f7f90e3..8709a42bf0 100644
--- a/Balances/NiceHash External.ps1
+++ b/Balances/NiceHash External.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: NiceHash Internal.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Balances/NiceHash Internal.ps1 b/Balances/NiceHash Internal.ps1
index b0df7366e8..d1e1d33bd6 100644
--- a/Balances/NiceHash Internal.ps1
+++ b/Balances/NiceHash Internal.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: NiceHash Internal.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Balances/ProHashing.ps1 b/Balances/ProHashing.ps1
index eb4ae9b299..631a811eb0 100644
--- a/Balances/ProHashing.ps1
+++ b/Balances/ProHashing.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: ProHashing.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Balances/ZergPool.ps1 b/Balances/ZergPool.ps1
index 88e8bd13bc..94319512fa 100644
--- a/Balances/ZergPool.ps1
+++ b/Balances/ZergPool.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: ZergPool.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Balances/Zpool.ps1 b/Balances/Zpool.ps1
index a43e85c060..03741cc9bb 100644
--- a/Balances/Zpool.ps1
+++ b/Balances/Zpool.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: Zpool.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Brains/HashCryptos.ps1 b/Brains/HashCryptos.ps1
index c2edc91ec6..c8081379b9 100644
--- a/Brains/HashCryptos.ps1
+++ b/Brains/HashCryptos.ps1
@@ -19,8 +19,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: MiningDutch.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Brains/MiningDutch.ps1 b/Brains/MiningDutch.ps1
index ddbfdeea76..b1f84c9623 100644
--- a/Brains/MiningDutch.ps1
+++ b/Brains/MiningDutch.ps1
@@ -19,8 +19,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: MiningDutch.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Brains/ProHashing.ps1 b/Brains/ProHashing.ps1
index cc2fef5d04..e1ac6feabd 100644
--- a/Brains/ProHashing.ps1
+++ b/Brains/ProHashing.ps1
@@ -19,8 +19,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: ProHashing.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Brains/ZPool.ps1 b/Brains/ZPool.ps1
index 4980478aa9..14182d24d4 100644
--- a/Brains/ZPool.ps1
+++ b/Brains/ZPool.ps1
@@ -19,8 +19,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: ZPool.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
@@ -66,18 +66,36 @@ While ($BrainConfig = $Config.PoolsConfig.$BrainName.BrainConfig) {
} While (-not ($AlgoData -and $CurrenciesData))
$CurDate = (Get-Date).ToUniversalTime()
- $CurrenciesData.PSObject.Properties.Name | Where-Object { -not $CurrenciesData.$_.hashrate } | ForEach-Object { $CurrenciesData.PSObject.Properties.Remove($_) }
+ # $CurrenciesData.PSObject.Properties.Name | Where-Object { -not $CurrenciesData.$_.hashrate } | ForEach-Object { $CurrenciesData.PSObject.Properties.Remove($_) }
+
+ # Add currency and convert to array for easy sorting
+ $CurrenciesArray = [System.Collections.Generic.List[PSCustomObject]]@()
+ $CurrenciesData.PSObject.Properties.Name | ForEach-Object {
+ $CurrenciesData.$_ | Add-Member @{ Currency = If ($CurrenciesData.$_.symbol) { $CurrenciesData.$_.symbol -replace "-.+$", "" } Else { $_ -replace "-.+$", "" } } -Force
+ $CurrenciesData.$_ | Add-Member @{ CoinName = If ($CurrenciesData.$_.name) { $CurrenciesData.$_.name } Else { $_ } } -Force
+ $CurrenciesData.$_.PSObject.Properties.Remove("symbol")
+ $CurrenciesData.$_.PSObject.Properties.Remove("name")
+ $CurrenciesArray.Add($CurrenciesData.$_)
+ }
+
+ # Get best currency
+ $CurrenciesArray | Group-Object algo | ForEach-Object {
+ $BestCurrency = ($_.Group | Sort-Object estimate -Descending | Select-Object -First 1)
+ $AlgoData.($_.name) | Add-Member Currency $BestCurrency.currency -Force
+ $AlgoData.($_.name) | Add-Member CoinName $BestCurrency.coinname -Force
+ }
ForEach ($Algo in $AlgoData.PSObject.Properties.Name) {
- If ($AlgoData.$Algo.coins -eq 1) {
- $Currencies = @($CurrenciesData.PSObject.Properties.Name | Where-Object { $CurrenciesData.$_.algo -eq $Algo })
- $Currency = If ($Currencies.Count -eq 1) { $($Currencies[0] -replace "-.+").Trim() } Else { "" }
- }
- Else {
- $Currency = ""
- }
+ $Currency = $AlgoData.$Algo.Currency
If ($Currency) {
- $AlgoData.$Algo | Add-Member @{ Currency = $Currency } -Force
+ # Add coin name and keep data data up to date
+ If ($AlgoData.$Algo.CoinName) {
+ Add-CoinName -Algorithm $Algo -Currency $Currency -CoinName $AlgoData.$Algo.CoinName
+ If ($Variables.DagData.Algorithm.$Algo -and $AlgoData.$Algo.height -gt ($Variables.DAGData.Currency.$Currency.BlockHeight)) {
+ $Variables.DAGData.Currency.$Currency = (Get-DAGData -Blockheight $AlgoData.$Algo.height -Currency $Currency -EpochReserve 2)
+ $Variables.DAGData.Updated."$BrainName Brain" = (Get-Date).ToUniversalTime()
+ }
+ }
$AlgoData.$Algo | Add-Member @{ conversion_disabled = $CurrenciesData.$Currency.conversion_disabled } -Force
If ($CurrenciesData.$Currency.error) {
$AlgoData.$Algo | Add-Member @{ error = "Pool error msg: $($CurrenciesData.$Currency.error)" } -Force
@@ -87,7 +105,6 @@ While ($BrainConfig = $Config.PoolsConfig.$BrainName.BrainConfig) {
}
}
Else {
- $AlgoData.$Algo | Add-Member @{ Currency = "" } -Force
$AlgoData.$Algo | Add-Member @{ error = "" } -Force
$AlgoData.$Algo | Add-Member @{ conversion_disabled = 0 } -Force
}
diff --git a/Brains/ZergPool.ps1 b/Brains/ZergPool.ps1
index b8c4641122..1be37c7fb6 100644
--- a/Brains/ZergPool.ps1
+++ b/Brains/ZergPool.ps1
@@ -19,8 +19,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: ZergPool.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
@@ -37,6 +37,7 @@ $AlgoObject = @()
$APICallFails = 0
$CurrenciesData = @()
$Durations = [System.Collections.Generic.List[Double]]@()
+$PayoutCurrency = $Config.PoolsConfig.$BrainName.Wallets.Keys | Select-Object -First 1
$TransferFile = "$($PWD)\Data\BrainData_$($BrainName).json"
$ProgressPreference = "SilentlyContinue"
@@ -52,10 +53,10 @@ While ($BrainConfig = $Config.PoolsConfig.$BrainName.BrainConfig) {
Do {
Try {
$CurrenciesData = Invoke-RestMethod -Uri $BrainConfig.PoolCurrenciesUri -Headers @{ "Cache-Control" = "no-cache" } -SkipCertificateCheck -TimeoutSec $BrainConfig.PoolAPITimeout
- $AlgoData = [PSCustomObject]@{ }
- $CurrenciesArray = [System.Collections.Generic.List[PSCustomObject]]@()
+ $CurrenciesData.PSObject.Properties.Name | Where-Object { $CurrenciesData.$_.noautotrade -and $CurrenciesData.$_.symbol -ne $PayoutCurreny } | ForEach-Object { $CurrenciesData.PSObject.Properties.Remove($_) }
+
# Add currency and convert to array for easy sorting
- $CurrenciesData.PSObject.Properties.Name | Where-Object { $_ -like "*-*" } | ForEach-Object { $CurrenciesData.PSObject.Properties.Remove($_) }
+ $CurrenciesArray = [System.Collections.Generic.List[PSCustomObject]]@()
$CurrenciesData.PSObject.Properties.Name | ForEach-Object {
$CurrenciesData.$_ | Add-Member @{ Currency = If ($CurrenciesData.$_.symbol) { $CurrenciesData.$_.symbol } Else { $_ } } -Force
$CurrenciesData.$_ | Add-Member @{ CoinName = If ($CurrenciesData.$_.name) { $CurrenciesData.$_.name } Else { $_ } } -Force
@@ -64,9 +65,9 @@ While ($BrainConfig = $Config.PoolsConfig.$BrainName.BrainConfig) {
$CurrenciesArray.Add($CurrenciesData.$_)
}
+ $AlgoData = [PSCustomObject]@{ }
$CurrenciesArray | Group-Object algo | ForEach-Object {
- $BestCurrency = ($_.Group | Sort-Object estimate_current | Select-Object -First 1)
- $BestCurrency | Add-Member Coins $_.Group.Count -Force
+ $BestCurrency = ($_.Group | Sort-Object estimate_current -Descending | Select-Object -First 1)
$AlgoData | Add-Member (Get-Algorithm $BestCurrency.algo) $BestCurrency -Force
}
$APICallFails = 0
@@ -83,12 +84,12 @@ While ($BrainConfig = $Config.PoolsConfig.$BrainName.BrainConfig) {
$AlgoData = ($AlgoData | ConvertTo-Json) -replace '"estimate_last24":', '"estimate_last24h":' | ConvertFrom-Json
ForEach ($Algo in $AlgoData.PSObject.Properties.Name) {
- If (-not $AlgoData.$Algo.currency) {
- $Currencies = @(($CurrenciesData | Get-Member -MemberType NoteProperty).Name | Where-Object { $CurrenciesData.$_.algo -eq $Algo } | ForEach-Object { $CurrenciesData.$_ })
- $Currency = If ($Currencies.Currency) { (($Currencies | Sort-Object Estimate)[-1].Currency).Trim() } Else { "" }
+ If ($AlgoData.$Algo.currency) {
+ $Currency = $AlgoData.$Algo.currency
}
Else {
- $Currency = $AlgoData.$Algo.currency
+ $Currencies = @(($CurrenciesData | Get-Member -MemberType NoteProperty).Name | Where-Object { $CurrenciesData.$_.algo -eq $Algo } | ForEach-Object { $CurrenciesData.$_ })
+ $Currency = If ($Currencies.Currency) { (($Currencies | Sort-Object Estimate)[-1].Currency).Trim() } Else { "" }
}
# Add coin name and keep data data up to date
@@ -100,14 +101,14 @@ While ($BrainConfig = $Config.PoolsConfig.$BrainName.BrainConfig) {
}
}
$AlgoData.$Algo | Add-Member @{ Currency = $Currency } -Force
- $AlgoData.$Algo | Add-Member @{ Fees = $Config.PoolsConfig.$BrainName.Variant.$PoolVariant.DefaultFee } -Force
+ $AlgoData.$Algo | Add-Member @{ Fees = $Config.PoolsConfig.$BrainName.DefaultFee } -Force
$AlgoData.$Algo.actual_last24h_shared = ($AlgoData.$Algo.actual_last24h_shared -as [Double]) / 1000
$AlgoData.$Algo.estimate_current = $AlgoData.$Algo.estimate_current -as [Double]
$AlgoData.$Algo.estimate_last24h = $AlgoData.$Algo.estimate_last24h -as [Double]
$BasePrice = If ($AlgoData.$Algo.actual_last24h_shared) { $AlgoData.$Algo.actual_last24h_shared } Else { $AlgoData.$Algo.estimate_last24h }
- $AlgoObject+= [PSCustomObject]@{
+ $AlgoObject += [PSCustomObject]@{
actual_last24h = $BasePrice
Currency = $Currency
Date = $CurDate
diff --git a/ChangeLog.txt b/ChangeLog.txt
index 66312d1013..997f74dc39 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -11,6 +11,20 @@ Known issues:
- Increasing memory consumption over time (PWSH will eat up memory despite aggressive variable cleaning & garbage collection)
+
+ChangeLog NemosMiner 4.3.4.2 18.04.2023
+=======================================
+
+Fixes:
+- Brains / ZergPool: Change sort order to select best paying currency
+- Brains / ZergPool: Default pool fee not set (Regression from 4.3.4.1)
+- Core / Includes.psm1: Add-CoinName not updating data files
+
+Miner updates:
+- GMiner-v3.33
+- Rigel-v1.4.1
+
+
ChangeLog NemosMiner 4.3.4.1 16.04.2023
=======================================
@@ -25,7 +39,7 @@ Fixes:
- SRBMinerMulti-v2.2.4: Could not generate miner objects for CryptoHashing pool
Pools:
-- MiningPoolHub: Removed Coin variant, renamed MininPoolHubCoins to MiningPoolHub
+- MiningPoolHub: Removed Coin variant, renamed MiningPoolHubCoins to MiningPoolHub
- MiningPoolHub: Added *Plus variant
Miner updates:
diff --git a/Data/CoinNames.json b/Data/CoinNames.json
index db8d2b454e..40fda61d49 100644
--- a/Data/CoinNames.json
+++ b/Data/CoinNames.json
@@ -61,6 +61,7 @@
"BLACK": "Blackchain",
"BLAS": "Blakestar2",
"BLAST": "Blast",
+ "BLC": "Blake",
"BLOC": "Bloc",
"BMB": "Bamboo",
"BNB": "Binancesmartchain",
@@ -185,6 +186,7 @@
"EXO": "Exosis",
"EXP": "Expanse",
"FCH": "FreeCash",
+ "FEC": "Ferrite",
"FIRO": "Firo",
"FITA": "Theta",
"FJC": "FujiCoin",
@@ -321,6 +323,7 @@
"MAZA": "MazaCoin",
"MBC": "MicrobitCoin",
"MBGL": "Mobitglobal",
+ "MCL": "Marmara",
"MDEX": "Moondex",
"MEC": "MegaCoin",
"MEG": "MegaCoin",
@@ -484,6 +487,7 @@
"SWAMP": "SwampCoin",
"SXC": "SexCoin",
"SYS": "SysCoin",
+ "TAFT": "Cointaft",
"TAJ": "TajCoin",
"TCC": "TaichiCoin",
"TCR": "TecraCoin",
@@ -516,11 +520,9 @@
"UBQ": "UBIQ",
"UFO": "UfoProject",
"UIS": "Unitus",
- "UMBRU": "UMBRU",
"UPX": "Uplexa",
"URALS": "UralsCoin",
"URX": "Uranium-x",
- "UT": "ULORD",
"V8": "V8 Coin",
"VBK": "Veriblock",
"VDL": "Vidulum",
@@ -528,7 +530,6 @@
"VECO": "Veco",
"VEGI": "Veggie",
"VEIL": "Veil",
- "VGC": "5G-CASH",
"VHH": "Volkshash",
"VIA": "ViaCoin",
"VIC": "Victorim",
@@ -564,7 +565,6 @@
"XCY": "CyprusCoin",
"XDAG": "Dagger",
"XDN": "Digitalnote",
- "XDNA": "XDNA",
"XEBEC": "Xebec",
"XEC": "eCash",
"XEQ": "Equilibria",
@@ -586,7 +586,6 @@
"XRC": "Bitcoin Rhodium",
"XRD": "Raven Dark",
"XRG": "Ergon",
- "XSC": "XSC",
"XSG": "Snowgem",
"XSH": "Shield",
"XSHB": "Shield",
@@ -594,7 +593,7 @@
"XSR": "SucreCoin",
"XTA": "Italo",
"XTNC": "XtendCash",
- "XVG": "VERGE",
+ "XVG": "Verge",
"XVP": "VirtaCoinPlus",
"XWP": "Swap",
"XZC": "Firo",
@@ -621,6 +620,5 @@
"ZOC": "01Coin",
"ZP": "ZenProtocol",
"ZUR": "ZurCoin",
- "ZYON": "BitZyon",
- "BLC": "Blake"
+ "ZYON": "BitZyon"
}
diff --git a/Data/CurrencyAlgorithm.json b/Data/CurrencyAlgorithm.json
index 1d068f74da..f81d71ac06 100644
--- a/Data/CurrencyAlgorithm.json
+++ b/Data/CurrencyAlgorithm.json
@@ -20,6 +20,7 @@
"BELL": "Yespower",
"BGL": "Keccak",
"BLACK": "Ethash",
+ "BLC": "Blakecoin",
"BLOC": "CryptonightHeavyXhv",
"BMB": "Pufferfish2BMB",
"BNB": "Token",
@@ -77,6 +78,7 @@
"EXO": "X16r",
"EXP": "Ethash",
"FCH": "SHA256",
+ "FEC": "Scrypt",
"FIRO": "FiroPow",
"FITA": "Ghostrider",
"FLUX": "Equihash1254",
@@ -87,6 +89,7 @@
"FTO": "X11",
"GALE": "SHA256csm",
"GBX": "Neoscrypt",
+ "GCN": "Scrypt",
"GEC": "Ghostrider",
"GENIX": "X16r",
"GLINK": "Equihash1445",
@@ -230,6 +233,5 @@
"ZEC": "Equihash",
"ZEN": "Equihash",
"ZER": "Equihash1927",
- "ZOC": "Neoscrypt",
- "BLC": "Blakecoin"
+ "ZOC": "Neoscrypt"
}
diff --git a/Data/PoolData.json b/Data/PoolData.json
index ec38fadc1f..17a8ea509c 100644
--- a/Data/PoolData.json
+++ b/Data/PoolData.json
@@ -283,6 +283,7 @@
"SampleSizeMinutes": 45,
"UseTransferFile": false
},
+ "DefaultFee": 0.5,
"ExcludeAlgorithm": [],
"GuaranteedPayoutCurrencies": [
"DOGE",
@@ -317,17 +318,14 @@
"SSL": "prefer",
"Variant": {
"ZergPool": {
- "DefaultFee": 0.5,
"DivisorMultiplier": 1000000,
"PriceField": "estimate_current"
},
"ZergPool24hr": {
- "DefaultFee": 0.5,
"DivisorMultiplier": 1000000,
"PriceField": "estimate_last24h"
},
"ZergPoolPlus": {
- "DefaultFee": 0.5,
"DivisorMultiplier": 1000000,
"PriceField": "Plus_Price"
}
diff --git a/Includes/API.psm1 b/Includes/API.psm1
index cd0e257755..235e3a08f8 100644
--- a/Includes/API.psm1
+++ b/Includes/API.psm1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: API.psm1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
Function Start-APIServer {
diff --git a/Includes/BalancesTracker.ps1 b/Includes/BalancesTracker.ps1
index 09b27127f6..76cb6afa0e 100644
--- a/Includes/BalancesTracker.ps1
+++ b/Includes/BalancesTracker.ps1
@@ -21,8 +21,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: BalancesTracker.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
Do {
diff --git a/Includes/Core.ps1 b/Includes/Core.ps1
index 3491c2d998..4d8835773b 100644
--- a/Includes/Core.ps1
+++ b/Includes/Core.ps1
@@ -19,8 +19,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: Core.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module .\Include.psm1
@@ -317,7 +317,7 @@ Do {
}
If ($Config.BadShareRatioThreshold -gt 0) {
$Miner.WorkersRunning.Pool.Algorithm | ForEach-Object {
- $LatestMinerSharesData = ($Miner.Data | Select-Object -Last 1).Shares
+ $LatestMinerSharesData = ($Miner.Data | Select-Object -Last 1 -ErrorAction Ignore).Shares
If ($LatestMinerSharesData.$_ -and $LatestMinerSharesData.$_[1] -gt 0 -and $LatestMinerSharesData.$_[3] -gt [Int](1 / $Config.BadShareRatioThreshold) -and $LatestMinerSharesData.$_[1] / $LatestMinerSharesData.$_[3] -gt $Config.BadShareRatioThreshold) {
$Miner.StatusMessage = "Miner '$($Miner.Name) $($Miner.Info)' stopped. Reasons: Too many bad shares (Shares Total = $($LatestMinerSharesData.$_[3]), Rejected = $($LatestMinerSharesData.$_[1]))."
$Miner.SetStatus([MinerStatus]::Failed)
@@ -360,7 +360,7 @@ Do {
ForEach ($Worker in $Miner.WorkersRunning) {
$Algorithm = $Worker.Pool.Algorithm
$Factor = 1
- $LatestMinerSharesData = ($Miner.Data | Select-Object -Last 1).Shares
+ $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
@@ -378,7 +378,7 @@ Do {
$Miner.SetStatus([MinerStatus]::Failed)
}
}
- Remove-Variable Worker
+ Remove-Variable Worker -ErrorAction Ignore
}
# We don't want to store power usage if we have less than $MinDataSample, store even when fluctuating hash rates were recorded
If ($Miner.Data.Count -ge $Miner.MinDataSample -and $Miner.ReadPowerUsage -and ($Miner.Hashrates_Live -gt 0 -or $Miner.Activated -gt $Variables.WatchdogCount)) {
@@ -456,11 +456,11 @@ Do {
If ($Variables.NewMiningStatus -ne "Running" -or $Variables.IdleRunspace.MiningStatus -eq "Idle") { Continue }
# Remove de-configured pools
- $PoolsDeconfigured = @($Variables.Pools | Where-Object BaseName -notin (Get-PoolBaseName $Variables.PoolName))
- $Pools = @($Variables.Pools | Where-Object BaseName -in (Get-PoolBaseName $Variables.PoolName))
+ $PoolsDeconfigured = @($Variables.Pools | Where-Object Name -notin $Variables.PoolName)
+ $Pools = @($Variables.Pools | Where-Object Name -in $Variables.PoolName)
$Pools | ForEach-Object { $_.Reasons = @() }
- If ($ComparePools = @(Compare-Object -PassThru $PoolsNew $Pools -Property BaseName, Algorithm -IncludeEqual)) {
+ If ($ComparePools = @(Compare-Object -PassThru $PoolsNew $Pools -Property Name, Algorithm -IncludeEqual)) {
# Find added & updated pools
$Variables.PoolsAdded = @($ComparePools | Where-Object SideIndicator -EQ "<=")
$Variables.PoolsUpdated = @($ComparePools | Where-Object SideIndicator -EQ "==")
@@ -473,7 +473,7 @@ Do {
$_.Available = $true
$_.Best = $false
- If ($Pool = $Variables.PoolsUpdated | Where-Object BaseName -EQ $_.BaseName | Where-Object Algorithm -EQ $_.Algorithm | Where-Object Currency -EQ $_.Currency | Select-Object -First 1) {
+ If ($Pool = $Variables.PoolsUpdated | Where-Object Name -EQ $_.Name | Where-Object Algorithm -EQ $_.Algorithm | Where-Object Currency -EQ $_.Currency | Select-Object -First 1) {
$_.Accuracy = $Pool.Accuracy
$_.CoinName = $Pool.CoinName
$_.Currency = $Pool.Currency
@@ -481,7 +481,6 @@ Do {
$_.EarningsAdjustmentFactor = $Pool.EarningsAdjustmentFactor
$_.Fee = $Pool.Fee
$_.Host = $Pool.Host
- $_.Name = $Pool.Name
$_.Pass = $Pool.Pass
$_.Port = $Pool.Port
$_.PortSSL = $Pool.PortSSL
diff --git a/Includes/DevAPI.ps1 b/Includes/DevAPI.ps1
new file mode 100644
index 0000000000..b6218065a2
--- /dev/null
+++ b/Includes/DevAPI.ps1
@@ -0,0 +1,890 @@
+$Request = '2022-12-13 22:33:07: http://127.0.0.1:3999/functions/config/set?{"Algorithm"%3A%5B%5D%2C"APILogfile"%3A"Debug%5C%5CAPILog.txt"%2C"APIPort"%3A3999%2C"AutoReboot"%3Atrue%2C"AutoUpdate"%3Atrue%2C"AutoUpdateCheckInterval"%3A1%2C"BackupOnAutoUpdate"%3Atrue%2C"BadShareRatioThreshold"%3A0.05%2C"BalancesKeepAlive"%3Atrue%2C"BalancesShowAverages"%3Afalse%2C"BalancesShowInAllCurrencies"%3Afalse%2C"BalancesShowInMainCurrency"%3Atrue%2C"BalancesShowSums"%3Afalse%2C"BalancesTrackerExcludePool"%3A%5B"_BlockMasters"%5D%2C"BalancesTrackerLog"%3Afalse%2C"BalancesTrackerPollInterval"%3A10%2C"CalculatePowerCost"%3Atrue%2C"ConfigFileVersion"%3A"4.3.4.2"%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"Donation"%3A2%2C"EarningsAdjustmentFactor"%3A0.8%2C"ExcludeDeviceName"%3A%5B"CPU%2300"%5D%2C"ExcludeMinerName"%3A%5B%5D%2C"ExtraCurrencies"%3A%5B"ETH"%2C"USD"%2C"EUR"%2C"NZD"%2C"AUD"%2C"THB"%5D%2C"GPUMinerProcessPriority"%3A-1%2C"IdleDetection"%3Afalse%2C"IdleSec"%3A5%2C"IgnoreMinerFee"%3Afalse%2C"IgnorePoolFee"%3Afalse%2C"IgnorePowerCost"%3Atrue%2C"Interval"%3A30%2C"LogBalanceAPIResponse"%3Afalse%2C"LogToFile"%3A%5B"Info"%2C"Warn"%2C"Error"%2C"Verbose"%2C"Debug"%5D%2C"LogToScreen"%3A%5B"Info"%2C"Warn"%2C"Error"%2C"Verbose"%2C"Debug"%5D%2C"MinAccuracy"%3A0.5%2C"MinDataSample"%3A20%2C"MinDataSampleAlgoMultiplier"%3A{"X16r"%3A3}%2C"MinerInstancePerDeviceModel"%3Atrue%2C"MinerSet"%3A2%2C"MinerSwitchingThreshold"%3A2.5%2C"MinerWindowStyle"%3A"minimized"%2C"MinerWindowStyleNormalWhenBenchmarking"%3Atrue%2C"MiningDutchAPIKey"%3A"7c5ea2d2e997f5094a55969d3a855c4169b46d5eee6065d4fa9251e026980714"%2C"MiningDutchUserName"%3A"UselessGuru"%2C"MiningPoolHubAPIKey"%3A"28328accdd4306c631a881bd8130f0d258a94b0e33569e0eef7e83773d018c98"%2C"MiningPoolHubUserName"%3A"UselessGuru"%2C"MinInterval"%3A3%2C"MinWorker"%3A0%2C"MonitoringServer"%3A"https%3A%2F%2Fnemosminer.com"%2C"MonitoringUser"%3A"8e92d491-a5e6-42d7-8928-5be72d743b0c"%2C"NiceHashAPIKey"%3A"0dfa9c5b-12f9-4f62-9152-41d6a517de00"%2C"NiceHashAPISecret"%3A"15a4618a-1f3a-4b96-924a-48845f435d98f4f28ac4-a51b-4de0-bf8d-584929764dd5"%2C"NiceHashOrganizationId"%3A"f48afaf4-fc54-4645-af2d-56334a48aebb"%2C"NiceHashWallet"%3A"33hZYX8iFg5zm9E3geqrNgeP6TMzszZk5R"%2C"NiceHashWalletIsInternal"%3Atrue%2C"OpenFirewallPorts"%3Atrue%2C"PayoutCurrency"%3A"BTC"%2C"PoolAPIAllowedFailureCount"%3A3%2C"PoolAPIRetryInterval"%3A3%2C"PoolAPITimeout"%3A3%2C"PoolName"%3A%5B"Hiveon"%2C"MiningDutchPlus"%2C"MiningPoolHubCoins"%2C"NiceHash"%2C"ProHashingPlus"%2C"ZergPoolCoinsPlus"%2C"ZPoolPlus"%5D%2C"PoolsConfigFile"%3A".%5C%5CConfig%5C%5CPoolsConfig.json"%2C"PoolTimeout"%3A30%2C"PowerPricekWh"%3A{"00%3A00"%3A0.26}%2C"PowerUsage"%3A{"_GPU%2302"%3A35}%2C"PowerUsageIdleSystemW"%3A160%2C"ProfitabilityThreshold"%3A-12.6%2C"ProHashingAPIKey"%3A"8ea6a00dea6945172167708c9784b8deead1da2f5e543ef312bfc7ed1073fe4a"%2C"ProHashingMiningMode"%3A"PPLNS"%2C"ProHashingUserName"%3A"UselessGuru"%2C"Proxy"%3A""%2C"Region"%3A"Europe"%2C"ReportToServer"%3Atrue%2C"ShowAccuracy"%3Atrue%2C"ShowAllMiners"%3Afalse%2C"ShowChangeLog"%3Atrue%2C"ShowCoinName"%3Atrue%2C"ShowCurrency"%3Atrue%2C"ShowEarning"%3Atrue%2C"ShowEarningBias"%3Atrue%2C"ShowMinerFee"%3Atrue%2C"ShowPool"%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"LogViewerConfig"%3A".%5C%5CUtils%5C%5CNemosMiner_LogReader.xml"%2C"SnakeTailExe"%3A".%5C%5CUtils%5C%5CSnakeTail.exe"%2C"SSL"%3A"Prefer"%2C"StartGUI"%3Afalse%2C"StartGUIMinimized"%3Afalse%2C"StartupMode"%3A"Running"%2C"SubtractBadShares"%3Atrue%2C"SyncWindow"%3A3%2C"Transcript"%3Afalse%2C"UIStyle"%3A"light"%2C"UnrealMinerEarningFactor"%3A1%2C"UnrealPoolPriceFactor"%3A2%2C"UseAnycast"%3Atrue%2C"UseColorForMinerStatus"%3Atrue%2C"UsemBTC"%3Atrue%2C"UseMinerTweaks"%3Atrue%2C"Wallets"%3A{"BTC"%3A"1GPSq8txFnyrYdXL8t6S94mYdF8cGqVQJF"%2C"ETC"%3A"0x7CF99ec9029A98AFd385f106A93977D8105Fec0f"%2C"ETH"%3A"0x92e6F22C1493289e6AD2768E1F502Fc5b414a287"}%2C"Watchdog"%3Atrue%2C"WatchdogCount"%3A3%2C"WebGUI"%3Atrue%2C"WorkerName"%3A"Blackbox"}'
+
+
+Set-Location("c:\Users\Stephan\Desktop\NemosMiner\")
+$ScriptBody = "using module .\Includes\Include.psm1"; $Script = [ScriptBlock]::Create($ScriptBody); . $Script
+
+$Parameters = @{ }
+$Variables = [Ordered]@{ }
+# $Variables.Miners = Get-Content .\Debug\Miners.json | ConvertFrom-Json
+$Variables.Pools = Get-Content .\Debug\Pools.json | ConvertFrom-Json
+$Variables.ConfigFile = ".\Config\config.json"
+$Variables.PoolsConfigFile = ".\Config\PoolsConfig.json"
+$Variables.Earnings = Get-Content .\Debug\Earnings.json | ConvertFrom-Json
+$Variables.AvailableCommandLineParameters = @("Algorithm")
+$Variables.WatchdogTimers = Get-Content .\Debug\WatchdogTimers.json | ConvertFrom-Json
+$Variables.BalanceData = Get-Content "C:\Users\Stephan\Desktop\NemosMiner\Logs\BalancesTrackerData.json" | ConvertFrom-Json
+
+# Load stats, required for stat management
+Get-Stat | Out-Null
+
+Read-Config -ConfigFile $Variables.ConfigFile
+
+$Request = $Request.Substring(42)
+$Path = $Request -replace "\?.+"
+
+$Request -replace ".+\?", "" -split '&' | Foreach-Object {
+ $Key, $Value = $_ -split '='
+ # Decode any url escaped characters in the key and value
+ $Key = [URI]::UnescapeDataString($Key)
+ $Value = [URI]::UnescapeDataString($Value)
+ If ($Key -and $Value) { $Parameters.$Key = $Value }
+}
+
+# Create a new response and the defaults for associated settings
+$Response = $Context.Response
+$ContentType = "application/json"
+$StatusCode = 200
+$Data = ""
+
+# Set the proper content type, status code and data for each resource
+Switch ($Path) {
+ "/functions/api/stop" {
+ Write-Message -Level Verbose "API: API stopped!"
+ Return
+ }
+ "/functions/balancedata/remove" {
+ If ($Parameters.Data) {
+ $BalanceDataEntries = ($Parameters.Data | ConvertFrom-Json -ErrorAction SilentlyContinue)
+ $Variables.BalanceData = @((Compare-Object $Variables.BalanceData $BalanceDataEntries -PassThru -Property DateTime, Pool, Currency, Wallet) | Select-Object -ExcludeProperty SideIndicator)
+ $Variables.BalanceData | ConvertTo-Json | Out-File ".\Logs\BalancesTrackerData.json"
+ If ($BalanceDataEntries.Count -gt 0) {
+ $Variables.BalanceData | ConvertTo-Json | Out-File ".\Logs\BalancesTrackerData.json"
+ $Message = "$($BalanceDataEntries.Count) $(If ($BalanceDataEntries.Count -eq 1) { "balance data entry" } Else { "balance data entries" }) removed."
+ Write-Message -Level Verbose "Web GUI: $Message"
+ $Data = $Message
+ }
+ Else {
+ $Data = "No matching entries found."
+ }
+ $Data = "
$Data
"
+ Break
+ }
+ }
+ "/functions/config/device/disable" {
+ ForEach ($Key in $Parameters.Keys) {
+ If ($Values = @($Parameters.$Key -split ',' | Where-Object { $_ -notin $Config.ExcludeDeviceName })) {
+ Try {
+ $Data = "Device configuration changed`n`nOld values:"
+ $Data += "`nExcludeDeviceName: '[$($Config."ExcludeDeviceName" -join ', ')]'"
+ $Config.ExcludeDeviceName = @((@($Config.ExcludeDeviceName) + $Values) | Sort-Object -Unique)
+ $Data += "`n`nNew values:"
+ $Data += "`nExcludeDeviceName: '[$($Config."ExcludeDeviceName" -join ', ')]'"
+ $Data += "`n`nUpdated configFile`n$($Variables.ConfigFile)"
+ Write-Config -ConfigFile $Variables.ConfigFile -Config $Config
+ ForEach ($DeviceName in $Values) {
+ $Variables.Devices | Where-Object Name -EQ $DeviceName | ForEach-Object {
+ $_.State = [DeviceState]::Disabled
+ If ($_.Status -like "* {*@*}") { $_.Status = "$($_.Status); will get disabled at end of cycle" }
+ Else { $_.Status = "Disabled (ExcludeDeviceName: '$($_.Name)')" }
+ }
+ }
+ Write-Message -Level Verbose "Web GUI: Device$(If ($Values.Count -ne 1) { "s" } ) '$($Values -join ', ')' disabled. Config file '$($Variables.ConfigFile)' updated."
+ }
+ Catch {
+ $Data = "Error saving config file`n'$($Variables.ConfigFile) $($Error[0])'."
+ }
+ }
+ Else {
+ $Data = "No configuration change"
+ }
+ }
+ $Data = "$Data
"
+ Break
+ }
+ "/functions/config/device/enable" {
+ ForEach ($Key in $Parameters.Keys) {
+ If ($Values = @($Parameters.$Key -split ',' | Where-Object { $_ -in $Config.ExcludeDeviceName })) {
+ Try {
+ $Data = "Device configuration changed`n`nOld values:"
+ $Data += "`nExcludeDeviceName: '[$($Config."ExcludeDeviceName" -join ', ')]'"
+ $Config.ExcludeDeviceName = @($Config.ExcludeDeviceName | Where-Object { $_ -notin $Values } | Sort-Object -Unique)
+ $Data += "`n`nNew values:"
+ $Data += "`nExcludeDeviceName: '[$($Config."ExcludeDeviceName" -join ', ')]'"
+ $Data += "`n`nUpdated configFile`n$($Variables.ConfigFile)"
+ Write-Config -ConfigFile $Variables.ConfigFile -Config $Config
+ $Variables.Devices | Where-Object Name -in $Values | ForEach-Object {
+ $_.State = [DeviceState]::Enabled
+ If ($_.Status -like "* {*@*}; will get disabled at end of cycle") { $_.Status = $_.Status -replace "; will get disabled at end of cycle" }
+ Else { $_.Status = "Idle" }
+ }
+ Write-Message -Level Verbose "Web GUI: Device$(If ($Values.Count -ne 1) { "s" } ) '$($Values -join ', ')' enabled. Config file '$($Variables.ConfigFile)' updated."
+ }
+ Catch {
+ $Data = "Error saving config file`n'$($Variables.ConfigFile) $($Error[0])'."
+ }
+ }
+ Else {
+ $Data = "No configuration change"
+ }
+ }
+ $Data = "$Data
"
+ Break
+ }
+ "/functions/config/set" {
+ Try {
+ Write-Config -ConfigFile $Variables.ConfigFile -Config ($Key | ConvertFrom-Json -AsHashtable)
+ Read-Config -ConfigFile $Variables.ConfigFile
+ $Variables.Devices | Select-Object | Where-Object { $_.State -ne [DeviceState]::Unsupported } | ForEach-Object {
+ If ($_.Name -in @($Config.ExcludeDeviceName)) {
+ $_.State = [DeviceState]::Disabled
+ If ($_.Status -like "Mining *}") { $_.Status = "$($_.Status); will get disabled at end of cycle" }
+ }
+ Else {
+ $_.State = [DeviceState]::Enabled
+ If ($_.Status -like "*; will get disabled at end of cycle") { $_.Status = $_.Status -replace "; will get disabled at end of cycle" }
+ If ($_.Status -like "Disabled *") { $_.Status = "Idle" }
+ }
+ }
+ $Variables.RestartCycle = $true
+
+ # Set operational values for text window
+ $Variables.ShowAccuracy = $Config.ShowAccuracy
+ $Variables.ShowAllMiners = $Config.ShowAllMiners
+ $Variables.ShowEarning = $Config.ShowEarning
+ $Variables.ShowEarningBias = $Config.ShowEarningBias
+ $Variables.ShowMinerFee = $Config.ShowMinerFee
+ $Variables.ShowPoolBalances = $Config.ShowPoolBalances
+ $Variables.ShowPoolFee = $Config.ShowPoolFee
+ $Variables.ShowPowerCost = $Config.ShowPowerCost
+ $Variables.ShowPowerUsage = $Config.ShowPowerUsage
+ $Variables.ShowProfit = $Config.ShowProfit
+ $Variables.ShowProfitBias = $Config.ShowProfitBias
+
+ Write-Message -Level Verbose "Web GUI: Configuration saved. It will become active in next cycle."
+ $Data = "Config saved to '$($Variables.ConfigFile)'. It will become active in next cycle."
+ }
+ Catch {
+ $Data = "Error saving config file`n'$($Variables.ConfigFile) $($_) $($Error[0])'."
+ }
+ $Data = "$Data
"
+ Break
+ }
+ "/functions/file/edit" {
+ $Data = Edit-File $Parameters.FileName
+ Break
+ }
+ "/functions/file/showcontent" {
+ $Data = (Get-Content -Path $Parameters.FileName -Raw)
+ # $Data = (Get-Content -Path $Parameters.FileName -Raw) -replace "(?"
+ $ContentType = "text/html"
+ Break
+ }
+ "/functions/log/get" {
+ $Lines = If ([Int]$Parameters.Lines) { [Int]$Parameters.Lines } Else { 100 }
+ $Data = " $(Get-Content -Path $Variables.LogFile -Tail $Lines | ForEach-Object { "$($_)`n" } )"
+ Break
+ }
+ "/functions/mining/getstatus" {
+ $Data = If ($Variables.MiningStatus -eq $Variables.NewMiningStatus) { ConvertTo-Json ($Variables.MiningStatus) } Else { ConvertTo-Json ($Variables.NewMiningStatus) }
+ Break
+ }
+ "/functions/mining/pause" {
+ If ($Variables.MiningStatus -ne "Paused") {
+ $Variables.NewMiningStatus = "Paused"
+ $Data = "Mining is being paused...`n$(If ($Variables.BalancesTrackerPollInterval -gt 0) { If (-not $Variables.BalancesTrackerRunspace) { "Balances Tracker starting..." } Else { "Balances Tracker running." } })"
+ $Variables.RestartCycle = $true
+ }
+ $Data = "$Data
"
+ Break
+ }
+ "/functions/mining/start" {
+ If ($Variables.MiningStatus -ne "Running") {
+ $Variables.NewMiningStatus = "Running"
+ $Data = "Mining processes starting...`n$(If ($Variables.BalancesTrackerPollInterval -gt 0) { If (-not $Variables.BalancesTrackerRunspace) { "Balances Tracker starting..." } Else { "Balances Tracker running." } })"
+ $Variables.RestartCycle = $true
+ }
+ $Data = "$Data
"
+ Break
+ }
+ "/functions/mining/stop" {
+ If ($Variables.MiningStatus -ne "Idle") {
+ $Variables.NewMiningStatus = "Idle"
+ $Data = "$($Variables.Branding.ProductLabel) is stopping...`n"
+ $Variables.RestartCycle = $true
+ }
+ $Data = "$Data
"
+ Break
+ }
+ "/functions/querypoolapi" {
+ If (-not $Config.PoolsConfig.$($Parameters.Pool).BrainConfig.$($Parameters.Type)) {
+ $Data = "No pool config data for '/functions/querypoolapi?Pool=$($Parameters.Pool)&Type=$($Parameters.Type)'"
+ }
+ ElseIf (-not ($Data = (Invoke-RestMethod -Uri $Config.PoolsConfig.$($Parameters.Pool).BrainConfig.$($Parameters.Type) -Headers @{ "Cache-Control" = "no-cache" } -SkipCertificateCheck -TimeoutSec 5) | ConvertTo-Json)) {
+ $Data = "No data for '/functions/querypoolapi?Pool=$($Parameters.Pool)&Type=$($Parameters.Type)'"
+ }
+ break
+ }
+ "/functions/removeorphanedminerstats" {
+ If ($StatNames = Remove-ObsoleteMinerStats) {
+ $Data = $StatNames | ConvertTo-Json
+ }
+ Else {
+ $Data = "No matching stats found."
+ }
+ Break
+ }
+ "/functions/stat/disable" {
+ If ($Parameters.Pools) {
+ $Names = @($Parameters.Pools | ConvertFrom-Json -ErrorAction SilentlyContinue).Name
+ $Algorithms = @($Parameters.Pools | ConvertFrom-Json -ErrorAction SilentlyContinue).Algorithm
+ $Currencies = @($Parameters.Pools | ConvertFrom-Json -ErrorAction SilentlyContinue).Currency
+ If ($Pools = @($Variables.Pools | Select-Object | Where-Object { $_.Name -in $Names -and $_.Algorithm -in $Algorithms -and $_.Currency -in $Currencies})) {
+ $Pools | ForEach-Object {
+ $Stat_Name = "$($_.Name)_$($_.Algorithm)$(If ($_.Currency) { "-$($_.Currency)" })"
+ $Data += "$($Stat_Name)`n"
+ Disable-Stat -Name "$($Stat_Name)_Profit"
+ $_.Disabled = $false
+ $_.Reasons += "Disabled by user"
+ $_.Reasons = $_.Reasons | Sort-Object -Unique
+ $_.Available = $false
+ }
+ $Message = "$($Pools.Count) $(If ($Pools.Count -eq 1) { "pool" } Else { "pools" }) disabled."
+ Write-Message -Level Verbose "Web GUI: $Message"
+ $Data += "`n$Message"
+ }
+ Else {
+ $Data = "No matching pool stats found."
+ }
+ Break
+ }
+ ElseIf ($Parameters.Miners) {
+ If ($Miners = @(Compare-Object -PassThru -IncludeEqual -ExcludeDifferent @($Variables.Miners | Select-Object) @($Parameters.Miners | ConvertFrom-Json -ErrorAction SilentlyContinue | Select-Object) -Property Name, Algorithms)) {
+ $Miners | Sort-Object Name, Algorithms | ForEach-Object {
+ $Data += "$($_.Name) ($($_.Algorithms -join " & "))`n"
+ ForEach ($Worker in $_.Workers) {
+ Disable-Stat -Name "$($_.Name)_$($Worker.Pool.Algorithm)_Hashrate"
+ $Worker.Hashrate = [Double]::NaN
+ }
+ $_.Disabled = $true
+ $_.Reasons += "Disabled by user"
+ $_.Reasons = $_.Reasons | Sort-Object -Unique
+ $_.Available = $false
+ }
+ $Message = "$($Miners.Count) $(If ($Miners.Count -eq 1) { "Miner" } Else { "Miners" }) disbled."
+ Write-Message -Level Verbose "Web GUI: $Message"
+ $Data += "`n$Message"
+ }
+ Else {
+ $Data = "No matching miner stats found."
+ }
+ Break
+ }
+ }
+ "/functions/stat/enable" {
+ If ($Parameters.Pools) {
+ $Names = @($Parameters.Pools | ConvertFrom-Json -ErrorAction SilentlyContinue).Name
+ $Algorithms = @($Parameters.Pools | ConvertFrom-Json -ErrorAction SilentlyContinue).Algorithm
+ $Currencies = @($Parameters.Pools | ConvertFrom-Json -ErrorAction SilentlyContinue).Currency
+ If ($Pools = @($Variables.Pools | Select-Object | Where-Object { $_.Name -in $Names -and $_.Algorithm -in $Algorithms -and $_.Currency -in $Currencies})) {
+ $Pools | ForEach-Object {
+ $Stat_Name = "$($_.Name)_$($_.Algorithm)$(If ($_.Currency) { "-$($_.Currency)" })"
+ $Data += "$($Stat_Name)`n"
+ Enable-Stat -Name "$($Stat_Name)_Profit"
+ $_.Disabled = $false
+ $_.Reasons = @($_.Reasons | Where-Object { $_ -notlike "Disabled by user" } | Sort-Object -Unique)
+ If (-not $_.Reasons) { $_.Available = $true }
+ }
+ $Message = "$($Pools.Count) $(If ($Pools.Count -eq 1) { "pool" } Else { "pools" }) enabled."
+ Write-Message -Level Verbose "Web GUI: $Message"
+ $Data += "`n$Message"
+ }
+ Else {
+ $Data = "No matching pool stats found."
+ }
+ Break
+ }
+ ElseIf ($Parameters.Miners) {
+ If ($Miners = @(Compare-Object -PassThru -IncludeEqual -ExcludeDifferent @($Variables.Miners | Select-Object) @($Parameters.Miners | ConvertFrom-Json -ErrorAction SilentlyContinue | Select-Object) -Property Name, Algorithms)) {
+ $Miners | Sort-Object Name, Algorithms | ForEach-Object {
+ $Data += "$($_.Name) ($($_.Algorithms -join " & "))`n"
+ ForEach ($Worker in $_.Workers) {
+ Enable-Stat -Name "$($_.Name)_$($Worker.Pool.Algorithm)_Hashrate"
+ $Worker.Hashrate = [Double]::NaN
+ }
+ $_.Disabled = $false
+ $_.Reasons = @($_.Reasons | Where-Object { $_ -ne "Disabled by user" } | Sort-Object -Unique)
+ If (-not $_.Reasons) { $_.Available = $true }
+ }
+ $Message = "$($Miners.Count) $(If ($Miners.Count -eq 1) { "Miner" } Else { "Miners" }) enabled."
+ Write-Message -Level Verbose "Web GUI: $Message"
+ $Data += "`n$Message"
+ }
+ Else {
+ $Data = "No matching miner stats found."
+ }
+ Break
+ }
+ }
+ "/functions/stat/get" {
+ $TempStats = @(If ($null -ne $Parameters.Value) { @($Stats.Keys | Where-Object { $_ -like "*$($Parameters.Type)" } | Where-Object { $Stats.$_.Live -eq $Parameters.Value } | ForEach-Object { $Stats.$_ }) } Else { @($Stats) })
+
+ If ($TempStats) {
+ If ($null -ne $Parameters.Value) {
+ $TempStats | Sort-Object Name | ForEach-Object { $Data += "$($_.Name -replace "_$($Parameters.Type)")`n" }
+ If ($Parameters.Type -eq "Hashrate") { $Data += "`n$($TempStats.Count) stat file$(if ($TempStats.Count -ne 1) { "s" }) with $($Parameters.Value)H/s hashrate." }
+ ElseIf ($Parameters.Type -eq "PowerUsage") { $Data += "`n$($TempStats.Count) stat file$(if ($TempStats.Count -ne 1) { "s" }) with $($Parameters.Value)W power usage." }
+ }
+ Else {
+ $Data = $TempStats | ConvertTo-Json
+ }
+ }
+ Else {
+ $Data = "No matching stats found."
+ }
+ Break
+ }
+ "/functions/stat/remove" {
+ If ($Parameters.Pools) {
+ If ($Pools = @(Compare-Object -PassThru -IncludeEqual -ExcludeDifferent @($Variables.Pools | Select-Object) @($Parameters.Pools | ConvertFrom-Json -ErrorAction SilentlyContinue | Select-Object) -Property Algorithm, Currency, Name)) {
+ $Pools | Sort-Object Name | ForEach-Object {
+ $Stat_Name = "$($_.Name)_$($_.Algorithm)$(If ($_.Currency) { "-$($_.Currency)" })"
+ $Data += "$($Stat_Name)`n"
+ Remove-Stat -Name "$($Stat_Name)_Profit"
+ $_.Reasons = [String[]]@()
+ $_.Price = $_.Price_Bias = $_.StablePrice = $_.Accuracy = [Double]::Nan
+ $_.Available = $true
+ $_.Disabled = $false
+ }
+ $Message = "Reset pool stats for $($Pools.Count) $(If ($Pools.Count -eq 1) { "pool" } Else { "pools" })."
+ Write-Message -Level Verbose "Web GUI: $Message"
+ $Data += "`n$Message"
+ }
+ Else {
+ $Data = "No matching pool stats found."
+ }
+ Break
+ }
+ ElseIf ($Parameters.Miners -and $Parameters.Type -eq "Hashrate") {
+ If ($Miners = @(Compare-Object -PassThru -IncludeEqual -ExcludeDifferent @($Variables.Miners | Select-Object) @($Parameters.Miners | ConvertFrom-Json -ErrorAction SilentlyContinue | Select-Object) -Property Name, Algorithms)) {
+ $Miners | Sort-Object Name, Algorithms | ForEach-Object {
+ If ($_.Earning -eq 0) { $_.Available = $true }
+ $_.Earning_Accuracy = [Double]::NaN
+ $_.Activated = 0 # To allow 3 attempts
+ $_.Disabled = $false
+ $_.Benchmark = $true
+ $_.Restart = $true
+ $Data += "$($_.Name) ($($_.Algorithms -join " & "))`n"
+ ForEach ($Worker in $_.Workers) {
+ Remove-Stat -Name "$($_.Name)_$($Worker.Pool.Algorithm)_Hashrate"
+ $Worker.Hashrate = [Double]::NaN
+ }
+ # Also clear power usage
+ Remove-Stat -Name "$($_.Name)$(If ($_.Algorithms.Count -eq 1) { "_$($_.Algorithms[1])" })_PowerUsage"
+ $_.PowerUsage = $_.PowerCost = $_.Profit = $_.Profit_Bias = $_.Earning = $_.Earning_Bias = [Double]::NaN
+
+ $_.Reasons = @($_.Reasons | Where-Object { $_ -ne "Disabled by user" })
+ $_.Reasons = @($_.Reasons | Where-Object { $_ -ne "0 H/s Stat file" })
+ $_.Reasons = @($_.Reasons | Where-Object { $_ -notlike "Unreal profit data *" })
+ If (-not $_.Reasons) { $_.Available = $true }
+ If ($_.Status -eq "Disabled") { $_.Status = "Idle" }
+ }
+ Write-Message -Level Verbose "Web GUI: Re-benchmark triggered for $($Miners.Count) $(If ($Miners.Count -eq 1) { "miner" } Else { "miners" })."
+ $Data += "`n$(If ($Miners.Count -eq 1) { "The miner" } Else { "$($Miners.Count) miners" }) will re-benchmark."
+ }
+ Else {
+ $Data = "No matching hashrate stats found."
+ }
+ Break
+ }
+ ElseIf ($Parameters.Miners -and $Parameters.Type -eq "PowerUsage") {
+ If ($Miners = @(Compare-Object -PassThru -IncludeEqual -ExcludeDifferent @($Variables.Miners | Select-Object) @($Parameters.Miners | ConvertFrom-Json -ErrorAction SilentlyContinue | Select-Object) -Property Name, Algorithms)) {
+ $Miners | Sort-Object Name, Algorithms | ForEach-Object {
+ If ($_.Earning -eq 0) { $_.Available = $true }
+ If ($Variables.CalculatePowerCost) {
+ $_.MeasurePowerUsage = $true
+ $_.Activated = 0 # To allow 3 attempts
+ }
+ $_.PowerUsage = [Double]::NaN
+ $Stat_Name = "$($_.Name)$(If ($_.Algorithms.Count -eq 1) { "_$($_.Algorithms)" })"
+ $Data += "$Stat_Name`n"
+ Remove-Stat -Name "$($Stat_Name)_PowerUsage"
+ $_.PowerUsage = $_.PowerCost = $_.Profit = $_.Profit_Bias = $_.Earning = $_.Earning_Bias = [Double]::NaN
+ If ($_.Status -eq "Disabled") { $_.Status = "Idle" }
+ }
+ Write-Message -Level Verbose "Web GUI: Re-measure power usage triggered for $($Miners.Count) $(If ($Miners.Count -eq 1) { "miner" } Else { "miners" })." -Verbose
+ $Data += "`n$(If ($Miners.Count -eq 1) { "The miner" } Else { "$($Miners.Count) miners" }) will re-measure power usage."
+ }
+ Else {
+ $Data = "No matching power usage stats found."
+ }
+ Break
+ }
+ If ($Parameters.Value) { $TempStats = @($Stats.Keys | Where-Object { $_ -like "*$($Parameters.Type)" } | Where-Object { $Stats.$_.Live -eq $Parameters.Value } | ForEach-Object { $Stats.$_ }) }
+ Else { $TempStats = @($Stats.Keys | Where-Object { $_ -like "*$($Parameters.Type)" } | ForEach-Object { $Stats.$_ }) }
+ If ($TempStats) {
+ $TempStats | Sort-Object Name | ForEach-Object {
+ Remove-Stat -Name $_.Name
+ $Data += "$($_.Name -replace "_$($Parameters.Type)")`n"
+ }
+ Write-Message -Level Info "Web GUI: Removed $($TempStats.Count) $($Parameters.Type) stat file$(If ($TempStats.Count -ne 1) { "s" })."
+ If ($Parameters.Type -eq "Hashrate") { $Data += "`nReset $($TempStats.Count) stat file$(if ($TempStats.Count -ne 1) { "s" }) with $($Parameters.Value)H/s $($Parameters.Type)." }
+ ElseIf ($Parameters.Type -eq "PowerUsage") { $Data += "`nReset $($TempStats.Count) stat file$(if ($TempStats.Count -ne 1) { "s" }) with $($Parameters.Value)W $($Parameters.Type)." }
+ ElseIf ($Parameters.Type -eq "Profit") { $Data += "`nReset $($TempStats.Count) pool stat file$(if ($TempStats.Count -ne 1) { "s" })." }
+ }
+ Else {
+ $Data = "No matching stats found."
+ }
+ Break
+ }
+ "/functions/stat/set" {
+ If ($Parameters.Miners -and $Parameters.Type -eq "Hashrate" -and $null -ne $Parameters.Value) {
+ If ($Miners = @(Compare-Object -PassThru -IncludeEqual -ExcludeDifferent @($Variables.Miners | Select-Object) @($Parameters.Miners | ConvertFrom-Json -ErrorAction SilentlyContinue | Select-Object) -Property Name, Algorithms)) {
+ $Miners | Sort-Object Name, Algorithms | ForEach-Object {
+ $_.Data = @()
+ If ($Parameters.Value -le 0 -and $Parameters.Type -eq "Hashrate") { $_.Available = $false; $_.Disabled = $true }
+ $Data += "$($_.Name) ($($_.Algorithms -join " & "))`n"
+ ForEach ($Algorithm in $_.Algorithms) {
+ $Stat_Name = "$($_.Name)_$($Algorithm)_$($Parameters.Type)"
+ If ($Parameters.Value -eq 0) { # Miner failed
+ Remove-Stat -Name $Stat_Name
+ $_.Profit = $_.Profit_Bias = $_.Earning = $_.Earning_Bias = $_.Earning_Accuracy = [Double]::NaN
+ $_.Available = $false
+ $_.Disabled = $false
+ $_.Reasons = @($_.Reasons | Where-Object { $_ -notlike "Disabled by user" })
+ If ($_.Reasons -notcontains "0 H/s Stat file" ) { $_.Reasons += "0 H/s Stat file" }
+ $_.Status = [MinerStatus]::Failed
+ Set-Stat -Name $Stat_Name -Value $Parameters.Value -FaultDetection $false | Out-Null
+ }
+ ElseIf ($Parameters.Value -eq -1) { # Miner disabled
+ $_.Available = $false
+ $_.Disabled = $true
+ If ($_.Reasons -notcontains "Disabled by user") { $_.Reasons += "Disabled by user" }
+ $_.Status = [MinerStatus]::Disabled
+ Disable-Stat -Name $Stat_Name | Out-Null
+ }
+ }
+ }
+ Write-Message -Level Verbose "Web GUI: Disabled $($Miners.Count) $(If ($Miners.Count -eq 1) { "miner" } Else { "miners" })." -Verbose
+ $Data += "`n$(If ($Miners.Count -eq 1) { "The miner is" } Else { "$($Miners.Count) miners are" }) $(If ($Parameters.Value -eq 0) { "marked as failed" } ElseIf ($Parameters.Value -eq -1) { "disabled" } Else { "set to value $($Parameters.Value)" } )."
+ }
+ Else {
+ $Data = "No matching miners found."
+ }
+ Break
+ }
+ }
+ "/functions/switchinglog/clear" {
+ Get-ChildItem -Path ".\Logs\switchinglog.csv" -File | Remove-Item -Force
+ $Data = "Switching log '.\Logs\switchinglog.csv' cleared."
+ Break
+ }
+ "/functions/variables/get" {
+ If ($Key) {
+ $Data = $Variables.($Key -replace '\\|/','.' -split '\.' | Select-Object -Last 1) | Get-SortedObject | ConvertTo-Json -Depth 10
+ }
+ Else {
+ $Data = $Variables.Keys | Sort-Object | ConvertTo-Json -Depth 1
+ }
+ Break
+ }
+ "/functions/watchdogtimers/remove" {
+ ForEach ($WatchdogTimer in ($Parameters.Miners | ConvertFrom-Json -ErrorAction SilentlyContinue)) {
+ If ($WatchdogTimers = @($Variables.WatchdogTimers | Where-Object MinerName -EQ $WatchdogTimer.Name | Where-Object { $_.Algorithm -eq $WatchdogTimer.Algorithms })) {
+ # Remove Watchdog timers
+ $Variables.WatchdogTimers = @($Variables.WatchdogTimers | Where-Object { $_ -notin $WatchdogTimers })
+ $Data += "$($WatchdogTimer.Name) {$($WatchdogTimer.Algorithm -join ', ')}`n"
+
+ # Update miner
+ $Variables.Miners | Where-Object Name -EQ $WatchdogTimer.Name | Where-Object Algorithm -EQ $WatchdogTimer.Algorithm | ForEach-Object {
+ $_.Reasons = @($_.Reasons | Where-Object { $_ -notlike "Miner suspended by watchdog *" })
+ If (-not $_.Reasons) { $_.Available = $true }
+ }
+ }
+ }
+ ForEach ($WatchdogTimer in ($Parameters.Pools | ConvertFrom-Json -ErrorAction SilentlyContinue)) {
+ If ($WatchdogTimers = @($Variables.WatchdogTimers | Where-Object PoolName -EQ $WatchdogTimer.Name | Where-Object { $_.Algorithm -EQ $WatchdogTimer.Algorithm })) {
+ # Remove Watchdog timers
+ $Variables.WatchdogTimers = @($Variables.WatchdogTimers | Where-Object { $_ -notin $WatchdogTimers })
+ $Data += "$($WatchdogTimer.Name) {$($WatchdogTimer.Algorithm -join ', ')}`n"
+
+ # Update pool
+ $Variables.Pools | Where-Object Name -EQ $WatchdogTimer.Name | Where-Object Algorithm -EQ $WatchdogTimer.Algorithm | ForEach-Object {
+ $_.Reasons = @($_.Reasons | Where-Object { $_ -notlike "Algorithm@Pool suspended by watchdog" })
+ $_.Reasons = @($_.Reasons | Where-Object { $_ -notlike "Pool suspended by watchdog*" })
+ If (-not $_.Reasons) { $_.Available = $true }
+ }
+ }
+ }
+ If ($WatchdogTimers) {
+ $Message = "$($Data.Count) $(If ($Data.Count -eq 1) { "watchdog timer" } Else { "watchdog timers" }) removed."
+ Write-Message -Level Verbose "Web GUI: $Message"
+ $Data += "`n$Message"
+ }
+ Else {
+ $Data = "No matching watchdog timers found."
+ }
+ Break
+ }
+ "/functions/watchdogtimers/reset" {
+ $Variables.WatchDogTimers = @()
+ $Variables.Miners | ForEach-Object { $_.Reasons = @($_.Reasons | Where-Object { $_ -notlike "Miner suspended by watchdog *" }); $_ } | Where-Object { -not $_.Reasons } | ForEach-Object { $_.Available = $true }
+ $Variables.Pools | ForEach-Object { $_.Reasons = @($_.Reasons | Where-Object { $_ -notlike "*Pool suspended by watchdog" }); $_ } | Where-Object { -not $_.Reasons } | ForEach-Object { $_.Available = $true }
+ Write-Message -Level Verbose "Web GUI: All watchdog timers reset."
+ $Data = "Watchdog timers will be recreated in next cycle."
+ Break
+ }
+ "/algorithms" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.Algorithms | Select-Object)
+ Break
+ }
+ "/algorithms/lastused" {
+ $Data = ConvertTo-Json -Depth 10 $Variables.AlgorithmsLastUsed
+ Break
+ }
+ "/allcurrencies" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.AllCurrencies)
+ break
+ }
+ "/apiversion" {
+ $Data = $APIVersion
+ Break
+ }
+ "/balances" {
+ $Data = ConvertTo-Json -Depth 10 ($Variables.Balances | Select-Object)
+ Break
+ }
+ "/balancedata" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.BalanceData | Sort-Object DateTime -Descending)
+ Break
+ }
+ "/btc" {
+ $Data = $Variables.Rates.BTC.($Config.Currency)
+ Break
+ }
+ "/balancescurrencies" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.BalancesCurrencies)
+ break
+ }
+ "/braindata" {
+ $Data = ConvertTo-Json -Depth 2 ($Variables.BrainData | Select-Object)
+ Break
+ }
+ "/brainjobs" {
+ $Data = ConvertTo-Json -Depth 2 ($Variables.BrainJobs | Select-Object)
+ Break
+ }
+ "/coinnames" {
+ $Data = Get-Content -Path ".\Data\CoinNames.json"
+ Break
+ }
+ "/config" {
+ $Data = ConvertTo-Json -Depth 10 (Get-Content -Path $Variables.ConfigFile | ConvertFrom-Json -Depth 10 | Get-SortedObject)
+ If (-not ($Data | ConvertFrom-Json).ConfigFileVersion) {
+ $Data = ConvertTo-Json -Depth 10 ($Config | Select-Object -Property * -ExcludeProperty PoolsConfig)
+ }
+ Break
+ }
+ "/configfile" {
+ $Data = $Variables.ConfigFile
+ break
+ }
+ "/configrunning" {
+ $Data = ConvertTo-Json -Depth 10 ($Config | Get-SortedObject)
+ Break
+ }
+ "/currency" {
+ $Data = $Config.Currency
+ Break
+ }
+ "/currencyalgorithm" {
+ $Data = Get-Content -Path ".\Data\CurrencyAlgorithm.json"
+ Break
+ }
+ "/dagdata" {
+ $Data = ConvertTo-Json -Depth 10 ($Variables.DAGdata | Select-Object)
+ Break
+ }
+ "/devices" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.Devices | Sort-Object Name| Select-Object | Sort-Object Name)
+ Break
+ }
+ "/devices/enabled" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.Devices | Where-Object State -EQ "Enabled" | Select-Object | Sort-Object Name)
+ Break
+ }
+ "/devices/disabled" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.Devices | Where-Object State -EQ "Disabled" | Select-Object | Sort-Object Name)
+ Break
+ }
+ "/devices/unsupported" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.Devices | Where-Object State -EQ "Unsupported" | Select-Object | Sort-Object Name)
+ Break
+ }
+ "/defaultalgorithm" {
+ $Data = ConvertTo-Json -Depth 10 (Get-DefaultAlgorithm)
+ Break
+ }
+ "/displayworkers" {
+ If ($Config.ShowWorkerStatus -and $Config.MonitoringUser -and $Config.MonitoringServer -and $Variables.WorkersLastUpdated -lt (Get-Date).AddSeconds(-30)) {
+ Read-MonitoringData
+ }
+ $Workers = [System.Collections.ArrayList]@(
+ $Variables.Workers | Select-Object @(
+ @{ Name = "Algorithm"; Expression = { ($_.data | ForEach-Object { $_.Algorithm -split "," -join " & " }) -join "
" } },
+ @{ Name = "Benchmark Hashrate"; Expression = { ($_.data | ForEach-Object { ($_.EstimatedSpeed | ForEach-Object { If ([Double]$_ -gt 0) { "$($_ | ConvertTo-Hash)/s" -replace "\s+", " " } Else { "-" } }) -join " & " }) -join "
" } },
+ @{ Name = "Currency"; Expression = { $_.Data.Currency | Select-Object -Unique } },
+ @{ Name = "EstimatedEarning"; Expression = { [Decimal](($_.Data.Earning | Measure-Object -Sum).Sum * $Variables.Rates.BTC.($_.Data.Currency | Select-Object -Unique)) } },
+ @{ Name = "EstimatedProfit"; Expression = { [Decimal]($_.Profit * $Variables.Rates.BTC.($_.Data.Currency | Select-Object -Unique)) } },
+ @{ Name = "LastSeen"; Expression = { "$($_.date)" } },
+ @{ Name = "Live Hashrate"; Expression = { ($_.data | ForEach-Object { ($_.CurrentSpeed | ForEach-Object { If ([Double]$_ -gt 0) { "$($_ | ConvertTo-Hash)/s" -replace "\s+", " " } Else { "-" } }) -join " & " }) -join "
" } },
+ @{ Name = "Miner"; Expression = { $_.data.name -join '
'} },
+ @{ Name = "Pool"; Expression = { ($_.data | ForEach-Object { ($_.Pool -split "," | ForEach-Object { $_ -replace "Internal$", " (Internal)" -replace "External", " (External)" }) -join " & "}) -join "
" } },
+ @{ Name = "Status"; Expression = { $_.status } },
+ @{ Name = "Version"; Expression = { $_.version } },
+ @{ Name = "Worker"; Expression = { $_.worker } }
+ ) | Sort-Object "Worker Name"
+ )
+ $Data = ConvertTo-Json @($Workers | Select-Object)
+ Break
+ }
+ "/donationdata" {
+ $Data = ConvertTo-Json $Variables.DonationData
+ Break
+ }
+ "/donationlog" {
+ $Data = ConvertTo-Json $Variables.DonationLog
+ Break
+ }
+ "/driverversion" {
+ $Data = ConvertTo-Json -Depth 10 ($Variables.DriverVersion | Select-Object)
+ Break
+ }
+ "/earningschartdata" {
+ $Data = ConvertTo-Json $Variables.EarningsChartData
+ Break
+ }
+ "/EquihashCoinPers" {
+ $Data = Get-Content -Path ".\Data\EquihashCoinPers.json"
+ Break
+ }
+ "/extracurrencies" {
+ $Data = ConvertTo-Json -Depth 10 $Config.ExtraCurrencies
+ break
+ }
+ "/fiatcurrencies" {
+ $Data = ConvertTo-Json -Depth 10 ($Variables.FIATcurrencies | Select-Object)
+ Break
+ }
+ "/miners" {
+ $Data = ConvertTo-Json -Depth 4 @($Variables.Miners | Select-Object -Property * -ExcludeProperty Data, DataReaderJob, Devices, Process, SideIndicator | ConvertTo-Json -Depth 4 | ConvertFrom-Json | ForEach-Object { If ($_.WorkersRunning) { $_ | Add-Member Workers $_.WorkersRunning -Force }; $_ } | Select-Object -Property * -ExcludeProperty WorkersRunning | Sort-Object Status, DeviceName, Name)
+ Break
+ }
+ "/miners/available" {
+ $Data = ConvertTo-Json -Depth 4 @($Variables.Miners | Where-Object Available | Select-Object -Property * -ExcludeProperty Data, DataReaderJob, Devices, Process, SideIndicator | Sort-Object Name)
+ Break
+ }
+ "/miners/best" {
+ $Data = ConvertTo-Json -Depth 4 @($Variables.MinersBest | Select-Object -Property * -ExcludeProperty Data, DataReaderJob, Devices, Process, SideIndicator | ConvertTo-Json -Depth 4 | ConvertFrom-Json | ForEach-Object { If ($_.WorkersRunning) { $_ | Add-Member Workers $_.WorkersRunning -Force }; $_ } | Select-Object -Property * -ExcludeProperty WorkersRunning | Sort-Object DeviceName)
+ Break
+ }
+ "/miners/best_combo" {
+ $Data = ConvertTo-Json -Depth 4 @($Variables.MinersBest_Combo | Sort-Object DeviceNames | Select-Object -Property * -ExcludeProperty Data, DataReaderJob, Devices, Process, SideIndicator)
+ Break
+ }
+ "/miners/best_combos" {
+ $Data = ConvertTo-Json -Depth 4 @($Variables.MinersBest_Combos | Select-Object -Property * -ExcludeProperty Data, DataReaderJob, Devices, Process, SideIndicator)
+ Break
+ }
+ "/miners/disabled" {
+ $Data = ConvertTo-Json -Depth 4 @($Variables.Miners | Where-Object { $_.Status -EQ [MinerStatus]::Disabled } | Select-Object -Property * -ExcludeProperty Data, DataReaderJob, Devices, Process, SideIndicator | Sort-Object DeviceName, EndTime)
+ Break
+ }
+ "/miners/failed" {
+ $Data = ConvertTo-Json -Depth 4 @($Variables.Miners | Where-Object { $_.Status -EQ [MinerStatus]::Failed } | Select-Object -Property * -ExcludeProperty Data, DataReaderJob, Devices, Process, SideIndicator | Sort-Object DeviceName, EndTime)
+ Break
+ }
+ "/miners/mostprofitable" {
+ $Data = ConvertTo-Json -Depth 4 @($Variables.MinersMostProfitable | Select-Object -Property * -ExcludeProperty Data, DataReaderJob, Devices, Process, SideIndicator | Sort-Object Status, DeviceName, @{Expression = "Earning_Bias"; Descending = $True })
+ Break
+ }
+ "/miners/running" {
+ $Data = ConvertTo-Json -Depth 4 @($Variables.Miners | Where-Object Available | Where-Object { $_.Status -EQ [MinerStatus]::Running } | Select-Object -Property * -ExcludeProperty Data, DataReaderJob, Devices, Process, SideIndicator, Workers | ConvertTo-Json -Depth 4 | ConvertFrom-Json | ForEach-Object { $_ | Add-Member Workers $_.WorkersRunning; $_ } | Select-Object -Property * -ExcludeProperty WorkersRunning)
+ Break
+ }
+ "/miners/unavailable" {
+ $Data = ConvertTo-Json -Depth 4 @($Variables.Miners | Where-Object Available -NE $true | Select-Object -Property * -ExcludeProperty Data, DataReaderJob, Devices, Process, SideIndicator | Sort-Object DeviceName, Name, Algorithm)
+ Break
+ }
+ "/miners_device_combos" {
+ $Data = ConvertTo-Json -Depth 4 @($Variables.Miners_Device_Combos | Select-Object -Property * -ExcludeProperty Data, DataReaderJob, Devices, Process, SideIndicator)
+ Break
+ }
+ "/miningpowercost" {
+ $Data = $Variables.MiningPowerCost
+ Break
+ }
+ "/miningearning" {
+ $Data = $Variables.MiningEarning
+ Break
+ }
+ "/miningprofit" {
+ $Data = $Variables.MiningProfit
+ Break
+ }
+ "/pooldata" {
+ $Data = ConvertTo-Json -Depth 10 $Variables.PoolData
+ break
+ }
+ "/poolsconfig" {
+ $Data = ConvertTo-Json -Depth 10 ($Config.PoolsConfig | Select-Object)
+ Break
+ }
+ "/poolsconfigfile" {
+ $Data = $Variables.PoolsConfigFile
+ Break
+ }
+ "/pools" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.Pools | Select-Object | Sort-Object Algorithm, Name, Region)
+ Break
+ }
+ "/pools/added" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.PoolsAdded | Select-Object | Sort-Object Algorithm, Name, Region)
+ Break
+ }
+ "/pools/available" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.Pools | Where-Object Available | Select-Object | Sort-Object Algorithm, Name, Region)
+ Break
+ }
+ "/pools/best" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.PoolsBest | Select-Object | Sort-Object Algorithm, Name, Region)
+ Break
+ }
+ "/pools/new" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.NewPools | Select-Object | Sort-Object Algorithm, Name, Region)
+ Break
+ }
+ "/pools/minersprimaryalgorithm" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.MinerPools[0] | Select-Object)
+ Break
+ }
+ "/pools/minerssecondaryalgorithm" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.MinerPools[1] | Select-Object)
+ Break
+ }
+ "/pools/lastearnings" {
+ $Data = ConvertTo-Json -Depth 10 $Variables.PoolsLastEarnings
+ Break
+ }
+ "/pools/lastused" {
+ $Data = ConvertTo-Json -Depth 10 $Variables.PoolsLastUsed
+ Break
+ }
+ "/pools/unavailable" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.Pools | Where-Object Available -NE $true | Select-Object | Sort-Object Algorithm, Name, Region)
+ Break
+ }
+ "/pools/updated" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.PoolsUpdated | Select-Object | Sort-Object Algorithm, Name, Region)
+ Break
+ }
+ "/poolreasons" {
+ $Data = ConvertTo-Json -Depth 10 (($Variables.Pools | Where-Object Available -NE $true).Reasons | Sort-Object -Unique)
+ Break
+ }
+ "/poolvariants" {
+ $Data = ConvertTo-Json -Depth 10 $Variables.PoolVariants
+ break
+ }
+ "/rates" {
+ $Data = ConvertTo-Json -Depth 10 ($Variables.Rates | Select-Object)
+ Break
+ }
+ "/regions" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.Regions.PSObject.Properties.Value | Sort-Object -Unique)
+ Break
+ }
+ "/regionsdata" {
+ $Data = ConvertTo-Json -Depth 10 $Variables.Regions
+ Break
+ }
+ "/stats" {
+ $Data = ConvertTo-Json -Depth 10 ($Stats | Select-Object)
+ Break
+ }
+ "/summary" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.Summary | Select-Object)
+ Break
+ }
+ "/switchinglog" {
+ $Data = ConvertTo-Json -Depth 10 @(Get-Content ".\Logs\switchinglog.csv" | ConvertFrom-Csv | Select-Object -Last 1000 | Sort-Object DateTime -Descending)
+ Break
+ }
+ "/unprofitablealgorithms" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.UnprofitableAlgorithms | Select-Object)
+ Break
+ }
+ "/watchdogtimers" {
+ $Data = ConvertTo-Json -Depth 10 @($Variables.WatchdogTimers | Select-Object)
+ Break
+ }
+ "/wallets" {
+ $Data = ConvertTo-Json -Depth 10 ($Config.Wallets | Select-Object)
+ Break
+ }
+ "/watchdogexpiration" {
+ $Data = $Variables.WatchdogReset
+ Break
+ }
+ "/version" {
+ $Data = ConvertTo-Json @("$($Variables.Branding.ProductLabel) Version: $($Variables.Branding.Version)", "API Version: $($Variables.APIVersion)", "PWSH Version: $($PSVersionTable.PSVersion.ToString())")
+ Break
+ }
+ Default {
+ # Set index page
+ If ($Path -eq "/") { $Path = "/index.html" }
+
+ # Check if there is a file with the requested path
+ $Filename = "$BasePath$Path"
+ If (Test-Path -Path $Filename -PathType Leaf) {
+ # If the file is a PowerShell script, execute it and return the output. A $Parameters parameter is sent built from the query string
+ # Otherwise, just return the contents of the file
+ $File = Get-ChildItem $Filename -File
+
+ If ($File.Extension -eq ".ps1") {
+ $Data = & $File.FullName -Parameters $Parameters
+ }
+ Else {
+ $Data = Get-Content $Filename -Raw
+
+ # Process server side includes for html files
+ # Includes are in the traditional '' format used by many web servers
+ If ($File.Extension -eq ".html") {
+ $IncludeRegex = [regex]''
+ $IncludeRegex.Matches($Data) | Foreach-Object {
+ $IncludeFile = $BasePath + '/' + $_.Groups[1].Value
+ If (Test-Path -Path $IncludeFile -PathType Leaf) {
+ $IncludeData = Get-Content $IncludeFile -Raw
+ $Data = $Data -replace $_.Value, $IncludeData
+ }
+ }
+ }
+ }
+
+ # Set content type based on file extension
+ If ($MIMETypes.ContainsKey($File.Extension)) {
+ $ContentType = $MIMETypes[$File.Extension]
+ }
+ Else {
+ # If it's an unrecognized file type, prompt for download
+ $ContentType = "application/octet-stream"
+ }
+ }
+ Else {
+ $StatusCode = 404
+ $ContentType = "text/html"
+ $Data = "URI '$Path' is not a valid resource."
+ }
+ }
+}
+
+# If $Data is null, the API will just return whatever data was in the previous request. Instead, show an error
+# This happens if the script just started and hasn't filled all the properties in yet.
+If ($Data -eq $null) {
+ $Data = @{ "Error" = "API data not available" } | ConvertTo-Json
+}
+
+# Fix for Powershell 5.1, cannot handle NaN in Json
+If ($PSVersionTable.PSVersion -lt [Version]"6.0.0.0" ) { $Data = $Data -replace '":\s*NaN,', '": "-",' }
+
+$Data
\ No newline at end of file
diff --git a/Includes/Downloader.ps1 b/Includes/Downloader.ps1
index 4a75570e20..93d39c1158 100644
--- a/Includes/Downloader.ps1
+++ b/Includes/Downloader.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: Downloader.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module .\Includes\Include.psm1
diff --git a/Includes/Include.psm1 b/Includes/Include.psm1
index e70c1a14f0..d0963bdbca 100644
--- a/Includes/Include.psm1
+++ b/Includes/Include.psm1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: include.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
# Window handling
@@ -415,7 +415,7 @@ Class Miner {
Duration = "{0:hh\:mm\:ss}" -f ($this.EndTime - $this.BeginTime)
Earning = $this.Earning
Earning_Bias = $this.Earning_Bias
- LastDataSample = $this.Data | Select-Object -Last 1 -ErrorAction SilentlyContinue | ConvertTo-Json -Compress
+ LastDataSample = $this.Data | Select-Object -Last 1 -ErrorAction Ignore | ConvertTo-Json -Compress
MeasurePowerUsage = $this.MeasurePowerUsage
Pools = ($this.WorkersRunning.Pool.Name | Select-Object -Unique) -join "; "
Profit = $this.Profit
@@ -689,7 +689,6 @@ namespace PInvoke.Win32 {
) | Out-Null
$Variables.IdleRunspace | Add-Member -Force @{ Name = "IdleRunspace"; Handle = $PowerShell.BeginInvoke(); PowerShell = $PowerShell; StartTime = (Get-Date).ToUniversalTime()}
-
}
Function Stop-IdleDetection {
@@ -922,22 +921,22 @@ Function Initialize-Application {
Exit
}
# Load coin names
- $Global:CoinNames = Get-Content -Path ".\Data\CoinNames.json" | ConvertFrom-Json
- If (-not $Global:CoinNames) {
+ $Variables.CoinNames = Get-Content -Path ".\Data\CoinNames.json" | ConvertFrom-Json -AsHashtable
+ If (-not $Variables.CoinNames) {
Write-Message -Level Error "Terminating Error - Cannot continue! File '.\Data\CoinNames.json' is not a valid JSON file. Please restore it from your original download."
$WscriptShell.Popup("File '.\Data\CoinNames.json' is not a valid JSON file.`nPlease restore it from your original download.", 0, "Terminating error - Cannot continue!", 4112) | Out-Null
Exit
}
# Load EquihashCoinPers data
- $Global:EquihashCoinPers = Get-Content -Path ".\Data\EquihashCoinPers.json" | ConvertFrom-Json
- If (-not $Global:EquihashCoinPers) {
+ $Variables.EquihashCoinPers = Get-Content -Path ".\Data\EquihashCoinPers.json" | ConvertFrom-Json
+ If (-not $Variables.EquihashCoinPers) {
Write-Message -Level Error "Terminating Error - Cannot continue! File '.\Data\EquihashCoinPers.json' is not a valid JSON file. Please restore it from your original download."
$WscriptShell.Popup("File '.\Data\EquihashCoinPers.json' is not a valid JSON file.`nPlease restore it from your original download.", 0, "Terminating error - Cannot continue!", 4112) | Out-Null
Exit
}
# Load currency algorithm data
- $Global:CurrencyAlgorithm = Get-Content -Path ".\Data\CurrencyAlgorithm.json" | ConvertFrom-Json
- If (-not $Global:CurrencyAlgorithm) {
+ $Variables.CurrencyAlgorithm = Get-Content -Path ".\Data\CurrencyAlgorithm.json" | ConvertFrom-Json -AsHashtable
+ If (-not $Variables.CurrencyAlgorithm) {
Write-Message -Level Error "Terminating Error - Cannot continue! File '.\Data\CurrencyAlgorithm.json' is not a valid JSON file. Please restore it from your original download."
$WscriptShell.Popup("File '.\Data\CurrencyAlgorithm.json' is not a valid JSON file.`nPlease restore it from your original download.", 0, "Terminating error - Cannot continue!", 4112) | Out-Null
Start-Sleep -Seconds 10
@@ -2911,14 +2910,7 @@ Function Add-CoinName {
[String]$CoinName
)
- If (-not (Test-Path -Path Variable:Global:CoinNames -ErrorAction SilentlyContinue)) {
- $Global:CoinNames = Get-Content -Path ".\Data\CoinNames.json" | ConvertFrom-Json
- }
- If (-not (Test-Path -Path Variable:Global:CurrencyAlgorithm -ErrorAction SilentlyContinue)) {
- $Global:CurrencyAlgorithm = Get-Content -Path ".\Data\CurrencyAlgorithm.json" | ConvertFrom-Json
- }
-
- If ($Global:CoinNames.$Currency -and $Global:CurrencyAlgorithm.$Currency) {
+ If ($Variables.CoinNames.$Currency -and $Variables.CurrencyAlgorithm.$Currency) {
Return
}
Else {
@@ -2929,15 +2921,13 @@ Function Add-CoinName {
# Attempt to aquire mutex, waiting up to 1 second if necessary. If aquired, update the coin names file and release mutex. Otherwise, display an error.
If ($Mutex.WaitOne(1000)) {
- If (-not $Global:CurrencyAlgorithm.$Currency) {
- $Global:CurrencyAlgorithm = Get-Content -Path ".\Data\CurrencyAlgorithm.json" | ConvertFrom-Json -AsHashtable | Get-SortedObject
- $Global:CurrencyAlgorithm | Add-Member $Currency $Algorithm -Force
- $Global:CurrencyAlgorithm | ConvertTo-Json | Out-File -Path ".\Data\CurrencyAlgorithm.json" -ErrorAction SilentlyContinue -Encoding utf8NoBOM -Force
+ If (-not $Variables.CurrencyAlgorithm.$Currency) {
+ $Variables.CurrencyAlgorithm.$Currency = $Algorithm
+ $Variables.CurrencyAlgorithm | Get-SortedObject | ConvertTo-Json | Out-File -Path ".\Data\CurrencyAlgorithm.json" -ErrorAction SilentlyContinue -Encoding utf8NoBOM -Force
}
- If (-not $Global:CoinNames.$Currency) {
- $Global:CoinNames = Get-Content -Path ".\Data\CoinNames.json" | ConvertFrom-Json -AsHashtable | Get-SortedObject
- $Global:CoinNames | Add-Member $Currency ((Get-Culture).TextInfo.ToTitleCase($CoinName.Trim().ToLower()) -replace '[^A-Z0-9\$\.]' -replace 'coin$', 'Coin' -replace 'bitcoin$', 'Bitcoin') -Force
- $Global:CoinNames | ConvertTo-Json | Out-File -Path ".\Data\CoinNames.json" -ErrorAction SilentlyContinue -Encoding utf8NoBOM -Force
+ If (-not $Variables.CoinNames.$Currency) {
+ $Variables.CoinNames.$Currency = ((Get-Culture).TextInfo.ToTitleCase($CoinName.Trim().ToLower()) -replace '[^A-Z0-9\$\.]' -replace 'coin$', 'Coin' -replace 'bitcoin$', 'Bitcoin')
+ $Variables.CoinNames | Get-SortedObject | ConvertTo-Json | Out-File -Path ".\Data\CoinNames.json" -ErrorAction SilentlyContinue -Encoding utf8NoBOM -Force
}
[Void]$Mutex.ReleaseMutex()
}
@@ -2952,13 +2942,13 @@ Function Get-CoinName {
)
If ($Currency) {
- If ($Global:CoinNames.$Currency) {
- Return $Global:CoinNames.$Currency
+ If ($Variables.CoinNames.$Currency) {
+ Return $Variables.CoinNames.$Currency
}
- $Global:CoinNames = Get-Content -Path ".\Data\CoinNames.json" | ConvertFrom-Json
- If ($Global:CoinNames.$Currency) {
- Return $Global:CoinNames.$Currency
+ $Variables.CoinNames = Get-Content -Path ".\Data\CoinNames.json" | ConvertFrom-Json
+ If ($Variables.CoinNames.$Currency) {
+ Return $Variables.CoinNames.$Currency
}
}
Return $null
@@ -2976,13 +2966,13 @@ Function Get-EquihashCoinPers {
)
If ($Currency) {
- If ($Global:EquihashCoinPers.$Currency) {
- Return "$($Command)$($Global:EquihashCoinPers.$Currency)"
+ If ($Variables.EquihashCoinPers.$Currency) {
+ Return "$($Command)$($Variables.EquihashCoinPers.$Currency)"
}
- $Global:EquihashCoinPers = Get-Content -Path ".\Data\EquihashCoinPers.json" | ConvertFrom-Json
- If ($Global:EquihashCoinPers.$Currency) {
- Return "$($Command)$($Global:EquihashCoinPers.$Currency)"
+ $Variables.EquihashCoinPers = Get-Content -Path ".\Data\EquihashCoinPers.json" | ConvertFrom-Json
+ If ($Variables.EquihashCoinPers.$Currency) {
+ Return "$($Command)$($Variables.EquihashCoinPers.$Currency)"
}
}
Return $DefaultCommand
@@ -2996,13 +2986,13 @@ Function Get-AlgorithmFromCurrency {
)
If ($Currency) {
- If ($Global:CurrencyAlgorithm.$Currency) {
- Return $Global:CurrencyAlgorithm.$Currency
+ If ($Variables.CurrencyAlgorithm.$Currency) {
+ Return $Variables.CurrencyAlgorithm.$Currency
}
- $Global:CurrencyAlgorithm = Get-Content -Path ".\Data\CurrencyAlgorithm.json" | ConvertFrom-Json
- If ($Global:CurrencyAlgorithm.$Currency) {
- Return $Global:CurrencyAlgorithm.$Currency
+ $Variables.CurrencyAlgorithm = Get-Content -Path ".\Data\CurrencyAlgorithm.json" | ConvertFrom-Json
+ If ($Variables.CurrencyAlgorithm.$Currency) {
+ Return $Variables.CurrencyAlgorithm.$Currency
}
}
Return $null
@@ -3057,7 +3047,6 @@ Function Get-NMVersion {
Write-Message -Level Warn "Version checker could not contact update server."
}
$Config.LogToScreen = $ConfigLogToScreen
-
}
Function Copy-Object {
@@ -3544,7 +3533,6 @@ Function Get-EpochLength {
"RVN" { Return 7500 }
Default { return 30000 }
}
-
}
Function Get-DAGdata {
diff --git a/Includes/LegacyGUI.ps1 b/Includes/LegacyGUI.ps1
index d5edf03d74..b8a4a431db 100644
--- a/Includes/LegacyGUI.ps1
+++ b/Includes/LegacyGUI.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: LegacyGUI.psm1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
# [Void] [System.Windows.Forms.Application]::EnableVisualStyles()
@@ -372,8 +372,6 @@ Function Update-TabControl {
ElseIf ($RadioButtonMinersUnavailable.checked) { $DataSource = $Variables.Miners | Where-Object { -not $_.Available } }
Else { $DataSource = $Variables.Miners }
- $SortBy = If ($Variables.CalculatePowerCost -and -not $Config.IgnorePowerCost) { "Profit" } Else { "Earning" }
-
$MinersDGV.BeginInit()
$MinersDGV.DataSource = $DataSource | Select-Object @(
@{ Name = "Best"; Expression = { $_.Best } },
@@ -489,8 +487,8 @@ Function Update-TabControl {
@{ Name = "Last seen"; Expression = { (Get-TimeSince $_.date) } },
@{ Name = "Version"; Expression = { $_.version } },
@{ Name = "Currency"; Expression = { ForEach-Object { $_.data.Currency | Select-Object -Unique } } },
- @{ Name = "Estimated Earning/day"; Expression = { If ($_.Data -ne $null) { "{0:n$($Config.DecimalsMax)}" -f (($_.Data.Earning | Where-Object { -not [Double]::IsNaN($_) } | Measure-Object -Sum).Sum * $Variables.Rates.BTC.($_.data.Currency | Select-Object -Unique)) } } },
- @{ Name = "Estimated Profit/day"; Expression = { If ($_.Data -ne $null) { " {0:n$($Config.DecimalsMax)}" -f (($_.Data.Profit | Where-Object { -not [Double]::IsNaN($_) } | Measure-Object -Sum).Sum * $Variables.Rates.BTC.($_.data.Currency | Select-Object -Unique)) } } },
+ @{ Name = "Estimated Earning/day"; Expression = { If ($null -ne $_.Data) { "{0:n$($Config.DecimalsMax)}" -f (($_.Data.Earning | Where-Object { -not [Double]::IsNaN($_) } | Measure-Object -Sum).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-Object { -not [Double]::IsNaN($_) } | Measure-Object -Sum).Sum * $Variables.Rates.BTC.($_.data.Currency | Select-Object -Unique)) } } },
@{ Name = "Miner(s)"; Expression = { $_.data.Name -join $nl } },
@{ Name = "Pool(s)"; Expression = { ($_.data | ForEach-Object { $_.Pool -split "," -join " & " }) -join $nl } },
@{ Name = "Algorithm(s)"; Expression = { ($_.data | ForEach-Object { $_.Algorithm -split "," -join " & " }) -join $nl } },
diff --git a/Includes/MinerAPIs/Ccminer.ps1 b/Includes/MinerAPIs/Ccminer.ps1
index cd227ff75c..bd2b85222f 100644
--- a/Includes/MinerAPIs/Ccminer.ps1
+++ b/Includes/MinerAPIs/Ccminer.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: CCminer.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class Ccminer : Miner {
diff --git a/Includes/MinerAPIs/EthMiner.ps1 b/Includes/MinerAPIs/EthMiner.ps1
index f2aff95d82..1f62c16fe6 100644
--- a/Includes/MinerAPIs/EthMiner.ps1
+++ b/Includes/MinerAPIs/EthMiner.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: EthMiner.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class EthMiner : Miner {
diff --git a/Includes/MinerAPIs/FireIce.ps1 b/Includes/MinerAPIs/FireIce.ps1
index 2e2fb4a5e5..b5e4925e02 100644
--- a/Includes/MinerAPIs/FireIce.ps1
+++ b/Includes/MinerAPIs/FireIce.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: FireIce.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class Fireice : Miner {
diff --git a/Includes/MinerAPIs/Gminer.ps1 b/Includes/MinerAPIs/Gminer.ps1
index 387f8b2aa2..43b3dc48c7 100644
--- a/Includes/MinerAPIs/Gminer.ps1
+++ b/Includes/MinerAPIs/Gminer.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: GMiner.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class Gminer : Miner {
diff --git a/Includes/MinerAPIs/MiniZ.ps1 b/Includes/MinerAPIs/MiniZ.ps1
index fd459839ae..8d864d932f 100644
--- a/Includes/MinerAPIs/MiniZ.ps1
+++ b/Includes/MinerAPIs/MiniZ.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: MiniZ.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class MiniZ : Miner {
diff --git a/Includes/MinerAPIs/NBMiner.ps1 b/Includes/MinerAPIs/NBMiner.ps1
index 3b140cdd43..af9e7110de 100644
--- a/Includes/MinerAPIs/NBMiner.ps1
+++ b/Includes/MinerAPIs/NBMiner.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: NBMiner.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class NBMiner : Miner {
diff --git a/Includes/MinerAPIs/NanoMiner.ps1 b/Includes/MinerAPIs/NanoMiner.ps1
index 65ade153d3..ccdb9844f6 100644
--- a/Includes/MinerAPIs/NanoMiner.ps1
+++ b/Includes/MinerAPIs/NanoMiner.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: NanoMiner.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class NanoMiner : Miner {
diff --git a/Includes/MinerAPIs/Nheq.ps1 b/Includes/MinerAPIs/Nheq.ps1
index d1c5eed575..307fd3bf27 100644
--- a/Includes/MinerAPIs/Nheq.ps1
+++ b/Includes/MinerAPIs/Nheq.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: Nheq.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class Nheq : Miner {
diff --git a/Includes/MinerAPIs/Rigel.ps1 b/Includes/MinerAPIs/Rigel.ps1
index eee1af78f2..9cf043e488 100644
--- a/Includes/MinerAPIs/Rigel.ps1
+++ b/Includes/MinerAPIs/Rigel.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: Rigel.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class Rigel : Miner {
diff --git a/Includes/MinerAPIs/SRBMiner.ps1 b/Includes/MinerAPIs/SRBMiner.ps1
index 8efcfbc3ab..1c7e3a8993 100644
--- a/Includes/MinerAPIs/SRBMiner.ps1
+++ b/Includes/MinerAPIs/SRBMiner.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: SRBminer.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class SRBMiner : Miner {
diff --git a/Includes/MinerAPIs/TeamBlackMiner.ps1 b/Includes/MinerAPIs/TeamBlackMiner.ps1
index a4b5fb6e3f..c2fa3c410c 100644
--- a/Includes/MinerAPIs/TeamBlackMiner.ps1
+++ b/Includes/MinerAPIs/TeamBlackMiner.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: lolMiner.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class TeamBlackMiner : Miner {
diff --git a/Includes/MinerAPIs/Trex.ps1 b/Includes/MinerAPIs/Trex.ps1
index a6f54c693b..1e48e8bab9 100644
--- a/Includes/MinerAPIs/Trex.ps1
+++ b/Includes/MinerAPIs/Trex.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: Trex.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class Trex : Miner {
diff --git a/Includes/MinerAPIs/Xgminer.ps1 b/Includes/MinerAPIs/Xgminer.ps1
index cb8215973d..e1c1c7a792 100644
--- a/Includes/MinerAPIs/Xgminer.ps1
+++ b/Includes/MinerAPIs/Xgminer.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: Xgminer.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class Xgminer : Miner {
diff --git a/Includes/MinerAPIs/XmRig.ps1 b/Includes/MinerAPIs/XmRig.ps1
index 93f1a575c4..8e5cd3b8bf 100644
--- a/Includes/MinerAPIs/XmRig.ps1
+++ b/Includes/MinerAPIs/XmRig.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: XmRig.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class XmRig : Miner {
diff --git a/Includes/MinerAPIs/lolMiner.ps1 b/Includes/MinerAPIs/lolMiner.ps1
index a1561c6867..85b73abf3a 100644
--- a/Includes/MinerAPIs/lolMiner.ps1
+++ b/Includes/MinerAPIs/lolMiner.ps1
@@ -18,8 +18,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: lolMiner.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
class lolMiner : Miner {
diff --git a/Miners/GMiner-v3.32.ps1 b/Miners/GMiner-v3.33.ps1
similarity index 99%
rename from Miners/GMiner-v3.32.ps1
rename to Miners/GMiner-v3.33.ps1
index 7b76491065..c52ecec789 100644
--- a/Miners/GMiner-v3.32.ps1
+++ b/Miners/GMiner-v3.33.ps1
@@ -1,6 +1,6 @@
If (-not ($Devices = $Variables.EnabledDevices | Where-Object { ($_.Type -eq "AMD" -and $_.OpenCL.ClVersion -ge "OpenCL C 1.2") -or $_.Type -eq "NVIDIA" })) { Return }
-$Uri = "https://github.com/develsoftware/GMinerRelease/releases/download/3.32/gminer_3_32_windows64.zip"
+$Uri = "https://github.com/develsoftware/GMinerRelease/releases/download/3.33/gminer_3_33_windows64.zip"
$Name = (Get-Item $MyInvocation.MyCommand.Path).BaseName
$Path = ".\Bin\$($Name)\miner.exe"
$DeviceEnumerator = "Type_Vendor_Slot"
diff --git a/Miners/NBMiner-v42.3.ps1 b/Miners/NBMiner-v42.3.ps1
index ec14b09ca8..7851f63061 100644
--- a/Miners/NBMiner-v42.3.ps1
+++ b/Miners/NBMiner-v42.3.ps1
@@ -13,7 +13,7 @@ $Algorithms = [PSCustomObject[]]@(
[PSCustomObject]@{ Algorithm = "KawPow"; Type = "AMD"; Fee = 0.02; MinMemGiB = $MinerPools[0].KawPow.DAGSizeGiB + 0.77; AdditionalWin10MemGB = 0; Minerset = 2; WarmupTimes = @(45, 0); Arguments = " --algo kawpow --platform 2" } # XmRig-v6.17.0 is almost as fast but has no fee
[PSCustomObject]@{ Algorithm = "BeamV3"; Type = "NVIDIA"; Fee = 0.02; MinMemGiB = 3; AdditionalWin10MemGB = 0; MinComputeCapability = 6.0; MinerSet = 0; Tuning = " -mt 1"; WarmupTimes = @(30, 40); Arguments = " --algo beamv3 --platform 1" }
- [PSCustomObject]@{ Algorithm = "Cuckoo29"; Type = "NVIDIA"; Fee = 0.02; MinMemGiB = 5; AdditionalWin10MemGB = 1; MinComputeCapability = 6.0; Minerset = 1; Tuning = " -mt 1"; WarmupTimes = @(30, 30); Arguments = " --algo cuckoo_ae --platform 1" } # GMiner-v3.32 is fastest
+ [PSCustomObject]@{ Algorithm = "Cuckoo29"; Type = "NVIDIA"; Fee = 0.02; MinMemGiB = 5; AdditionalWin10MemGB = 1; MinComputeCapability = 6.0; Minerset = 1; Tuning = " -mt 1"; WarmupTimes = @(30, 30); Arguments = " --algo cuckoo_ae --platform 1" } # GMiner-v3.33 is fastest
[PSCustomObject]@{ Algorithm = "Autolykos2"; Type = "NVIDIA"; Fee = 0.02; MinMemGiB = $MinerPools[0].Autolykos2.DAGSizeGiB + 0.77; AdditionalWin10MemGB = 0; MinComputeCapability = 6.0; Minerset = 1; Tuning = " -mt 1"; WarmupTimes = @(30, 0); Arguments = " --algo ergo --platform 1" }
[PSCustomObject]@{ Algorithm = "EtcHash"; Type = "NVIDIA"; Fee = 0.01; MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB + 0.77; AdditionalWin10MemGB = 0; MinComputeCapability = 6.0; Minerset = 2; Tuning = " -mt 1"; WarmupTimes = @(45, 0); Arguments = " --algo etchash --platform 1 --enable-dag-cache" } # PhoenixMiner-v6.2c may be faster, but I see lower speed at the pool
[PSCustomObject]@{ Algorithm = "Ethash"; Type = "NVIDIA"; Fee = 0.01; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.77; AdditionalWin10MemGB = 0; MinComputeCapability = 6.0; Minerset = 2; Tuning = " -mt 1"; WarmupTimes = @(60, 0); Arguments = " --algo ethash --platform 1 --enable-dag-cache" } # PhoenixMiner-v6.2c may be faster, but I see lower speed at the pool
diff --git a/Miners/PhoenixMiner-v6.2c.ps1 b/Miners/PhoenixMiner-v6.2c.ps1
index 2cdc52ec31..eee00e002b 100644
--- a/Miners/PhoenixMiner-v6.2c.ps1
+++ b/Miners/PhoenixMiner-v6.2c.ps1
@@ -6,18 +6,18 @@ $Path = ".\Bin\$($Name)\PhoenixMiner.exe"
$DeviceEnumerator = "Type_Vendor_Slot"
$Algorithms = [PSCustomObject[]]@(
- [PSCustomObject]@{ Algorithms = @("EtcHash"); Type = "AMD"; Fee = @(0.0065); MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB + 0.77; MinerSet = 0; Tuning = " -mi 12 -straps 1"; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @(); Arguments = " -amd -eres 1 -coin ETC" } # GMiner-v3.32 is just as fast, PhoenixMiner-v6.2c is maybe faster, but I see lower speed at the pool
+ [PSCustomObject]@{ Algorithms = @("EtcHash"); Type = "AMD"; Fee = @(0.0065); MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB + 0.77; MinerSet = 0; Tuning = " -mi 12 -straps 1"; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @(); Arguments = " -amd -eres 1 -coin ETC" } # GMiner-v3.33 is just as fast, PhoenixMiner-v6.2c is maybe faster, but I see lower speed at the pool
[PSCustomObject]@{ Algorithms = @("EtcHash", "Blake2s"); Type = "AMD"; Fee = @(0.009, 0); MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB + 0.77; MinerSet = 0; Tuning = " -mi 12 -straps 1"; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @(); Arguments = " -amd -eres 1 -coin ETC -dcoin blake2s" }
- [PSCustomObject]@{ Algorithms = @("Ethash"); Type = "AMD"; Fee = @(0.0065); MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.77; MinerSet = 0; Tuning = " -mi 12 -straps 1"; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @(); Arguments = " -amd -eres 1" } # GMiner-v3.32 is just as fast, PhoenixMiner-v6.2c is maybe faster, but I see lower speed at the pool
+ [PSCustomObject]@{ Algorithms = @("Ethash"); Type = "AMD"; Fee = @(0.0065); MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.77; MinerSet = 0; Tuning = " -mi 12 -straps 1"; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @(); Arguments = " -amd -eres 1" } # GMiner-v3.33 is just as fast, PhoenixMiner-v6.2c is maybe faster, but I see lower speed at the pool
[PSCustomObject]@{ Algorithms = @("Ethash", "Blake2s"); Type = "AMD"; Fee = @(0.009, 0); MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.77; MinerSet = 0; Tuning = " -mi 12 -straps 1"; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @(); Arguments = " -amd -eres 1 -dcoin blake2s" }
# [PSCustomObject]@{ Algorithms = @("EthashLowMem"); Type = "AMD"; Fee = @(0.0065); MinMemGiB = $MinerPools[0].EthashLowMem.DAGSizeGiB + 0.77; Minerset = 2; Tuning = " -mi 12 -straps 1"; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @(); Arguments = " -amd -eres 1" } # GMiner-v3.10 is just as fast, PhoenixMiner-v6.2c is maybe faster, but I see lower speed at the pool
# [PSCustomObject]@{ Algorithms = @("EthashLowMem", "Blake2s"); Type = "AMD"; Fee = @(0.009, 0); MinMemGiB = $MinerPools[0].EthashLowMem.DAGSizeGiB + 0.77; Minerset = 2; Tuning = " -mi 12 -straps 1"; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @("RDNA1", "RDNA2"); Arguments = " -amd -eres 1 -dcoin blake2s" }
[PSCustomObject]@{ Algorithms = @("UbqHash"); Type = "AMD"; Fee = @(0.0065); MinMemGiB = $MinerPools[0].UbqHash.DAGSizeGiB + 0.77; MinerSet = 0; Tuning = " -mi 12 -straps 1"; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @(); Arguments = " -amd -eres 1 -coin UBQ" }
[PSCustomObject]@{ Algorithms = @("UbqHash", "Blake2s"); Type = "AMD"; Fee = @(0.009, 0); MinMemGiB = $MinerPools[0].UbqHash.DAGSizeGiB + 0.77; MinerSet = 0; Tuning = " -mi 12 -straps 1"; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @("RDNA1", "RDNA2"); Arguments = " -amd -eres 1 -coin UBQ -dcoin blake2s" }
- [PSCustomObject]@{ Algorithms = @("EtcHash"); Type = "NVIDIA"; Fee = @(0.0065); MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB + 0.77; Minerset = 1; Tuning = " -mi 12 -vmt1 15 -vmt2 12 -vmt3 0 -vmr 15 -mcdag 1"; WarmupTimes = @(45, 15); Arguments = " -nvidia -eres 1 -coin ETC" } # GMiner-v3.32 is just as fast, PhoenixMiner-v6.2c is maybe faster, but I see lower speed at the pool
+ [PSCustomObject]@{ Algorithms = @("EtcHash"); Type = "NVIDIA"; Fee = @(0.0065); MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB + 0.77; Minerset = 1; Tuning = " -mi 12 -vmt1 15 -vmt2 12 -vmt3 0 -vmr 15 -mcdag 1"; WarmupTimes = @(45, 15); Arguments = " -nvidia -eres 1 -coin ETC" } # GMiner-v3.33 is just as fast, PhoenixMiner-v6.2c is maybe faster, but I see lower speed at the pool
[PSCustomObject]@{ Algorithms = @("EtcHash", "Blake2s"); Type = "NVIDIA"; Fee = @(0.009, 0); MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB + 0.77; MinerSet = 0; Tuning = " -mi 12 -vmt1 15 -vmt2 12 -vmt3 0 -vmr 15 -mcdag 1"; WarmupTimes = @(45, 15); Arguments = " -nvidia -eres 1 -coin ETC -dcoin blake2s" }
- [PSCustomObject]@{ Algorithms = @("Ethash"); Type = "NVIDIA"; Fee = @(0.0065); MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.77; Minerset = 1; Tuning = " -mi 12 -vmt1 15 -vmt2 12 -vmt3 0 -vmr 15 -mcdag 1"; WarmupTimes = @(45, 15); Arguments = " -nvidia -eres 1" } # GMiner-v3.32 is just as fast, PhoenixMiner-v6.2c is maybe faster, but I see lower speed at the pool
+ [PSCustomObject]@{ Algorithms = @("Ethash"); Type = "NVIDIA"; Fee = @(0.0065); MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.77; Minerset = 1; Tuning = " -mi 12 -vmt1 15 -vmt2 12 -vmt3 0 -vmr 15 -mcdag 1"; WarmupTimes = @(45, 15); Arguments = " -nvidia -eres 1" } # GMiner-v3.33 is just as fast, PhoenixMiner-v6.2c is maybe faster, but I see lower speed at the pool
[PSCustomObject]@{ Algorithms = @("Ethash", "Blake2s"); Type = "NVIDIA"; Fee = @(0.009, 0); MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.77; MinerSet = 0; Tuning = " -mi 12 -vmt1 15 -vmt2 12 -vmt3 0 -vmr 15 -mcdag 1"; WarmupTimes = @(45, 15); Arguments = " -nvidia -eres 1 -dcoin blake2s" }
# [PSCustomObject]@{ Algorithms = @("EthashLowMem"); Type = "NVIDIA"; Fee = @(0.0065); MinMemGiB = $MinerPools[0].EthashLowMem.DAGSizeGiB + 0.77; Minerset = 2; Tuning = " -mi 12 -vmt1 15 -vmt2 12 -vmt3 0 -vmr 15 -mcdag 1"; WarmupTimes = @(45, 15); Arguments = " -nvidia -eres 1" } # TTMiner-v5.0.3 is fastest
# [PSCustomObject]@{ Algorithms = @("EthashLowMem", "Blake2s"); Type = "NVIDIA"; Fee = @(0.009, 0); MinMemGiB = $MinerPools[0].EthashLowMem.DAGSizeGiB + 0.77; Minerset = 2; Tuning = " -mi 12 -vmt1 15 -vmt2 12 -vmt3 0 -vmr 15 -mcdag 1"; WarmupTimes = @(45, 15); Arguments = " -nvidia -eres 1 -dcoin blake2s" }
diff --git a/Miners/Rigel-v1.3.12.ps1 b/Miners/Rigel-v1.4.1.ps1
similarity index 86%
rename from Miners/Rigel-v1.3.12.ps1
rename to Miners/Rigel-v1.4.1.ps1
index ece052023c..9931745b01 100644
--- a/Miners/Rigel-v1.3.12.ps1
+++ b/Miners/Rigel-v1.4.1.ps1
@@ -1,21 +1,22 @@
If (-not ($Devices = $Variables.EnabledDevices | Where-Object Type -EQ "NVIDIA")) { Return }
-$Uri = "https://github.com/rigelminer/rigel/releases/download/1.3.12/rigel-1.3.12-win.zip"
+$Uri = "https://github.com/rigelminer/rigel/releases/download/1.4.1/rigel-1.4.1-win.zip"
$Name = (Get-Item $MyInvocation.MyCommand.Path).BaseName
$Path = ".\Bin\$($Name)\Rigel.exe"
$DeviceEnumerator = "Type_Vendor_Slot"
$Algorithms = [PSCustomObject[]]@(
-
- [PSCustomObject]@{ Algorithms = @("EtcHash"); Fee = @(0.007); MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB + 0.77; Tuning = " --mt2"; MinerSet = 0; WarmupTimes = @(45, 10); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm etchash" }
- [PSCustomObject]@{ Algorithms = @("EtcHash", "kHeavyHash"); Fee = @(0.007); MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB+ 0.41; Tuning = " --mt2"; MinerSet = 0; WarmupTimes = @(45, 25); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm etchash+kheavyhash" }
- [PSCustomObject]@{ Algorithms = @("Ethash"); Fee = @(0.007); MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.77; Tuning = " --mt2"; MinerSet = 0; WarmupTimes = @(55, 15); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm ethash" }
- [PSCustomObject]@{ Algorithms = @("Ethash", "kHeavyHash"); Fee = @(0.007); MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.77; Tuning = " --mt2"; Minerset = 2; WarmupTimes = @(55, 25); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm ethash+kheavyhash" }
-# [PSCustomObject]@{ Algorithms = @("EthashLowMem"); Fee = @(0.007); MinMemGiB = $MinerPools[0].EthashLowMem.DAGSizeGiB + 0.77; Tuning = " --mt2"; Minerset = 2; WarmupTimes = @(45, 10); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm ethash" }
-# [PSCustomObject]@{ Algorithms = @("EthashLowMem", "kHeavyHash"); Fee = @(0.007); MinMemGiB = $MinerPools[0].EthashLowMem.DAGSizeGiB + 0.77; Tuning = " --mt2"; Minerset = 2; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm ethash+kheavyhash" }
- [PSCustomObject]@{ Algorithms = @("kHeavyHash"); Fee = @(0.007); MinMemGiB = 2.0; Tuning = " --mt2"; MinerSet = 0; WarmupTimes = @(45, 10); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm kheavyhash" }
- [PSCustomObject]@{ Algorithms = @("NexaPow"); Fee = @(0.02); MinMemGiB = 3.0; Tuning = " --mt2"; Minerset = 1; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm nexapow" }
- [PSCustomObject]@{ Algorithms = @("OctaSpace"); Fee = @(0.02); MinMemGiB = 3.0; Tuning = " --mt2"; Minerset = 1; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm octa" }
+ [PSCustomObject]@{ Algorithms = @("Blake3"); Fee = @(0.007); MinMemGiB = 2.0; Tuning = " --mt2"; MinerSet = 0; WarmupTimes = @(45, 10); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm alephium" }
+ [PSCustomObject]@{ Algorithms = @("Blake3IronFish"); Fee = @(0.007); MinMemGiB = 2.0; Tuning = " --mt2"; MinerSet = 0; WarmupTimes = @(45, 10); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm ironfish" }
+ [PSCustomObject]@{ Algorithms = @("EtcHash"); Fee = @(0.007); MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB + 0.77; Tuning = " --mt2"; MinerSet = 0; WarmupTimes = @(45, 10); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm etchash" }
+ [PSCustomObject]@{ Algorithms = @("EtcHash", "kHeavyHash"); Fee = @(0.007); MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB+ 0.41; Tuning = " --mt2"; MinerSet = 0; WarmupTimes = @(45, 25); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm etchash+kheavyhash" }
+ [PSCustomObject]@{ Algorithms = @("Ethash"); Fee = @(0.007); MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.77; Tuning = " --mt2"; MinerSet = 0; WarmupTimes = @(55, 15); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm ethash" }
+ [PSCustomObject]@{ Algorithms = @("Ethash", "kHeavyHash"); Fee = @(0.007); MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.77; Tuning = " --mt2"; Minerset = 2; WarmupTimes = @(55, 25); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm ethash+kheavyhash" }
+# [PSCustomObject]@{ Algorithms = @("EthashLowMem"); Fee = @(0.007); MinMemGiB = $MinerPools[0].EthashLowMem.DAGSizeGiB + 0.77; Tuning = " --mt2"; Minerset = 2; WarmupTimes = @(45, 10); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm ethash" }
+# [PSCustomObject]@{ Algorithms = @("EthashLowMem", "kHeavyHash"); Fee = @(0.007); MinMemGiB = $MinerPools[0].EthashLowMem.DAGSizeGiB + 0.77; Tuning = " --mt2"; Minerset = 2; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm ethash+kheavyhash" }
+ [PSCustomObject]@{ Algorithms = @("kHeavyHash"); Fee = @(0.007); MinMemGiB = 2.0; Tuning = " --mt2"; MinerSet = 0; WarmupTimes = @(45, 10); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm kheavyhash" }
+ [PSCustomObject]@{ Algorithms = @("NexaPow"); Fee = @(0.02); MinMemGiB = 3.0; Tuning = " --mt2"; Minerset = 1; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm nexapow" }
+ [PSCustomObject]@{ Algorithms = @("OctaSpace"); Fee = @(0.02); MinMemGiB = 3.0; Tuning = " --mt2"; Minerset = 1; WarmupTimes = @(45, 15); ExcludeGPUArchitecture = @("Other"); ExcludePools = @(@(), @()); Arguments = " --algorithm octa" }
)
$Algorithms = $Algorithms | Where-Object MinerSet -LE $Config.MinerSet
diff --git a/Miners/TeamBlackMiner-v1.94.ps1 b/Miners/TeamBlackMiner-v1.94.ps1
index 6aee623592..5d32a9e5a2 100644
--- a/Miners/TeamBlackMiner-v1.94.ps1
+++ b/Miners/TeamBlackMiner-v1.94.ps1
@@ -12,33 +12,33 @@ $DeviceSelector = @{ AMD = " --cl-devices"; INTEL = " --cl-devices"; NVIDIA = "
$DeviceEnumerator = @{ AMD = "Type_Vendor_Id"; INTEL = "Type_Vendor_Index"; NVIDIA = "Type_Vendor_Index" } # Device numeration seems to be mixed up with OpenCL
$Algorithms = [PSCustomObject[]]@(
- [PSCustomObject]@{ Algorithms = @("EtcHash"); Type = "AMD"; Fee = 0.005; MinMemGiB = $MinerPools[0].EtcHash.DAGSizeGiB + 0.91; ExcludePools = @(@(), @()); Minerset = 1; Tuning = ""; WarmupTimes = @(45, 15); Arguments = " --algo etchash" } # PhoenixMiner-v6.2c may be faster, but I see lower speed at the pool
+ [PSCustomObject]@{ Algorithms = @("EtcHash"); Type = "AMD"; Fee = 0.005; MinMemGiB = $MinerPools[0].EtcHash.DAGSizeGiB + 0.81; ExcludePools = @(@(), @()); Minerset = 1; Tuning = ""; WarmupTimes = @(45, 15); Arguments = " --algo etchash" } # PhoenixMiner-v6.2c may be faster, but I see lower speed at the pool
[PSCustomObject]@{ Algorithms = @("EtcHash", "KawPow"); Type = "AMD"; Fee = 0.005; MinMemGiB = $MinerPools[0].EtcHash.DAGSizeGiB + $MinerPools[1].KawPow.DAGSizeGiB; ExcludePools = @(@("HiveOn"), @()); Minerset = 1; Tuning = ""; WarmupTimes = @(45, 45); Arguments = " --algo etc+rvn" }
- [PSCustomObject]@{ Algorithms = @("EtcHash", "VertHash"); Type = "AMD"; Fee = 0.005; MinMemGiB = $MinerPools[0].EtcHash.DAGSizeGiB + 0.91; ExcludePools = @(@("HiveOn"), @()); Minerset = 1; Tuning = ""; WarmupTimes = @(45, 45); Arguments = " --algo etc+vtc --verthash-data ..\.$($Variables.VerthashDatPath)" }
- [PSCustomObject]@{ Algorithms = @("Ethash"); Type = "AMD"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.91; ExcludePools = @(@(), @()); Minerset = 1; Tuning = ""; WarmupTimes = @(45, 15); Arguments = " --algo ethash" } # PhoenixMiner-v6.2c may be faster, but I see lower speed at the pool
+ [PSCustomObject]@{ Algorithms = @("EtcHash", "VertHash"); Type = "AMD"; Fee = 0.005; MinMemGiB = $MinerPools[0].EtcHash.DAGSizeGiB + 0.81; ExcludePools = @(@("HiveOn"), @()); Minerset = 1; Tuning = ""; WarmupTimes = @(45, 45); Arguments = " --algo etc+vtc --verthash-data ..\.$($Variables.VerthashDatPath)" }
+ [PSCustomObject]@{ Algorithms = @("Ethash"); Type = "AMD"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.81; ExcludePools = @(@(), @()); Minerset = 1; Tuning = ""; WarmupTimes = @(45, 15); Arguments = " --algo ethash" } # PhoenixMiner-v6.2c may be faster, but I see lower speed at the pool
[PSCustomObject]@{ Algorithms = @("Ethash", "KawPow"); Type = "AMD"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + $MinerPools[1].KawPow.DAGSizeGiB; ExcludePools = @(@("HiveOn"), @()); Minerset = 1; Tuning = ""; WarmupTimes = @(45, 45); Arguments = " --algo eth+rvn" }
- [PSCustomObject]@{ Algorithms = @("Ethash", "VertHash"); Type = "AMD"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.91; ExcludePools = @(@("HiveOn"), @()); Minerset = 1; Tuning = ""; WarmupTimes = @(45, 45); Arguments = " --algo eth+vtc --verthash-data ..\.$($Variables.VerthashDatPath)" }
-# [PSCustomObject]@{ Algorithms = @("EthashLowMem"); Type = "AMD"; Fee = 0.005; MinMemGiB = $MinerPools[0].EthashLowMem.DAGSizeGiB + 0.91; ExcludePools = @(@(), @()); Minerset = 2; Tuning = ""; WarmupTimes = @(45, 15); Arguments = " --algo ethash" } # TTMiner-v5.0.3 is fastest
+ [PSCustomObject]@{ Algorithms = @("Ethash", "VertHash"); Type = "AMD"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.81; ExcludePools = @(@("HiveOn"), @()); Minerset = 1; Tuning = ""; WarmupTimes = @(45, 45); Arguments = " --algo eth+vtc --verthash-data ..\.$($Variables.VerthashDatPath)" }
+# [PSCustomObject]@{ Algorithms = @("EthashLowMem"); Type = "AMD"; Fee = 0.005; MinMemGiB = $MinerPools[0].EthashLowMem.DAGSizeGiB + 0.81; ExcludePools = @(@(), @()); Minerset = 2; Tuning = ""; WarmupTimes = @(45, 15); Arguments = " --algo ethash" } # TTMiner-v5.0.3 is fastest
[PSCustomObject]@{ Algorithms = @("VertHash"); Type = "AMD"; Fee = 0.01; MinMemGiB = 3.0; ExcludePools = @(@(), @()); Minerset = 1; Tuning = ""; WarmupTimes = @(60, 0); Arguments = " --algo verthash --verthash-data ..\.$($Variables.VerthashDatPath)" }
- [PSCustomObject]@{ Algorithms = @("EtcHash"); Type = "INTEL"; Fee = 0.005; MinMemGiB = $MinerPools[0].EtcHash.DAGSizeGiB + 0.91; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 15); Arguments = " --algo etchash" }
+ [PSCustomObject]@{ Algorithms = @("EtcHash"); Type = "INTEL"; Fee = 0.005; MinMemGiB = $MinerPools[0].EtcHash.DAGSizeGiB + 0.81; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 15); Arguments = " --algo etchash" }
[PSCustomObject]@{ Algorithms = @("EtcHash", "KawPow"); Type = "INTEL"; Fee = 0.005; MinMemGiB = $MinerPools[0].EtcHash.DAGSizeGiB + $MinerPools[1].KawPow.DAGSizeGiB; ExcludePools = @(@("HiveOn"), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 45); Arguments = " --algo etc+rvn" }
- [PSCustomObject]@{ Algorithms = @("EtcHash", "VertHash"); Type = "INTEL"; Fee = 0.005; MinMemGiB = $MinerPools[0].EtcHash.DAGSizeGiB + 0.91; ExcludePools = @(@("HiveOn"), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 45); Arguments = " --algo etc+vtc --verthash-data ..\.$($Variables.VerthashDatPath)" }
- [PSCustomObject]@{ Algorithms = @("Ethash"); Type = "INTEL"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.91; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 15); Arguments = " --algo ethash" }
+ [PSCustomObject]@{ Algorithms = @("EtcHash", "VertHash"); Type = "INTEL"; Fee = 0.005; MinMemGiB = $MinerPools[0].EtcHash.DAGSizeGiB + 0.81; ExcludePools = @(@("HiveOn"), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 45); Arguments = " --algo etc+vtc --verthash-data ..\.$($Variables.VerthashDatPath)" }
+ [PSCustomObject]@{ Algorithms = @("Ethash"); Type = "INTEL"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.81; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 15); Arguments = " --algo ethash" }
[PSCustomObject]@{ Algorithms = @("Ethash", "KawPow"); Type = "INTEL"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + $MinerPools[1].KawPow.DAGSizeGiB; ExcludePools = @(@("HiveOn"), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 45); Arguments = " --algo eth+rvn " }
- [PSCustomObject]@{ Algorithms = @("Ethash", "VertHash"); Type = "INTEL"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.91; ExcludePools = @(@("HiveOn"), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 45); Arguments = " --algo eth+vtc --verthash-data ..\.$($Variables.VerthashDatPath)" }
-# [PSCustomObject]@{ Algorithms = @("EthashLowMem"); Type = "INTEL"; Fee = 0.005; MinMemGiB = $MinerPools[0].EthashLowMem.DAGSizeGiB + 0.91; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 15); Arguments = " --algo ethash" }
- [PSCustomObject]@{ Algorithms = @("KawPow"); Type = "INTEL"; Fee = 0.01; MinMemGiB = $MinerPools[0].KawPow.DAGSizeGiB + 0.91; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(60, 45); Arguments = " --algo kawpow" }
+ [PSCustomObject]@{ Algorithms = @("Ethash", "VertHash"); Type = "INTEL"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.81; ExcludePools = @(@("HiveOn"), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 45); Arguments = " --algo eth+vtc --verthash-data ..\.$($Variables.VerthashDatPath)" }
+# [PSCustomObject]@{ Algorithms = @("EthashLowMem"); Type = "INTEL"; Fee = 0.005; MinMemGiB = $MinerPools[0].EthashLowMem.DAGSizeGiB + 0.81; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 15); Arguments = " --algo ethash" }
+ [PSCustomObject]@{ Algorithms = @("KawPow"); Type = "INTEL"; Fee = 0.01; MinMemGiB = $MinerPools[0].KawPow.DAGSizeGiB + 0.81; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(60, 45); Arguments = " --algo kawpow" }
[PSCustomObject]@{ Algorithms = @("VertHash"); Type = "INTEL"; Fee = 0.01; MinMemGiB = 3.0; ExcludePools = @(@(), @()); MinerSet = 0; Tuning = " --tweak 2"; WarmupTimes = @(60, 60); Arguments = " --algo verthash --verthash-data ..\.$($Variables.VerthashDatPath)" }
- [PSCustomObject]@{ Algorithms = @("EtcHash"); Type = "NVIDIA"; Fee = 0.005; MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB + 0.91; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 15); Arguments = " --algo etchash" } # PhoenixMiner-v6.2c may be faster, but I see lower speed at the pool
+ [PSCustomObject]@{ Algorithms = @("EtcHash"); Type = "NVIDIA"; Fee = 0.005; MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB + 0.81; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 15); Arguments = " --algo etchash" } # PhoenixMiner-v6.2c may be faster, but I see lower speed at the pool
[PSCustomObject]@{ Algorithms = @("EtcHash", "KawPow"); Type = "NVIDIA"; Fee = 0.005; MinMemGiB = $MinerPools[0].EtcHash.DAGSizeGiB + $MinerPools[1].KawPow.DAGSizeGiB; ExcludePools = @(@("HiveOn"), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 45); Arguments = " --algo etc+rvn" }
- [PSCustomObject]@{ Algorithms = @("EtcHash", "VertHash"); Type = "NVIDIA"; Fee = 0.005; MinMemGiB = $MinerPools[0].EtcHash.DAGSizeGiB + 0.91; ExcludePools = @(@("HiveOn"), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 45); Arguments = " --algo etc+vtc --verthash-data ..\.$($Variables.VerthashDatPath)" }
- [PSCustomObject]@{ Algorithms = @("Ethash"); Type = "NVIDIA"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.91; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 15); Arguments = " --algo ethash" } # PhoenixMiner-v6.2c may be faster, but I see lower speed at the pool
+ [PSCustomObject]@{ Algorithms = @("EtcHash", "VertHash"); Type = "NVIDIA"; Fee = 0.005; MinMemGiB = $MinerPools[0].EtcHash.DAGSizeGiB + 0.81; ExcludePools = @(@("HiveOn"), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 45); Arguments = " --algo etc+vtc --verthash-data ..\.$($Variables.VerthashDatPath)" }
+ [PSCustomObject]@{ Algorithms = @("Ethash"); Type = "NVIDIA"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.81; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 15); Arguments = " --algo ethash" } # PhoenixMiner-v6.2c may be faster, but I see lower speed at the pool
[PSCustomObject]@{ Algorithms = @("Ethash", "KawPow"); Type = "NVIDIA"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + $MinerPools[1].KawPow.DAGSizeGiB; ExcludePools = @(@("HiveOn"), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 45); Arguments = " --algo eth+rvn" }
- [PSCustomObject]@{ Algorithms = @("Ethash", "VertHash"); Type = "NVIDIA"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.91; ExcludePools = @(@("HiveOn"), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 45); Arguments = " --algo eth+vtc --verthash-data ..\.$($Variables.VerthashDatPath)" }
-# [PSCustomObject]@{ Algorithms = @("EthashLowMem"); Type = "NVIDIA"; Fee = 0.005; MinMemGiB = $MinerPools[0].EthashLowMem.DAGSizeGiB + 0.91; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 15); Arguments = " --algo ethash" } # TTMiner-v5.0.3 is fastest
- [PSCustomObject]@{ Algorithms = @("KawPow"); Type = "NVIDIA"; Fee = 0.01; MinMemGiB = $MinerPools[0].KawPow.DAGSizeGiB + 0.91; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(75, 45); Arguments = " --algo kawpow" }
+ [PSCustomObject]@{ Algorithms = @("Ethash", "VertHash"); Type = "NVIDIA"; Fee = 0.005; MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 0.81; ExcludePools = @(@("HiveOn"), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 45); Arguments = " --algo eth+vtc --verthash-data ..\.$($Variables.VerthashDatPath)" }
+# [PSCustomObject]@{ Algorithms = @("EthashLowMem"); Type = "NVIDIA"; Fee = 0.005; MinMemGiB = $MinerPools[0].EthashLowMem.DAGSizeGiB + 0.81; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(45, 15); Arguments = " --algo ethash" } # TTMiner-v5.0.3 is fastest
+ [PSCustomObject]@{ Algorithms = @("KawPow"); Type = "NVIDIA"; Fee = 0.01; MinMemGiB = $MinerPools[0].KawPow.DAGSizeGiB + 0.81; ExcludePools = @(@(), @()); Minerset = 2; Tuning = " --tweak 2"; WarmupTimes = @(75, 45); Arguments = " --algo kawpow" }
[PSCustomObject]@{ Algorithms = @("VertHash"); Type = "NVIDIA"; Fee = 0.01; MinMemGiB = 3.0; ExcludePools = @(@(), @()); MinerSet = 0; Tuning = " --tweak 2"; WarmupTimes = @(60, 60); Arguments = " --algo verthash --verthash-data ..\.$($Variables.VerthashDatPath)" }
)
diff --git a/Miners/Trex-v0.26.8.ps1 b/Miners/Trex-v0.26.8.ps1
index 657fd1f1ee..f6afdfce32 100644
--- a/Miners/Trex-v0.26.8.ps1
+++ b/Miners/Trex-v0.26.8.ps1
@@ -8,9 +8,9 @@ $DeviceEnumerator = "Type_Vendor_Index"
$Algorithms = [PSCustomObject[]]@(
[PSCustomObject]@{ Algorithms = @("Autolykos2"); Fee = @(0.02); MinMemGiB = $MinerPools[0].Autolykos2.DAGSizeGiB + 1.08; MinerSet = 0; Tuning = " --mt 3"; WarmupTimes = @(45, 0); Arguments = " --algo autolykos2 --intensity 25" }
[PSCustomObject]@{ Algorithms = @("Blake3"); Fee = @(0.01); MinMemGiB = 2; Minerset = 2; Tuning = " --mt 3"; WarmupTimes = @(45, 0); Arguments = " --algo blake3 --intensity 25" }
- [PSCustomObject]@{ Algorithms = @("EtcHash"); Fee = @(0.01); MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB + 1.08; Minerset = 1; Tuning = " --mt 3"; WarmupTimes = @(60, 5); Arguments = " --algo etchash --intensity 25" } # GMiner-v3.32 is fastest
+ [PSCustomObject]@{ Algorithms = @("EtcHash"); Fee = @(0.01); MinMemGiB = $MinerPools[0].Etchash.DAGSizeGiB + 1.08; Minerset = 1; Tuning = " --mt 3"; WarmupTimes = @(60, 5); Arguments = " --algo etchash --intensity 25" } # GMiner-v3.33 is fastest
[PSCustomObject]@{ Algorithms = @("EtcHash", "Blake3"); Fee = @(0.01, 0.01); MinMemGiB = $MinerPools[0].EtcHash.DAGSizeGiB + 1.08; Minerset = 2; Tuning = " --mt 3"; WarmupTimes = @(60, 15); Arguments = " --algo etchash --dual-algo blake3 --lhr-tune -1 --lhr-autotune-interval 1" }
- [PSCustomObject]@{ Algorithms = @("Ethash"); Fee = @(0.01); MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 1.08; Minerset = 1; Tuning = " --mt 3"; WarmupTimes = @(60, 15); Arguments = " --algo ethash --intensity 25" } # GMiner-v3.32 is fastest
+ [PSCustomObject]@{ Algorithms = @("Ethash"); Fee = @(0.01); MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 1.08; Minerset = 1; Tuning = " --mt 3"; WarmupTimes = @(60, 15); Arguments = " --algo ethash --intensity 25" } # GMiner-v3.33 is fastest
[PSCustomObject]@{ Algorithms = @("Ethash", "Autolykos2"); Fee = @(0.01, 0.02); MinMemGiB = 8; Minerset = 2; Tuning = " --mt 3"; WarmupTimes = @(60, 15); Arguments = " --algo ethash --dual-algo autolykos2 --lhr-tune -1 --lhr-autotune-interval 1" }
[PSCustomObject]@{ Algorithms = @("Ethash", "Blake3"); Fee = @(0.01, 0.01); MinMemGiB = $MinerPools[0].Ethash.DAGSizeGiB + 1.08; Minerset = 2; Tuning = " --mt 3"; WarmupTimes = @(60, 15); Arguments = " --algo ethash --dual-algo blake3 --lhr-tune -1 --lhr-autotune-interval 1" }
[PSCustomObject]@{ Algorithms = @("Ethash", "FiroPow"); Fee = @(0.01, 0.01); MinMemGiB = 10; Minerset = 2; Tuning = " --mt 3"; WarmupTimes = @(255, 15); Arguments = " --algo ethash --dual-algo firopow --lhr-tune -1" }
diff --git a/Miners/lolMiner-v1.73.ps1 b/Miners/lolMiner-v1.73.ps1
index ff07e5b3b6..92566cba2b 100644
--- a/Miners/lolMiner-v1.73.ps1
+++ b/Miners/lolMiner-v1.73.ps1
@@ -49,7 +49,7 @@ $Algorithms = [PSCustomObject[]]@(
[PSCustomObject]@{ Algorithms = @("Cuckaroo29B"); Type = "NVIDIA"; Fee = @(0.02); MinMemGiB = 6.0; Minerset = 2; WarmupTimes = @(45, 60); ExcludeGPUArchitecture = @(); Arguments = " --algo CR29-40" }
[PSCustomObject]@{ Algorithms = @("Cuckaroo29S"); Type = "NVIDIA"; Fee = @(0.02); MinMemGiB = 6.0; Minerset = 2; WarmupTimes = @(45, 60); ExcludeGPUArchitecture = @(); Arguments = " --algo CR29-32" }
[PSCustomObject]@{ Algorithms = @("Cuckaroo30CTX"); Type = "NVIDIA"; Fee = @(0.025); MinMemGiB = 8.0; Minerset = 2; WarmupTimes = @(45, 60); ExcludeGPUArchitecture = @(); Arguments = " --algo C30CTX" }
- [PSCustomObject]@{ Algorithms = @("CuckarooD29"); Type = "NVIDIA"; Fee = @(0.01); MinMemGiB = 4.0; Minerset = 2; WarmupTimes = @(45, 60); ExcludeGPUArchitecture = @(); Arguments = " --algo C29D" } # GMiner-v3.32 is fastest
+ [PSCustomObject]@{ Algorithms = @("CuckarooD29"); Type = "NVIDIA"; Fee = @(0.01); MinMemGiB = 4.0; Minerset = 2; WarmupTimes = @(45, 60); ExcludeGPUArchitecture = @(); Arguments = " --algo C29D" } # GMiner-v3.33 is fastest
[PSCustomObject]@{ Algorithms = @("CuckarooM29"); Type = "NVIDIA"; Fee = @(0.01); MinMemGiB = 6.0; Minerset = 2; WarmupTimes = @(45, 60); ExcludeGPUArchitecture = @(); Arguments = " --algo C29M" }
# [PSCustomObject]@{ Algorithms = @("Cuckatoo31"); Type = "NVIDIA"; Fee = @(0.02); MinMemGiB = 4.0; Minerset = 3; WarmupTimes = @(60, 60); ExcludeGPUArchitecture = @(); Arguments = " --algo C31" } # ASIC
# [PSCustomObject]@{ Algorithms = @("Cuckatoo32"); Type = "NVIDIA"; Fee = @(0.02); MinMemGiB = 4.0; Minerset = 3; WarmupTimes = @(60, 60); ExcludeGPUArchitecture = @(); Arguments = " --algo C32" } # ASIC
diff --git a/NemosMiner.ps1 b/NemosMiner.ps1
index d2d5f130fb..8188af82a9 100644
--- a/NemosMiner.ps1
+++ b/NemosMiner.ps1
@@ -21,8 +21,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: NemosMiner.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
[CmdletBinding()]
@@ -291,7 +291,7 @@ $Variables.Branding = [PSCustomObject]@{
BrandName = "NemosMiner"
BrandWebSite = "https://nemosminer.com"
ProductLabel = "NemosMiner"
- Version = [System.Version]"4.3.4.1"
+ Version = [System.Version]"4.3.4.2"
}
$WscriptShell = New-Object -ComObject Wscript.Shell
diff --git a/Pools/HashCryptos.ps1 b/Pools/HashCryptos.ps1
index fc1f940995..f72ae1a8de 100644
--- a/Pools/HashCryptos.ps1
+++ b/Pools/HashCryptos.ps1
@@ -19,8 +19,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: HashCryptos.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Pools/HiveON.ps1 b/Pools/HiveON.ps1
index 1a8f9bcc5b..9a0dd6ac7f 100644
--- a/Pools/HiveON.ps1
+++ b/Pools/HiveON.ps1
@@ -19,8 +19,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: Hiveon.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Pools/MiningDutch.ps1 b/Pools/MiningDutch.ps1
index e38033c172..318a8f021a 100644
--- a/Pools/MiningDutch.ps1
+++ b/Pools/MiningDutch.ps1
@@ -19,7 +19,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: MiningDutch.ps1
-Version: 4.3.4.1
+Version: 4.3.4.2
Version date: 05 April 2023
#>
diff --git a/Pools/MiningPoolHub.ps1 b/Pools/MiningPoolHub.ps1
index b2c09a37f4..f512f28365 100644
--- a/Pools/MiningPoolHub.ps1
+++ b/Pools/MiningPoolHub.ps1
@@ -19,8 +19,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: MiningPoolHub.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Pools/NiceHash.ps1 b/Pools/NiceHash.ps1
index 718899bafb..8748d6c60c 100644
--- a/Pools/NiceHash.ps1
+++ b/Pools/NiceHash.ps1
@@ -19,8 +19,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: NiceHash.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Pools/ProHashing.ps1 b/Pools/ProHashing.ps1
index e66540b638..2cac4a2136 100644
--- a/Pools/ProHashing.ps1
+++ b/Pools/ProHashing.ps1
@@ -19,8 +19,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: ProHashing.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Pools/ZPool.ps1 b/Pools/ZPool.ps1
index 9979e3eafa..854111fa87 100644
--- a/Pools/ZPool.ps1
+++ b/Pools/ZPool.ps1
@@ -19,8 +19,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: ZPool.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
diff --git a/Pools/ZergPool.ps1 b/Pools/ZergPool.ps1
index 2b13edede5..ac9b0b13c0 100644
--- a/Pools/ZergPool.ps1
+++ b/Pools/ZergPool.ps1
@@ -19,8 +19,8 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: ZergPool.ps1
-Version: 4.3.4.1
-Version date: 16 April 2023
+Version: 4.3.4.2
+Version date: 18 April 2023
#>
using module ..\Includes\Include.psm1
@@ -79,7 +79,7 @@ If ($DivisorMultiplier -and $Regions -and $Wallet) {
$Stat = Set-Stat -Name "$($PoolVariant)_$($Algorithm_Norm)$(If ($Currency) { "-$($Currency)" })_Profit" -Value ($Request.$_.$PriceField / $Divisor) -FaultDetection $false
$Reasons = [System.Collections.Generic.List[String]]@()
- # If ($Request.$_.noautotrade -eq 1) { $Reasons.Add("Conversion disabled at pool") } # Remvoed because of https://github.com/RainbowMiner/RainbowMiner/issues/2341#issuecomment-1498474419
+ If ($Request.$_.noautotrade -eq 1 -and $Request.$_.Currency -ne $PayoutCurrency) { $Reasons.Add("Conversion disabled at pool") }
If ($Request.$_.hashrate_shared -eq 0) { $Reasons.Add("No hashrate at pool") }
If ($PoolVariant -match ".+Plus$" -and $Request.$_.$PriceField -eq 0) { $Reasons.Add("Plus price -eq 0")}
diff --git a/README.md b/README.md
index cc11dc3eb7..66bbd86b93 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
NemosMiner monitors mining pools in real-time in order to find the most profitable algorithm
-Updated 16 April 2023
+Updated 18 April 2023
Copyright (c) 2018-2023 Nemo, MrPlus & UselessGuru
diff --git a/Version.txt b/Version.txt
index b038ff2b4b..e21f67e4ce 100644
--- a/Version.txt
+++ b/Version.txt
@@ -1,6 +1,6 @@
{
"Product": "NemosMiner",
- "Version": "4.3.4.1",
+ "Version": "4.3.4.2",
"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 1791e791bc..27e5f7a5f1 100644
--- a/Web/APIdocs.html
+++ b/Web/APIdocs.html
@@ -16,8 +16,8 @@
Product: NemosMiner
File: API.psm1
-version: 4.3.4.1
-version date: 16 April 2023-->
+version: 4.3.4.2
+version date: 18 April 2023-->
@@ -271,7 +271,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"4.3.4.1"%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"4.3.4.2"%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
diff --git a/Web/scripts/demo.ps1 b/Web/scripts/demo.ps1
index 88c4fb90f2..fe754109ab 100644
--- a/Web/scripts/demo.ps1
+++ b/Web/scripts/demo.ps1
@@ -18,7 +18,7 @@ along with this program. If not, see .
<#
Product: NemosMiner
File: demo.psm1
-Version: 4.3.4.1
+Version: 4.3.4.2
Version date: 20 October 2022
#>