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 #>