├── .gitignore ├── Code ├── AlgoInfo.ps1 ├── BaseConfig.ps1 ├── Clear-Miners.ps1 ├── Config.ps1 ├── DeviceInfo.ps1 ├── Downloader.ps1 ├── Get-CPUFeatures.ps1 ├── Get-Config.ps1 ├── Get-DeviceInfo.ps1 ├── Get-ElectricityPrice.ps1 ├── Get-FormatOutput.ps1 ├── Get-ManagementObject.ps1 ├── Get-PoolInfo.ps1 ├── Get-Prerequisites.ps1 ├── Get-ProcessOutput.ps1 ├── Get-ProfitLowerFloor.ps1 ├── Get-RateInfo.ps1 ├── Get-Rest.ps1 ├── Get-Speed.ps1 ├── HumanInterval.ps1 ├── Include.ps1 ├── MRR.ps1 ├── MinerInfo.ps1 ├── MinerProcess.ps1 ├── MinerProfitInfo.ps1 ├── MultipleUnit.ps1 ├── Out-Data.ps1 ├── Out-DeviceInfo.ps1 ├── PoolInfo.ps1 ├── Select-ActiveTypes.ps1 ├── ShareInfo.ps1 ├── Start-ApiServer.ps1 ├── Start-Command.ps1 ├── StatInfo.ps1 ├── SummaryInfo.ps1 └── Update-Miner.ps1 ├── Config.md ├── LICENSE ├── MindMiner.ps1 ├── Miners ├── _archive.zip ├── amd-lol-1.88.ps1 ├── amd-trm-0.10.21.ps1 ├── bz-amd-21.3.0.ps1 ├── bz-intel-21.3.0.ps1 ├── bz-nv-21.3.0.ps1 ├── bz-nv-dual-21.3.0.ps1 ├── ccminer-alexis-1f.ps1 ├── ccminer-klaust-821r9.ps1 ├── ccminer-yescrypt-4.ps1 ├── ccminer-ze-262.ps1 ├── claymore-neoscrypt-12.ps1 ├── cpu-kdrd-1.0.0.ps1 ├── cpu-opt-3.23.3.ps1 ├── cpu-rplant-5.0.40.ps1 ├── cpu-upx-20.ps1 ├── cpu-verus-3.8.3.ps1 ├── cpu-xmrigcc-2.9.7.ps1 ├── gminer-2.39.ps1 ├── gminer-2.74.ps1 ├── gminer-3.44.ps1 ├── gminer-amd-dual-3.43.ps1 ├── gminer-nv-dual-3.43.ps1 ├── miniz-amd-2.4d.ps1 ├── miniz-nv-2.4d.ps1 ├── miniz-nv-dual-2.4d.ps1 ├── nb-amd-42.3.ps1 ├── nb-nvidia-39.5.ps1 ├── nb-nvidia-42.3.ps1 ├── nv-cd-0.16.0.ps1 ├── nv-cd-0.18.0.ps1 ├── nv-cd-0.25.1.ps1 ├── nv-cd-0.26.0.ps1 ├── nv-cd-0.27.0.ps1 ├── nv-krnlx-01.ps1 ├── nv-onezero-1.3.0.ps1 ├── nv-radiant-0.1.1.ps1 ├── nv-rigel-1.17.4.ps1 ├── nv-rigel-dual-1.17.4.ps1 ├── nv-trex-0.19.14.ps1 ├── nv-trex-0.26.8.ps1 ├── nv-verus-3.8.3.ps1 ├── nv-xaya-0.1.f1.ps1 ├── srbm-amd-2.4.9.ps1 ├── srbm-amd-dual-2.4.9.ps1 ├── srbm-cpu-0.8.8.ps1 ├── srbm-cpu-2.4.4.ps1 ├── srbm-cpu-2.4.9.ps1 ├── srbm-intel-2.4.9.ps1 ├── srbm-nv-2.4.9.ps1 ├── srbm-nv-dual-2.4.9.ps1 ├── wildrig-amd-0.31.2.ps1 ├── wildrig-amd-0.40.5.ps1 ├── wildrig-intel-0.40.5.ps1 ├── wildrig-nv-0.31.2.ps1 ├── wildrig-nv-0.40.5.ps1 ├── xmrig-amd-6.21.0.ps1 ├── xmrig-cpu-6.21.0.ps1 └── xmrig-nv-6.21.0.ps1 ├── Pools ├── 2Miners.ps1 ├── ApiPoolsProxy.ps1 ├── MPH.ps1 ├── MRR.ps1 ├── NLPool.ps1 ├── NiceHash.ps1 ├── ZergPool.ps1 └── Zpool.ps1 ├── README.md └── run.bat /.gitignore: -------------------------------------------------------------------------------- 1 | bin/ 2 | run/ 3 | stats/ 4 | *.config.txt 5 | config.txt 6 | algorithms.txt 7 | .*/ -------------------------------------------------------------------------------- /Code/AlgoInfo.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2021 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | class AlgoInfo { 8 | [bool] $Enabled 9 | [string] $Algorithm 10 | 11 | [string] ToString() { 12 | return $this | Select-Object Enabled, Algorithm 13 | } 14 | } 15 | 16 | class AlgoInfoEx : AlgoInfo { 17 | [string] $ExtraArgs 18 | [int] $BenchmarkSeconds 19 | 20 | [string] ToString() { 21 | return $this | Select-Object Enabled, Algorithm, ExtraArgs, BenchmarkSeconds 22 | } 23 | } 24 | 25 | class SpeedProfitInfo { 26 | [decimal] $Speed 27 | [decimal] $Profit 28 | hidden [decimal] $MrrProfit 29 | [decimal] $BestProfit 30 | 31 | [void] SetValue([decimal] $speed, [decimal] $profit, [decimal] $bestPrice, [bool] $mrr) { 32 | if ($mrr) { 33 | if ($this.MrrProfit -lt $profit) { 34 | $this.Speed = $speed 35 | $this.MrrProfit = $profit 36 | } 37 | } 38 | elseif ($this.Profit -lt $profit -or ($this.Profit -eq $profit -and $this.Speed -lt $speed)) { 39 | $this.Speed = $speed 40 | $this.Profit = $profit 41 | } 42 | $this.BestProfit = $bestPrice * $this.Speed 43 | } 44 | } -------------------------------------------------------------------------------- /Code/BaseConfig.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | # read/write/store base confirguration 8 | class BaseConfig { 9 | static [string] $Filename = ".config.txt" 10 | 11 | # save config file 12 | [void] Save([string] $fn) { 13 | $this | ConvertTo-Json -Depth 10 | Out-File -FilePath $fn -Force 14 | } 15 | 16 | # check exists file and really parsed 17 | static [bool] Exists([string] $fn) { 18 | try { 19 | $hash = [BaseConfig]::Read($fn) 20 | if ($hash -is [hashtable] -and $hash.Count -gt 0) { 21 | return $true 22 | } 23 | } 24 | catch { } 25 | return $false 26 | } 27 | 28 | static [void] Save([string] $fn, [hashtable] $hash) { 29 | $hash | ConvertTo-Json | Out-File -FilePath $fn -Force 30 | } 31 | 32 | # read json config 33 | static [hashtable] Read([string] $fn) { 34 | $temp = Get-Content -Path $fn | ConvertFrom-Json 35 | 36 | if ($temp) { 37 | $hash = @{} 38 | $temp | Get-Member -MemberType NoteProperty | ForEach-Object { $hash.Add($_.Name, $temp."$($_.Name)") } 39 | if ($hash.Count -gt 0) { 40 | return $hash 41 | } 42 | } 43 | 44 | return $null 45 | } 46 | 47 | # read or create config 48 | static [hashtable] ReadOrCreate([string] $fn, [hashtable] $hash) { 49 | try { 50 | $temp = Get-Content -Path $fn | ConvertFrom-Json 51 | } 52 | catch { 53 | $temp = $null 54 | # if exists rename to bak 55 | if (Test-Path $fn) { 56 | Remove-Item "$fn.bak" -Force | Out-Null 57 | Rename-Item $fn "$fn.bak" -Force | Out-Null 58 | } 59 | } 60 | 61 | if ($temp) { 62 | $hash = @{} 63 | $temp | Get-Member -MemberType NoteProperty | ForEach-Object { $hash.Add($_.Name, $temp."$($_.Name)") } 64 | return $hash 65 | } 66 | else { 67 | $hash | ConvertTo-Json -Depth 10 | Out-File -FilePath $fn -Force 68 | return $hash 69 | } 70 | } 71 | 72 | <# read or create config 73 | static [Object[]] ReadOrCreate([string] $fn, [Object[]] $array) { 74 | try { 75 | $temp = Get-Content -Path $fn | ConvertFrom-Json 76 | } 77 | catch { 78 | $temp = $null 79 | } 80 | 81 | if ($temp) { 82 | return $temp 83 | } 84 | else { 85 | $array | ConvertTo-Json -Depth 10 | Out-File -FilePath $fn -Force 86 | return $array 87 | } 88 | } 89 | #> 90 | } -------------------------------------------------------------------------------- /Code/Clear-Miners.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | function Clear-OldMiners ([object[]] $activeMiners) { 8 | Write-Host "Clean miners ..." -ForegroundColor Green 9 | Get-Question-All-Reset 10 | try { 11 | $latestminers = Get-Rest "https://api.github.com/repos/Quake4/MindMiner/contents/Miners?ref=$([Config]::Version)" | ForEach-Object { $_.name.Replace(".ps1", [string]::Empty) } 12 | # check miners folder 13 | if ($latestminers) { 14 | $clearminers = @() 15 | $clearminers += Get-ChildItem ([Config]::MinersLocation) | Where-Object Extension -eq ".ps1" | ForEach-Object { $_.Name.Replace(".ps1", [string]::Empty) } | 16 | Where-Object { $latestminers -notcontains $_ -and $activeMiners -notcontains $_ } | ForEach-Object { "$_"; } 17 | # check bin folder 18 | $clearminers += Get-ChildItem ([Config]::BinLocation) -Directory | Where-Object { $latestminers -notcontains $_.Name -and $activeMiners -notcontains $_.Name -and $clearminers -notcontains $_.Name } | ForEach-Object { $_.Name; } 19 | # check for delete 20 | if (!$clearminers -or $clearminers.Length -eq 0) { 21 | Write-Host "Nothing to clean." -ForegroundColor Yellow 22 | } 23 | else { 24 | # remove loop 25 | $clearminers | ForEach-Object { 26 | # remove after ask 27 | if (Get-Question "Remove miner '$_'" $true) { 28 | # remove miner 29 | $path = "$([Config]::MinersLocation)\$_.ps1" 30 | if ((Test-Path $path -PathType Leaf)) { 31 | Remove-Item $path -Force 32 | } 33 | # remove miner config 34 | $path = "$([Config]::MinersLocation)\$_.config.txt" 35 | if ((Test-Path $path -PathType Leaf)) { 36 | Remove-Item $path -Force 37 | } 38 | # remove bin 39 | $path = "$([Config]::BinLocation)\$_" 40 | if ((Test-Path $path -PathType Container)) { 41 | Remove-Item $path -Recurse -Force 42 | } 43 | # remove stat 44 | $path = "$([Config]::StatsLocation)\$_.txt" 45 | if ((Test-Path $path -PathType Leaf)) { 46 | Remove-Item $path -Force 47 | } 48 | # remove power stat 49 | $path = "$([Config]::StatsLocation)\$_.power.txt" 50 | if ((Test-Path $path -PathType Leaf)) { 51 | Remove-Item $path -Force 52 | } 53 | } 54 | } 55 | Write-Host "Miners cleaned." -ForegroundColor Yellow 56 | } 57 | } 58 | } 59 | catch { 60 | Write-Host "Error: $_" -ForegroundColor Red 61 | } 62 | finally { 63 | Get-Question-All-Reset 64 | } 65 | } 66 | 67 | function Clear-OldMinerStats ( 68 | [Parameter(Mandatory)] $AllMiners, 69 | [Parameter(Mandatory)] $Statistics, 70 | [Parameter(Mandatory)] [string] $Interval) { 71 | ($AllMiners | ForEach-Object { $_.Miner.Name } | Select-Object -Unique) | ForEach-Object { 72 | $Statistics.DelValues($_, $Interval); 73 | } 74 | } 75 | 76 | function Clear-FailedMiners ([object[]] $failedMiners) { 77 | [bool] $result = $false 78 | Write-Host "Clean failed miners ..." -ForegroundColor Green 79 | if (!$failedMiners -or $failedMiners.Length -eq 0) { 80 | Write-Host "Nothing to clean." -ForegroundColor Yellow 81 | } 82 | else { 83 | $failedMiners | ForEach-Object { 84 | if (Get-Question "Remove failed state from algorithm '$($_.Miner.Algorithm)' and miner '$($_.Miner.Name)'") { 85 | $_.ResetFailed(); 86 | $result = $true; 87 | } 88 | } 89 | Write-Host "Miners cleaned." -ForegroundColor Yellow 90 | } 91 | $result 92 | } -------------------------------------------------------------------------------- /Code/DeviceInfo.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | class DeviceInfo { 8 | [string] $Name 9 | [decimal] $Power 10 | } 11 | 12 | class CPUInfo : DeviceInfo { 13 | [int] $Cores 14 | [int] $Threads 15 | [int] $Clock 16 | [string] $Features 17 | [decimal] $Load 18 | [int] $Temperature 19 | } 20 | 21 | class GPUInfo : DeviceInfo { 22 | [decimal] $Load 23 | [decimal] $LoadMem 24 | [int] $Temperature 25 | [decimal] $Fan 26 | [decimal] $PowerLimit 27 | [decimal] $Clock 28 | [decimal] $ClockMem 29 | [decimal] $Memory 30 | 31 | [void] CalcPower() { 32 | if ($this.Power -eq 0) { 33 | [int] $pwr = 0 34 | switch ($this.Name) { 35 | "RX Vega" { $pwr = 295 } 36 | "Vega 64" { $pwr = 295 } 37 | "Vega 56" { $pwr = 210 } 38 | "RX 590" { $pwr = 225 } 39 | "RX 580" { $pwr = 185 } 40 | "RX 480" { $pwr = 185 } 41 | "RX 570" { $pwr = 150 } 42 | "RX 470" { $pwr = 120 } 43 | "RX 560" { $pwr = 80 } 44 | "RX 460" { $pwr = 70 } 45 | "RX 550" { $pwr = 50 } 46 | "GTX 1050 Ti" { $pwr = 75 } 47 | "GTX 1050" { $pwr = 75 } 48 | Default {} 49 | } 50 | if ($pwr -gt 0) { 51 | $this.Power = [decimal]::Round($this.PowerLimit * $pwr * $this.Load / 10000, 1); 52 | if ($this.Power -eq 0) { 53 | $this.Power = [decimal]::Round($pwr / 10, 1); 54 | } 55 | } 56 | } 57 | } 58 | } -------------------------------------------------------------------------------- /Code/Downloader.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | $Download = $args 8 | 9 | $Download | ForEach-Object { 10 | $URI = $_.URI 11 | $Path = $_.Path 12 | $Pass = $_.Pass 13 | $SHA = $_.SHA 14 | $Dir = Split-Path -Path $Path 15 | $FN = Split-Path -Leaf $URI 16 | $Archive = [IO.Path]::Combine($Dir, $FN) 17 | 18 | # "'$URI' '$Path' '$Dir' '$FN' '$Archive' " | Out-File "$FN.txt" 19 | 20 | if (![string]::IsNullOrWhiteSpace($Dir) -and !(Test-Path $Dir)) { 21 | New-Item -ItemType Directory $Dir | Out-Null 22 | } 23 | 24 | $exists = Test-Path $Path; 25 | 26 | # check SHA 27 | if ($exists -and ![string]::IsNullOrWhiteSpace($SHA) -and (Get-FileHash $Path -Algorithm sha256).Hash -ne $SHA) { 28 | $exists = $false; 29 | } 30 | 31 | if (!$exists) { 32 | [Diagnostics.Process] $process = $null 33 | try { 34 | if ([Net.ServicePointManager]::SecurityProtocol -notmatch [Net.SecurityProtocolType]::Tls12) { 35 | [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 36 | } 37 | $req = Invoke-WebRequest $URI -OutFile $Archive -PassThru -ErrorAction Stop -UseBasicParsing 38 | # names not match - upack 39 | if ((Split-Path -Leaf $Path) -ne $FN) { 40 | $p = [string]::Empty 41 | if (![string]::IsNullOrWhiteSpace($Pass)) { 42 | $p = "-p$Pass" 43 | } 44 | if ([string]::IsNullOrWhiteSpace($Dir)) { 45 | $process = Start-Process "7z" "x $Archive -y -spe $p" -Wait -WindowStyle Hidden -PassThru 46 | } 47 | else { 48 | $process = Start-Process "7z" "x $Archive -o$Dir -y -spe $p" -Wait -WindowStyle Hidden -PassThru 49 | } 50 | # remove archive 51 | Remove-Item $Archive -Force 52 | if ($process.ExitCode -eq 0) { 53 | if (!(Test-Path $path -PathType Leaf)) { 54 | # if has one subfolder - delete him 55 | Get-ChildItem $Dir | Where-Object PSIsContainer -EQ $true | ForEach-Object { 56 | $parent = "$Dir\$_" 57 | Get-ChildItem "$parent" | ForEach-Object { Move-Item "$parent\$_" "$Dir" -Force } 58 | Remove-Item $parent -Force 59 | } 60 | } 61 | Get-ChildItem $Dir -File -Recurse | Unblock-File 62 | } 63 | elseif (![string]::IsNullOrWhiteSpace($Dir)) { 64 | # clear folder if error 65 | Remove-Item $Dir -Force 66 | } 67 | } 68 | } 69 | catch { 70 | # "'$URI' '$Path' '$Dir' '$FN' '$Archive' $_" | Out-File "$FN.txt" -Append 71 | } 72 | finally { 73 | if ($process -is [IDisposable]) { $process.Dispose(); $process = $null } 74 | if ($req -is [IDisposable]) { $req.Dispose(); $req = $null } 75 | } 76 | } 77 | } -------------------------------------------------------------------------------- /Code/Get-CPUFeatures.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2018 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | function Get-CPUFeatures([Parameter(Mandatory)][string] $bin) { 8 | try { 9 | [string] $line = Get-ProcessOutput ([IO.Path]::Combine($bin, "FeatureDetector.exe")) 10 | $line.Split(@("Features", " ", ":", ",", [environment]::NewLine), [StringSplitOptions]::RemoveEmptyEntries) 11 | } 12 | catch { 13 | Write-Host "Cannot detect CPU features: $_" -ForegroundColor Red 14 | } 15 | } -------------------------------------------------------------------------------- /Code/Get-Config.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2021 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | . .\Code\Config.ps1 8 | 9 | function Get-Config { 10 | [Config] $cfg = $null 11 | if ([Config]::Exists() -eq $false) { 12 | Write-Host "Missing configuration file 'config.txt'. Create. Please, enter wallet address now and change other parameters later." -ForegroundColor Red 13 | do { 14 | Write-Host "Need enter one or more of: BTC, LTC, NiceHash or Username." -ForegroundColor Yellow 15 | $btcwal = Read-Host "Enter Your BTC wallet for some pools or press Enter for skip" 16 | $ltcwal = Read-Host "Enter Your LTC wallet for some pools or press Enter for skip" 17 | $nicewal = Read-Host "Enter Your NiceHash internal wallet or press Enter for skip" 18 | $login = Read-Host "Enter Your Username for pools with registration (MiningPoolHub) or press Enter for skip" 19 | } while ([string]::IsNullOrWhiteSpace($btcwal) -and [string]::IsNullOrWhiteSpace($ltcwal) -and [string]::IsNullOrWhiteSpace($nicewal) -and [string]::IsNullOrWhiteSpace($login)) 20 | $tmpcfg = [hashtable]@{} 21 | if (![string]::IsNullOrWhiteSpace($btcwal) -or ![string]::IsNullOrWhiteSpace($ltcwal) -or ![string]::IsNullOrWhiteSpace($nicewal)) { 22 | $tmpcfg.Add("Wallet", [hashtable]@{}); 23 | if (![string]::IsNullOrWhiteSpace($btcwal)) { 24 | $tmpcfg.Wallet.BTC = $btcwal 25 | } 26 | if (![string]::IsNullOrWhiteSpace($ltcwal)) { 27 | $tmpcfg.Wallet.LTC = $ltcwal 28 | } 29 | if (![string]::IsNullOrWhiteSpace($nicewal)) { 30 | $tmpcfg.Wallet.NiceHash = $nicewal 31 | } 32 | } 33 | if (![string]::IsNullOrWhiteSpace($login)) { 34 | $tmpcfg.Login = $login 35 | } 36 | if (Get-Question "Do you want to use online monitoring") { 37 | $apikey = Read-Host "Enter Your Api Key ID or press Enter for get new" 38 | $count = 5 39 | while ($count -gt 0 -and [string]::IsNullOrWhiteSpace($apikey)) { 40 | $count-- 41 | $json = Get-Rest "https://api.mindminer.online/?type=genapikey" 42 | if ($json -and $json.apikey) { 43 | $apikey = $json.apikey 44 | Write-Host "Api Key ID '$apikey' generated successfully. You must use it on https://mindminder.online." -ForegroundColor Yellow 45 | } 46 | elseif (!$json -or $json.error) { 47 | Start-Sleep -Seconds 3 48 | } 49 | } 50 | $tmpcfg.ApiKey = $apikey 51 | } 52 | if (!(Get-Question "Use CPU for mining")) { 53 | $tmpcfg.AllowedTypes = [Config]::new().AllowedTypes | Where-Object { $_ -ne "CPU" } 54 | } 55 | do { 56 | $region = (Read-Host "Enter Your region from list $([Enum]::GetValues([eRegion]) -join ", ")") -as [eRegion] 57 | } while ($null -eq $region) 58 | $tmpcfg.Region = "$region" 59 | [BaseConfig]::Save([Config]::Filename, $tmpcfg) 60 | Remove-Variable tmpcfg, login, nicewal, btcwal, ltcwal 61 | $cfg = [Config]::Read() 62 | $global:AskPools = $true 63 | } 64 | else { 65 | $cfg = [Config]::Read() 66 | $val = $cfg.Validate() 67 | if (![string]::IsNullOrWhiteSpace($val)) { 68 | Write-Host ("Configuration:" + [Environment]::NewLine + $cfg) 69 | Write-Host ("Error in configuration file 'config.txt'. Please fill needed parameter(s): " + $val) -ForegroundColor Red 70 | $cfg = $null 71 | } 72 | Remove-Variable val 73 | } 74 | if ($cfg) { 75 | # remove from static constructor of [Config] to remove deadlock 76 | if ([Config]::ActiveTypes -contains [eMinerType]::CPU) { 77 | [Config]::CPUFeatures = Get-CPUFeatures ([Config]::BinLocation) 78 | } 79 | [Config]::RateTimeout = [HumanInterval]::Parse("1 hour") 80 | # filter has by allowed types 81 | [Config]::ActiveTypes = [Config]::ActiveTypes | Where-Object { $cfg.AllowedTypes -contains $_ } | Sort-Object $_ 82 | [Config]::ActiveTypesInitial = [Config]::ActiveTypes 83 | 84 | if ([Config]::ActiveTypes -contains [eMinerType]::AMD -or [Config]::ActiveTypes -contains [eMinerType]::nVidia) { 85 | $json = Get-OpenCLDeviceDetection ([Config]::BinLocation) $cfg.CheckTimeout 86 | if ([Config]::ActiveTypes -contains [eMinerType]::AMD) { 87 | [Config]::AMDPlatformId = Get-PlatformId $json "AMD" $cfg.CheckTimeout 88 | } 89 | if ([Config]::ActiveTypes -contains [eMinerType]::nVidia) { 90 | [Config]::CudaVersion = Get-CudaVersion $json $cfg.CheckTimeout 91 | [Config]::nVidiaDevices = Get-CudaDevices $json $cfg.CheckTimeout 92 | [Config]::nVidiaPlatformId = Get-PlatformId $json "nVidia" $cfg.CheckTimeout 93 | } 94 | Remove-Variable json 95 | } 96 | # if cpu active send api status twice longer 97 | if ([Config]::ActiveTypes -contains [eMinerType]::CPU) { 98 | [Config]::ApiSendTimeout = [Config]::ApiSendTimeout * 2; 99 | } 100 | # set default value if empty 101 | if (!$cfg.Currencies -or $cfg.Currencies.Count -eq 0) { 102 | $hash = [Collections.Generic.List[object]]::new() 103 | $hash.Add(@("BTC"; 8)) 104 | $hash.Add(@("USD"; 2)) 105 | $cfg.Currencies = $hash 106 | } 107 | } 108 | $cfg 109 | } -------------------------------------------------------------------------------- /Code/Get-ElectricityPrice.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2018 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | function Get-ElectricityCurrentPrice ([Parameter(Mandatory)][string] $returncurrency) { 8 | [decimal] $price = 0; 9 | $currency = Get-ElectricityPriceCurrency; 10 | if ($currency) { 11 | # { USD = { 7 = 0.1, 18 = 0.05 } } 12 | if ($Config.ElectricityPrice.$currency -is [PSCustomObject]) { 13 | $items = $Config.ElectricityPrice.$currency | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name | 14 | Sort-Object @{ Expression = { [decimal]$_.Name } } 15 | $currentHour = ([datetime]::Now - [datetime]::Today).TotalHours 16 | $tariff = $items[$items.Length - 1]; 17 | for ($i = 0; $i -lt $items.Length; $i++) { 18 | if ($items[$i] -lt $currentHour) { 19 | $tariff = $items[$i]; 20 | } 21 | } 22 | $price = [decimal]$Config.ElectricityPrice.$currency.$tariff 23 | Remove-Variable tariff, currentHour, items 24 | } 25 | # { USD = 0.1 } 26 | else { 27 | $price = [decimal]$Config.ElectricityPrice.$currency; 28 | } 29 | # convert 30 | for ($i = 0; $i -lt $Rates[$currency].Count; $i++) { 31 | if ($Rates[$currency][$i][0] -eq $returncurrency) { 32 | return $price * $Rates[$currency][$i][1]; 33 | } 34 | } 35 | } 36 | Remove-Variable currency 37 | return $price; 38 | } 39 | 40 | [string] $ElectricityPriceCurrency = $null; 41 | function Get-ElectricityPriceCurrency { 42 | if ([string]::IsNullOrWhiteSpace($ElectricityPriceCurrency)) { 43 | if ($Config.ElectricityPrice) { 44 | $ElectricityPriceCurrency = $Config.ElectricityPrice | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name -First 1 45 | } 46 | } 47 | return $ElectricityPriceCurrency; 48 | } -------------------------------------------------------------------------------- /Code/Get-ManagementObject.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | function Get-ManagementObject ([Parameter(Mandatory)][string] $Query, [Parameter(Mandatory)][scriptblock] $Script) { 8 | if (![string]::IsNullOrWhiteSpace($Query) -and $Script) { 9 | [Management.ManagementObjectSearcher] $mo = $null 10 | [Management.ManagementObjectCollection] $items = $null 11 | try { 12 | $mo = [Management.ManagementObjectSearcher]::new($Query) 13 | $items = $mo.Get() 14 | &$Script $items 15 | } 16 | catch { 17 | Write-Host "Get-ManagementObject exception: $_" -ForegroundColor Red 18 | } 19 | finally { 20 | if ($items -is [IDisposable]) { $items.Dispose() } 21 | if ($mo -is [IDisposable]) { $mo.Dispose() } 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Code/Get-Prerequisites.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | function Get-Prerequisites([Parameter(Mandatory)][string] $bin) { 8 | $prerequisites = [System.Collections.ArrayList]::new() 9 | $prerequisites.AddRange(@( 10 | @{ Path="7z.dll"; URI="https://mindminer.online/miners/7z.dll" } 11 | @{ Path="7z.exe"; URI="https://mindminer.online/miners/7z.exe" } 12 | @{ Path="FeatureDetector.exe"; URI="https://mindminer.online/miners/FeatureDetector.exe"; SHA="AD27801A087CBF6F4ED1E4026EC86A1218EFFA11CF9AFE4E2BF4BF693DE23470" } 13 | @{ Path="AMDOpenCLDeviceDetection.exe"; URI="https://mindminer.online/miners/AMDOpenCLDeviceDetection.exe" } # originally https://github.com/nicehash/NiceHashMinerLegacy/tree/master/AMDOpenCLDeviceDetection 14 | @{ Path="OpenHardwareMonitorLib.dll"; URI="https://github.com/Quake4/openhardwaremonitor/releases/download/0.9.7/OpenHardwareMonitorLib.dll"; SHA="DFC5F1810532CD338569084A6F80899D8E8601592B1B8D1AD8FDEF262EC15C55" } # originally https://github.com/openhardwaremonitor/openhardwaremonitor 15 | )) 16 | if ((Test-Path ([Config]::SMIPath)) -eq $false) { 17 | $prerequisites.AddRange(@( 18 | @{ Path="nvidia-smi.exe"; URI="https://mindminer.online/miners/nvidia-smi.exe" } 19 | )) 20 | [Config]::SMIPath = ([IO.Path]::Combine($bin, "nvidia-smi.exe")) 21 | } 22 | 23 | $prerequisites = ($prerequisites | Where-Object { 24 | $file = [IO.Path]::Combine($bin, $_.Path); 25 | $exists = Test-Path $file; 26 | if ($exists -and ![string]::IsNullOrWhiteSpace($_.SHA) -and (Get-FileHash $file -Algorithm sha256).Hash -ne $_.SHA) { 27 | $exists = $false; 28 | } 29 | $exists -eq $false 30 | }) 31 | if ($prerequisites.Length -gt 0) { 32 | Write-Host "Download $($prerequisites.Length) prerequisite(s) ..." -ForegroundColor Green 33 | try { 34 | Start-Job -Name "Prerequisites" -ArgumentList $prerequisites -FilePath "Code\Downloader.ps1" -InitializationScript $BinScriptLocation | Out-Null 35 | Wait-Job -Name "Prerequisites" | Out-Null 36 | Remove-Job -Name "Prerequisites" 37 | } 38 | catch { 39 | Write-Host "Error downloading prerequisites: $_." -ForegroundColor Red 40 | $Config = $null 41 | } 42 | } 43 | Remove-Variable prerequisites 44 | } -------------------------------------------------------------------------------- /Code/Get-ProcessOutput.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2018 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | function Get-ProcessOutput ([Parameter(Mandatory)][string] $path, [string] $arg) { 8 | [Diagnostics.Process] $process = $null 9 | try { 10 | $pi = [Diagnostics.ProcessStartInfo]::new($path) 11 | $pi.UseShellExecute = $false 12 | $pi.RedirectStandardOutput = $true 13 | if (![string]::IsNullOrWhiteSpace($arg)) { 14 | $pi.Arguments = $arg 15 | } 16 | [Diagnostics.Process] $process = [Diagnostics.Process]::Start($pi) 17 | return [string]::Join([environment]::NewLine, $process.StandardOutput.ReadToEnd()) 18 | } 19 | catch { 20 | Write-Host "Can't run $path`: $_" -ForegroundColor Red 21 | } 22 | finally { 23 | if ($process) { 24 | $process.Dispose() 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /Code/Get-ProfitLowerFloor.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | function Get-ProfitLowerFloor ([Parameter(Mandatory)][eMinerType] $type, [bool] $service) { 8 | [decimal] $result = 0 9 | if ($service) { return [decimal]-1 } 10 | if ($Config.LowerFloor -and $Config.LowerFloor."$type") { 11 | $tmp = $Config.LowerFloor."$type"; 12 | if ($tmp -is [PSCustomObject]) { 13 | $tmp | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name | ForEach-Object { 14 | $val = $Rates[$_] | Where-Object { $_[0] -eq "BTC" } 15 | if ($val) { 16 | $result = $tmp.$_ * ($val)[1] 17 | } 18 | } 19 | } 20 | else { 21 | $result = $Config.LowerFloor."$type" 22 | } 23 | } 24 | $result 25 | } -------------------------------------------------------------------------------- /Code/Get-RateInfo.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | function Get-RateInfo { 8 | Write-Host "Get exchange rates ..." -ForegroundColor Green 9 | $result = [Collections.Generic.Dictionary[string, object]]::new() 10 | 11 | # not add - add returns index 12 | $coins = [Collections.ArrayList]::new() 13 | $coins.AddRange(@("BTC")) 14 | [Config]::MRRWallets | ForEach-Object { 15 | $coins.AddRange(@($_.ToUpper())) 16 | } 17 | if ($Config.Wallet) { 18 | $Config.Wallet | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name | Where-Object { "$_" -notmatch "nicehash" } | 19 | ForEach-Object { if ($coins -notcontains "$_") { $coins.AddRange(@("$_")) } } 20 | } 21 | if ($Config.LowerFloor) { 22 | $Config.LowerFloor | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name | ForEach-Object { 23 | $Config.LowerFloor.$_ | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name | ForEach-Object { if ($coins -notcontains "$_") { $coins.AddRange(@("$_")) } } 24 | } 25 | } 26 | if ($PoolCache -and $PoolCache.Values) { 27 | $PoolCache.Values | ForEach-Object { $_.Balance.Keys } | 28 | ForEach-Object { if ($coins -notcontains "$_") { $coins.AddRange(@("$_")) } } 29 | } 30 | $epcurr = Get-ElectricityPriceCurrency 31 | if ($epcurr) { 32 | if ($coins -notcontains "$epcurr") { $coins.AddRange(@("$epcurr")) } 33 | } 34 | Remove-Variable epcurr 35 | 36 | $fn = [IO.Path]::Combine([Config]::BinLocation, "rates_cache_$(Get-Join "_" ($Config.Currencies | ForEach-Object { $_[0].ToLower() })).json") 37 | $fi = [IO.FileInfo]::new($fn); 38 | 39 | if ($fi.Exists -and ([datetime]::Now - $fi.LastWriteTime).TotalMinutes -le 15) { 40 | $data = (Get-Content $fn -Raw | ConvertFrom-Json) 41 | # convert to Dictionary 42 | $data | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name | ForEach-Object { 43 | $wallet = "$_" 44 | $values = [Collections.Generic.List[object]]::new() 45 | $data.$wallet | ForEach-Object { 46 | $values.Add(@($_[0], $_[1])); 47 | } 48 | $result.Add($wallet, $values) 49 | Remove-Variable values, wallet 50 | } 51 | return $result 52 | } 53 | 54 | $json = Get-Rest "https://min-api.cryptocompare.com/data/pricemulti?fsyms=$(Get-Join "," $coins)&tsyms=$(Get-Join "," ($Config.Currencies | ForEach-Object { $_[0] }))" 55 | 56 | if ($json -and $json.Response -notmatch "Error") { 57 | ($json | ConvertTo-Json -Compress).Split(@("},", "}}"), [StringSplitOptions]::RemoveEmptyEntries) | ForEach-Object { 58 | $signs = $_.Split(@(":{", "{"), [StringSplitOptions]::RemoveEmptyEntries) 59 | $values = [Collections.Generic.List[object]]::new() 60 | $signs[1].Split(@(","), [StringSplitOptions]::RemoveEmptyEntries) | ForEach-Object { 61 | $each = "$_".Split(@(":", "`""), [StringSplitOptions]::RemoveEmptyEntries) 62 | $values.Add(@("$($each[0])"; [MultipleUnit]::ToValueInvariant($each[1], [string]::Empty))) 63 | } 64 | $result.Add($signs[0].Replace("`"", [string]::Empty), $values) 65 | Remove-Variable values, signs 66 | } 67 | } 68 | $coins | ForEach-Object { 69 | $wallet = "$_" 70 | if (!$result.ContainsKey($wallet)) { 71 | $json = Get-Rest "https://api.coinbase.com/v2/exchange-rates?currency=$wallet" 72 | if ($json) { 73 | $values = [Collections.Generic.List[object]]::new() 74 | $Config.Currencies | ForEach-Object { 75 | if ([string]::Equals($_[0], $wallet, [StringComparison]::InvariantCultureIgnoreCase)) { 76 | $values.Add(@($wallet, [decimal]1)) 77 | } 78 | <#elseif ([string]::Equals($_[0], "m$wallet", [StringComparison]::InvariantCultureIgnoreCase)) { 79 | $values.Add(@("m$wallet", [decimal]1000)) 80 | }#> 81 | elseif ($json.data.rates."$($_[0])") { 82 | $values.Add(@($_[0], [decimal]$json.data.rates."$($_[0])")) 83 | } 84 | } 85 | $result.Add($wallet, $values) 86 | Remove-Variable values 87 | } 88 | } 89 | Remove-Variable wallet 90 | } 91 | 92 | $result | ConvertTo-Json -Depth 10 -Compress | Out-File $fn -Force 93 | 94 | Remove-Variable json, fi, fn, coins 95 | 96 | return $result 97 | } -------------------------------------------------------------------------------- /Code/Get-Rest.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | [hashtable] $WebSessions = [hashtable]@{} 8 | 9 | function Get-Rest([Parameter(Mandatory = $true)][string] $Url, [string] $Body, [int] $RetryCount = 3) { 10 | if ([Net.ServicePointManager]::SecurityProtocol -notmatch [Net.SecurityProtocolType]::Tls12) { 11 | [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 12 | } 13 | <# 14 | try 15 | { 16 | if ([Net.ServicePointManager]::SecurityProtocol -notmatch [Net.SecurityProtocolType]::Tls13) { 17 | [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls13 18 | } 19 | } 20 | catch { } 21 | #> 22 | 23 | $result = $null 24 | $timeout = 15 # [int]($Config.LoopTimeout / 4) 25 | $agent = "MindMiner/$([Config]::Version -replace "v")" 26 | $hst = [uri]::new($Url).Host 27 | [Microsoft.PowerShell.Commands.WebRequestSession] $session = $WebSessions.$hst 28 | 29 | 1..$RetryCount | ForEach-Object { 30 | if (!$result) { 31 | try { 32 | if (!$session) { 33 | if ([string]::IsNullOrWhiteSpace($Body)) { 34 | $req = Invoke-RestMethod -Uri $Url -TimeoutSec $timeout -UseBasicParsing -UserAgent $agent -SessionVariable session 35 | } 36 | else { 37 | $req = Invoke-RestMethod -Uri $Url -Method "POST" -Body $Body -TimeoutSec $timeout -UseBasicParsing -UserAgent $agent -SessionVariable session 38 | } 39 | } 40 | else { 41 | if ([string]::IsNullOrWhiteSpace($Body)) { 42 | $req = Invoke-RestMethod -Uri $Url -TimeoutSec $timeout -UseBasicParsing -UserAgent $agent -WebSession $session 43 | } 44 | else { 45 | $req = Invoke-RestMethod -Uri $Url -Method "POST" -Body $Body -TimeoutSec $timeout -UseBasicParsing -UserAgent $agent -WebSession $session 46 | } 47 | } 48 | if (!($req -is [PSCustomObject]) -and !($req -is [array]) -and [string]::IsNullOrWhiteSpace([string]$req)) { 49 | Start-Sleep -Seconds $timeout 50 | } 51 | else { 52 | $result = $req 53 | } 54 | } 55 | catch { 56 | if ($_.Exception -is [Net.WebException] -and ($_.Exception.Response.StatusCode -eq 503 -or $_.Exception.Response.StatusCode -eq 449)) { 57 | Start-Sleep -Seconds $timeout 58 | } 59 | } 60 | finally { 61 | if ($req -is [IDisposable]) { 62 | $req.Dispose() 63 | $req = $null 64 | } 65 | } 66 | } 67 | } 68 | 69 | if ($result -and !$WebSessions.$hst -and $session -and $session.Cookies.Count -gt 0) { 70 | $WebSessions.Add($hst, $session) 71 | } 72 | 73 | $result 74 | } -------------------------------------------------------------------------------- /Code/HumanInterval.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | Human Interval Converter v1.2 by Quake4 3 | https://github.com/Quake4/HumanInterval 4 | License GPL-3.0 5 | #> 6 | 7 | class HumanInterval { 8 | static [hashtable] $KnownIntervals = @{ 9 | "seconds" = "sec" 10 | "second" = "sec" 11 | "secs" = "sec" 12 | "sec" = "sec" 13 | "minutes" = "min" 14 | "minute" = "min" 15 | "mins" = "min" 16 | "min" = "min" 17 | "hours" = "hour" 18 | "hour" = "hour" 19 | "days" = "day" 20 | "day" = "day" 21 | "weeks" = "week" 22 | "week" = "week" 23 | } 24 | 25 | static [timespan] Parse([string] $interval) { 26 | $interval = $interval.ToLower() 27 | [HumanInterval]::KnownIntervals.Keys | Sort-Object -Descending | ForEach-Object { 28 | $interval = $interval.Replace($_, " " + [HumanInterval]::KnownIntervals."$_" + " ") 29 | } 30 | [int] $days = 0 31 | [int] $hours = 0 32 | [int] $minutes = 0 33 | [int] $seconds = 0 34 | 35 | [int] $val = 0 36 | 37 | $interval.Split(@(' ', ',', ';'), [StringSplitOptions]::RemoveEmptyEntries) | ForEach-Object { 38 | switch ($_) { 39 | "week" { $days += $val * 7; $val = 0 } 40 | "day" { $days += $val; $val = 0 } 41 | "hour" { $hours += $val; $val = 0 } 42 | "min" { $minutes += $val; $val = 0 } 43 | "sec" { $seconds += $val; $val = 0 } 44 | default { 45 | if (![int]::TryParse($_, [ref] $val)) { 46 | throw [Exception]::new("Unknow interval: $interval") 47 | } 48 | } 49 | } 50 | } 51 | if ($days -eq 0 -and $hours -eq 0 -and $minutes -eq 0 -and $seconds -eq 0) { 52 | throw [Exception]::new("Unknow interval: $interval") 53 | } 54 | return New-TimeSpan -Days $days -Hours $hours -Minutes $minutes -Seconds $seconds 55 | } 56 | } 57 | 58 | function Get-Interval ([Parameter(Mandatory)] [string] $Interval) { 59 | [HumanInterval]::Parse($Interval) 60 | } 61 | -------------------------------------------------------------------------------- /Code/MinerInfo.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | enum eMinerType { 8 | CPU = 0 9 | nVidia 10 | AMD 11 | Intel 12 | } 13 | 14 | class MinerInfo { 15 | [string] $Name 16 | [string] $Algorithm 17 | [string] $DualAlgorithm 18 | [string] $Type 19 | [bool] $TypeInKey 20 | [string] $API 21 | [string] $URI 22 | [string] $Path 23 | [string] $Pass 24 | [string] $ExtraArgs 25 | [string] $Arguments 26 | [int] $Port 27 | [string] $Pool 28 | [string] $PoolKey 29 | [Priority] $Priority 30 | [Priority] $DualPriority 31 | [int] $BenchmarkSeconds 32 | [string] $RunBefore 33 | [string] $RunAfter 34 | [decimal] $Fee 35 | 36 | hidden [string] $Filename 37 | hidden [string] $Key 38 | hidden [string] $ExKey 39 | hidden [string] $UniqueKey 40 | hidden [string] $PowerFilename 41 | 42 | [bool] IsDual() { 43 | return ![string]::IsNullOrWhiteSpace($this.DualAlgorithm) 44 | } 45 | 46 | [bool] Exists([string] $parent) { 47 | return (Test-Path ([IO.Path]::Combine($parent, $this.Path))) 48 | } 49 | 50 | [string] GetCommandLine() { 51 | return "$($this.Path) $($this.Arguments)" 52 | } 53 | 54 | [string] GetFilename() { 55 | if (!$this.Filename) { 56 | $this.Filename = "$($this.Name)" 57 | } 58 | return $this.Filename 59 | } 60 | 61 | [string] GetPowerFilename() { 62 | if (!$this.PowerFilename) { 63 | $this.PowerFilename = "$($this.Name).power" 64 | } 65 | return $this.PowerFilename 66 | } 67 | 68 | [string] GetKey() { 69 | if (!$this.Key) { 70 | $this.Key = [string]::Empty 71 | if ($this.TypeInKey -eq $true) { 72 | $this.Key += "$($this.Type)_" 73 | } 74 | $this.Key += "$($this.Algorithm)" 75 | if (![string]::IsNullOrWhiteSpace($this.DualAlgorithm)) { 76 | $this.Key += "+$($this.DualAlgorithm)" 77 | } 78 | if (![string]::IsNullOrWhiteSpace($this.ExtraArgs)) { 79 | $this.Key += "_" 80 | foreach ($each in $this.ExtraArgs.ToCharArray()) { 81 | if ([char]::IsDigit($each) -or [char]::IsLetter($each)) { 82 | $this.Key += $each; 83 | } 84 | } 85 | } 86 | } 87 | return $this.Key 88 | } 89 | 90 | [string] GetKey([bool] $dual) { 91 | return $this.GetKey() + "$(if ($dual) { "_$($this.DualAlgorithm)" } else { [string]::Empty })" 92 | } 93 | 94 | [string] GetExKey() { 95 | if (!$this.ExKey) { 96 | $this.ExKey = "$($this.GetFilename())_$($this.GetKey())" 97 | } 98 | return $this.ExKey 99 | } 100 | 101 | [string] GetUniqueKey() { 102 | if (!$this.UniqueKey) { 103 | $this.UniqueKey = "$($this.GetFilename())_$($this.GetKey())_$($this.PoolKey)_$($this.Priority)_$($this.Arguments)" 104 | } 105 | return $this.UniqueKey 106 | } 107 | 108 | [string] ToString() { 109 | return $this | Select-Object Name, Algorithm, ExtraArgs, Path, Arguments 110 | } 111 | } -------------------------------------------------------------------------------- /Code/MinerProfitInfo.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | . .\Code\Config.ps1 8 | . .\Code\MinerInfo.ps1 9 | 10 | class MinerProfitInfo { 11 | [MinerInfo] $Miner 12 | [bool] $SwitchingResistance 13 | [decimal] $Speed 14 | [decimal] $Price 15 | [decimal] $Profit 16 | [decimal] $ProfitRaw 17 | [decimal] $DualSpeed 18 | [decimal] $DualPrice 19 | [decimal] $Power 20 | [decimal] $PowerDraw 21 | [decimal] $PowerPrice 22 | [bool] $AccountPower 23 | 24 | MinerProfitInfo([MinerInfo] $miner, [Config] $config, [decimal] $speed, [decimal] $price) { 25 | $this.Miner = [MinerInfo]($miner | ConvertTo-Json | ConvertFrom-Json) 26 | $this.Price = $price 27 | $this.AccountPower = $config.ElectricityConsumption 28 | $this.SetSpeed($speed) 29 | } 30 | 31 | MinerProfitInfo([MinerInfo] $miner, [Config] $config, [decimal] $speed, [decimal] $price, [decimal] $dualspeed, [decimal] $dualprice) { 32 | $this.Miner = [MinerInfo]($miner | ConvertTo-Json | ConvertFrom-Json) 33 | $this.Price = $price 34 | $this.DualPrice = $dualprice 35 | $this.AccountPower = $config.ElectricityConsumption 36 | $this.SetSpeed($speed, $dualspeed) 37 | } 38 | 39 | [void] SetSpeed([decimal] $speed) { 40 | $this.Speed = $speed 41 | $this.ProfitRaw = $this.Profit = $this.Price * $speed 42 | } 43 | 44 | [void] SetSpeed([decimal] $speed, [decimal] $dualspeed) { 45 | $this.Speed = $speed 46 | $this.DualSpeed = $dualspeed 47 | $this.ProfitRaw = $this.Profit = $this.Price * $speed + $this.DualPrice * $dualspeed 48 | } 49 | 50 | [void] SetPower([decimal] $draw, [decimal] $price) { 51 | $this.PowerDraw = $draw 52 | $this.PowerPrice = $price 53 | $this.Power = $price * $draw * 24 / 1000 54 | if ($this.AccountPower) { 55 | $this.Profit = $this.ProfitRaw - $this.Power; 56 | } 57 | } 58 | 59 | static [MinerInfo] CopyMinerInfo([MinerInfo] $miner, [Config] $config) { 60 | [string] $json = ($miner | ConvertTo-Json).Replace([Config]::WorkerNamePlaceholder, $config.WorkerName).Replace([Config]::LoginPlaceholder, $config.Login) 61 | $config.Wallet | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name | 62 | Where-Object { ![string]::IsNullOrWhiteSpace($config.Wallet.$_) } | ForEach-Object { 63 | $json = $json.Replace(([Config]::WalletPlaceholder -f "$_"), $config.Wallet.$_) 64 | } 65 | return [MinerInfo]($json | ConvertFrom-Json) 66 | } 67 | } -------------------------------------------------------------------------------- /Code/MultipleUnit.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | Multiple Unit Converter v1.3 by Quake4 3 | https://github.com/Quake4/MultipleUnit 4 | License GPL-3.0 5 | #> 6 | 7 | class MultipleUnit { 8 | static [hashtable] $Known = @{ 9 | "" = 0 10 | "K" = 3 11 | "M" = 6 12 | "G" = 9 13 | "T" = 12 14 | "P" = 15 15 | "E" = 18 16 | "Z" = 21 17 | "Y" = 24 18 | } 19 | 20 | static [decimal] ToValueInvariant([string] $value, [string] $unit) { 21 | return [MultipleUnit]::IntToValue($value, $unit, $true) 22 | } 23 | 24 | static [decimal] ToValue([string] $value, [string] $unit) { 25 | return [MultipleUnit]::IntToValue($value, $unit, $false) 26 | } 27 | 28 | hidden static [decimal] IntToValue([string] $value, [string] $unit, [bool] $invariant) { 29 | $unit = if ([string]::IsNullOrWhiteSpace($unit)) { [string]::Empty } else { $unit.ToUpperInvariant() } 30 | if ([MultipleUnit]::Known.ContainsKey($unit)) { 31 | [decimal] $val = $null 32 | if (($invariant -eq $true -and [decimal]::TryParse($value, [Globalization.NumberStyles]::Number+[Globalization.NumberStyles]::AllowExponent, [Globalization.CultureInfo]::InvariantCulture, [ref] $val)) -or 33 | [decimal]::TryParse($value, [Globalization.NumberStyles]::Number+[Globalization.NumberStyles]::AllowExponent, [Globalization.CultureInfo]::CurrentCulture, [ref] $val)) { 34 | return $val * [Math]::Pow(10, [MultipleUnit]::Known."$unit") 35 | } 36 | throw [Exception]::new("Unknown value: " + $value) 37 | } 38 | throw [Exception]::new("Unknown multiple unit: " + $unit) 39 | } 40 | 41 | static [string] ToString([decimal] $value) { 42 | return [MultipleUnit]::ToString($value, "N") 43 | } 44 | 45 | static [string] ToString([decimal] $value, [string] $format) { 46 | return [MultipleUnit]::ToString($value, $format, [string]::Empty) 47 | } 48 | 49 | static [string] ToString([decimal] $value, [string] $format, [string] $suffux) { 50 | return [MultipleUnit]::ToString($value, $format, $suffux, $false) 51 | } 52 | 53 | static [string] ToStringInvariant([decimal] $value) { 54 | return [MultipleUnit]::ToStringInvariant($value, "N") 55 | } 56 | 57 | static [string] ToStringInvariant([decimal] $value, [string] $format) { 58 | return [MultipleUnit]::ToStringInvariant($value, $format, [string]::Empty) 59 | } 60 | 61 | static [string] ToStringInvariant([decimal] $value, [string] $format, [string] $suffux) { 62 | return [MultipleUnit]::ToString($value, $format, $suffux, $true) 63 | } 64 | 65 | static [string] ToString([decimal] $value, [string] $format, [string] $suffux, [bool] $invariant) { 66 | $measure = [MultipleUnit]::Measure($value) 67 | $unitsuffix = [MultipleUnit]::UnitByMeasure($measure) + $suffux 68 | 69 | $value /= [Math]::Pow(10, $measure) 70 | 71 | if ($invariant) { 72 | $result = $value.ToString($format, [Globalization.CultureInfo]::InvariantCulture) 73 | } 74 | else { 75 | $result = $value.ToString($format) 76 | } 77 | if ([string]::IsNullOrWhiteSpace($unitsuffix)) { 78 | return $result 79 | } 80 | return "$result $unitsuffix" 81 | } 82 | 83 | static [int] Measure([decimal] $value) { 84 | $prev = 0 85 | [MultipleUnit]::Known.Values | Sort-Object | ForEach-Object { 86 | if ([Math]::Abs($value / [Math]::Pow(10, $_)) -lt 1) { 87 | return $prev 88 | } 89 | $prev = $_ 90 | } 91 | return $prev 92 | } 93 | 94 | static [string] UnitByMeasure([int] $measure) { 95 | $result = [string]::Empty 96 | [MultipleUnit]::Known.GetEnumerator() | ForEach-Object { 97 | if ($_.Value -eq $measure) { 98 | $result = $_.Key 99 | } 100 | } 101 | return $result 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /Code/Out-Data.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2021 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | function Out-Iam ([string] $version) { 8 | Write-Host "MindMiner $version" -NoNewline -ForegroundColor Cyan 9 | Write-Host " https://MindMiner.Online " -NoNewline -ForegroundColor Green 10 | Write-Host "(C) 2017-$([datetime]::Now.Year) by Oleg Samsonov aka Quake4" -ForegroundColor White 11 | } 12 | 13 | function Out-Header ([bool] $full = $true) { 14 | Out-Iam ([Config]::Version.Replace("v", [string]::Empty)) 15 | Write-Host 16 | Write-Host "Configuration:" -ForegroundColor Yellow 17 | Write-Host ($Config.ToString($full)) 18 | } 19 | 20 | function Out-Table ($table) { 21 | ($table | Out-String) -replace "$([Environment]::NewLine)$([Environment]::NewLine)$([Environment]::NewLine)", "$([Environment]::NewLine)$([Environment]::NewLine)" -replace "^$([Environment]::NewLine)" -replace "^$([Environment]::NewLine)" -replace "$([Environment]::NewLine)$([Environment]::NewLine)`$", "$([Environment]::NewLine)" | Out-Host 22 | } 23 | 24 | function Out-Footer { 25 | Write-Host "Information:" -ForegroundColor Yellow 26 | Write-Host $Summary 27 | Write-Host 28 | Write-Host "Ctrl|Alt+Q|Ex" -NoNewline -ForegroundColor Yellow 29 | Write-Host "it, " -NoNewline 30 | Write-Host "Ctrl+R" -NoNewline -ForegroundColor Yellow 31 | Write-Host "estart, $($Config.Switching) " -NoNewline 32 | Write-Host "Ctrl+S" -NoNewline -ForegroundColor Yellow 33 | Write-Host "witching, $($Config.Verbose) " -NoNewline 34 | Write-Host "V" -NoNewline -ForegroundColor Yellow 35 | Write-Host "erbose" -NoNewline 36 | if ($global:HasConfirm -eq $false -and $global:NeedConfirm -eq $false -and [Config]::UseApiProxy -eq $false) { 37 | Write-Host ", On/Off " -NoNewline 38 | Write-Host "P" -NoNewline -ForegroundColor Yellow 39 | Write-Host "ools" -NoNewline 40 | } 41 | if (!$global:HasConfirm) { 42 | Write-Host ", " -NoNewline 43 | Write-Host "C" -NoNewline -ForegroundColor Yellow 44 | Write-Host "lean (" -NoNewline 45 | Write-Host "F" -NoNewline -ForegroundColor Yellow 46 | Write-Host "ailed) Miners" -NoNewline 47 | } 48 | if (!$global:HasConfirm -and [Config]::ActiveTypesInitial.Length -gt 1) { 49 | Write-Host ", Active " -NoNewline 50 | Write-Host "T" -NoNewline -ForegroundColor Yellow 51 | Write-Host "ypes" -NoNewline 52 | } 53 | if ($Config.ShowBalance) { 54 | Write-Host ", Exchange " -NoNewline 55 | Write-Host "R" -NoNewline -ForegroundColor Yellow 56 | Write-Host "ate" -NoNewline 57 | } 58 | if ($global:HasConfirm -eq $false -and $global:NeedConfirm -eq $true) { 59 | Write-Host ", Need " -NoNewline 60 | Write-Host "Y" -NoNewline -ForegroundColor Yellow 61 | Write-Host "our confirmation for new pool/miner/benchmark" -NoNewline 62 | } 63 | Write-Host 64 | if ($global:API.Running) { 65 | $global:API.Info = $Summary | Select-Object ($Summary.Columns()) | ConvertTo-Html -Fragment 66 | $global:API.Status = $Summary | Select-Object ($Summary.ColumnsApi()) 67 | } 68 | } 69 | 70 | function Get-Confirm { 71 | if ($global:HasConfirm -eq $false -and $global:NeedConfirm -eq $true) { 72 | Write-Host "Press " -NoNewline 73 | Write-Host "Y" -NoNewline -ForegroundColor Yellow 74 | Write-Host " key - Need Your confirmation for new pool/miner/benchmark" 75 | $start = [Diagnostics.Stopwatch]::StartNew() 76 | do { 77 | Start-Sleep -Milliseconds ([Config]::SmallTimeout) 78 | while ([Console]::KeyAvailable -eq $true) { 79 | [ConsoleKeyInfo] $key = [Console]::ReadKey($true) 80 | if ($key.Key -eq [ConsoleKey]::Y -and $global:HasConfirm -eq $false -and $global:NeedConfirm -eq $true) { 81 | Write-Host "Thanks ..." -ForegroundColor Green 82 | Start-Sleep -Milliseconds ([Config]::SmallTimeout * 2) 83 | $global:HasConfirm = $true 84 | $global:NeedConfirm = $false 85 | } 86 | Remove-Variable key 87 | } 88 | } while ($start.Elapsed.TotalSeconds -lt $Config.LoopTimeout -and !$global:HasConfirm) 89 | $start.Stop() 90 | Remove-Variable start 91 | } 92 | else { 93 | Start-Sleep $Config.LoopTimeout 94 | } 95 | } -------------------------------------------------------------------------------- /Code/PoolInfo.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2020 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | enum Priority { 8 | Normal 9 | High 10 | Solo 11 | Unique 12 | None = -1 13 | } 14 | 15 | class BalanceInfo { 16 | [decimal] $Value 17 | [decimal] $Additional 18 | 19 | BalanceInfo([decimal] $value, [decimal] $additional) { 20 | $this.Value = $value 21 | $this.Additional = $additional 22 | } 23 | } 24 | 25 | class PoolInfo { 26 | [string] $Name 27 | [bool] $Enabled 28 | [string] $AverageProfit 29 | 30 | [datetime] $AnswerTime 31 | [bool] $HasAnswer 32 | 33 | [Collections.Generic.Dictionary[string, BalanceInfo]] $Balance 34 | 35 | [Collections.Generic.IList[PoolAlgorithmInfo]] $Algorithms 36 | 37 | PoolInfo() { 38 | $this.Algorithms = [Collections.Generic.List[PoolAlgorithmInfo]]::new() 39 | $this.Balance = [Collections.Generic.Dictionary[string, BalanceInfo]]::new() 40 | } 41 | } 42 | 43 | class PoolAlgorithmInfo { 44 | [string] $Name 45 | [string] $Info 46 | [bool] $InfoAsKey 47 | [string] $Algorithm 48 | [decimal] $Profit 49 | [string] $Protocol 50 | [string[]] $Hosts 51 | [int] $Port 52 | [int] $PortUnsecure 53 | [string] $User 54 | [string] $Password 55 | [Priority] $Priority 56 | [hashtable] $Extra = @{} 57 | 58 | [string] PoolName() { 59 | if ($this.Info) { 60 | return "$($this.Name)-$($this.Info)" 61 | } 62 | else { 63 | return $this.Name 64 | } 65 | } 66 | 67 | [string] PoolKey() { 68 | if ($this.InfoAsKey -and $this.Info) { 69 | return "$($this.Name)-$($this.Info)" 70 | } 71 | else { 72 | return $this.Name 73 | } 74 | } 75 | 76 | [string] ToString() { 77 | return $this | Select-Object Name, Info, Algorithm, Profit, Protocol, Host, Port, PortUnsecure, User, Password, Priority 78 | } 79 | } -------------------------------------------------------------------------------- /Code/Select-ActiveTypes.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | function Select-ActiveTypes ([eMinerType[]] $types) { 8 | Write-Host "Select active types ..." -ForegroundColor Green 9 | try { 10 | $result = [Collections.Generic.List[string]]::new() 11 | do { 12 | $result.Clear(); 13 | $types | ForEach-Object { 14 | if (Get-Question "Use '$_' type device(s)") { 15 | $result.Add($_) 16 | } 17 | } 18 | } while ($result.Length -le 1) 19 | $result.ToArray() 20 | Write-Host "Active types selected." -ForegroundColor Yellow 21 | } 22 | catch { 23 | Write-Host "Error: $_" -ForegroundColor Red 24 | } 25 | } -------------------------------------------------------------------------------- /Code/ShareInfo.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2019-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | class ShareInfo { 8 | [decimal] $Value 9 | hidden [Diagnostics.Stopwatch] $SW 10 | 11 | ShareInfo([decimal] $value) { 12 | $this.Value = $value; 13 | $this.SW = [Diagnostics.Stopwatch]::StartNew(); 14 | } 15 | 16 | [int] ElapsedSeconds() { 17 | return [int]$this.SW.Elapsed.TotalSeconds; 18 | } 19 | 20 | [void] Reset() { 21 | $this.SW.Restart(); 22 | } 23 | 24 | [void] Close() { 25 | $this.SW.Stop(); 26 | $this.SW = $null; 27 | } 28 | } 29 | 30 | class ShareList { 31 | hidden [Collections.Generic.List[ShareInfo]] $list 32 | 33 | ShareList() { 34 | $this.list = [Collections.Generic.List[ShareInfo]]::new() 35 | } 36 | 37 | [void] Add([decimal] $value) { 38 | if ($this.list.Count -gt 0) { 39 | $item = $this.list[$this.list.Count - 1]; 40 | if ($item.Value -eq $value) { 41 | $item.Reset(); 42 | return 43 | } 44 | } 45 | $this.list.Add([ShareInfo]::new($value)) 46 | } 47 | 48 | [decimal] GetOne() { 49 | if ($this.list.Count -eq 1) { 50 | return $this.list[0].Value; 51 | } 52 | return -1; 53 | } 54 | 55 | [decimal] Get([int] $totalseconds) { 56 | $this.Actual($totalseconds) 57 | if ($this.list.Count -le 0) { return 0 } 58 | return $this.list[$this.list.Count - 1].Value - $this.list[0].Value; 59 | } 60 | 61 | hidden [void] Actual([int] $totalseconds) { 62 | while ($this.list.Count -gt 0) { 63 | if ($this.list[0].ElapsedSeconds() -gt $totalseconds) { 64 | $this.list[0].Close() 65 | $this.list.RemoveAt(0) 66 | } 67 | else { break } 68 | } 69 | } 70 | } 71 | 72 | class Shares { 73 | hidden [ShareList] $Total; 74 | hidden [ShareList] $Accepted; 75 | hidden [ShareList] $Rejected; 76 | hidden [decimal] $Value; 77 | 78 | Shares() { 79 | $this.Clear(); 80 | } 81 | 82 | [void] Clear() { 83 | $this.Value = 0; 84 | $this.Total = [ShareList]::new(); 85 | $this.Accepted = [ShareList]::new(); 86 | $this.Rejected = [ShareList]::new(); 87 | } 88 | 89 | [void] AddTotal([decimal] $value) { 90 | $this.Total.Add($value); 91 | } 92 | 93 | [void] AddAccepted([decimal] $value) { 94 | $this.Accepted.Add($value); 95 | } 96 | 97 | [void] AddRejected([decimal] $value) { 98 | $this.Rejected.Add($value); 99 | } 100 | 101 | [void] SetValue([decimal] $value) { 102 | $this.Value = $value; 103 | } 104 | 105 | [bool] HasValue([int] $totalseconds, [int] $minCount) { 106 | if ($this.Value -gt 0) { 107 | return $true; 108 | } 109 | $ttl = $this.Total.Get($totalseconds); 110 | $acc = $this.Accepted.Get($totalseconds); 111 | $rej = $this.Rejected.Get($totalseconds); 112 | if (($ttl + $acc + $rej) -ge $minCount) { 113 | return $true; 114 | } 115 | $ttl = $this.Total.GetOne(); 116 | $acc = $this.Accepted.GetOne(); 117 | $rej = $this.Rejected.GetOne(); 118 | if (($ttl -ge 0 -and $rej -ge 0 -and $ttl -ge $minCount) -or 119 | ($ttl -ge 0 -and $acc -ge 0 -and $ttl -ge $minCount) -or 120 | ($acc -ge 0 -and $rej -ge 0 -and ($acc + $rej) -ge $minCount)) { 121 | return $true; 122 | } 123 | return $false; 124 | } 125 | 126 | # return from 1 (all accepted) to 0 (all rejected) 127 | [decimal] Get([int] $totalseconds) { 128 | if ($this.Value -gt 0) { 129 | return $this.Value; 130 | } 131 | $ttl = $this.Total.GetOne(); 132 | $acc = $this.Accepted.GetOne(); 133 | $rej = $this.Rejected.GetOne(); 134 | if (($ttl -ge 0 -and $rej -ge 0 -and $ttl -gt 0) -or 135 | ($ttl -ge 0 -and $acc -ge 0 -and $ttl -gt 0) -or 136 | ($acc -ge 0 -and $rej -ge 0 -and ($acc + $rej) -gt 0)) { 137 | if ($ttl -eq -1) { $ttl = 0 } 138 | if ($acc -eq -1) { $acc = 0 } 139 | if ($rej -eq -1) { $rej = 0 } 140 | } 141 | else { 142 | $ttl = $this.Total.Get($totalseconds); 143 | $acc = $this.Accepted.Get($totalseconds); 144 | $rej = $this.Rejected.Get($totalseconds); 145 | } 146 | if ($ttl -eq 0 -and $acc -eq 0 -and $rej -eq 0) { 147 | return 1; 148 | } 149 | if ($ttl -gt 0 -and $acc -gt 0 -and $rej -gt 0) { 150 | throw [Exception]::new("Must be set only two from AddTotal, AddAccepted and AddRejected in Shares."); 151 | } 152 | if ($ttl -eq 0) { 153 | $ttl = $acc + $rej; 154 | } 155 | elseif ($acc -eq 0) { 156 | $acc = $ttl - $rej; 157 | } 158 | # exclude division by zero 159 | if ($ttl -le 0 -or $acc -le 0) { 160 | return 0; 161 | } 162 | # 98 * 1 / 100 163 | $result = $acc / $ttl; 164 | if ($result -gt 1) { $result = 1 } 165 | return $result; 166 | } 167 | } -------------------------------------------------------------------------------- /Code/Start-ApiServer.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | # https://learn-powershell.net/2013/04/19/sharing-variables-and-live-objects-between-powershell-runspaces/ 8 | 9 | . .\Code\Config.ps1 10 | 11 | function Start-ApiServer { 12 | $global:API.Running = $true 13 | $global:API.Port = [Config]::ApiPort 14 | $global:API.Version = [Config]::Version 15 | $global:ApiListner = [Net.HttpListener]::new() 16 | $global:ApiRunSpace = [runspacefactory]::CreateRunspace() 17 | $global:ApiRunSpace.Open() 18 | $global:ApiRunSpace.SessionStateProxy.SetVariable("API", $global:API) 19 | $global:ApiRunSpace.SessionStateProxy.SetVariable("listner", $global:ApiListner) 20 | $global:ApiPowerShell = [powershell]::Create() 21 | $global:ApiPowerShell.Runspace = $global:ApiRunSpace 22 | $global:ApiPowerShell.AddScript({ 23 | try { 24 | $listner.Prefixes.Add("http://127.0.0.1:$($API.Port)/") 25 | $API.RunningMode = "Local" 26 | if (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { 27 | $listner.Prefixes.Add("http://+:$($API.Port)/") 28 | $API.RunningMode = "Remote" 29 | } 30 | $listner.Start() 31 | while ($API.Running -and $listner.IsListening) { 32 | try { 33 | $context = $listner.GetContext() 34 | 35 | $contenttype = "application/json" 36 | $statuscode = 200 37 | $content = $null 38 | 39 | $local = if ($context.Request.Url.LocalPath) { $context.Request.Url.LocalPath.ToLower() } else { [string]::Empty } 40 | 41 | switch ($local) { 42 | "/" { 43 | $contenttype = "text/html" 44 | $mm = "MindMiner $($API.Version.Replace("v", [string]::Empty)) - $($API.Worker)" 45 | $config = if ($API.Config) { "

Configuration

" + $API.Config } else { [string]::Empty } 46 | $dev = if ($API.Device) { "

Devices

" + $API.Device } else { [string]::Empty } 47 | $am = if ($API.MinersRunning) { "

Active Miners

" + $API.MinersRunning } else { [string]::Empty } 48 | $balance = if ($API.Balance) { "

Balance

" + $API.Balance } else { [string]::Empty } 49 | $info = if ($API.Info) { "

Information

" + $API.Info } else { [string]::Empty } 50 | $content = "$mm

$mm

" + 51 | $config + $dev + $am + $balance + $info + "" 52 | Remove-Variable info, balance, am, config, mm 53 | } 54 | "/wallets" { 55 | $content = $API.Wallets 56 | } 57 | "/pools" { 58 | $content = $API.Pools 59 | } 60 | "/poolalglist" { 61 | $content = $API.PoolAlgList 62 | } 63 | "/mrrpool" { 64 | $content = $API.MRRPool 65 | } 66 | "/devices" { 67 | $content = $API.Devices 68 | } 69 | "/activeminers" { 70 | $content = $API.ActiveMiners 71 | } 72 | "/balance" { 73 | $content = $API.Balances 74 | } 75 | "/status" { 76 | if ($API.Status) { 77 | $API.Status | Add-Member worker ($API.Worker) 78 | } 79 | $content = $API.Status | ConvertTo-Json 80 | } 81 | default { 82 | $statuscode = 404 83 | $contenttype = "text/html" 84 | $content = "Unknown request: $($context.Request.Url)" 85 | } 86 | } 87 | 88 | if (!$content) { 89 | $statuscode = 449 90 | } 91 | 92 | # send the response 93 | $response = $context.Response 94 | $response.StatusCode = $statuscode 95 | if ($statuscode -ne 449) { 96 | $response.Headers.Add("Content-Type", $contenttype) 97 | $responseBuffer = [System.Text.Encoding]::UTF8.GetBytes($content) 98 | $response.ContentLength64 = $responseBuffer.Length 99 | $response.OutputStream.Write($responseBuffer, 0, $responseBuffer.Length) 100 | $response.OutputStream.Close() 101 | } 102 | $response.Close() 103 | Remove-Variable response, local, content, statuscode, contenttype, context 104 | } 105 | catch [System.Management.Automation.MethodInvocationException] { } 106 | catch { 107 | "$([datetime]::Now): $_" | Out-File "api.errors.txt" -Append -Force 108 | } 109 | } 110 | $listner.Stop() 111 | } 112 | catch { 113 | "$([datetime]::Now): $_" | Out-File "api.errors.txt" -Append -Force 114 | $API.Running = $false 115 | } 116 | finally { 117 | $listner.Stop() 118 | $listner.Close() 119 | $listner.Dispose() 120 | } 121 | }) | Out-Null 122 | $global:ApiHandle = $ApiPowerShell.BeginInvoke() 123 | } 124 | 125 | function Stop-ApiServer { 126 | $global:API.Running = $false 127 | try { 128 | $global:ApiListner.Stop() 129 | } 130 | catch {} 131 | $global:ApiPowerShell.EndInvoke($global:ApiHandle) 132 | $global:ApiRunSpace.Close() 133 | $global:ApiPowerShell.Dispose() 134 | } -------------------------------------------------------------------------------- /Code/Start-Command.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | function Start-Command ([string] $runlocation, [string] $cmdline, [int] $timeout) { 8 | if (![string]::IsNullOrWhiteSpace($cmdline)) { 9 | # create Run folder 10 | if (!(Test-Path $runlocation)) { 11 | New-Item -ItemType Directory $runlocation | Out-Null 12 | } 13 | # magic 14 | $cmdline = $cmdline.Trim() 15 | [string] $command = [string]::Empty 16 | [string] $arg = $null 17 | if ($cmdline[0] -eq '"') { 18 | $pos = $cmdline.IndexOf('"', 1) 19 | if ($pos -gt 1) { 20 | $command = $cmdline.Substring(0, $pos + 1) 21 | if ($pos + 1 -eq $cmdline.Length) { 22 | $cmdline = [string]::Empty 23 | } 24 | elseif ($cmdline[$pos + 1] -eq ' ') { 25 | $arg = $cmdline.Remove(0, $pos + 2) 26 | $cmdline = [string]::Empty 27 | } 28 | else { 29 | $cmdline = $cmdline.Remove(0, $pos + 1) 30 | } 31 | } 32 | } 33 | $split = $cmdline.Split(@(' '), 2, [StringSplitOptions]::RemoveEmptyEntries) 34 | if ($split.Length -ge 1) { 35 | $command += $split[0] 36 | if ($split.Length -eq 2) { 37 | $arg = $split[1] 38 | } 39 | } 40 | # show and start command 41 | if ([string]::IsNullOrWhiteSpace($arg)) { 42 | Write-Host "Run command '$command'" -ForegroundColor Yellow 43 | try { 44 | Start-Process $command -WindowStyle Minimized -WorkingDirectory $runlocation -Wait 45 | } 46 | catch { 47 | Write-Host $_ -ForegroundColor Red 48 | Start-Sleep -Seconds $timeout 49 | } 50 | } 51 | else { 52 | Write-Host "Run command '$command' with arguments '$arg'" -ForegroundColor Yellow 53 | try { 54 | Start-Process $command $arg -WindowStyle Minimized -WorkingDirectory $runlocation -Wait 55 | } 56 | catch { 57 | Write-Host $_ -ForegroundColor Red 58 | Start-Sleep -Seconds $timeout 59 | } 60 | } 61 | } 62 | } -------------------------------------------------------------------------------- /Code/SummaryInfo.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | class SummaryInfo { 8 | [int] $Loop 9 | [Diagnostics.Stopwatch] $TotalTime 10 | [Diagnostics.Stopwatch] $LoopTime 11 | [Diagnostics.Stopwatch] $FeeTime 12 | [Diagnostics.Stopwatch] $ServiceTime 13 | [Diagnostics.Stopwatch] $RateTime 14 | [timespan] $RateTimeout 15 | [Diagnostics.Stopwatch] $SendApiTime 16 | hidden [bool] $Service 17 | 18 | SummaryInfo([timespan] $minutes, [bool] $service) { 19 | $this.Loop = 1 20 | $this.TotalTime = [Diagnostics.Stopwatch]::new() 21 | $this.LoopTime = [Diagnostics.Stopwatch]::new() 22 | $this.FeeTime = [Diagnostics.Stopwatch]::new() 23 | $this.ServiceTime = [Diagnostics.Stopwatch]::new() 24 | $this.RateTime = [Diagnostics.Stopwatch]::new() 25 | $this.RateTimeout = $minutes 26 | $this.SendApiTime = [Diagnostics.Stopwatch]::new() 27 | $this.Service = $service 28 | } 29 | 30 | [bool] ServiceRunnig() { 31 | return $this.ServiceTime.IsRunning -or $this.FeeTime.IsRunning 32 | } 33 | 34 | [string] ToString() { 35 | $elapsed = [SummaryInfo]::Elapsed($this.UpTime()) 36 | $nl = [Environment]::NewLine 37 | $srvc = if ($this.Service) { (" Service Time: {0,$($elapsed.Length)} ({1:P1})" -f [SummaryInfo]::Elapsed($this.ServiceTime.Elapsed), 38 | ($this.ServiceTime.Elapsed.TotalMilliseconds / $this.TotalTime.Elapsed.TotalMilliseconds)) + $nl } else { "" } 39 | return [string]::Empty + 40 | (" Loop/Used RAM: {0,$($elapsed.Length)}/{1:N1} Mb" -f $this.Loop, ([GC]::GetTotalMemory(0)/1mb)) + $nl + 41 | (" Run/Fee Time: {0} ({1:P1})" -f ("{0,$($elapsed.Length)}/{1}" -f [SummaryInfo]::Elapsed($this.TotalTime.Elapsed), [SummaryInfo]::Elapsed($this.FeeTime.Elapsed)), 42 | ($this.FeeTime.Elapsed.TotalMilliseconds / $this.TotalTime.Elapsed.TotalMilliseconds)) + $nl + $srvc + 43 | ("Boot/Rate Time: {0}" -f ("{0,$($elapsed.Length)}/{1}" -f $elapsed, [SummaryInfo]::Elapsed($this.RateTimeout - $this.RateTime.Elapsed))) 44 | } 45 | 46 | hidden [Collections.ArrayList] $clmns 47 | [Collections.ArrayList] Columns() { 48 | if (!$this.clmns) { 49 | $this.clmns = [Collections.ArrayList]::new() 50 | $this.clmns.AddRange(@( 51 | @{ Label="Loop"; Expression = { "{0:N0}" -f $_.Loop } } 52 | @{ Label="Used RAM"; Expression = { "{0:N1} Mb" -f ([GC]::GetTotalMemory(0)/1mb) } } 53 | @{ Label="Run Time"; Expression = { [SummaryInfo]::Elapsed($_.TotalTime.Elapsed) } } 54 | )) 55 | if ($this.Service) { 56 | $this.clmns.AddRange(@( 57 | @{ Label="Service Time"; Expression = { "{0} ({1:P1})" -f [SummaryInfo]::Elapsed($_.ServiceTime.Elapsed), ($_.ServiceTime.Elapsed.TotalMilliseconds / $_.TotalTime.Elapsed.TotalMilliseconds) } } 58 | )) 59 | } 60 | $this.clmns.AddRange(@( 61 | @{ Label="Fee Time"; Expression = { "{0} ({1:P1})" -f [SummaryInfo]::Elapsed($_.FeeTime.Elapsed), ($_.FeeTime.Elapsed.TotalMilliseconds / $_.TotalTime.Elapsed.TotalMilliseconds) } } 62 | @{ Label="Boot Time"; Expression = { [SummaryInfo]::Elapsed($_.UpTime()) } } 63 | @{ Label="Rate Time"; Expression = { [SummaryInfo]::Elapsed($_.RateTimeout - $_.RateTime.Elapsed) } } 64 | )) 65 | } 66 | return $this.clmns 67 | } 68 | 69 | hidden [Collections.ArrayList] $clmnsapi 70 | [Collections.ArrayList] ColumnsApi() { 71 | if (!$this.clmnsapi) { 72 | $this.clmnsapi = [Collections.ArrayList]::new() 73 | $this.clmnsapi.AddRange(@( 74 | @{ Label="boottime"; Expression = { [decimal]::Round($_.UpTime().TotalSeconds) } } 75 | @{ Label="runtime"; Expression = { [decimal]::Round($_.TotalTime.Elapsed.TotalSeconds) } } 76 | @{ Label="feetime"; Expression = { [decimal]::Round($_.FeeTime.Elapsed.TotalSeconds) } } 77 | @{ Label="servicetime"; Expression = { [decimal]::Round($_.ServiceTime.Elapsed.TotalSeconds) } } 78 | )) 79 | } 80 | return $this.clmnsapi 81 | } 82 | 83 | [void] FStart() { 84 | $this.FeeTime.Start() 85 | } 86 | 87 | [void] FStop() { 88 | $this.FeeTime.Stop() 89 | } 90 | 91 | static [string] Elapsed([timespan] $ts) { 92 | $minus = if ($ts.TotalMilliseconds -lt 0) { "-" } else { [string]::Empty } 93 | $f = "{1:00}:{2:00}:{3:00}" 94 | if ($ts.Days) { $f = "{0:0}." + $f } 95 | return "$minus$f" -f [Math]::Abs($ts.Days), [Math]::Abs($ts.Hours), [Math]::Abs($ts.Minutes), [Math]::Abs($ts.Seconds) 96 | } 97 | 98 | hidden [timespan] UpTime() { 99 | [Management.ManagementBaseObject] $os = $null; 100 | try { 101 | $os = Get-WmiObject -Class Win32_OperatingSystem 102 | return (Get-Date) - $os.ConvertToDateTime($os.lastbootuptime); 103 | } 104 | finally { 105 | if ($os -is [IDisposable]) { $os.Dispose() } 106 | } 107 | return [timespan]::new(0) 108 | } 109 | } -------------------------------------------------------------------------------- /Code/Update-Miner.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | function Update-Miner { 8 | if (![Config]::DelayUpdate) { 9 | Write-Host "Check for updates ..." -ForegroundColor Green 10 | $latest = Get-Rest "https://api.mindminer.online/version.json" 11 | if ($latest -and [Config]::Version -ne $latest.tag_name) { 12 | Write-Host "MindMiner $($latest.tag_name)" -NoNewline -ForegroundColor Cyan 13 | Write-Host " update found. Downloading ..." -ForegroundColor Green 14 | $file = @( 15 | @{ Path="MM.New\LICENSE"; URI="$($latest.zipball_url)" } 16 | ) 17 | try { 18 | Start-Job -Name "update" -ArgumentList $file -FilePath ".\Code\Downloader.ps1" -InitializationScript $BinScriptLocation | Out-Null 19 | Wait-Job -Name "update" | Out-Null 20 | Remove-Job -Name "update" 21 | return $true 22 | } 23 | catch { 24 | Write-Host "Error downloading update archive: $_." -ForegroundColor Red 25 | } 26 | Remove-Variable file 27 | } 28 | Remove-Variable latest 29 | } 30 | return $false 31 | } -------------------------------------------------------------------------------- /Miners/_archive.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Quake4/MindMiner/7be2d30245d8a91b7bdea1bf6b065b21502fb719/Miners/_archive.zip -------------------------------------------------------------------------------- /Miners/amd-trm-0.10.21.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::AMD) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "abel" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "autolykos2" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnr" } 20 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "cnv8" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn_conceal" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn_heavy" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn_haven" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn_saber" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnv8_dbl" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnv8_half" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnv8_rwz" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnv8_trtl" } 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnv8_upx2" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cuckatoo31_grin" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cuckarood29_grin" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "etchash" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethash" } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "fishhash" } 35 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ironfish" } 36 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kas" } 37 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "karlsen" } 38 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kawpow" } 39 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "lyra2rev3" } 40 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "lyra2z" } 41 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "mtp" } 42 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "nimiq" } 43 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "phi2" } 44 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "phi2-lux" } 45 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "pyrin" } 46 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ton" } 47 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "trtl_chukwa" } 48 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "trtl_chukwa2" } 49 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "veil" } 50 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "verthash" } 51 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "x16r" } 52 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "x16rv2" } 53 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "x16rt" } 54 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "x16s" } 55 | )} 56 | 57 | if (!$Cfg.Enabled) { return } 58 | 59 | $port = [Config]::Ports[[int][eMinerType]::AMD] 60 | 61 | $Cfg.Algorithms | ForEach-Object { 62 | if ($_.Enabled) { 63 | $Algo = Get-Algo($_.Algorithm) 64 | if ($Algo) { 65 | # find pool by algorithm 66 | $Pool = Get-Pool($Algo) 67 | if ($Pool) { 68 | $fee = 2.5 69 | if ($_.Algorithm -match "lyra2z" -or $_.Algorithm -match "phi2") { $fee = 3} 70 | elseif ($_.Algorithm -match "kawpow") { $fee = 2 } 71 | elseif (("abel", "ethash", "ton", "kas", "karlsen", "pyrin", "ironfish") -contains $_.Algorithm) { $fee = 1 } 72 | if ($_.Algorithm -match "veil") { $_.Algorithm = "x16rt" } 73 | if ($_.Algorithm -match "phi2-lux") { $_.Algorithm = "phi2" } 74 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 75 | $hosts = [string]::Empty 76 | $Pool.Hosts | ForEach-Object { 77 | $hosts = Get-Join " " @($hosts, "-o $($Pool.Protocol)://$_`:$($Pool.Port) -u $($Pool.User) -p $($Pool.Password)") 78 | } 79 | [MinerInfo]@{ 80 | Pool = $Pool.PoolName() 81 | PoolKey = $Pool.PoolKey() 82 | Priority = $Pool.Priority 83 | Name = $Name 84 | Algorithm = $Algo 85 | Type = [eMinerType]::AMD 86 | API = "teamred" 87 | URI = "https://github.com/todxx/teamredminer/releases/download/v0.10.21/teamredminer-v0.10.21-win.zip" 88 | Path = "$Name\teamredminer.exe" 89 | ExtraArgs = $extrargs 90 | Arguments = "-a $($_.Algorithm) $hosts --api_listen=127.0.0.1:$port --platform=$([Config]::AMDPlatformId) --no_gpu_monitor $extrargs" 91 | Port = $port 92 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 93 | RunBefore = $_.RunBefore 94 | RunAfter = $_.RunAfter 95 | Fee = $fee 96 | } 97 | } 98 | } 99 | } 100 | } -------------------------------------------------------------------------------- /Miners/bz-amd-21.3.0.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::AMD) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 90 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "alph" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "canxium" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "clore" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "dynex" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ergo" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "etchash" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethash" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "gamepass" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ironfish" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ixi" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kaspa" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "karlsen" } 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kylacoin" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "meowcoin" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "neox" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "nexa" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "novo" } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "octa" } 35 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "olhash" } 36 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "radiant" } 37 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rethereum" } 38 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rvn" } 39 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "warthog" } 40 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "woodcoin" } 41 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "xna" } 42 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "zil" } 43 | )} 44 | 45 | if (!$Cfg.Enabled) { return } 46 | 47 | $port = [Config]::Ports[[int][eMinerType]::AMD] 48 | 49 | $Cfg.Algorithms | ForEach-Object { 50 | if ($_.Enabled) { 51 | $Algo = Get-Algo($_.Algorithm) 52 | if ($Algo) { 53 | # find pool by algorithm 54 | $Pool = Get-Pool($Algo) 55 | if ($Pool) { 56 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 57 | $fee = 0.5 58 | if (("olhash", "kaspa", "kylacoin", "meowcoin", "neox", "ironfish", "ixi", "radiant", "rethereum", "rvn", "woodcoin", "xna") -contains $_.Algorithm) { $fee = 1 } 59 | elseif ($_.Algorithm -match "zil") { $fee = 0 } 60 | [MinerInfo]@{ 61 | Pool = $Pool.PoolName() 62 | PoolKey = $Pool.PoolKey() 63 | Priority = $Pool.Priority 64 | Name = $Name 65 | Algorithm = $Algo 66 | Type = [eMinerType]::AMD 67 | API = "bzminer" 68 | URI = "https://github.com/bzminer/bzminer/releases/download/v21.3.0/bzminer_v21.3.0_windows.zip" 69 | Path = "$Name\bzminer.exe" 70 | ExtraArgs = $extrargs 71 | Arguments = "-a $($_.Algorithm) -p $($Pool.Hosts[0]):$($Pool.PortUnsecure) -w $($Pool.User) --pool_password $($Pool.Password) --no_watchdog --nvidia 0 --amd 1 --intel 0 --nc 1 --update_frequency_ms 60000 --pool_reconnect_timeout_ms $($Config.CheckTimeout)000 --http_address 127.0.0.1 --http_port $port $extrargs" 72 | Port = $port 73 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 74 | RunBefore = $_.RunBefore 75 | RunAfter = $_.RunAfter 76 | Fee = $fee 77 | } 78 | } 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /Miners/bz-intel-21.3.0.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::Intel) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 90 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "alph" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "canxium" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "clore" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "dynex" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ergo" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "etchash" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethash" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "gamepass" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ironfish" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ixi" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kaspa" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "karlsen" } 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kylacoin" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "meowcoin" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "neox" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "nexa" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "novo" } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "octa" } 35 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "olhash" } 36 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "radiant" } 37 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rethereum" } 38 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rvn" } 39 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "warthog" } 40 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "woodcoin" } 41 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "xna" } 42 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "zil" } 43 | )} 44 | 45 | if (!$Cfg.Enabled) { return } 46 | 47 | $port = [Config]::Ports[[int][eMinerType]::Intel] 48 | 49 | $Cfg.Algorithms | ForEach-Object { 50 | if ($_.Enabled) { 51 | $Algo = Get-Algo($_.Algorithm) 52 | if ($Algo) { 53 | # find pool by algorithm 54 | $Pool = Get-Pool($Algo) 55 | if ($Pool) { 56 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 57 | $fee = 0.5 58 | if (("olhash", "kaspa", "kylacoin", "meowcoin", "neox", "ironfish", "ixi", "radiant", "rethereum", "rvn", "woodcoin", "xna") -contains $_.Algorithm) { $fee = 1 } 59 | elseif ($_.Algorithm -match "zil") { $fee = 0 } 60 | [MinerInfo]@{ 61 | Pool = $Pool.PoolName() 62 | PoolKey = $Pool.PoolKey() 63 | Priority = $Pool.Priority 64 | Name = $Name 65 | Algorithm = $Algo 66 | Type = [eMinerType]::Intel 67 | API = "bzminer" 68 | URI = "https://github.com/bzminer/bzminer/releases/download/v21.3.0/bzminer_v21.3.0_windows.zip" 69 | Path = "$Name\bzminer.exe" 70 | ExtraArgs = $extrargs 71 | Arguments = "-a $($_.Algorithm) -p $($Pool.Hosts[0]):$($Pool.PortUnsecure) -w $($Pool.User) --pool_password $($Pool.Password) --no_watchdog --nvidia 0 --amd 0 --intel 1 --nc 1 --update_frequency_ms 60000 --pool_reconnect_timeout_ms $($Config.CheckTimeout)000 --http_address 127.0.0.1 --http_port $port $extrargs" 72 | Port = $port 73 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 74 | RunBefore = $_.RunBefore 75 | RunAfter = $_.RunAfter 76 | Fee = $fee 77 | } 78 | } 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /Miners/bz-nv-21.3.0.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 90 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "alph" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "canxium" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "clore" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "dynex" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ergo" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "etchash" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethash" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "gamepass" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ironfish" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ixi" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kaspa" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "karlsen" } 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kylacoin" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "meowcoin" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "neox" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "nexa" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "novo" } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "octa" } 35 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "olhash" } 36 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "radiant" } 37 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rethereum" } 38 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rvn" } 39 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "warthog" } 40 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "woodcoin" } 41 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "xna" } 42 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "zil" } 43 | )} 44 | 45 | if (!$Cfg.Enabled) { return } 46 | 47 | $port = [Config]::Ports[[int][eMinerType]::nVidia] 48 | 49 | $Cfg.Algorithms | ForEach-Object { 50 | if ($_.Enabled) { 51 | $Algo = Get-Algo($_.Algorithm) 52 | if ($Algo) { 53 | # find pool by algorithm 54 | $Pool = Get-Pool($Algo) 55 | if ($Pool) { 56 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 57 | $fee = 0.5 58 | if (("olhash", "kaspa", "kylacoin", "meowcoin", "neox", "ironfish", "ixi", "radiant", "rethereum", "rvn", "woodcoin", "xna") -contains $_.Algorithm) { $fee = 1 } 59 | if ($_.Algorithm -match "nexa") { $fee = 20 } # fix fake hashrate 60 | elseif ($_.Algorithm -match "zil") { $fee = 0 } 61 | [MinerInfo]@{ 62 | Pool = $Pool.PoolName() 63 | PoolKey = $Pool.PoolKey() 64 | Priority = $Pool.Priority 65 | Name = $Name 66 | Algorithm = $Algo 67 | Type = [eMinerType]::nVidia 68 | API = "bzminer" 69 | URI = "https://github.com/bzminer/bzminer/releases/download/v21.3.0/bzminer_v21.3.0_windows.zip" 70 | Path = "$Name\bzminer.exe" 71 | ExtraArgs = $extrargs 72 | Arguments = "-a $($_.Algorithm) -p $($Pool.Hosts[0]):$($Pool.PortUnsecure) -w $($Pool.User) --pool_password $($Pool.Password) --no_watchdog --nvidia 1 --amd 0 --intel 0 --nc 1 --update_frequency_ms 60000 --pool_reconnect_timeout_ms $($Config.CheckTimeout)000 --http_address 127.0.0.1 --http_port $port $extrargs" 73 | Port = $port 74 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 75 | RunBefore = $_.RunBefore 76 | RunAfter = $_.RunAfter 77 | Fee = $fee 78 | } 79 | } 80 | } 81 | } 82 | } -------------------------------------------------------------------------------- /Miners/bz-nv-dual-21.3.0.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | @{ Enabled = $true; Algorithm = "ergo"; DualAlgorithm = "kaspa" } 18 | @{ Enabled = $true; Algorithm = "ergo"; DualAlgorithm = "radiant" } 19 | @{ Enabled = $true; Algorithm = "etchash"; DualAlgorithm = "alph" } 20 | @{ Enabled = $true; Algorithm = "etchash"; DualAlgorithm = "ironfish" } 21 | @{ Enabled = $true; Algorithm = "etchash"; DualAlgorithm = "kaspa" } 22 | @{ Enabled = $true; Algorithm = "etchash"; DualAlgorithm = "radiant" } 23 | @{ Enabled = $true; Algorithm = "ethash"; DualAlgorithm = "alph" } 24 | @{ Enabled = $true; Algorithm = "ethash"; DualAlgorithm = "ironfish" } 25 | @{ Enabled = $true; Algorithm = "ethash"; DualAlgorithm = "kaspa" } 26 | @{ Enabled = $true; Algorithm = "ethash"; DualAlgorithm = "radiant" } 27 | @{ Enabled = $true; Algorithm = "octa"; DualAlgorithm = "alph" } 28 | @{ Enabled = $true; Algorithm = "octa"; DualAlgorithm = "ironfish" } 29 | @{ Enabled = $true; Algorithm = "octa"; DualAlgorithm = "kaspa" } 30 | @{ Enabled = $true; Algorithm = "octa"; DualAlgorithm = "radiant" } 31 | @{ Enabled = $true; Algorithm = "rethereum"; DualAlgorithm = "alph" } 32 | @{ Enabled = $true; Algorithm = "rethereum"; DualAlgorithm = "ironfish" } 33 | @{ Enabled = $true; Algorithm = "rethereum"; DualAlgorithm = "kaspa" } 34 | @{ Enabled = $true; Algorithm = "rethereum"; DualAlgorithm = "radiant" } 35 | )} 36 | 37 | if (!$Cfg.Enabled) { return } 38 | 39 | $port = [Config]::Ports[[int][eMinerType]::nVidia] 40 | 41 | $Cfg.Algorithms | ForEach-Object { 42 | if ($_.Enabled) { 43 | $Algo = Get-Algo($_.Algorithm) 44 | $AlgoDual = Get-Algo($_.DualAlgorithm) 45 | if ($Algo -and $AlgoDual) { 46 | # find pool by algorithm 47 | $Pool = Get-Pool($Algo) 48 | $PoolDual = Get-Pool($AlgoDual) 49 | if ($Pool -and $PoolDual) { 50 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 51 | $fee = 0.5 52 | if (("olhash", "kaspa", "kylacoin", "meowcoin", "neox", "ironfish", "ixi", "radiant", "rvn", "woodcoin", "xna") -contains $_.Algorithm) { $fee = 1 } 53 | elseif ($_.Algorithm -match "zil") { $fee = 0 } 54 | [MinerInfo]@{ 55 | Pool = $(Get-FormatDualPool $Pool.PoolName() $PoolDual.PoolName()) 56 | PoolKey = "$($Pool.PoolKey())+$($PoolDual.PoolKey())" 57 | Priority = $Pool.Priority 58 | DualPriority = $PoolDual.Priority 59 | Name = $Name 60 | Algorithm = $Algo 61 | DualAlgorithm = $AlgoDual 62 | Type = [eMinerType]::nVidia 63 | API = "bzminer" 64 | URI = "https://github.com/bzminer/bzminer/releases/download/v21.3.0/bzminer_v21.3.0_windows.zip" 65 | Path = "$Name\bzminer.exe" 66 | ExtraArgs = $extrargs 67 | Arguments = "-a $($_.Algorithm) -p $($Pool.Hosts[0]):$($Pool.PortUnsecure) -w $($Pool.User) --pool_password $($Pool.Password) --a2 $($_.DualAlgorithm) --p2 $($PoolDual.Hosts[0]):$($PoolDual.PortUnsecure) --w2 $($PoolDual.User) --pool_password2 $($PoolDual.Password) --no_watchdog --nvidia 1 --amd 0 --intel 0 --nc 1 --update_frequency_ms 60000 --pool_reconnect_timeout_ms $($Config.CheckTimeout)000 --http_address 127.0.0.1 --http_port $port $extrargs" 68 | Port = $port 69 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 70 | RunBefore = $_.RunBefore 71 | RunAfter = $_.RunAfter 72 | Fee = $fee 73 | } 74 | } 75 | } 76 | } 77 | } -------------------------------------------------------------------------------- /Miners/ccminer-alexis-1f.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 60 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "blake2s" } # only dual 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "blakecoin" } 19 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "keccak" } # only dual 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "lbry" } 21 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "lyra2v2"; BenchmarkSeconds = 120 } # dredge faster 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "myr-gr" } 23 | # [AlgoInfoEx]@{ Enabled = $true; Algorithm = "neoscrypt" } # klaust much faster 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "nist5" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sib" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sib"; ExtraArgs = "-i 21" } 27 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "skein" } # klaust faster 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "skein2" } # fastest 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "skein2"; ExtraArgs = "-i 29" } # fastest 30 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "c11" } # enemy faster 31 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "c11"; ExtraArgs = "-i 21" } # enemy faster 32 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "x17"; BenchmarkSeconds = 120 } # enemy faster 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "veltor" } 34 | )} 35 | 36 | if (!$Cfg.Enabled) { return } 37 | 38 | $Cfg.Algorithms | ForEach-Object { 39 | if ($_.Enabled) { 40 | $Algo = Get-Algo($_.Algorithm) 41 | if ($Algo) { 42 | # find pool by algorithm 43 | $Pool = Get-Pool($Algo) 44 | if ($Pool) { 45 | $N = Get-CCMinerStatsAvg $Algo $_ 46 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 47 | [MinerInfo]@{ 48 | Pool = $Pool.PoolName() 49 | PoolKey = $Pool.PoolKey() 50 | Priority = $Pool.Priority 51 | Name = $Name 52 | Algorithm = $Algo 53 | Type = [eMinerType]::nVidia 54 | API = "ccminer" 55 | URI = "https://github.com/Quake4/MindMinerPrerequisites/raw/master/nVidia/ccminer-alexis/ccminer-alexis-01.zip" 56 | Path = "$Name\ccminer.exe" 57 | ExtraArgs = $extrargs 58 | Arguments = "--cuda-schedule 3 -a $($_.Algorithm) -o stratum+tcp://$($Pool.Hosts[0]):$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password) -R $($Config.CheckTimeout) -q $N $extrargs" 59 | Port = 4068 60 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 61 | RunBefore = $_.RunBefore 62 | RunAfter = $_.RunAfter 63 | } 64 | } 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /Miners/ccminer-klaust-821r9.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2019 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | if ([Config]::CudaVersion -lt [version]::new(9, 1)) { return } 10 | 11 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 12 | 13 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 14 | Enabled = $true 15 | BenchmarkSeconds = 120 16 | ExtraArgs = $null 17 | Algorithms = @( 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "lyra2z330" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "neoscrypt" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "neoscrypt"; ExtraArgs="-i 17" } 21 | )} 22 | 23 | if (!$Cfg.Enabled) { return } 24 | 25 | $Cfg.Algorithms | ForEach-Object { 26 | if ($_.Enabled) { 27 | $Algo = Get-Algo($_.Algorithm) 28 | if ($Algo) { 29 | # find pool by algorithm 30 | $Pool = Get-Pool($Algo) 31 | if ($Pool) { 32 | $N = Get-CCMinerStatsAvg $Algo $_ 33 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 34 | [MinerInfo]@{ 35 | Pool = $Pool.PoolName() 36 | PoolKey = $Pool.PoolKey() 37 | Priority = $Pool.Priority 38 | Name = $Name 39 | Algorithm = $Algo 40 | Type = [eMinerType]::nVidia 41 | API = "ccminer" 42 | URI = "https://github.com/Quake4/MindMiner/files/3460370/ccminer-klaust-821r9.zip" 43 | Path = "$Name\ccminer.exe" 44 | ExtraArgs = $extrargs 45 | Arguments = "-a $($_.Algorithm) -o stratum+tcp://$($Pool.Hosts[0]):$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password) -R $($Config.CheckTimeout) -q -b 4068 $N $extrargs" 46 | Port = 4068 47 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 48 | RunBefore = $_.RunBefore 49 | RunAfter = $_.RunAfter 50 | } 51 | } 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /Miners/ccminer-yescrypt-4.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2019 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "lyra2v3" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "lyra2z330" } # work only on one gpu 19 | # [AlgoInfoEx]@{ Enabled = $true; Algorithm = "yescrypt" } is r8g 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "yescryptr8" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "yescryptr8g" } 22 | [AlgoInfoEx]@{ Enabled = $([Config]::ActiveTypes -notcontains [eMinerType]::CPU); Algorithm = "yescryptr16" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "yescryptr24" } 24 | [AlgoInfoEx]@{ Enabled = $([Config]::ActiveTypes -notcontains [eMinerType]::CPU); Algorithm = "yescryptr32" } 25 | )} 26 | 27 | if (!$Cfg.Enabled) { return } 28 | if ([Config]::CudaVersion -lt [version]::new(10, 0)) { return } 29 | 30 | $Cfg.Algorithms | ForEach-Object { 31 | if ($_.Enabled) { 32 | $Algo = Get-Algo($_.Algorithm) 33 | if ($Algo) { 34 | # find pool by algorithm 35 | $Pool = Get-Pool($Algo) 36 | if ($Pool) { 37 | $N = Get-CCMinerStatsAvg $Algo $_ 38 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 39 | if ($_.Algorithm -match "yescryptr8g") { $_.Algorithm = "yescrypt" } 40 | [MinerInfo]@{ 41 | Pool = $Pool.PoolName() 42 | PoolKey = $Pool.PoolKey() 43 | Priority = $Pool.Priority 44 | Name = $Name 45 | Algorithm = $Algo 46 | Type = [eMinerType]::nVidia 47 | API = "ccminer" 48 | URI = "https://github.com/Minerx117/ccmineryescryptr8g/releases/download/v4/ccmineryescryptrv4.zip" 49 | Path = "$Name\ccminer.exe" 50 | ExtraArgs = $extrargs 51 | Arguments = "-a $($_.Algorithm) -o stratum+tcp://$($Pool.Hosts[0]):$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password) -R $($Config.CheckTimeout) -q -b 4068 $N $extrargs" 52 | Port = 4068 53 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 54 | RunBefore = $_.RunBefore 55 | RunAfter = $_.RunAfter 56 | } 57 | } 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /Miners/ccminer-ze-262.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2020 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | if ([Config]::CudaVersion -lt [version]::new(9, 1)) { return } 10 | 11 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 12 | 13 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 14 | Enabled = $true 15 | BenchmarkSeconds = 90 16 | ExtraArgs = $null 17 | Algorithms = @( 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "aergo" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "bcd" } 20 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "bitcore" } 21 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "c11" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "hex" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "hsr" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kawpow"; BenchmarkSeconds = 120 } 25 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "phi" } # t-rex faster 26 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "phi2" } # t-rex faster 27 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "phi2-lux" } # t-rex faster 28 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "poly"; BenchmarkSeconds = 120 } # t-rex faster 29 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "skunk" } # t-rex faster 30 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "sonoa" } # t-rex faster 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "timetravel" } 32 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "tribus"; BenchmarkSeconds = 120 } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "vit" } 34 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "x16r"; BenchmarkSeconds = 120 } # t-rex faster 35 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "x16r"; BenchmarkSeconds = 120; ExtraArgs="-i 22" } # t-rex faster 36 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "x16rv2"; BenchmarkSeconds = 120 } # t-rex faster 37 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "x16rv2"; BenchmarkSeconds = 120; ExtraArgs="-i 22" } 38 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "x16s"; BenchmarkSeconds = 120 } # t-rex faster 39 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "x17"; BenchmarkSeconds = 120 } # t-rex faster 40 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "xevan"; BenchmarkSeconds = 120 } 41 | )} 42 | 43 | if (!$Cfg.Enabled) { return } 44 | 45 | $url = "https://github.com/zealot-rvn/z-enemy/releases/download/kawpow262/z-enemy-2.6.2-win-cuda9.1.zip" 46 | if ([Config]::CudaVersion -ge [version]::new(10, 1)) { $url = "https://github.com/zealot-rvn/z-enemy/releases/download/kawpow262/z-enemy-2.6.2-win-cuda10.1.zip" } 47 | elseif ([Config]::CudaVersion -ge [version]::new(10, 0)) { $url = "https://github.com/zealot-rvn/z-enemy/releases/download/kawpow262/z-enemy-2.6.2-win-cuda10.0.zip" } 48 | elseif ([Config]::CudaVersion -ge [version]::new(9, 2)) { $url = "https://github.com/zealot-rvn/z-enemy/releases/download/kawpow262/z-enemy-2.6.2-win-cuda9.2.zip" } 49 | 50 | $Cfg.Algorithms | ForEach-Object { 51 | if ($_.Enabled) { 52 | $Algo = Get-Algo($_.Algorithm) 53 | if ($Algo) { 54 | # find pool by algorithm 55 | $Pool = Get-Pool($Algo) 56 | if ($Pool) { 57 | if ($_.Algorithm -match "phi2-lux") { $_.Algorithm = "phi2" } 58 | $N = Get-CCMinerStatsAvg $Algo $_ 59 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 60 | $hosts = [string]::Empty 61 | $Pool.Hosts | ForEach-Object { 62 | $hosts = Get-Join " " @($hosts, "-o stratum+tcp://$_`:$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password)") 63 | } 64 | [MinerInfo]@{ 65 | Pool = $Pool.PoolName() 66 | PoolKey = $Pool.PoolKey() 67 | Priority = $Pool.Priority 68 | Name = $Name 69 | Algorithm = $Algo 70 | Type = [eMinerType]::nVidia 71 | API = "ccminer" 72 | URI = $url 73 | Path = "$Name\z-enemy.exe" 74 | ExtraArgs = $extrargs 75 | Arguments = "-a $($_.Algorithm) $hosts -R $($Config.CheckTimeout) -q $N --api-bind=4068 --api-bind-http=0 $extrargs" 76 | Port = 4068 77 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 78 | RunBefore = $_.RunBefore 79 | RunAfter = $_.RunAfter 80 | Fee = 1 81 | } 82 | } 83 | } 84 | } 85 | } -------------------------------------------------------------------------------- /Miners/claymore-neoscrypt-12.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2021 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::AMD) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 90 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "neoscrypt" } 18 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "neoscrypt"; ExtraArgs="-powlim 50" } 19 | )} 20 | 21 | if (!$Cfg.Enabled) { return } 22 | 23 | $file = [IO.Path]::Combine($BinLocation, $Name, "pools.txt") 24 | if ([IO.File]::Exists($file)) { 25 | [IO.File]::Delete($file) 26 | } 27 | 28 | $Cfg.Algorithms | ForEach-Object { 29 | if ($_.Enabled) { 30 | $Algo = Get-Algo($_.Algorithm) 31 | if ($Algo) { 32 | # find pool by algorithm 33 | $Pool = Get-Pool($Algo) 34 | if ($Pool) { 35 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 36 | [MinerInfo]@{ 37 | Pool = $Pool.PoolName() 38 | PoolKey = $Pool.PoolKey() 39 | Priority = $Pool.Priority 40 | Name = $Name 41 | Algorithm = $Algo 42 | Type = [eMinerType]::AMD 43 | API = "claymore" 44 | URI = "https://mindminer.online/miners/AMD/claymore/Claymore-NeoScrypt-AMD-Miner-v1.2.zip" 45 | Path = "$Name\NeoScryptMiner.exe" 46 | ExtraArgs = $extrargs 47 | Arguments = "-pool stratum+tcp://$($Pool.Hosts[0]):$($Pool.PortUnsecure) -wal $($Pool.User) -psw $($Pool.Password) -retrydelay $($Config.CheckTimeout) -wd 0 -dbg -1 $extrargs" 48 | Port = 3333 49 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 50 | RunBefore = $_.RunBefore 51 | RunAfter = $_.RunAfter 52 | Fee = if ($extrargs.ToLower().Contains("nofee")) { 0 } else { 2 } 53 | } 54 | } 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /Miners/cpu-kdrd-1.0.0.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2021 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::CPU) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $extra = $null 13 | if ([Config]::DefaultCPU) { 14 | $extra = "-t $([Config]::DefaultCPU.Threads)" 15 | } 16 | 17 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 18 | Enabled = $true 19 | BenchmarkSeconds = 60 20 | ExtraArgs = $extra 21 | Algorithms = @( 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2d16000" } 23 | )} 24 | 25 | if (!$Cfg.Enabled) { return } 26 | 27 | # choose version 28 | $miners = [Collections.Generic.Dictionary[string, string[]]]::new() 29 | $miners.Add("cpuminer-sse2.exe", @("SSE2")) 30 | $miners.Add("cpuminer-aes-sse42.exe", @("AES", "SSE42")) 31 | $miners.Add("cpuminer-avx.exe", @("AES", "AVX")) 32 | $miners.Add("cpuminer-avx2.exe", @("AES", "AVX2")) 33 | $miners.Add("cpuminer-zen.exe", @("SHA", "AVX2")) 34 | 35 | $bestminer = $null 36 | $miners.GetEnumerator() | ForEach-Object { 37 | $has = $true 38 | $_.Value | ForEach-Object { 39 | if (![Config]::CPUFeatures.Contains($_)) { 40 | $has = $false 41 | } 42 | } 43 | if ($has) { 44 | $bestminer = $_.Key 45 | } 46 | } 47 | if (!$bestminer) { return } 48 | 49 | $Cfg.Algorithms | ForEach-Object { 50 | if ($_.Enabled) { 51 | $Algo = Get-Algo($_.Algorithm) 52 | if ($Algo) { 53 | # find pool by algorithm 54 | $Pool = Get-Pool($Algo) 55 | if ($Pool) { 56 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 57 | [MinerInfo]@{ 58 | Pool = $Pool.PoolName() 59 | PoolKey = $Pool.PoolKey() 60 | Priority = $Pool.Priority 61 | Name = $Name 62 | Algorithm = $Algo 63 | Type = [eMinerType]::CPU 64 | API = "cpuminer" 65 | URI = "https://github.com/Bitcreds/cpuminer-opt-kudaraidee/releases/download/v1.0.0/cpuminer-opt-kdrd-bcrs-win.zip" 66 | Path = "$Name\$bestminer" 67 | ExtraArgs = $extrargs 68 | Arguments = "-a $($_.Algorithm) -o stratum+tcp://$($Pool.Hosts[0]):$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password) -q -b 127.0.0.1:4048 --cpu-priority 1 --retry-pause $($Config.CheckTimeout) -T 500 $extrargs" 69 | Port = 4048 70 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 71 | RunBefore = $_.RunBefore 72 | RunAfter = $_.RunAfter 73 | } 74 | } 75 | } 76 | } 77 | } -------------------------------------------------------------------------------- /Miners/cpu-upx-20.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2020 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::CPU) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $extra = $null 13 | if ([Config]::DefaultCPU) { 14 | $extra = "-t $([Config]::DefaultCPU.Threads)" 15 | } 16 | 17 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 18 | Enabled = $true 19 | BenchmarkSeconds = 120 20 | ExtraArgs = $extra 21 | Algorithms = @( 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnupx2" } 23 | )} 24 | 25 | if (!$Cfg.Enabled) { return } 26 | 27 | $file = [IO.Path]::Combine($BinLocation, $Name, "config.json") 28 | if ([IO.File]::Exists($file)) { 29 | [IO.File]::Delete($file) 30 | } 31 | 32 | $Cfg.Algorithms | ForEach-Object { 33 | if ($_.Enabled) { 34 | $Algo = Get-Algo($_.Algorithm) 35 | if ($Algo) { 36 | # find pool by algorithm 37 | $Pool = Get-Pool($Algo) 38 | if ($Pool) { 39 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 40 | $pools = [string]::Empty 41 | $Pool.Hosts | ForEach-Object { 42 | $pools = Get-Join " " @($pools, "-o $_`:$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password)") 43 | } 44 | if ($_.Algorithm -match "cnupx") { $_.Algorithm = "cryptonight-upx/2" } 45 | [MinerInfo]@{ 46 | Pool = $Pool.PoolName() 47 | PoolKey = $Pool.PoolKey() 48 | Priority = $Pool.Priority 49 | Name = $Name 50 | Algorithm = $Algo 51 | Type = [eMinerType]::CPU 52 | API = "xmrig2" 53 | URI = "https://github.com/uPlexa/xmrig-upx/releases/download/v0.2.0/xmrig-upx-v0.2.0-win64.zip" 54 | Path = "$Name\xmrig.exe" 55 | ExtraArgs = $extrargs 56 | Arguments = "-a $($_.Algorithm) $pools -R $($Config.CheckTimeout) --api-port=4045 --donate-level=1 --cpu-priority 0 $extrargs" 57 | Port = 4045 58 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 59 | RunBefore = $_.RunBefore 60 | RunAfter = $_.RunAfter 61 | Fee = 1 62 | } 63 | } 64 | } 65 | } 66 | } -------------------------------------------------------------------------------- /Miners/cpu-verus-3.8.3.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::CPU) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $from = ($Devices[[eMinerType]::CPU] | Measure-Object Cores -Sum).Sum 13 | $to = ($Devices[[eMinerType]::CPU] | Measure-Object Threads -Sum).Sum 14 | if ([Config]::DefaultCPU) { 15 | $from = [Config]::DefaultCPU.Cores 16 | $to = [Config]::DefaultCPU.Threads 17 | } 18 | $Algorithms = @() 19 | for ($t = $from; $t -le $to; $t++) { 20 | $Algorithms += [AlgoInfoEx]@{ Enabled = $true; Algorithm = "verus"; ExtraArgs = "-t $t" } 21 | } 22 | 23 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 24 | Enabled = $true 25 | BenchmarkSeconds = 60 26 | ExtraArgs = $null 27 | Algorithms = $Algorithms 28 | } 29 | 30 | if (!$Cfg.Enabled) { return } 31 | 32 | $Cfg.Algorithms | ForEach-Object { 33 | if ($_.Enabled) { 34 | $Algo = Get-Algo($_.Algorithm) 35 | if ($Algo) { 36 | # find pool by algorithm 37 | $Pool = Get-Pool($Algo) 38 | if ($Pool) { 39 | $N = Get-CCMinerStatsAvg $Algo $_ 40 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 41 | if ($extrargs -notmatch "-t ") { 42 | $extrargs = Get-Join " " @($extrargs, "-t $($Devices["CPU"].Threads)") 43 | } 44 | [MinerInfo]@{ 45 | Pool = $Pool.PoolName() 46 | PoolKey = $Pool.PoolKey() 47 | Priority = $Pool.Priority 48 | Name = $Name 49 | Algorithm = $Algo 50 | Type = [eMinerType]::CPU 51 | API = "ccminer_woe" 52 | URI = "https://github.com/monkins1010/ccminer/releases/download/v3.8.3a/ccminer_CPU_3.8.3.zip" 53 | Path = "$Name\ccminer.exe" 54 | Pass = "12345678" 55 | ExtraArgs = $extrargs 56 | Arguments = "-a $($_.Algorithm) -o stratum+tcp://$($Pool.Hosts[0]):$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password) -R $($Config.CheckTimeout) -q --cpu-priority 1 -b 4048 $N $extrargs" 57 | Port = 4048 58 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 59 | RunBefore = $_.RunBefore 60 | RunAfter = $_.RunAfter 61 | } 62 | } 63 | } 64 | } 65 | } -------------------------------------------------------------------------------- /Miners/cpu-xmrigcc-2.9.7.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2021 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::CPU) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $extraThreads = $null 13 | $extraCores = $null 14 | if ([Config]::DefaultCPU) { 15 | $extraThreads = "-t $([Config]::DefaultCPU.Threads)" 16 | $extraCores = "-t $([Config]::DefaultCPU.Cores)" 17 | } 18 | 19 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 20 | Enabled = $true 21 | BenchmarkSeconds = 120 22 | ExtraArgs = $null 23 | Algorithms = @( 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2/chukwav2" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "astroBWT" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/cache_hash" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/conceal" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/superfast" } 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn-pico/tlo" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn-pico" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ninja" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "panthera"; ExtraArgs = $extraCores } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/0"; ExtraArgs = $extraThreads } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/arq"; ExtraArgs = $extraThreads } 35 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/graft" } 36 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/keva" } 37 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/loki" } 38 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/sfx"; ExtraArgs = $extraCores } 39 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/wow"; ExtraArgs = $extraThreads } 40 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/yada" } 41 | )} 42 | 43 | if (!$Cfg.Enabled) { return } 44 | 45 | $file = [IO.Path]::Combine($BinLocation, $Name, "config.json") 46 | if ([IO.File]::Exists($file)) { 47 | [IO.File]::Delete($file) 48 | } 49 | 50 | $Cfg.Algorithms | ForEach-Object { 51 | if ($_.Enabled) { 52 | $Algo = Get-Algo($_.Algorithm) 53 | if ($Algo) { 54 | # find pool by algorithm 55 | $Pool = Get-Pool($Algo) 56 | if ($Pool) { 57 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 58 | $ssl = [string]::Empty 59 | if ($Pool.Protocol -match "ssl") { $ssl = " --tls 1"} 60 | $pools = [string]::Empty 61 | $Pool.Hosts | ForEach-Object { 62 | $pools = Get-Join " " @($pools, "-o $_`:$($Pool.Port) -u $($Pool.User) -p $($Pool.Password)$ssl") 63 | } 64 | [MinerInfo]@{ 65 | Pool = $Pool.PoolName() 66 | PoolKey = $Pool.PoolKey() 67 | Priority = $Pool.Priority 68 | Name = $Name 69 | Algorithm = $Algo 70 | Type = [eMinerType]::CPU 71 | API = "xmrig2" 72 | URI = "https://github.com/Bendr0id/xmrigCC/releases/download/2.9.7/xmrigCC-2.9.7-gcc-win64.zip" 73 | Path = "$Name\xmrigdaemon.exe" 74 | ExtraArgs = $extrargs 75 | Arguments = "-a $($_.Algorithm) $pools -R $($Config.CheckTimeout) --http-port=4045 --donate-level=1 --cpu-priority 0 $extrargs" 76 | Port = 4045 77 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 78 | RunBefore = $_.RunBefore 79 | RunAfter = $_.RunAfter 80 | Fee = 1 81 | } 82 | } 83 | } 84 | } 85 | } -------------------------------------------------------------------------------- /Miners/gminer-2.39.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2021 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia -and [Config]::ActiveTypes -notcontains [eMinerType]::AMD) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 90 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "bfc" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cuckaroo29b" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cuckarood29" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cuckarood29v" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cuckarooz29" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cuckatoo31" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cuckatoo32" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpowz" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "vprogpow" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sero" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "swap" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "vds" } 29 | )} 30 | 31 | if (!$Cfg.Enabled) { return } 32 | 33 | $AMD = @("aeternity", "beamhash", "bfc", "cuckaroo29b", "equihash125_4", "equihash144_5", "equihash192_7", "equihashZCL", "etchash", "ethash", "swap") 34 | 35 | $Cfg.Algorithms | ForEach-Object { 36 | if ($_.Enabled) { 37 | $Algo = Get-Algo($_.Algorithm) 38 | if ($Algo -and $_.Algorithm -notmatch "zhash") { 39 | # find pool by algorithm 40 | $Pool = Get-Pool($Algo) 41 | if ($Pool -and ($Pool.Name -notmatch "nicehash" -or ($Pool.Name -match "nicehash" -and $_.Algorithm -notmatch "handshake"))) { 42 | if ($_.Algorithm -match "zhash") { $_.Algorithm = "equihash144_5" } 43 | $types = if ([Config]::ActiveTypes -contains [eMinerType]::nVidia) { [eMinerType]::nVidia } else { $null } 44 | if ($AMD -contains $_.Algorithm) { 45 | if ([Config]::ActiveTypes -contains [eMinerType]::nVidia -and [Config]::ActiveTypes -contains [eMinerType]::AMD) { 46 | $types = @([eMinerType]::nVidia, [eMinerType]::AMD) 47 | } 48 | elseif ([Config]::ActiveTypes -contains [eMinerType]::AMD) { 49 | $types = [eMinerType]::AMD 50 | } 51 | } 52 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 53 | $alg = "-a $($_.Algorithm)" 54 | if ($_.Algorithm -match "equihash" -and $extrargs -notmatch "-pers") { 55 | $alg = Get-Join " " @($alg, "--pers auto") 56 | } 57 | if ($_.Algorithm -match "equihashZCL") { 58 | $alg = "-a equihash192_7 --pers ZcashPoW" 59 | } 60 | if (($_.Algorithm -match "ethash" -or $_.Algorithm -match "etchash") -and ($Pool.Name -match "nicehash" -or $Pool.Name -match "mph")) { 61 | $alg = Get-Join " " @($alg, "--proto stratum") 62 | } 63 | $fee = if ($_.Algorithm -match "cortex") { 5 } 64 | elseif ($_.Algorithm -match "bfc" -or $_.Algorithm -match "cuckaroom29" -or $_.Algorithm -match "cuckarooz29") { 3 } 65 | elseif ($_.Algorithm -match "cuckarood29v") { 10 } 66 | elseif ($_.Algorithm -match "cuckaroo29b") { 4 } 67 | elseif ($_.Algorithm -match "kawpow") { 1 } 68 | elseif ($_.Algorithm -match "ethash" -or $_.Algorithm -match "etchash") { 0.65 } 69 | else { 2 } 70 | $benchsecs = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 71 | $runbefore = $_.RunBefore 72 | $runafter = $_.RunAfter 73 | $user = $Pool.User 74 | if ($user -notmatch ".$([Config]::WorkerNamePlaceholder)" -and !$user.Replace([Config]::WalletPlaceholder, ([string]::Empty)).Contains(".")) { 75 | $user = "$user.$([Config]::WorkerNamePlaceholder)" 76 | } 77 | $pec = if ($extrargs -match "--electricity_cost") { [string]::Empty } else { "--pec 0 " } 78 | $ssl = "0" 79 | if ($Pool.Protocol -match "ssl") { $ssl = "1" } 80 | $hosts = [string]::Empty 81 | $Pool.Hosts | ForEach-Object { $hosts = Get-Join " " @($hosts, "-s $_`:$($Pool.Port) -u $user -p $($Pool.Password) --ssl $ssl") } 82 | $types | ForEach-Object { 83 | if ($_) { 84 | $devs = if ($_ -eq [eMinerType]::nVidia) { "--cuda 1 --opencl 0" } else { "--cuda 0 --opencl 1" } 85 | $port = if ($_ -eq [eMinerType]::nVidia) { 42000 } else { 42001 } 86 | [MinerInfo]@{ 87 | Pool = $Pool.PoolName() 88 | PoolKey = $Pool.PoolKey() 89 | Priority = $Pool.Priority 90 | Name = $Name 91 | Algorithm = $Algo 92 | Type = $_ 93 | TypeInKey = $true 94 | API = "gminer" 95 | URI = "https://github.com/develsoftware/GMinerRelease/releases/download/2.39/gminer_2_39_windows64.zip" 96 | Path = "$Name\miner.exe" 97 | ExtraArgs = $extrargs 98 | Arguments = "$alg $hosts --api $port $pec-w 0 $devs $extrargs" 99 | Port = $port 100 | BenchmarkSeconds = $benchsecs 101 | RunBefore = $runbefore 102 | RunAfter = $runafter 103 | Fee = $fee 104 | } 105 | } 106 | } 107 | } 108 | } 109 | } 110 | } -------------------------------------------------------------------------------- /Miners/gminer-2.74.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia -and [Config]::ActiveTypes -notcontains [eMinerType]::AMD) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 90 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "aeternity" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "beamhash" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "beamhashIII" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethash" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "etchash" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "equihash192_7" } 23 | )} 24 | 25 | if (!$Cfg.Enabled) { return } 26 | 27 | $AMD = @("aeternity", "beamhash", "bfc", "cuckaroo29b", "equihash125_4", "equihash144_5", "equihash192_7", "equihashZCL", "etchash", "ethash", "swap") 28 | 29 | $Cfg.Algorithms | ForEach-Object { 30 | if ($_.Enabled) { 31 | $Algo = Get-Algo($_.Algorithm) 32 | if ($Algo -and $_.Algorithm -notmatch "zhash" -and $_.Algorithm -notmatch "equihashZCL") { 33 | # find pool by algorithm 34 | $Pool = Get-Pool($Algo) 35 | if ($Pool -and ($Pool.Name -notmatch "nicehash" -or ($Pool.Name -match "nicehash" -and $_.Algorithm -notmatch "handshake"))) { 36 | if ($_.Algorithm -match "zhash") { $_.Algorithm = "equihash144_5" } 37 | $types = if ([Config]::ActiveTypes -contains [eMinerType]::nVidia) { [eMinerType]::nVidia } else { $null } 38 | if ($AMD -contains $_.Algorithm) { 39 | if ([Config]::ActiveTypes -contains [eMinerType]::nVidia -and [Config]::ActiveTypes -contains [eMinerType]::AMD) { 40 | $types = @([eMinerType]::nVidia, [eMinerType]::AMD) 41 | } 42 | elseif ([Config]::ActiveTypes -contains [eMinerType]::AMD) { 43 | $types = [eMinerType]::AMD 44 | } 45 | } 46 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 47 | $alg = "-a $($_.Algorithm)" 48 | if ($_.Algorithm -match "equihash192_7" -and $Pool.Name -match "mph") { 49 | $alg = Get-Join " " @($alg, "--pers ZcashPoW") 50 | } 51 | elseif ($_.Algorithm -match "equihash" -and $extrargs -notmatch "-pers") { 52 | $alg = Get-Join " " @($alg, "--pers auto") 53 | } 54 | if (($_.Algorithm -match "ethash" -or $_.Algorithm -match "etchash") -and ($Pool.Name -match "nicehash" -or $Pool.Name -match "mph")) { 55 | $alg = Get-Join " " @($alg, "--proto stratum") 56 | } 57 | $fee = if ($_.Algorithm -match "cortex") { 5 } 58 | elseif ($_.Algorithm -match "bfc" -or $_.Algorithm -match "cuckaroom29" -or $_.Algorithm -match "cuckarooz29") { 3 } 59 | elseif ($_.Algorithm -match "cuckarood29v") { 10 } 60 | elseif ($_.Algorithm -match "cuckaroo29b") { 4 } 61 | elseif ($_.Algorithm -match "kawpow") { 1 } 62 | elseif ($_.Algorithm -match "ethash" -or $_.Algorithm -match "etchash") { 0.65 } 63 | else { 2 } 64 | $benchsecs = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 65 | $runbefore = $_.RunBefore 66 | $runafter = $_.RunAfter 67 | $user = $Pool.User 68 | if ($user -notmatch ".$([Config]::WorkerNamePlaceholder)" -and !$user.Replace([Config]::WalletPlaceholder, ([string]::Empty)).Contains(".")) { 69 | $user = "$user.$([Config]::WorkerNamePlaceholder)" 70 | } 71 | $pec = if ($extrargs -match "--electricity_cost") { [string]::Empty } else { "--pec 0 " } 72 | $ssl = "0" 73 | if ($Pool.Protocol -match "ssl") { $ssl = "1" } 74 | $hosts = [string]::Empty 75 | $Pool.Hosts | ForEach-Object { $hosts = Get-Join " " @($hosts, "-s $_`:$($Pool.Port) -u $user -p $($Pool.Password) --ssl $ssl") } 76 | $types | ForEach-Object { 77 | if ($_) { 78 | $devs = if ($_ -eq [eMinerType]::nVidia) { "--cuda 1 --opencl 0" } else { "--cuda 0 --opencl 1" } 79 | $port = if ($_ -eq [eMinerType]::nVidia) { 42000 } else { 42001 } 80 | [MinerInfo]@{ 81 | Pool = $Pool.PoolName() 82 | PoolKey = $Pool.PoolKey() 83 | Priority = $Pool.Priority 84 | Name = $Name 85 | Algorithm = $Algo 86 | Type = $_ 87 | TypeInKey = $true 88 | API = "gminer" 89 | URI = "https://github.com/develsoftware/GMinerRelease/releases/download/2.74/gminer_2_74_windows64.zip" 90 | Path = "$Name\miner.exe" 91 | ExtraArgs = $extrargs 92 | Arguments = "$alg $hosts --api 127.0.0.1:$port $pec-w 0 $devs $extrargs" 93 | Port = $port 94 | BenchmarkSeconds = $benchsecs 95 | RunBefore = $runbefore 96 | RunAfter = $runafter 97 | Fee = $fee 98 | } 99 | } 100 | } 101 | } 102 | } 103 | } 104 | } -------------------------------------------------------------------------------- /Miners/gminer-amd-dual-3.43.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::AMD) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | @{ Enabled = $true; Algorithm = "autolykos2"; DualAlgorithm = "kheavyhash" } 18 | @{ Enabled = $true; Algorithm = "octopus"; DualAlgorithm = "kheavyhash" } 19 | @{ Enabled = $true; Algorithm = "etchash"; DualAlgorithm = "kheavyhash" } 20 | @{ Enabled = $true; Algorithm = "ethash"; DualAlgorithm = "kheavyhash" } 21 | )} 22 | 23 | if (!$Cfg.Enabled) { return } 24 | 25 | $port = [Config]::Ports[[int][eMinerType]::AMD] 26 | 27 | $Cfg.Algorithms | ForEach-Object { 28 | if ($_.Enabled) { 29 | $Algo = Get-Algo($_.Algorithm) 30 | $AlgoDual = Get-Algo($_.DualAlgorithm) 31 | if ($Algo -and $AlgoDual) { 32 | # find pool by algorithm 33 | $Pool = Get-Pool($Algo) 34 | $PoolDual = Get-Pool($AlgoDual) 35 | if ($Pool -and $PoolDual) { 36 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 37 | $benchsecs = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 38 | $fee = if (("autolykos2", "octopus") -contains $_.Algorithm) { 3 } else { 2 } 39 | $pec = if ($extrargs -match "--electricity_cost") { [string]::Empty } else { "--pec 0 " } 40 | 41 | $hosts = [string]::Empty 42 | 43 | $user = $Pool.User 44 | if ($user -notmatch ".$([Config]::WorkerNamePlaceholder)" -and !$user.Replace([Config]::WalletPlaceholder, ([string]::Empty)).Contains(".")) { 45 | $user = "$user.$([Config]::WorkerNamePlaceholder)" 46 | } 47 | $ssl = "0" 48 | if ($Pool.Protocol -match "ssl") { $ssl = "1" } 49 | $Pool.Hosts | ForEach-Object { $hosts = Get-Join " " @($hosts, "-s $_`:$($Pool.Port) -u $user -p $($Pool.Password) --ssl $ssl") } 50 | 51 | $user = $PoolDual.User 52 | if ($user -notmatch ".$([Config]::WorkerNamePlaceholder)" -and !$user.Replace([Config]::WalletPlaceholder, ([string]::Empty)).Contains(".")) { 53 | $user = "$user.$([Config]::WorkerNamePlaceholder)" 54 | } 55 | $ssl = "0" 56 | if ($PoolDual.Protocol -match "ssl") { $ssl = "1" } 57 | $PoolDual.Hosts | ForEach-Object { $hosts = Get-Join " " @($hosts, "--dserver $_`:$($PoolDual.Port) --duser $user --dpass $($PoolDual.Password) --dssl $ssl") } 58 | 59 | [MinerInfo]@{ 60 | Pool = $(Get-FormatDualPool $Pool.PoolName() $PoolDual.PoolName()) 61 | PoolKey = "$($Pool.PoolKey())+$($PoolDual.PoolKey())" 62 | Priority = $Pool.Priority 63 | DualPriority = $PoolDual.Priority 64 | Name = $Name 65 | Algorithm = $Algo 66 | DualAlgorithm = $AlgoDual 67 | Type = [eMinerType]::AMD 68 | API = "gminer" 69 | URI = "https://github.com/develsoftware/GMinerRelease/releases/download/3.43/gminer_3_43_windows64.zip" 70 | Path = "$Name\miner.exe" 71 | ExtraArgs = $extrargs 72 | Arguments = "-a $($_.Algorithm) --dalgo $($_.DualAlgorithm) $hosts --api 127.0.0.1:$port $pec-w 0 --cuda 0 --opencl 1 $extrargs" 73 | Port = $port 74 | BenchmarkSeconds = $benchsecs 75 | RunBefore = $_.RunBefore 76 | RunAfter = $_.RunAfter 77 | Fee = $fee 78 | } 79 | } 80 | } 81 | } 82 | } -------------------------------------------------------------------------------- /Miners/gminer-nv-dual-3.43.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | @{ Enabled = $true; Algorithm = "autolykos2"; DualAlgorithm = "kheavyhash" } 18 | @{ Enabled = $true; Algorithm = "octopus"; DualAlgorithm = "kheavyhash" } 19 | @{ Enabled = $true; Algorithm = "etchash"; DualAlgorithm = "kheavyhash" } 20 | @{ Enabled = $true; Algorithm = "ethash"; DualAlgorithm = "kheavyhash" } 21 | @{ Enabled = $true; Algorithm = "autolykos2"; DualAlgorithm = "radiant" } 22 | @{ Enabled = $true; Algorithm = "octopus"; DualAlgorithm = "radiant" } 23 | @{ Enabled = $true; Algorithm = "etchash"; DualAlgorithm = "radiant" } 24 | @{ Enabled = $true; Algorithm = "ethash"; DualAlgorithm = "radiant" } 25 | @{ Enabled = $true; Algorithm = "autolykos2"; DualAlgorithm = "ironfish" } 26 | @{ Enabled = $true; Algorithm = "octopus"; DualAlgorithm = "ironfish" } 27 | @{ Enabled = $true; Algorithm = "etchash"; DualAlgorithm = "ironfish" } 28 | @{ Enabled = $true; Algorithm = "ethash"; DualAlgorithm = "ironfish" } 29 | )} 30 | 31 | if (!$Cfg.Enabled) { return } 32 | 33 | $port = [Config]::Ports[[int][eMinerType]::nVidia] 34 | 35 | $Cfg.Algorithms | ForEach-Object { 36 | if ($_.Enabled) { 37 | $Algo = Get-Algo($_.Algorithm) 38 | $AlgoDual = Get-Algo($_.DualAlgorithm) 39 | if ($Algo -and $AlgoDual) { 40 | # find pool by algorithm 41 | $Pool = Get-Pool($Algo) 42 | $PoolDual = Get-Pool($AlgoDual) 43 | if ($Pool -and $PoolDual) { 44 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 45 | $benchsecs = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 46 | $fee = if (("autolykos2", "octopus") -contains $_.Algorithm) { 3 } else { 2 } 47 | $pec = if ($extrargs -match "--electricity_cost") { [string]::Empty } else { "--pec 0 " } 48 | 49 | $hosts = [string]::Empty 50 | 51 | $user = $Pool.User 52 | if ($user -notmatch ".$([Config]::WorkerNamePlaceholder)" -and !$user.Replace([Config]::WalletPlaceholder, ([string]::Empty)).Contains(".")) { 53 | $user = "$user.$([Config]::WorkerNamePlaceholder)" 54 | } 55 | $ssl = "0" 56 | if ($Pool.Protocol -match "ssl") { $ssl = "1" } 57 | $Pool.Hosts | ForEach-Object { $hosts = Get-Join " " @($hosts, "-s $_`:$($Pool.Port) -u $user -p $($Pool.Password) --ssl $ssl") } 58 | 59 | $user = $PoolDual.User 60 | if ($user -notmatch ".$([Config]::WorkerNamePlaceholder)" -and !$user.Replace([Config]::WalletPlaceholder, ([string]::Empty)).Contains(".")) { 61 | $user = "$user.$([Config]::WorkerNamePlaceholder)" 62 | } 63 | $ssl = "0" 64 | if ($PoolDual.Protocol -match "ssl") { $ssl = "1" } 65 | $PoolDual.Hosts | ForEach-Object { $hosts = Get-Join " " @($hosts, "--dserver $_`:$($PoolDual.Port) --duser $user --dpass $($PoolDual.Password) --dssl $ssl") } 66 | 67 | [MinerInfo]@{ 68 | Pool = $(Get-FormatDualPool $Pool.PoolName() $PoolDual.PoolName()) 69 | PoolKey = "$($Pool.PoolKey())+$($PoolDual.PoolKey())" 70 | Priority = $Pool.Priority 71 | DualPriority = $PoolDual.Priority 72 | Name = $Name 73 | Algorithm = $Algo 74 | DualAlgorithm = $AlgoDual 75 | Type = [eMinerType]::nVidia 76 | API = "gminer" 77 | URI = "https://github.com/develsoftware/GMinerRelease/releases/download/3.43/gminer_3_43_windows64.zip" 78 | Path = "$Name\miner.exe" 79 | ExtraArgs = $extrargs 80 | Arguments = "-a $($_.Algorithm) --dalgo $($_.DualAlgorithm) $hosts --api 127.0.0.1:$port $pec-w 0 --cuda 1 --opencl 0 $extrargs" 81 | Port = $port 82 | BenchmarkSeconds = $benchsecs 83 | RunBefore = $_.RunBefore 84 | RunAfter = $_.RunAfter 85 | Fee = $fee 86 | } 87 | } 88 | } 89 | } 90 | } -------------------------------------------------------------------------------- /Miners/miniz-amd-2.4d.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2019-2024 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::AMD) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 90 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "equihash125" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "equihash144" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "equihash192" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "etchash" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethash" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethashb3" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "evrprogpow" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "karlsen" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kaspa" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "octopus" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "pyrin" } 29 | )} 30 | 31 | if (!$Cfg.Enabled) { return } 32 | 33 | $port = [Config]::Ports[[int][eMinerType]::AMD] 34 | 35 | $Cfg.Algorithms | ForEach-Object { 36 | if ($_.Enabled) { 37 | $Algo = Get-Algo($_.Algorithm) 38 | if ($Algo) { 39 | # find pool by algorithm 40 | $Pool = Get-Pool($Algo) 41 | if ($Pool) { 42 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 43 | $alg = [string]::Empty 44 | switch ($_.Algorithm) { 45 | "beam" { $alg = "--par=150,5" } 46 | "beamV2" { $alg = "--par=150,5,3" } 47 | "beamV3" { $alg = "--par=beam3" } 48 | "equihash125" { $alg = "--par=125,4" } 49 | "equihash144" { $alg = "--par=144,5" } 50 | "equihash192" { $alg = "--par=192,7" } 51 | "equihash210" { $alg = "--par=210,9" } 52 | "equihash96" { $alg = "--par=96,5" } 53 | "equihashBTG" { $alg = "--par=144,5 --pers=BgoldPoW" } 54 | "grimm" { $alg = "--par=150,5 --pers=GrimmPOW" } 55 | "zhash" { $alg = "--par=144,5" } 56 | default { $alg = "--par=$_" } 57 | } 58 | if (!($extrargs -match "-pers" -or $alg -match "-pers")) { 59 | $alg = Get-Join " " @($alg, "--pers=auto") 60 | } 61 | $user = $Pool.User 62 | if ($user -notmatch ".$([Config]::WorkerNamePlaceholder)" -and !$user.Replace([Config]::WalletPlaceholder, ([string]::Empty)).Contains(".")) { 63 | $user = "$user.$([Config]::WorkerNamePlaceholder)" 64 | } 65 | if ($Pool.Protocol -match "ssl") { $user = "ssl://$user" } 66 | $pools = [string]::Empty 67 | $Pool.Hosts | ForEach-Object { 68 | $pools = Get-Join " " @($pools, "--url=$user@$_`:$($Pool.Port) -p $($Pool.Password)") 69 | } 70 | $fee = 2 71 | if (("etchash", "ethash") -contains $_.Algorithm) { $fee = 0.75 } 72 | elseif (("karlsen", "pyrin") -contains $_.Algorithm) { $fee = 0.8 } 73 | elseif (("ethashb3", "evrprogpow", "kawpow", "progpow") -contains $_.Algorithm) { $fee = 1 } 74 | [MinerInfo]@{ 75 | Pool = $Pool.PoolName() 76 | PoolKey = $Pool.PoolKey() 77 | Priority = $Pool.Priority 78 | Name = $Name 79 | Algorithm = $Algo 80 | Type = [eMinerType]::AMD 81 | API = "miniz" 82 | URI = "https://mindminer.online/miners/miniz-24d.zip" 83 | Path = "$Name\miniz.exe" 84 | ExtraArgs = $extrargs 85 | Arguments = "$alg $pools -a $port --latency --show-shares --amd --stat-int=60 --retrydelay=$($Config.CheckTimeout) $extrargs" 86 | Port = $port 87 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 88 | RunBefore = $_.RunBefore 89 | RunAfter = $_.RunAfter 90 | Fee = $fee 91 | } 92 | } 93 | } 94 | } 95 | } -------------------------------------------------------------------------------- /Miners/nb-amd-42.3.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2019-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::AMD) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ergo" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "etchash" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethash" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kawpow" } 21 | # [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow_sero" } 22 | )} 23 | 24 | if (!$Cfg.Enabled) { return } 25 | 26 | $Cfg.Algorithms | ForEach-Object { 27 | if ($_.Enabled) { 28 | $Algo = Get-Algo($_.Algorithm) 29 | if ($Algo -and $_.Algorithm -notmatch "bfc") { # https://github.com/NebuTech/NBMiner/issues/154 30 | # find pool by algorithm 31 | $Pool = Get-Pool($Algo) 32 | if ($Pool -and ($Pool.Name -notmatch "mrr" -or ($Pool.Name -match "mrr" -and $_.Algorithm -notmatch "cuckarood")) -and 33 | ($Pool.Name -notmatch "mph" -or ($Pool.Name -match "mph" -and $_.Algorithm -notmatch "ethash"))) { 34 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 35 | $fee = 2 36 | switch ($_.Algorithm) { 37 | "etchash" { $fee = 1 } 38 | "ethash" { $fee = 1 } 39 | "tensority" { $fee = 3 } 40 | "octopus" { $fee = 3 } 41 | default {} 42 | } 43 | $stratum = $Pool.Protocol 44 | if ($Pool.Name -match "nicehash" -and ($_.Algorithm -match "etchash" -or $_.Algorithm -match "ethash" -or $_.Algorithm -match "cuck")) { $stratum = "nicehash+tcp" } 45 | elseif ($Pool.Name -match "mph" -and ($_.Algorithm -match "etchash" -or $_.Algorithm -match "ethash")) { $stratum = "ethnh+tcp" } 46 | elseif ($Pool.Name -match "mrr" -and $_.Algorithm -match "cuck") { $stratum = "nicehash+tcp" } 47 | if ($Pool.Protocol -match "ssl") { $stratum = $stratum -replace "tcp", "ssl" } 48 | $pools = [string]::Empty 49 | for ($i = 0; $i -lt $Pool.Hosts.Count -and $i -lt 3; $i++) { 50 | $idx = if ($i -eq 0) { [string]::Empty } else { $i.ToString() } 51 | $pools = Get-Join " " @($pools, "-o$idx $stratum`://$($Pool.Hosts[$i]):$($Pool.Port) -u$idx $($Pool.User) -p$idx $($Pool.Password)") 52 | } 53 | [MinerInfo]@{ 54 | Pool = $Pool.PoolName() 55 | PoolKey = $Pool.PoolKey() 56 | Priority = $Pool.Priority 57 | Name = $Name 58 | Algorithm = $Algo 59 | Type = [eMinerType]::AMD 60 | API = "nbminer" 61 | URI = "https://github.com/NebuTech/NBMiner/releases/download/v42.3/NBMiner_42.3_Win.zip" 62 | Path = "$Name\nbminer.exe" 63 | ExtraArgs = $extrargs 64 | Arguments = "-a $($_.Algorithm) $pools --api 127.0.0.1:4044 --no-health --no-watchdog --log-cycle 60 --platform 2 $extrargs" 65 | Port = 4044 66 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 67 | RunBefore = $_.RunBefore 68 | RunAfter = $_.RunAfter 69 | Fee = $fee 70 | } 71 | } 72 | } 73 | } 74 | } -------------------------------------------------------------------------------- /Miners/nb-nvidia-39.5.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2019-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cuckatoo" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cuckatoo32" } 19 | )} 20 | 21 | if (!$Cfg.Enabled) { return } 22 | 23 | $Cfg.Algorithms | ForEach-Object { 24 | if ($_.Enabled) { 25 | $Algo = Get-Algo($_.Algorithm) 26 | if ($Algo -and $_.Algorithm -notmatch "bfc") { # https://github.com/NebuTech/NBMiner/issues/154 27 | # find pool by algorithm 28 | $Pool = Get-Pool($Algo) 29 | if ($Pool -and ($Pool.Name -notmatch "mrr" -or ($Pool.Name -match "mrr" -and $_.Algorithm -notmatch "cuckarood")) -and 30 | ($Pool.Name -notmatch "mph" -or ($Pool.Name -match "mph" -and $_.Algorithm -notmatch "ethash"))) { 31 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 32 | $fee = 2 33 | switch ($_.Algorithm) { 34 | "etchash" { $fee = 1 } 35 | "ethash" { $fee = 1 } 36 | "tensority" { $fee = 3 } 37 | "octopus" { $fee = 3 } 38 | default {} 39 | } 40 | $stratum = $Pool.Protocol 41 | if ($Pool.Name -match "nicehash" -and ($_.Algorithm -match "etchash" -or $_.Algorithm -match "ethash" -or $_.Algorithm -match "cuck")) { $stratum = "nicehash+tcp" } 42 | elseif ($Pool.Name -match "mph" -and ($_.Algorithm -match "etchash" -or $_.Algorithm -match "ethash")) { $stratum = "ethnh+tcp" } 43 | elseif ($Pool.Name -match "mrr" -and $_.Algorithm -match "cuck") { $stratum = "nicehash+tcp" } 44 | if ($Pool.Protocol -match "ssl") { $stratum = $stratum -replace "tcp", "ssl" } 45 | $pools = [string]::Empty 46 | for ($i = 0; $i -lt $Pool.Hosts.Count -and $i -lt 3; $i++) { 47 | $idx = if ($i -eq 0) { [string]::Empty } else { $i.ToString() } 48 | $pools = Get-Join " " @($pools, "-o$idx $stratum`://$($Pool.Hosts[$i]):$($Pool.Port) -u$idx $($Pool.User) -p$idx $($Pool.Password)") 49 | } 50 | [MinerInfo]@{ 51 | Pool = $Pool.PoolName() 52 | PoolKey = $Pool.PoolKey() 53 | Priority = $Pool.Priority 54 | Name = $Name 55 | Algorithm = $Algo 56 | Type = [eMinerType]::nVidia 57 | API = "nbminer" 58 | URI = "https://github.com/NebuTech/NBMiner/releases/download/v39.5/NBMiner_39.5_Win.zip" 59 | Path = "$Name\nbminer.exe" 60 | ExtraArgs = $extrargs 61 | Arguments = "-a $($_.Algorithm) $pools --api 127.0.0.1:4068 --no-health --no-watchdog --platform 1 $extrargs" 62 | Port = 4068 63 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 64 | RunBefore = $_.RunBefore 65 | RunAfter = $_.RunAfter 66 | Fee = $fee 67 | } 68 | } 69 | } 70 | } 71 | } -------------------------------------------------------------------------------- /Miners/nb-nvidia-42.3.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2019-2021 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = [BaseConfig]::ReadOrCreate([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename), @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "beamv3" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cuckoo_ae" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ergo" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "etchash" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethash" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kawpow" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "octopus" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "tensority" } 25 | )}) 26 | 27 | if (!$Cfg.Enabled) { return } 28 | 29 | $Cfg.Algorithms | ForEach-Object { 30 | if ($_.Enabled) { 31 | $Algo = Get-Algo($_.Algorithm) 32 | if ($Algo -and $_.Algorithm -notmatch "bfc") { # https://github.com/NebuTech/NBMiner/issues/154 33 | # find pool by algorithm 34 | $Pool = Get-Pool($Algo) 35 | if ($Pool -and ($Pool.Name -notmatch "mrr" -or ($Pool.Name -match "mrr" -and $_.Algorithm -notmatch "cuckarood")) -and 36 | ($Pool.Name -notmatch "mph" -or ($Pool.Name -match "mph" -and $_.Algorithm -notmatch "ethash"))) { 37 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 38 | $fee = 2 39 | switch ($_.Algorithm) { 40 | "etchash" { $fee = 1 } 41 | "ethash" { $fee = 1 } 42 | "tensority" { $fee = 3 } 43 | "octopus" { $fee = 3 } 44 | default {} 45 | } 46 | $stratum = $Pool.Protocol 47 | if ($Pool.Name -match "nicehash" -and ($_.Algorithm -match "etchash" -or $_.Algorithm -match "ethash" -or $_.Algorithm -match "cuck")) { $stratum = "nicehash+tcp" } 48 | elseif ($Pool.Name -match "mph" -and ($_.Algorithm -match "etchash" -or $_.Algorithm -match "ethash")) { $stratum = "ethnh+tcp" } 49 | elseif ($Pool.Name -match "mrr" -and $_.Algorithm -match "cuck") { $stratum = "nicehash+tcp" } 50 | if ($Pool.Protocol -match "ssl") { $stratum = $stratum -replace "tcp", "ssl" } 51 | $pools = [string]::Empty 52 | for ($i = 0; $i -lt $Pool.Hosts.Count -and $i -lt 3; $i++) { 53 | $idx = if ($i -eq 0) { [string]::Empty } else { $i.ToString() } 54 | $pools = Get-Join " " @($pools, "-o$idx $stratum`://$($Pool.Hosts[$i]):$($Pool.Port) -u$idx $($Pool.User) -p$idx $($Pool.Password)") 55 | } 56 | [MinerInfo]@{ 57 | Pool = $Pool.PoolName() 58 | PoolKey = $Pool.PoolKey() 59 | Priority = $Pool.Priority 60 | Name = $Name 61 | Algorithm = $Algo 62 | Type = [eMinerType]::nVidia 63 | API = "nbminer" 64 | URI = "https://github.com/NebuTech/NBMiner/releases/download/v42.3/NBMiner_42.3_Win.zip" 65 | Path = "$Name\nbminer.exe" 66 | ExtraArgs = $extrargs 67 | Arguments = "-a $($_.Algorithm) $pools --api 127.0.0.1:4068 --no-watchdog --log-cycle 60 --platform 1 $extrargs" 68 | Port = 4068 69 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 70 | RunBefore = $_.RunBefore 71 | RunAfter = $_.RunAfter 72 | Fee = $fee 73 | } 74 | } 75 | } 76 | } 77 | } -------------------------------------------------------------------------------- /Miners/nv-cd-0.16.0.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | if ([Config]::CudaVersion -lt [version]::new(10, 0)) { return } 10 | 11 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 12 | 13 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 14 | Enabled = $true 15 | BenchmarkSeconds = 90 16 | ExtraArgs = $null 17 | Algorithms = @( 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnfast" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "exosis" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "lbk3" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "polytimos" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "skein" } 23 | )} 24 | 25 | if (!$Cfg.Enabled) { return } 26 | 27 | $Cfg.Algorithms | ForEach-Object { 28 | if ($_.Enabled) { 29 | $Algo = Get-Algo($_.Algorithm) 30 | if ($Algo) { 31 | # find pool by algorithm 32 | $Pool = Get-Pool($Algo) 33 | if ($Pool) { 34 | $N = Get-CCMinerStatsAvg $Algo $_ 35 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 36 | [MinerInfo]@{ 37 | Pool = $Pool.PoolName() 38 | PoolKey = $Pool.PoolKey() 39 | Priority = $Pool.Priority 40 | Name = $Name 41 | Algorithm = $Algo 42 | Type = [eMinerType]::nVidia 43 | API = "ccminer" 44 | URI = "https://mindminer.online/miners/nVidia/cryptodredge-0.16.0-10.0.zip" 45 | Path = "$Name\cryptodredge.exe" 46 | ExtraArgs = $extrargs 47 | Arguments = "-a $($_.Algorithm) -o stratum+tcp://$($Pool.Hosts[0]):$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password) -R $($Config.CheckTimeout) -b 127.0.0.1:4068 --api-type ccminer-tcp --no-watchdog $N $extrargs" 48 | Port = 4068 49 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 50 | RunBefore = $_.RunBefore 51 | RunAfter = $_.RunAfter 52 | Fee = 1 53 | } 54 | } 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /Miners/nv-cd-0.18.0.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | if ([Config]::CudaVersion -lt [version]::new(10, 0)) { return } 10 | 11 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 12 | 13 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 14 | Enabled = $true 15 | BenchmarkSeconds = 90 16 | ExtraArgs = $null 17 | Algorithms = @( 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "hmq1725" } 19 | )} 20 | 21 | if (!$Cfg.Enabled) { return } 22 | 23 | $Cfg.Algorithms | ForEach-Object { 24 | if ($_.Enabled) { 25 | $Algo = Get-Algo($_.Algorithm) 26 | if ($Algo) { 27 | # find pool by algorithm 28 | $Pool = Get-Pool($Algo) 29 | if ($Pool) { 30 | $N = Get-CCMinerStatsAvg $Algo $_ 31 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 32 | [MinerInfo]@{ 33 | Pool = $Pool.PoolName() 34 | PoolKey = $Pool.PoolKey() 35 | Priority = $Pool.Priority 36 | Name = $Name 37 | Algorithm = $Algo 38 | Type = [eMinerType]::nVidia 39 | API = "ccminer" 40 | URI = "https://mindminer.online/miners/nVidia/cryptodredge-0.18.0-10.0.zip" 41 | Path = "$Name\cryptodredge.exe" 42 | ExtraArgs = $extrargs 43 | Arguments = "-a $($_.Algorithm) -o stratum+tcp://$($Pool.Hosts[0]):$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password) -R $($Config.CheckTimeout) -b 127.0.0.1:4068 --api-type ccminer-tcp --no-watchdog $N $extrargs" 44 | Port = 4068 45 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 46 | RunBefore = $_.RunBefore 47 | RunAfter = $_.RunAfter 48 | Fee = 1 49 | } 50 | } 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /Miners/nv-cd-0.26.0.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | if ([Config]::CudaVersion -lt [version]::new(11, 2)) { return } 10 | 11 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 12 | 13 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 14 | Enabled = $true 15 | BenchmarkSeconds = 180 16 | ExtraArgs = $null 17 | Algorithms = @( 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2d-dyn" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2d-nim" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2d250" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2d4096" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2d4096"; ExtraArgs = "-i 7" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2d4096"; ExtraArgs = "-i 8" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "chukwa" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "chukwa2" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnconceal" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnfast2" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cngpu" } 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnhaven" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnheavy" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cntlo" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnturtle" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnupx2" } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnzls" } 35 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kawpow" } 36 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "mtp" } # unstable 37 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "mtp-tcr" } 38 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ninja" } 39 | )} 40 | 41 | if (!$Cfg.Enabled) { return } 42 | 43 | $Cfg.Algorithms | ForEach-Object { 44 | if ($_.Enabled) { 45 | $Algo = Get-Algo($_.Algorithm) 46 | if ($Algo) { 47 | # find pool by algorithm 48 | $Pool = Get-Pool($Algo) 49 | if ($Pool) { 50 | $N = Get-CCMinerStatsAvg $Algo $_ 51 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 52 | 53 | [MinerInfo]@{ 54 | Pool = $Pool.PoolName() 55 | PoolKey = $Pool.PoolKey() 56 | Priority = $Pool.Priority 57 | Name = $Name 58 | Algorithm = $Algo 59 | Type = [eMinerType]::nVidia 60 | API = "ccminer" 61 | URI = "https://mindminer.online/miners/nVidia/cryptodredge-0.26.0-11.2.zip" 62 | Path = "$Name\cryptodredge.exe" 63 | ExtraArgs = $extrargs 64 | Arguments = "-a $($_.Algorithm) -o $($Pool.Protocol)://$($Pool.Hosts[0]):$($Pool.Port) -u $($Pool.User) -p $($Pool.Password) -R $($Config.CheckTimeout) -b 127.0.0.1:4068 --api-type ccminer-tcp --no-watchdog $N $extrargs" 65 | Port = 4068 66 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 67 | RunBefore = $_.RunBefore 68 | RunAfter = $_.RunAfter 69 | Fee = if ($_.Algorithm -match "mtp") { 2 } else { 1 } 70 | } 71 | } 72 | } 73 | } 74 | } -------------------------------------------------------------------------------- /Miners/nv-cd-0.27.0.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | if ([Config]::CudaVersion -lt [version]::new(11, 4)) { return } 10 | 11 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 12 | 13 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 14 | Enabled = $true 15 | BenchmarkSeconds = 180 16 | ExtraArgs = $null 17 | Algorithms = @( 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2d-dyn" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2d-nim" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2d4096" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2d4096"; ExtraArgs = "-i 7" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2d4096"; ExtraArgs = "-i 8" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "chukwa" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "chukwa2" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnconceal" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cngpu" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnhaven" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnheavy" } 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnturtle" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cnupx2" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethash" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "firopow" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kawpow" } 34 | )} 35 | 36 | if (!$Cfg.Enabled) { return } 37 | 38 | $Cfg.Algorithms | ForEach-Object { 39 | if ($_.Enabled) { 40 | $Algo = Get-Algo($_.Algorithm) 41 | if ($Algo) { 42 | # find pool by algorithm 43 | $Pool = Get-Pool($Algo) 44 | if ($Pool) { 45 | $N = Get-CCMinerStatsAvg $Algo $_ 46 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 47 | 48 | [MinerInfo]@{ 49 | Pool = $Pool.PoolName() 50 | PoolKey = $Pool.PoolKey() 51 | Priority = $Pool.Priority 52 | Name = $Name 53 | Algorithm = $Algo 54 | Type = [eMinerType]::nVidia 55 | API = "ccminer" 56 | URI = "https://github.com/CryptoDredge/miner/releases/download/v0.27.0/CryptoDredge_0.27.0_cuda_11.4_windows.zip" 57 | Path = "$Name\cryptodredge.exe" 58 | ExtraArgs = $extrargs 59 | Arguments = "-a $($_.Algorithm) -o $($Pool.Protocol)://$($Pool.Hosts[0]):$($Pool.Port) -u $($Pool.User) -p $($Pool.Password) -R $($Config.CheckTimeout) -b 127.0.0.1:4068 --api-type ccminer-tcp --no-watchdog $N $extrargs" 60 | Port = 4068 61 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 62 | RunBefore = $_.RunBefore 63 | RunAfter = $_.RunAfter 64 | Fee = 1 65 | } 66 | } 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /Miners/nv-krnlx-01.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | . .\Code\Include.ps1 8 | 9 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 10 | 11 | $Cfg = [BaseConfig]::ReadOrCreate([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename), @{ 12 | Enabled = $true 13 | BenchmarkSeconds = 90 14 | ExtraArgs = $null 15 | Algorithms = @( 16 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "xevan" } 17 | )}) 18 | 19 | if (!$Cfg.Enabled) { return } 20 | 21 | if ([Config]::Is64Bit -eq $true) { 22 | $url = "https://github.com/krnlx/ccminer-xevan/releases/download/0.1/ccminer.exe" 23 | $file = "ccminer.exe" 24 | } 25 | else { 26 | $url = "https://github.com/krnlx/ccminer-xevan/releases/download/0.1/ccminer_x86.exe" 27 | $file = "ccminer_x86.exe" 28 | } 29 | 30 | $Cfg.Algorithms | ForEach-Object { 31 | if ($_.Enabled) { 32 | $Algo = Get-Algo($_.Algorithm) 33 | if ($Algo) { 34 | # find pool by algorithm 35 | $Pool = Get-Pool($Algo) 36 | if ($Pool) { 37 | $N = Get-CCMinerStatsAvg $Algo $_ 38 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 39 | [MinerInfo]@{ 40 | Pool = $Pool.PoolName() 41 | PoolKey = $Pool.PoolKey() 42 | Priority = $Pool.Priority 43 | Name = $Name 44 | Algorithm = $Algo 45 | Type = [eMinerType]::nVidia 46 | API = "ccminer" 47 | URI = $url 48 | Path = "$Name\$file" 49 | ExtraArgs = $extrargs 50 | Arguments = "-a $($_.Algorithm) -o stratum+tcp://$($Pool.Hosts[0]):$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password) -R $($Config.CheckTimeout) $N $extrargs" 51 | Port = 4068 52 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 53 | RunBefore = $_.RunBefore 54 | RunAfter = $_.RunAfter 55 | } 56 | } 57 | } 58 | } 59 | } -------------------------------------------------------------------------------- /Miners/nv-onezero-1.3.0.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 240 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "dynex" } 18 | )} 19 | 20 | if (!$Cfg.Enabled) { return } 21 | 22 | $port = [Config]::Ports[[int][eMinerType]::nVidia] 23 | 24 | $Cfg.Algorithms | ForEach-Object { 25 | if ($_.Enabled) { 26 | $Algo = Get-Algo($_.Algorithm) 27 | if ($Algo) { 28 | # find pool by algorithm 29 | $Pool = Get-Pool($Algo) 30 | if ($Pool) { 31 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 32 | $fee = 3 33 | $mallob = [string]::Empty 34 | if ($_.Algorithm -match "dynex") { 35 | $mallob = "--mallob-endpoint mallob-ml.eu.neuropool.net,pool.deepminerz.com:9001"; 36 | } 37 | $proto = [string]::Empty 38 | if ($Pool.Protocol -match "ssl") { $proto = "ssl://" } 39 | $hosts = [string]::Empty 40 | $Pool.Hosts | ForEach-Object { $hosts = Get-Join "," @($hosts, "$proto$_`:$($Pool.Port)") } 41 | [MinerInfo]@{ 42 | Pool = $Pool.PoolName() 43 | PoolKey = $Pool.PoolKey() 44 | Priority = $Pool.Priority 45 | Name = $Name 46 | Algorithm = $Algo 47 | Type = [eMinerType]::nVidia 48 | API = "onezero" 49 | URI = "https://github.com/OneZeroMiner/onezerominer/releases/download/v1.3.0/onezerominer-win64-1.3.0.zip" 50 | Path = "$Name\onezerominer.exe" 51 | ExtraArgs = $extrargs 52 | Arguments = "-a $($_.Algorithm) -o $hosts -w $($Pool.User) -p $($Pool.Password) --no-cert-validation $mallob --api-host 127.0.0.1 --api-port $port $extrargs" 53 | Port = $port 54 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 55 | RunBefore = $_.RunBefore 56 | RunAfter = $_.RunAfter 57 | Fee = $fee 58 | } 59 | } 60 | } 61 | } 62 | } -------------------------------------------------------------------------------- /Miners/nv-radiant-0.1.1.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2019-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rad" } 18 | )} 19 | 20 | if (!$Cfg.Enabled) { return } 21 | if ([Config]::CudaVersion -lt [version]::new(11, 2)) { return } 22 | 23 | $Cfg.Algorithms | ForEach-Object { 24 | if ($_.Enabled) { 25 | $Algo = Get-Algo($_.Algorithm) 26 | if ($Algo) { 27 | # find pool by algorithm 28 | $Pool = Get-Pool($Algo) 29 | if ($Pool) { 30 | $N = Get-CCMinerStatsAvg $Algo $_ 31 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 32 | [MinerInfo]@{ 33 | Pool = $Pool.PoolName() 34 | PoolKey = $Pool.PoolKey() 35 | Priority = $Pool.Priority 36 | Name = $Name 37 | Algorithm = $Algo 38 | Type = [eMinerType]::nVidia 39 | API = "ccminer" 40 | URI = "https://github.com/xiaolin1579/radiator/releases/download/v1.0.0/Radiator1.0.0_cuda11.2_Win64.zip" 41 | Path = "$Name\ccminer.exe" 42 | ExtraArgs = $extrargs 43 | Arguments = "-a $($_.Algorithm) -o stratum+tcp://$($Pool.Hosts[0]):$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password) -R $($Config.CheckTimeout) -q -b 4068 $N $extrargs" 44 | Port = 4068 45 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 46 | RunBefore = $_.RunBefore 47 | RunAfter = $_.RunAfter 48 | } 49 | } 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /Miners/nv-rigel-1.17.4.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2024 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | if ([Config]::CudaVersion -lt [version]::new(8, 0)) { return } 10 | 11 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 12 | 13 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 14 | Enabled = $true 15 | BenchmarkSeconds = 120 16 | ExtraArgs = $null 17 | Algorithms = @( 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "abelian" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "alephium" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "autolykos2" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "etchash" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethash" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethashb3" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "fishhash" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ironfish" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "karlsenhash" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kawpow" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "nexapow" } 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "octopus" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "pyrinhash" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sha256ton" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sha512256d" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "xelishash" } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "zil" } 35 | )} 36 | 37 | if (!$Cfg.Enabled) { return } 38 | 39 | $port = [Config]::Ports[[int][eMinerType]::nVidia] 40 | $nocolor = if ([Environment]::OSVersion.Version.Major -le 6) { "--no-tui " } else { [string]::Empty } 41 | 42 | $Cfg.Algorithms | ForEach-Object { 43 | if ($_.Enabled) { 44 | $Algo = Get-Algo($_.Algorithm) 45 | if ($Algo) { 46 | # find pool by algorithm 47 | $Pool = Get-Pool($Algo) 48 | if ($Pool) { 49 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 50 | 51 | $fee = 1 52 | if ($_.Algorithm -match "zil") { $fee = 0 } 53 | elseif (("alephium", "etchash", "ethash", "ironfish") -contains $_.Algorithm) { $fee = 0.7 } 54 | elseif (("nexapow", "octopus") -contains $_.Algorithm) { $fee = 2 } 55 | 56 | $hosts = [string]::Empty 57 | $Pool.Hosts | ForEach-Object { 58 | $hosts = Get-Join " " @($hosts, "-o $($Pool.Protocol)://$_`:$($Pool.Port)") 59 | } 60 | 61 | [MinerInfo]@{ 62 | Pool = $Pool.PoolName() 63 | PoolKey = $Pool.PoolKey() 64 | Priority = $Pool.Priority 65 | Name = $Name 66 | Algorithm = $Algo 67 | Type = [eMinerType]::nVidia 68 | API = "rigel" 69 | URI = "https://github.com/rigelminer/rigel/releases/download/1.17.4/rigel-1.17.4-win.zip" 70 | Path = "$Name\rigel.exe" 71 | ExtraArgs = $extrargs 72 | Arguments = "-a $($_.Algorithm) $hosts -u $($Pool.User) -p $($Pool.Password) -w $([Config]::WorkerNamePlaceholder) --api-bind 127.0.0.1:$port --dns-over-https --no-strict-ssl --no-watchdog --stats-interval 60 --dag-reset-mclock off $nocolor$extrargs" 73 | Port = $port 74 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 75 | RunBefore = $_.RunBefore 76 | RunAfter = $_.RunAfter 77 | Fee = $fee 78 | } 79 | } 80 | } 81 | } 82 | } -------------------------------------------------------------------------------- /Miners/nv-trex-0.26.8.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | if ([Config]::CudaVersion -lt [version]::new(9, 2)) { return } 10 | 11 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 12 | 13 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 14 | Enabled = $true 15 | BenchmarkSeconds = 90 16 | ExtraArgs = $null 17 | Algorithms = @( 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "autolykos2" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "blake3" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "etchash" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethash"; BenchmarkSeconds = 120 } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "firopow"; BenchmarkSeconds = 120 } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kawpow"; BenchmarkSeconds = 120 } 24 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "kawpow"; BenchmarkSeconds = 120; ExtraArgs = "--low-load 1" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "mtp" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "mtp-tcr" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "multi" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "octopus" } 29 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "progpow" } # isnt progpow bci 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow-veil" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow-veriblock" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpowz" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "tensority" } 34 | )} 35 | 36 | if (!$Cfg.Enabled) { return } 37 | 38 | $Cfg.Algorithms | ForEach-Object { 39 | if ($_.Enabled) { 40 | $Algo = Get-Algo($_.Algorithm) 41 | if ($Algo) { 42 | # find pool by algorithm 43 | $Pool = Get-Pool($Algo) 44 | if ($Pool) { 45 | $fee = 1 46 | if ($_.Algorithm -eq "veil") { $_.Algorithm = "x16rt" } 47 | elseif ($_.Algorithm -match "tensority") { $fee = 3 } 48 | elseif ($_.Algorithm -match "autolykos2") { $fee = 2 } 49 | $BenchSecs = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 50 | $N = "-N $([Convert]::ToInt32($BenchSecs))" 51 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 52 | $hosts = [string]::Empty 53 | $stratum = "stratum" 54 | if ($_.Algorithm -match "ethash") { 55 | if ($Pool.Name -match "nicehash") { $stratum = "nicehash" } 56 | elseif ($Pool.Name -match "mph") { $stratum = "stratum2" } 57 | } 58 | if ($Pool.Protocol -match "ssl") { $stratum += "+ssl" } else { $stratum += "+tcp" } 59 | $Pool.Hosts | ForEach-Object { 60 | $hosts = Get-Join " " @($hosts, "-o $stratum`://$_`:$($Pool.Port) -u $($Pool.User) -p $($Pool.Password)") 61 | } 62 | $hosts += " -w $([Config]::WorkerNamePlaceholder)" 63 | if ($_.Algorithm -match "octopus") { $fee = 2 } 64 | [MinerInfo]@{ 65 | Pool = $Pool.PoolName() 66 | PoolKey = $Pool.PoolKey() 67 | Priority = $Pool.Priority 68 | Name = $Name 69 | Algorithm = $Algo 70 | Type = [eMinerType]::nVidia 71 | API = "trex" 72 | URI = "https://trex-miner.com/download/t-rex-0.26.8-win.zip" 73 | Path = "$Name\t-rex.exe" 74 | ExtraArgs = $extrargs 75 | Arguments = "-a $($_.Algorithm) $hosts -R $($Config.CheckTimeout) --api-bind-http 127.0.0.1:4068 --api-read-only --no-strict-ssl --no-watchdog --gpu-report-interval 60 $N $extrargs" 76 | Port = 4068 77 | BenchmarkSeconds = $BenchSecs 78 | RunBefore = $_.RunBefore 79 | RunAfter = $_.RunAfter 80 | Fee = $fee 81 | } 82 | } 83 | } 84 | } 85 | } -------------------------------------------------------------------------------- /Miners/nv-verus-3.8.3.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Algs = @() 13 | if ([Config]::nVidiaDevices -gt 0) { 14 | $devs = @() 15 | for ($i = 0; $i -lt [Config]::nVidiaDevices; $i++) { 16 | $devs += $i.ToString() 17 | } 18 | $devstring = "-d " + (Get-Join "," $devs) 19 | $Algs += [AlgoInfoEx]@{ Enabled = $true; Algorithm = "verus"; ExtraArgs = "$devstring" } 20 | $Algs += [AlgoInfoEx]@{ Enabled = $true; Algorithm = "verus"; ExtraArgs = "-i 22 $devstring" } 21 | } 22 | else { 23 | $Algs = @( 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "verus" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "verus"; ExtraArgs = "-i 22" } 26 | ) 27 | } 28 | 29 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 30 | Enabled = $true 31 | BenchmarkSeconds = 120 32 | ExtraArgs = $null 33 | Algorithms = $Algs 34 | } 35 | 36 | if (!$Cfg.Enabled) { return } 37 | 38 | $Cfg.Algorithms | ForEach-Object { 39 | if ($_.Enabled) { 40 | $Algo = Get-Algo($_.Algorithm) 41 | if ($Algo) { 42 | # find pool by algorithm 43 | $Pool = Get-Pool($Algo) 44 | if ($Pool) { 45 | $N = Get-CCMinerStatsAvg $Algo $_ 46 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 47 | [MinerInfo]@{ 48 | Pool = $Pool.PoolName() 49 | PoolKey = $Pool.PoolKey() 50 | Priority = $Pool.Priority 51 | Name = $Name 52 | Algorithm = $Algo 53 | Type = [eMinerType]::nVidia 54 | API = "ccminer_woe" 55 | URI = "https://github.com/monkins1010/ccminer/releases/download/v3.8.3/ccminer_GPU_3_8_3.zip" 56 | Path = "$Name\ccminer.exe" 57 | Pass = "12345678" 58 | ExtraArgs = $extrargs 59 | Arguments = "-a $($_.Algorithm) -o stratum+tcp://$($Pool.Hosts[0]):$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password) -R $($Config.CheckTimeout) -q $N $extrargs" 60 | Port = 4068 61 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 62 | RunBefore = $_.RunBefore 63 | RunAfter = $_.RunAfter 64 | # fix real speed lower than reported (6.35 => 5.75) 65 | Fee = 10 66 | } 67 | } 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /Miners/nv-xaya-0.1.f1.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2021 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "neoscrypt-xaya" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "neoscrypt-xaya"; ExtraArgs = "-i 19" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "neoscrypt-xaya"; ExtraArgs = "-i 20" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "neoscrypt-xaya"; ExtraArgs = "-i 21" } 21 | )} 22 | 23 | if (!$Cfg.Enabled) { return } 24 | if ([Config]::CudaVersion -lt [version]::new(10, 0)) { return } 25 | 26 | $Cfg.Algorithms | ForEach-Object { 27 | if ($_.Enabled) { 28 | $Algo = Get-Algo($_.Algorithm) 29 | if ($Algo) { 30 | # find pool by algorithm 31 | $Pool = Get-Pool($Algo) 32 | if ($Pool) { 33 | $N = Get-CCMinerStatsAvg $Algo $_ 34 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 35 | [MinerInfo]@{ 36 | Pool = $Pool.PoolName() 37 | PoolKey = $Pool.PoolKey() 38 | Priority = $Pool.Priority 39 | Name = $Name 40 | Algorithm = $Algo 41 | Type = [eMinerType]::nVidia 42 | API = "ccminer" 43 | URI = "https://github.com/xaya/ccminer/releases/download/v0.1/ccminer-64bit.exe" 44 | Path = "$Name\ccminer-64bit.exe" 45 | ExtraArgs = $extrargs 46 | Arguments = "-a $($_.Algorithm) -o stratum+tcp://$($Pool.Hosts[0]):$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password) -R $($Config.CheckTimeout) -q -b 4068 $N $extrargs" 47 | Port = 4068 48 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 49 | RunBefore = $_.RunBefore 50 | RunAfter = $_.RunAfter 51 | } 52 | } 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /Miners/srbm-cpu-0.8.8.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2019-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::CPU) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $extraThreads = $null 13 | $extraCores = $null 14 | if ([Config]::DefaultCPU) { 15 | $extraThreads = "--cpu-threads $([Config]::DefaultCPU.Threads)" 16 | $extraCores = "--cpu-threads $([Config]::DefaultCPU.Cores)" 17 | } 18 | <# else { 19 | $extraThreads = "--cpu-threads $(($Devices[[eMinerType]::CPU]| Measure-Object Threads -Sum).Sum)" 20 | $extraCores = "--cpu-threads $(($Devices[[eMinerType]::CPU]| Measure-Object Cores -Sum).Sum)" 21 | }#> 22 | 23 | $hasGPU = [Config]::ActiveTypes -contains [eMinerType]::AMD -or [Config]::ActiveTypes -contains [eMinerType]::nVidia 24 | 25 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 26 | Enabled = $true 27 | BenchmarkSeconds = 120 28 | ExtraArgs = $null 29 | Algorithms = @( 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "astrobwt" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ghostrider"; ExtraArgs = $extraThreads } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx2"; ExtraArgs = $extraThreads } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "scryptn2"; ExtraArgs = $extraThreads } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "verushash"; ExtraArgs = $extraThreads } 35 | )} 36 | 37 | if (!$Cfg.Enabled) { return } 38 | 39 | $Cfg.Algorithms | ForEach-Object { 40 | if ($_.Enabled) { 41 | $Algo = Get-Algo($_.Algorithm) 42 | if ($Algo) { 43 | # find pool by algorithm 44 | $Pool = Get-Pool($Algo) 45 | if ($Pool) { 46 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 47 | $nicehash = "--nicehash false" 48 | if ($Pool.Name -match "nicehash") { 49 | $nicehash = "--nicehash true" 50 | } 51 | $tls = "false" 52 | if ($Pool.Protocol -match "ssl") { $tls = "true" } 53 | $pools = [string]::Empty 54 | $Pool.Hosts | ForEach-Object { 55 | $pools = Get-Join "!" @($pools, "$_`:$($Pool.Port)") 56 | } 57 | $fee = 0.85 58 | if (("autolykos2", "cosa") -contains $_.Algorithm) { $fee = 2 } 59 | elseif (("dynamo") -contains $_.Algorithm) { $fee = 3 } 60 | elseif (("ethash", "etchash", "ubqhash") -contains $_.Algorithm) { $fee = 0.65 } 61 | elseif (("rx2", "heavyhash", "verthash") -contains $_.Algorithm) { $fee = 1 } 62 | elseif (("bl2bsha3", "eaglesong", "k12", "kadena", "m7mv2", "minotaur", "randomxl", "randomwow", "yespoweric", "yespoweritc", "yespowerlitb", "yespowerres", "yespowerurx", "cryptonight_cache", "cryptonight_catalans", "cryptonight_heavyx", "cryptonight_talleo", "keccak") -contains $_.Algorithm) { $fee = 0 } 63 | [MinerInfo]@{ 64 | Pool = $Pool.PoolName() 65 | PoolKey = $Pool.PoolKey() 66 | Priority = $Pool.Priority 67 | Name = $Name 68 | Algorithm = $Algo 69 | Type = [eMinerType]::CPU 70 | API = "srbm2" 71 | URI = "https://github.com/doktor83/SRBMiner-Multi/releases/download/0.8.8/SRBMiner-Multi-0-8-8-win64.zip" 72 | Path = "$Name\SRBMiner-MULTI.exe" 73 | ExtraArgs = $extrargs 74 | Arguments = "--algorithm $($_.Algorithm) --pool $pools --wallet $($Pool.User) --password $($Pool.Password) --tls $tls --api-enable --api-port 4045 --miner-priority 1 --disable-gpu --disable-worker-watchdog --retry-time $($Config.CheckTimeout) $nicehash $extrargs" 75 | Port = 4045 76 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 77 | RunBefore = $_.RunBefore 78 | RunAfter = $_.RunAfter 79 | Fee = $fee 80 | } 81 | } 82 | } 83 | } 84 | } -------------------------------------------------------------------------------- /Miners/srbm-cpu-2.4.4.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2019-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::CPU) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $extraThreads = $null 13 | $extraCores = $null 14 | if ([Config]::DefaultCPU) { 15 | $extraThreads = "--cpu-threads $([Config]::DefaultCPU.Threads)" 16 | $extraCores = "--cpu-threads $([Config]::DefaultCPU.Cores)" 17 | } 18 | <# else { 19 | $extraThreads = "--cpu-threads $(($Devices[[eMinerType]::CPU]| Measure-Object Threads -Sum).Sum)" 20 | $extraCores = "--cpu-threads $(($Devices[[eMinerType]::CPU]| Measure-Object Cores -Sum).Sum)" 21 | }#> 22 | 23 | $hasGPU = [Config]::ActiveTypes -contains [eMinerType]::AMD -or [Config]::ActiveTypes -contains [eMinerType]::nVidia 24 | 25 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 26 | Enabled = $true 27 | BenchmarkSeconds = 120 28 | ExtraArgs = $null 29 | Algorithms = @( 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cryptonight_ccx" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cryptonight_talleo" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "dynamo"; ExtraArgs = $extraThreads } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "minotaur" } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "randomhash2" } 35 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "scryptn2"; ExtraArgs = $extraThreads } 36 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "yespowerarwn"; ExtraArgs = $extraThreads } 37 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "yespoweriots" } 38 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "yespoweritc" } 39 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "yespowerlitb"; ExtraArgs = $extraThreads } 40 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "yespowerres" } 41 | )} 42 | 43 | if (!$Cfg.Enabled) { return } 44 | 45 | $port = [Config]::Ports[[int][eMinerType]::CPU] 46 | 47 | $Cfg.Algorithms | ForEach-Object { 48 | if ($_.Enabled) { 49 | $Algo = Get-Algo($_.Algorithm) 50 | if ($Algo) { 51 | # find pool by algorithm 52 | $Pool = Get-Pool($Algo) 53 | if ($Pool) { 54 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 55 | $nicehash = "--nicehash false" 56 | if ($Pool.Name -match "nicehash") { 57 | $nicehash = "--nicehash true" 58 | } 59 | $tls = "false" 60 | if ($Pool.Protocol -match "ssl") { $tls = "true" } 61 | $pools = [string]::Empty 62 | $Pool.Hosts | ForEach-Object { 63 | $pools = Get-Join "!" @($pools, "$_`:$($Pool.Port)") 64 | } 65 | $fee = 0.85 66 | if (("aurum", "cosa", "memehash", "memehash_apepepow") -contains $_.Algorithm) { $fee = 2 } 67 | elseif (("ethash", "etchash", "ubqhash") -contains $_.Algorithm) { $fee = 0.65 } 68 | elseif (("autolykos2", "dynamo", "verthash", "pufferfish2bmb") -contains $_.Algorithm) { $fee = 1 } 69 | elseif (("yespowerlitb", "yespowerurx", "blake2b", "blake2s", "cryptonight_talleo", "k12", "keccak") -contains $_.Algorithm) { $fee = 0 } 70 | [MinerInfo]@{ 71 | Pool = $Pool.PoolName() 72 | PoolKey = $Pool.PoolKey() 73 | Priority = $Pool.Priority 74 | Name = $Name 75 | Algorithm = $Algo 76 | Type = [eMinerType]::CPU 77 | API = "srbm2" 78 | URI = "https://github.com/doktor83/SRBMiner-Multi/releases/download/2.4.4/SRBMiner-Multi-2-4-4-win64.zip" 79 | Path = "$Name\SRBMiner-MULTI.exe" 80 | ExtraArgs = $extrargs 81 | Arguments = "--algorithm $($_.Algorithm) --pool $pools --wallet $($Pool.User) --password $($Pool.Password) --tls $tls --api-enable --api-port $port --miner-priority 1 --disable-gpu --disable-worker-watchdog --retry-time $($Config.CheckTimeout) $nicehash $extrargs" 82 | Port = $port 83 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 84 | RunBefore = $_.RunBefore 85 | RunAfter = $_.RunAfter 86 | Fee = $fee 87 | } 88 | } 89 | } 90 | } 91 | } -------------------------------------------------------------------------------- /Miners/srbm-intel-2.4.9.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2019-2024 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::Intel) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "aurum" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "autolykos2" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "blake3_alephium" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "blake3_decred" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "blake3_ironfish" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "etchash" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethash" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethashb3" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "evrprogpow" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "firopow" } 27 | [AlgoInfoEx]@{ Enabled = $([Config]::ActiveTypes -notcontains [eMinerType]::CPU); Algorithm = "heavyhash" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "karlsenhash" } 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kawpow" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "memehash" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "meowpow" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow_epic" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow_sero" } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow_veil" } 35 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow_veriblock" } 36 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow_zano" } 37 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "pyrinhash" } 38 | [AlgoInfoEx]@{ Enabled = $([Config]::ActiveTypes -notcontains [eMinerType]::CPU); Algorithm = "sha256dt" } 39 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sha3d" } 40 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sha512_256d_radiant" } 41 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ubqhash" } 42 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "verushash" } 43 | )} 44 | 45 | if (!$Cfg.Enabled) { return } 46 | 47 | $port = [Config]::Ports[[int][eMinerType]::Intel] 48 | 49 | $Cfg.Algorithms | ForEach-Object { 50 | if ($_.Enabled) { 51 | $Algo = Get-Algo($_.Algorithm) 52 | if ($Algo) { 53 | # find pool by algorithm 54 | $Pool = Get-Pool($Algo) 55 | if ($Pool -and !($Pool.Name -match "mph" -and ("ethash", "etchash") -contains $_.Algorithm)) { 56 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 57 | $nicehash = "--nicehash false" 58 | if ($Pool.Name -match "nicehash") { 59 | $nicehash = "--nicehash true" 60 | } 61 | $tls = "false" 62 | if ($Pool.Protocol -match "ssl") { $tls = "true" } 63 | $pools = [string]::Empty 64 | $Pool.Hosts | ForEach-Object { 65 | $pools = Get-Join "!" @($pools, "$_`:$($Pool.Port)") 66 | } 67 | $fee = 0.85 68 | if (("cosa") -contains $_.Algorithm) { $fee = 2 } 69 | elseif (("argon2d_16000") -contains $_.Algorithm) { $fee = 76 } 70 | elseif (("ethash", "etchash", "ubqhash") -contains $_.Algorithm) { $fee = 0.65 } 71 | elseif (("autolykos2", "dynamo", "verthash", "pufferfish2bmb") -contains $_.Algorithm) { $fee = 1 } 72 | elseif (("yespowerlitb", "yespowerurx", "blake2b", "blake2s", "cryptonight_talleo", "k12", "keccak") -contains $_.Algorithm) { $fee = 0 } 73 | [MinerInfo]@{ 74 | Pool = $Pool.PoolName() 75 | PoolKey = $Pool.PoolKey() 76 | Priority = $Pool.Priority 77 | Name = $Name 78 | Algorithm = $Algo 79 | Type = [eMinerType]::Intel 80 | API = "srbm2" 81 | URI = "https://github.com/doktor83/SRBMiner-Multi/releases/download/2.4.9/SRBMiner-Multi-2-4-9-win64.zip" 82 | Path = "$Name\SRBMiner-MULTI.exe" 83 | ExtraArgs = $extrargs 84 | Arguments = "--algorithm $($_.Algorithm) --pool $pools --wallet $($Pool.User) --password $($Pool.Password) --tls $tls --api-enable --api-port $port --disable-cpu --disable-gpu-amd --disable-gpu-nvidia --disable-worker-watchdog --retry-time $($Config.CheckTimeout) $nicehash $extrargs" 85 | Port = $port 86 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 87 | RunBefore = $_.RunBefore 88 | RunAfter = $_.RunAfter 89 | Fee = $fee 90 | } 91 | } 92 | } 93 | } 94 | } -------------------------------------------------------------------------------- /Miners/srbm-nv-2.4.9.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2019-2024 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "aurum" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "autolykos2" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "blake3_alephium" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "blake3_decred" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "blake3_ironfish" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cryptonight_gpu" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cryptonight_xhv" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "etchash" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethash" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ethashb3" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "evrprogpow" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "firopow" } 29 | [AlgoInfoEx]@{ Enabled = $([Config]::ActiveTypes -notcontains [eMinerType]::CPU); Algorithm = "heavyhash" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "karlsenhash" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kawpow" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "lyra2v2_webchain" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "memehash" } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "meowpow" } 35 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow_epic" } 36 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow_sero" } 37 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow_veil" } 38 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow_veriblock" } 39 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow_zano" } 40 | [AlgoInfoEx]@{ Enabled = $([Config]::ActiveTypes -notcontains [eMinerType]::CPU); Algorithm = "sha256dt" } 41 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sha3d" } 42 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sha512_256d_radiant" } 43 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ubqhash" } 44 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "verushash" } 45 | )} 46 | 47 | if (!$Cfg.Enabled) { return } 48 | 49 | $port = [Config]::Ports[[int][eMinerType]::nVidia] 50 | 51 | $Cfg.Algorithms | ForEach-Object { 52 | if ($_.Enabled) { 53 | $Algo = Get-Algo($_.Algorithm) 54 | if ($Algo) { 55 | # find pool by algorithm 56 | $Pool = Get-Pool($Algo) 57 | if ($Pool -and !($Pool.Name -match "mph" -and ("ethash", "etchash") -contains $_.Algorithm)) { 58 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 59 | $nicehash = "--nicehash false" 60 | if ($Pool.Name -match "nicehash") { 61 | $nicehash = "--nicehash true" 62 | } 63 | $tls = "false" 64 | if ($Pool.Protocol -match "ssl") { $tls = "true" } 65 | $pools = [string]::Empty 66 | $Pool.Hosts | ForEach-Object { 67 | $pools = Get-Join "!" @($pools, "$_`:$($Pool.Port)") 68 | } 69 | $fee = 0.85 70 | if (("cosa") -contains $_.Algorithm) { $fee = 2 } 71 | elseif (("argon2d_16000") -contains $_.Algorithm) { $fee = 76 } 72 | elseif (("ethash", "etchash", "ubqhash") -contains $_.Algorithm) { $fee = 0.65 } 73 | elseif (("autolykos2", "dynamo", "verthash", "pufferfish2bmb") -contains $_.Algorithm) { $fee = 1 } 74 | elseif (("yespowerlitb", "yespowerurx", "blake2b", "blake2s", "cryptonight_talleo", "k12", "keccak") -contains $_.Algorithm) { $fee = 0 } 75 | [MinerInfo]@{ 76 | Pool = $Pool.PoolName() 77 | PoolKey = $Pool.PoolKey() 78 | Priority = $Pool.Priority 79 | Name = $Name 80 | Algorithm = $Algo 81 | Type = [eMinerType]::nVidia 82 | API = "srbm2" 83 | URI = "https://github.com/doktor83/SRBMiner-Multi/releases/download/2.4.9/SRBMiner-Multi-2-4-9-win64.zip" 84 | Path = "$Name\SRBMiner-MULTI.exe" 85 | ExtraArgs = $extrargs 86 | Arguments = "--algorithm $($_.Algorithm) --pool $pools --wallet $($Pool.User) --password $($Pool.Password) --tls $tls --api-enable --api-port $port --disable-cpu --disable-gpu-amd --disable-gpu-intel --disable-worker-watchdog --retry-time $($Config.CheckTimeout) $nicehash $extrargs" 87 | Port = $port 88 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 89 | RunBefore = $_.RunBefore 90 | RunAfter = $_.RunAfter 91 | Fee = $fee 92 | } 93 | } 94 | } 95 | } 96 | } -------------------------------------------------------------------------------- /Miners/wildrig-amd-0.40.5.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::AMD) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 90 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "anime" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "bmw512" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "curvehash" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "evrprogpow" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "firopow" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ghostrider" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "heavyhash" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "memehash" } 25 | [AlgoInfoEx]@{ Enabled = $([Config]::ActiveTypes -notcontains [eMinerType]::CPU); Algorithm = "mike" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "nexapow" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow-ethercore" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow-sero" } 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow-veil" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpowz" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "vprogpow" } 32 | #[AlgoInfoEx]@{ Enabled = $true; Algorithm = "pufferfish2" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rwahash" } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sha256csm" } 35 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sha512256d" } 36 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "skydoge" } 37 | )} 38 | 39 | if (!$Cfg.Enabled) { return } 40 | 41 | $port = [Config]::Ports[[int][eMinerType]::AMD] 42 | 43 | $Cfg.Algorithms | ForEach-Object { 44 | if ($_.Enabled) { 45 | $Algo = Get-Algo($_.Algorithm) 46 | if ($Algo) { 47 | # find pool by algorithm 48 | $Pool = Get-Pool($Algo) 49 | if ($Pool) { 50 | if ($_.Algorithm -eq "veil") { $_.Algorithm = "x16rt" } 51 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 52 | $hosts = [string]::Empty 53 | $Pool.Hosts | ForEach-Object { 54 | $hosts = Get-Join " " @($hosts, "-o $_`:$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password)") 55 | } 56 | $fee = 0.75 57 | if (("curvehash", "ghostrider", "mike", "pufferfish2") -contains $_.Algorithm) { $fee = 1 } 58 | elseif (("rwahash", "sha256csm", "skydoge") -contains $_.Algorithm) { $fee = 2 } 59 | [MinerInfo]@{ 60 | Pool = $Pool.PoolName() 61 | PoolKey = $Pool.PoolKey() 62 | Priority = $Pool.Priority 63 | Name = $Name 64 | Algorithm = $Algo 65 | Type = [eMinerType]::AMD 66 | TypeInKey = $true 67 | API = "xmrig" 68 | URI = "https://github.com/andru-kun/wildrig-multi/releases/download/0.40.5/wildrig-multi-windows-0.40.5.zip" 69 | Path = "$Name\wildrig.exe" 70 | ExtraArgs = $extrargs 71 | Arguments = "-a $($_.Algorithm) $hosts -R $($Config.CheckTimeout) --opencl-platform=$([Config]::AMDPlatformId) --no-nvml --no-igcl --api-port=$port $extrargs" 72 | Port = $port 73 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 74 | RunBefore = $_.RunBefore 75 | RunAfter = $_.RunAfter 76 | Fee = $fee 77 | } 78 | } 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /Miners/wildrig-intel-0.40.5.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::Intel) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "anime" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "bmw512" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "curvehash" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "evrprogpow" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "firopow" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ghostrider" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "heavyhash" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "memehash" } 25 | [AlgoInfoEx]@{ Enabled = $([Config]::ActiveTypes -notcontains [eMinerType]::CPU); Algorithm = "mike" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "nexapow" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow-ethercore" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow-sero" } 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow-veil" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpowz" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "vprogpow" } 32 | #[AlgoInfoEx]@{ Enabled = $true; Algorithm = "pufferfish2" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rwahash" } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sha256csm" } 35 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sha512256d" } 36 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "skydoge" } 37 | )} 38 | 39 | if (!$Cfg.Enabled) { return } 40 | 41 | $port = [Config]::Ports[[int][eMinerType]::Intel] 42 | 43 | $Cfg.Algorithms | ForEach-Object { 44 | if ($_.Enabled) { 45 | $Algo = Get-Algo($_.Algorithm) 46 | if ($Algo) { 47 | # find pool by algorithm 48 | $Pool = Get-Pool($Algo) 49 | if ($Pool) { 50 | if ($_.Algorithm -eq "veil") { $_.Algorithm = "x16rt" } 51 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 52 | $hosts = [string]::Empty 53 | $Pool.Hosts | ForEach-Object { 54 | $hosts = Get-Join " " @($hosts, "-o $_`:$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password)") 55 | } 56 | $fee = 0.75 57 | if (("curvehash", "ghostrider", "mike", "pufferfish2") -contains $_.Algorithm) { $fee = 1 } 58 | elseif (("rwahash", "sha256csm", "skydoge") -contains $_.Algorithm) { $fee = 2 } 59 | [MinerInfo]@{ 60 | Pool = $Pool.PoolName() 61 | PoolKey = $Pool.PoolKey() 62 | Priority = $Pool.Priority 63 | Name = $Name 64 | Algorithm = $Algo 65 | Type = [eMinerType]::Intel 66 | TypeInKey = $true 67 | API = "xmrig" 68 | URI = "https://github.com/andru-kun/wildrig-multi/releases/download/0.40.5/wildrig-multi-windows-0.40.5.zip" 69 | Path = "$Name\wildrig.exe" 70 | ExtraArgs = $extrargs 71 | Arguments = "-a $($_.Algorithm) $hosts -R $($Config.CheckTimeout) --opencl-platform=$([Config]::nVidiaPlatformId) --no-adl --no-nvml --api-port=$port $extrargs" 72 | Port = $port 73 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 74 | RunBefore = $_.RunBefore 75 | RunAfter = $_.RunAfter 76 | Fee = $fee 77 | } 78 | } 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /Miners/wildrig-nv-0.40.5.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "anime" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "bmw512" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "curvehash" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "evrprogpow" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "firopow" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "ghostrider" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "heavyhash" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "memehash" } 25 | [AlgoInfoEx]@{ Enabled = $([Config]::ActiveTypes -notcontains [eMinerType]::CPU); Algorithm = "mike" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "nexapow" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow-ethercore" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow-sero" } 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpow-veil" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "progpowz" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "vprogpow" } 32 | #[AlgoInfoEx]@{ Enabled = $true; Algorithm = "pufferfish2" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rwahash" } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sha256csm" } 35 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "sha512256d" } 36 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "skydoge" } 37 | )} 38 | 39 | if (!$Cfg.Enabled) { return } 40 | 41 | $port = [Config]::Ports[[int][eMinerType]::nVidia] 42 | 43 | $Cfg.Algorithms | ForEach-Object { 44 | if ($_.Enabled) { 45 | $Algo = Get-Algo($_.Algorithm) 46 | if ($Algo) { 47 | # find pool by algorithm 48 | $Pool = Get-Pool($Algo) 49 | if ($Pool) { 50 | if ($_.Algorithm -eq "veil") { $_.Algorithm = "x16rt" } 51 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 52 | $hosts = [string]::Empty 53 | $Pool.Hosts | ForEach-Object { 54 | $hosts = Get-Join " " @($hosts, "-o $_`:$($Pool.PortUnsecure) -u $($Pool.User) -p $($Pool.Password)") 55 | } 56 | $fee = 0.75 57 | if (("curvehash", "ghostrider", "mike", "pufferfish2") -contains $_.Algorithm) { $fee = 1 } 58 | elseif (("rwahash", "sha256csm", "skydoge") -contains $_.Algorithm) { $fee = 2 } 59 | [MinerInfo]@{ 60 | Pool = $Pool.PoolName() 61 | PoolKey = $Pool.PoolKey() 62 | Priority = $Pool.Priority 63 | Name = $Name 64 | Algorithm = $Algo 65 | Type = [eMinerType]::nVidia 66 | TypeInKey = $true 67 | API = "xmrig" 68 | URI = "https://github.com/andru-kun/wildrig-multi/releases/download/0.40.5/wildrig-multi-windows-0.40.5.zip" 69 | Path = "$Name\wildrig.exe" 70 | ExtraArgs = $extrargs 71 | Arguments = "-a $($_.Algorithm) $hosts -R $($Config.CheckTimeout) --opencl-platform=$([Config]::nVidiaPlatformId) --no-adl --no-igcl --api-port=$port $extrargs" 72 | Port = $port 73 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 74 | RunBefore = $_.RunBefore 75 | RunAfter = $_.RunAfter 76 | Fee = $fee 77 | } 78 | } 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /Miners/xmrig-amd-6.21.0.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::AMD) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 13 | Enabled = $true 14 | BenchmarkSeconds = 120 15 | ExtraArgs = $null 16 | Algorithms = @( 17 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2/wrkz" } 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "astrobwt/v2" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/ccx" } 20 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/half" } 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/r" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/rwz" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/zls" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn-heavy/tube" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn-heavy/xhv" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/upx2" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "gr" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "kawpow" } 29 | [AlgoInfoEx]@{ Enabled = $([Config]::ActiveTypes -notcontains [eMinerType]::CPU); Algorithm = "rx/0" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/arq" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/graft" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/keva" } 33 | [AlgoInfoEx]@{ Enabled = $([Config]::ActiveTypes -notcontains [eMinerType]::CPU); Algorithm = "rx/sfx" } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/wow" } 35 | )} 36 | 37 | if (!$Cfg.Enabled) { return } 38 | 39 | $file = [IO.Path]::Combine($BinLocation, $Name, "config.json") 40 | if ([IO.File]::Exists($file)) { 41 | [IO.File]::Delete($file) 42 | } 43 | 44 | $Cfg.Algorithms | ForEach-Object { 45 | if ($_.Enabled) { 46 | $Algo = Get-Algo($_.Algorithm) 47 | if ($Algo -and $Algo -notmatch "chukwa") { 48 | # find pool by algorithm 49 | $Pool = Get-Pool($Algo) 50 | if ($Pool) { 51 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 52 | $ssl = [string]::Empty 53 | if ($Pool.Protocol -match "ssl") { $ssl = " --tls"} 54 | $pools = [string]::Empty 55 | $Pool.Hosts | ForEach-Object { 56 | $pools = Get-Join " " @($pools, "-o $_`:$($Pool.Port) -u $($Pool.User) -p $($Pool.Password)$ssl") 57 | } 58 | [MinerInfo]@{ 59 | Pool = $Pool.PoolName() 60 | PoolKey = $Pool.PoolKey() 61 | Priority = $Pool.Priority 62 | Name = $Name 63 | Algorithm = $Algo 64 | Type = [eMinerType]::AMD 65 | API = "xmrig2" 66 | URI = "https://github.com/xmrig/xmrig/releases/download/v6.21.0/xmrig-6.21.0-gcc-win64.zip" 67 | Path = "$Name\xmrig.exe" 68 | ExtraArgs = $extrargs 69 | Arguments = "-a $($_.Algorithm) $pools -R $($Config.CheckTimeout) --http-port=4044 --donate-level=1 --no-dmi --no-cpu --opencl --opencl-platform=$([Config]::AMDPlatformId) $extrargs" 70 | Port = 4044 71 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 72 | RunBefore = $_.RunBefore 73 | RunAfter = $_.RunAfter 74 | Fee = 1 75 | } 76 | } 77 | } 78 | } 79 | } -------------------------------------------------------------------------------- /Miners/xmrig-cpu-6.21.0.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::CPU) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | 10 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 11 | 12 | $extraThreads = $null 13 | $extraCores = $null 14 | if ([Config]::DefaultCPU) { 15 | $extraThreads = "-t $([Config]::DefaultCPU.Threads)" 16 | $extraCores = "-t $([Config]::DefaultCPU.Cores)" 17 | } 18 | 19 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 20 | Enabled = $true 21 | BenchmarkSeconds = 120 22 | ExtraArgs = $null 23 | Algorithms = @( 24 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "argon2/chukwa" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2/chukwav2" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2/ninja" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2/wrkz" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/ccx"; ExtraArgs = $extraCores } 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/fast" } 30 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/half" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/r" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/rwz" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/zls" } 34 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn-heavy/tube" } 35 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn-heavy/xhv" } # L3 limit 36 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/upx2"; ExtraArgs = $extraThreads } 37 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "gr"; ExtraArgs = $extraCores } 38 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/0"; ExtraArgs = $extraThreads } 39 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/arq"; ExtraArgs = $extraThreads } 40 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/graft" } 41 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/keva" } 42 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/sfx"; ExtraArgs = $extraCores } 43 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/wow"; ExtraArgs = $extraThreads } 44 | )} 45 | 46 | if (!$Cfg.Enabled) { return } 47 | 48 | $file = [IO.Path]::Combine($BinLocation, $Name, "config.json") 49 | if ([IO.File]::Exists($file)) { 50 | [IO.File]::Delete($file) 51 | } 52 | 53 | $Cfg.Algorithms | ForEach-Object { 54 | if ($_.Enabled) { 55 | $Algo = Get-Algo($_.Algorithm) 56 | if ($Algo) { 57 | # find pool by algorithm 58 | $Pool = Get-Pool($Algo) 59 | if ($Pool) { 60 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 61 | $ssl = [string]::Empty 62 | if ($Pool.Protocol -match "ssl") { $ssl = " --tls"} 63 | $pools = [string]::Empty 64 | $Pool.Hosts | ForEach-Object { 65 | $pools = Get-Join " " @($pools, "-o $_`:$($Pool.Port) -u $($Pool.User) -p $($Pool.Password)$ssl") 66 | } 67 | [MinerInfo]@{ 68 | Pool = $Pool.PoolName() 69 | PoolKey = $Pool.PoolKey() 70 | Priority = $Pool.Priority 71 | Name = $Name 72 | Algorithm = $Algo 73 | Type = [eMinerType]::CPU 74 | API = "xmrig2" 75 | URI = "https://github.com/xmrig/xmrig/releases/download/v6.21.0/xmrig-6.21.0-gcc-win64.zip" 76 | Path = "$Name\xmrig.exe" 77 | ExtraArgs = $extrargs 78 | Arguments = "-a $($_.Algorithm) $pools -R $($Config.CheckTimeout) --http-port=4045 --donate-level=1 --no-dmi --cpu-priority 0 $extrargs" 79 | Port = 4045 80 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 81 | RunBefore = $_.RunBefore 82 | RunAfter = $_.RunAfter 83 | Fee = 1 84 | } 85 | } 86 | } 87 | } 88 | } -------------------------------------------------------------------------------- /Miners/xmrig-nv-6.21.0.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2023 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::ActiveTypes -notcontains [eMinerType]::nVidia) { exit } 8 | if (![Config]::Is64Bit) { exit } 9 | if ([Config]::CudaVersion -lt [version]::new(10, 0)) { return } 10 | 11 | $Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 12 | 13 | $Cfg = ReadOrCreateMinerConfig "Do you want use to mine the '$Name' miner" ([IO.Path]::Combine($PSScriptRoot, $Name + [BaseConfig]::Filename)) @{ 14 | Enabled = $true 15 | BenchmarkSeconds = 120 16 | ExtraArgs = $null 17 | Algorithms = @( 18 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "argon2/wrkz" } 19 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "astrobwt/v2" } 20 | [AlgoInfoEx]@{ Enabled = $false; Algorithm = "kawpow" } # t-tex faster 21 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/ccx" } 22 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/half" } 23 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/r" } 24 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/rwz" } 25 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/zls" } 26 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn-heavy/tube" } 27 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn-heavy/xhv" } 28 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "cn/upx2" } 29 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "gr" } 30 | [AlgoInfoEx]@{ Enabled = $([Config]::ActiveTypes -notcontains [eMinerType]::CPU); Algorithm = "rx/0" } 31 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/arq" } 32 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/graft" } 33 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/keva" } 34 | [AlgoInfoEx]@{ Enabled = $([Config]::ActiveTypes -notcontains [eMinerType]::CPU); Algorithm = "rx/sfx" } 35 | [AlgoInfoEx]@{ Enabled = $true; Algorithm = "rx/wow" } 36 | )} 37 | 38 | if (!$Cfg.Enabled) { return } 39 | 40 | $file = [IO.Path]::Combine($BinLocation, $Name, "config.json") 41 | if ([IO.File]::Exists($file)) { 42 | [IO.File]::Delete($file) 43 | } 44 | 45 | $Cfg.Algorithms | ForEach-Object { 46 | if ($_.Enabled) { 47 | $Algo = Get-Algo($_.Algorithm) 48 | if ($Algo -and $Algo -notmatch "chukwa") { 49 | # find pool by algorithm 50 | $Pool = Get-Pool($Algo) 51 | if ($Pool) { 52 | $extrargs = Get-Join " " @($Cfg.ExtraArgs, $_.ExtraArgs) 53 | $ssl = [string]::Empty 54 | if ($Pool.Protocol -match "ssl") { $ssl = " --tls"} 55 | $pools = [string]::Empty 56 | $Pool.Hosts | ForEach-Object { 57 | $pools = Get-Join " " @($pools, "-o $_`:$($Pool.Port) -u $($Pool.User) -p $($Pool.Password)$ssl") 58 | } 59 | [MinerInfo]@{ 60 | Pool = $Pool.PoolName() 61 | PoolKey = $Pool.PoolKey() 62 | Priority = $Pool.Priority 63 | Name = $Name 64 | Algorithm = $Algo 65 | Type = [eMinerType]::nVidia 66 | API = "xmrig2" 67 | URI = "https://mindminer.online/miners/nVidia/xmrig-6.21.0-msvc-win64.zip" 68 | Path = "$Name\xmrig.exe" 69 | ExtraArgs = $extrargs 70 | Arguments = "-a $($_.Algorithm) $pools -R $($Config.CheckTimeout) --http-port=4043 --donate-level=1 --no-dmi --no-cpu --cuda --no-nvml $extrargs" 71 | Port = 4043 72 | BenchmarkSeconds = if ($_.BenchmarkSeconds) { $_.BenchmarkSeconds } else { $Cfg.BenchmarkSeconds } 73 | RunBefore = $_.RunBefore 74 | RunAfter = $_.RunAfter 75 | Fee = 1 76 | } 77 | } 78 | } 79 | } 80 | } -------------------------------------------------------------------------------- /Pools/2Miners.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::UseApiProxy) { return $null } 8 | 9 | if (!$Config.Wallet.BTC) { return $null } 10 | 11 | $PoolInfo = [PoolInfo]::new() 12 | $PoolInfo.Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 13 | 14 | $Cfg = ReadOrCreatePoolConfig "Do you want to mine ERG/ETC/RVN on $($PoolInfo.Name)" ([IO.Path]::Combine($PSScriptRoot, $PoolInfo.Name + [BaseConfig]::Filename)) @{ 15 | Enabled = $true 16 | AverageProfit = "20 min" 17 | Region = $null 18 | } 19 | if ($global:AskPools -eq $true -or !$Cfg) { return $null } 20 | 21 | $PoolInfo.Enabled = $Cfg.Enabled 22 | $PoolInfo.AverageProfit = $Cfg.AverageProfit 23 | 24 | if (!$Cfg.Enabled) { return $PoolInfo } 25 | [decimal] $Pool_Variety = if ($Cfg.Variety) { $Cfg.Variety } else { 0.95 } 26 | 27 | $PoolData = @( 28 | #@{ algorithm = "ethash"; port = 2020; ssl = 12020; coin = "ETH"; api = "https://eth.2miners.com/api/accounts/{0}"; regions = @("eth", "us-eth", "asia-eth") } 29 | @{ algorithm = "autolykos2"; port = 8888; ssl = 18888; coin = "ERG"; api = "https://erg.2miners.com/api/accounts/{0}"; regions = @("erg", "us-erg", "asia-erg"); } 30 | @{ algorithm = "etchash"; port = 1010; ssl = 11010; coin = "ETC"; api = "https://etc.2miners.com/api/accounts/{0}"; regions = @("etc", "us-etc", "asia-etc"); } 31 | @{ algorithm = "kawpow"; port = 6060; ssl = 16060; coin = "RVN"; api = "https://rvn.2miners.com/api/accounts/{0}"; regions = @("rvn", "us-rvn", "asia-rvn"); } 32 | ) 33 | $PoolCoins = $PoolData | Foreach-object { $_.coin } 34 | 35 | $coin = $Cfg.Coin 36 | if ($coin -match "ERGO") { 37 | $coin = "ERG" 38 | } 39 | 40 | if (![string]::IsNullOrWhiteSpace($coin) -and !($PoolData | Where-Object { $_.coin -eq $coin.ToUpperInvariant() })) { 41 | Write-Host "Unknown coin `"$coin`" in '$($PoolInfo.Name).config.txt' file. Use coin from list: $([string]::Join(", ", $PoolCoins))." -ForegroundColor Red 42 | return $PoolInfo 43 | } 44 | 45 | try { 46 | $ProfitRequest = Get-Rest "https://api.mindminer.online/profit.json" 47 | } 48 | catch { 49 | return $PoolInfo 50 | } 51 | 52 | if (!$ProfitRequest) { return $PoolInfo } 53 | 54 | $PoolInfo.HasAnswer = $true 55 | $PoolInfo.AnswerTime = [DateTime]::Now 56 | 57 | try { 58 | if (![Config]::UseApiProxy -and $Config.ShowBalance) { 59 | $PoolData | ForEach-Object { 60 | $balance = Get-Rest ($_.api -f ($Config.Wallet.BTC)) 61 | if ($balance) { 62 | $PoolInfo.Balance.Add($_.coin, [BalanceInfo]::new([decimal]$balance.stats.balance / 1000000000, [decimal]$balance.stats.immature / 1000000000)) 63 | } 64 | Remove-Variable balance 65 | } 66 | } 67 | } 68 | catch { } 69 | 70 | $PoolData | ForEach-Object { 71 | $Pool_Algorithm = Get-Algo $_.algorithm 72 | if ($Pool_Algorithm) { 73 | $Pool_Profit = $ProfitRequest."$($_.coin)"; 74 | if ($Pool_Profit) { 75 | 76 | [string] $Pool_Region = $_.regions[0] 77 | $Regions = $_.regions 78 | switch ($Config.Region) { 79 | "$([eRegion]::Europe)" { $Pool_Region = $Regions[0] } 80 | "$([eRegion]::Usa)" { $Pool_Region = $Regions[1] } 81 | "$([eRegion]::China)" { $Pool_Region = $Regions[2] } 82 | "$([eRegion]::Japan)" { $Pool_Region = $Regions[2] } 83 | } 84 | if (![string]::IsNullOrWhiteSpace($Cfg.Region) -and $null -ne ($Regions | Where-Object { $_ -match $Cfg.Region } | Select-Object -First)) { 85 | $Pool_Region = $Regions | Where-Object { $_ -match $Cfg.Region } | Select-Object -First; 86 | } 87 | $Regions = $Regions | Sort-Object @{ Expression = { if ($_ -eq $Pool_Region) { 1 } elseif ($_ -match "asia") { 3 } else { 2 } } } | 88 | Select-Object -First 3 89 | 90 | $Pool_Hosts = $Regions | ForEach-Object { "$_.2miners.com" } 91 | $Pool_Protocol = "stratum+tcp" 92 | $Pool_Port = $_.port 93 | if ($Config.SSL -eq $true) { 94 | $Pool_Protocol = "stratum+ssl" 95 | $Pool_Port = $_.ssl 96 | } 97 | $Profit = $Pool_Profit.profit * $Pool_Variety 98 | $ProfitFast = $Profit 99 | $Profit = Set-Stat -Filename $PoolInfo.Name -Key $Pool_Algorithm -Value $Profit -Interval $Cfg.AverageProfit 100 | 101 | $PoolInfo.Algorithms.Add([PoolAlgorithmInfo] @{ 102 | Name = "$($PoolInfo.Name)-$($Pool_Region.ToUpper() -replace "-$($_.coin)" -replace $_.coin, "EU")" 103 | Algorithm = $Pool_Algorithm 104 | Profit = if (($Config.Switching -as [eSwitching]) -eq [eSwitching]::Fast) { $ProfitFast } else { $Profit } 105 | Info = $_.coin 106 | Protocol = $Pool_Protocol 107 | Hosts = $Pool_Hosts 108 | Port = $Pool_Port 109 | PortUnsecure = $_.port 110 | User = "$([Config]::WalletPlaceholder -f "BTC").$([Config]::WorkerNamePlaceholder)" 111 | Password = "x" 112 | Priority = if ($AllAlgos.EnabledAlgorithms -contains $Pool_Algorithm -or $coin -match $_.coin) { [Priority]::High } else { [Priority]::Normal } 113 | }) 114 | } 115 | } 116 | } 117 | 118 | Remove-Stat -Filename $PoolInfo.Name -Interval $Cfg.AverageProfit 119 | 120 | $PoolInfo -------------------------------------------------------------------------------- /Pools/ApiPoolsProxy.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | $PoolInfo = [PoolInfo]::new() 8 | $PoolInfo.Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 9 | 10 | $Cfg = [BaseConfig]::ReadOrCreate([IO.Path]::Combine($PSScriptRoot, $PoolInfo.Name + [BaseConfig]::Filename), @{ 11 | Enabled = $false 12 | ProxyList = $null 13 | }) 14 | if (!$Cfg) { return $null } 15 | 16 | $PoolInfo.Enabled = $Cfg.Enabled 17 | [Config]::UseApiProxy = $PoolInfo.Enabled 18 | if (!$Cfg.Enabled) { return $null } 19 | 20 | $currentfilename = [IO.Path]::Combine($PSScriptRoot, $PoolInfo.Name + ".current.txt") 21 | $Current = [BaseConfig]::ReadOrCreate($currentfilename, @{ 22 | Proxy = $null 23 | }) 24 | 25 | $proxylist = [Collections.Generic.List[uri]]::new() 26 | if (![string]::IsNullOrWhiteSpace($Current.Proxy)) { 27 | $proxylist.Add((Get-ProxyAddress $Current.Proxy)) 28 | } 29 | $Cfg.ProxyList | ForEach-Object { 30 | if (![string]::IsNullOrWhiteSpace($_)) { 31 | $proxylist.Add((Get-ProxyAddress $_)) 32 | } 33 | } 34 | 35 | $proxylist | ForEach-Object { 36 | if (!$PoolInfo.HasAnswer) { 37 | try { 38 | $RequestWallets = Get-Rest "$_`wallets" 39 | if ($RequestWallets) 40 | { 41 | if ($RequestWallets.Wallet) { 42 | $Config.Wallet = $RequestWallets.Wallet 43 | } 44 | if ($RequestWallets.Login) { 45 | $Config.Login = $RequestWallets.Login 46 | } 47 | if ($RequestWallets.Password) { 48 | $Config.Password = $RequestWallets.Password 49 | } 50 | if ($RequestWallets.ApiKey) { 51 | $Config.ApiKey = $RequestWallets.ApiKey 52 | } 53 | if ($RequestWallets.Service) { 54 | $Config.Service = $RequestWallets.Service 55 | } 56 | $Config.Region = $RequestWallets.Region 57 | } 58 | $RequestPools = Get-Rest "$_`pools" 59 | if ($RequestPools) { 60 | $PoolInfo.HasAnswer = $true 61 | $PoolInfo.AnswerTime = [DateTime]::Now 62 | $PoolInfo.AverageProfit = $_.Host 63 | 64 | # before full move to new version 65 | try { 66 | $RequestAlgs = Get-Rest "$_`poolalglist" 67 | if ($RequestAlgs) { 68 | $RequestAlgs | ForEach-Object { 69 | $alg = $_ 70 | $alg.Extra = $null 71 | $PoolInfo.Algorithms.Add([PoolAlgorithmInfo]$alg) 72 | } 73 | } 74 | } 75 | catch { 76 | Write-Host "The new version of API is not available, getting the old one." -ForegroundColor Yellow 77 | } 78 | 79 | if ($PoolInfo.Algorithms.Length -eq 0) { 80 | $RequestPools | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name | ForEach-Object { 81 | $pool = $RequestPools.$_ 82 | # now no data from master 83 | $pool.Extra = $null 84 | <#if ($pool.Extra -ne $null) { 85 | $hash = [hashtable]::new() 86 | $pool.Extra | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name | ForEach-Object { 87 | $hash[$_] = $pool.Extra.$_ 88 | } 89 | $pool.Extra = $hash 90 | }#> 91 | $PoolInfo.Algorithms.Add([PoolAlgorithmInfo]$pool) 92 | } 93 | } 94 | 95 | if ($Current.Proxy -ne $_.Host) { 96 | $Current.Proxy = $_.Host 97 | $Current | ConvertTo-Json | Out-File -FilePath $currentfilename -Force 98 | } 99 | } 100 | $global:MRRPoolData = Get-Rest "$_`mrrpool" 101 | } 102 | catch 103 | { 104 | Write-Host "$($PoolInfo.Name) error: $_" -ForegroundColor Red 105 | Start-Sleep -Seconds ($Config.CheckTimeout) 106 | } 107 | } 108 | } 109 | 110 | $PoolInfo -------------------------------------------------------------------------------- /Pools/MPH.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2017-2022 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::UseApiProxy) { return $null } 8 | if ([string]::IsNullOrWhiteSpace($Config.Login)) { return $null } 9 | 10 | $PoolInfo = [PoolInfo]::new() 11 | $PoolInfo.Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 12 | 13 | $Cfg = ReadOrCreatePoolConfig "Do you want to mine on $($PoolInfo.Name) (autoexchange to any coin, payout with fixed fee, need registration)" ([IO.Path]::Combine($PSScriptRoot, $PoolInfo.Name + [BaseConfig]::Filename)) @{ 14 | Enabled = $true 15 | AverageProfit = "45 min" 16 | EnabledAlgorithms = $null 17 | DisabledAlgorithms = $null 18 | ApiKey = [string]::Empty 19 | } 20 | if ($global:AskPools -eq $true -or !$Cfg) { return $null } 21 | 22 | $PoolInfo.Enabled = $Cfg.Enabled 23 | $PoolInfo.AverageProfit = $Cfg.AverageProfit 24 | 25 | if (!$Cfg.Enabled) { return $PoolInfo } 26 | [decimal] $Pool_Variety = if ($Cfg.Variety) { $Cfg.Variety } else { 0.85 } 27 | 28 | try { 29 | $Request = Get-Rest "https://miningpoolhub.com/index.php?page=api&action=getminingandprofitsstatistics" 30 | } 31 | catch { return $PoolInfo } 32 | 33 | try { 34 | if (![Config]::UseApiProxy -and $Config.ShowBalance -and ![string]::IsNullOrWhiteSpace($Cfg.ApiKey)) { 35 | $RequestBalance = Get-Rest "https://miningpoolhub.com/index.php?page=api&action=getuserallbalances&api_key=$($Cfg.ApiKey)" 36 | } 37 | } 38 | catch { } 39 | 40 | if (!$Request -or !($Request.success -eq $true)) { return $PoolInfo } 41 | $PoolInfo.HasAnswer = $true 42 | $PoolInfo.AnswerTime = [DateTime]::Now 43 | 44 | if ($RequestBalance) { 45 | $RequestBalance.getuserallbalances.data | ForEach-Object { 46 | $sign = if ($_.coin -eq "bitcoin") { "BTC" } 47 | elseif ($_.coin -eq "ravencoin") { "RVN" } 48 | elseif ($_.coin -eq "ethereum") { "ETH" } 49 | elseif ($_.coin -eq "ethereum-classic") { "ETC" } 50 | elseif ($_.coin -eq "bitcoin-gold") { "BTG" } 51 | else { (Get-Culture).TextInfo.ToTitleCase($_.coin) } 52 | if ($sign -eq "BTC" -or $_.confirmed -gt 0 -or $_.unconfirmed -gt 0) { 53 | $PoolInfo.Balance.Add($sign, [BalanceInfo]::new([decimal]($_.confirmed), [decimal]($_.unconfirmed))) 54 | } 55 | } 56 | } 57 | 58 | $Pool_Region = "US" 59 | switch ($Config.Region) { 60 | "$([eRegion]::Europe)" { $Pool_Region = "Europe" } 61 | "$([eRegion]::China)" { $Pool_Region = "Asia" } 62 | "$([eRegion]::Japan)" { $Pool_Region = "Asia" } 63 | } 64 | 65 | # exclude no exchange coins => $_.dovewallet_buy_price -gt 0 -or $_.poloniex_buy_price -gt 0 66 | $Request.return | Where-Object { $_.profit -gt 0 -and ($_.dovewallet_buy_price -gt 0 -or $_.poloniex_buy_price -gt 0) } | ForEach-Object { 67 | $Pool_Algorithm = Get-Algo $_.algo 68 | if ($Pool_Algorithm -and $Cfg.DisabledAlgorithms -notcontains $Pool_Algorithm) { 69 | $Pool_Hosts = $_.host_list.split(";") | Sort-Object @{ Expression = { if ($_.StartsWith($Pool_Region, [StringComparison]::InvariantCultureIgnoreCase)) { 1 } else { 2 } } } | Select-Object -First 3 70 | $Pool_Port = $_.port 71 | $Pool_Diff = if ($AllAlgos.Difficulty.$Pool_Algorithm) { "d=$($AllAlgos.Difficulty.$Pool_Algorithm)" } else { $Config.Password } 72 | $Pool_Protocol = "stratum+tcp" 73 | if ($Config.SSL -eq $true) { 74 | if ($Pool_Algorithm -contains "equihash") { 75 | $Pool_Protocol = "stratum+ssl" 76 | } 77 | } 78 | 79 | $Profit = [decimal]$_.profit * (1 - $_.fee / 100 - 0.003) * $Pool_Variety / 1000000000 80 | $ProfitFast = $Profit 81 | $Profit = Set-Stat -Filename $PoolInfo.Name -Key "$Pool_Algorithm`_$($_.symbol)" -Value $Profit -Interval $Cfg.AverageProfit 82 | 83 | if ($_.workers -ge $Config.MinimumMiners) { 84 | $PoolInfo.Algorithms.Add([PoolAlgorithmInfo] @{ 85 | Name = $PoolInfo.Name 86 | Algorithm = $Pool_Algorithm 87 | Info = "$($Pool_Region -replace "Europe", "EU" -replace "Asia", "AS")-$($_.symbol)" 88 | InfoAsKey = $true 89 | Profit = if (($Config.Switching -as [eSwitching]) -eq [eSwitching]::Fast) { $ProfitFast } else { $Profit } 90 | Protocol = $Pool_Protocol 91 | Hosts = $Pool_Hosts 92 | Port = $Pool_Port 93 | PortUnsecure = $Pool_Port 94 | User = "$([Config]::LoginPlaceholder).$([Config]::WorkerNamePlaceholder)" 95 | Password = $Pool_Diff 96 | Priority = if ($AllAlgos.EnabledAlgorithms -contains $Pool_Algorithm -or $Cfg.EnabledAlgorithms -contains $Pool_Algorithm) { [Priority]::High } else { [Priority]::Normal } 97 | }) 98 | } 99 | } 100 | } 101 | 102 | Remove-Stat -Filename $PoolInfo.Name -Interval $Cfg.AverageProfit 103 | 104 | $PoolInfo -------------------------------------------------------------------------------- /Pools/NLPool.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | MindMiner Copyright (C) 2018-2019 Oleg Samsonov aka Quake4 3 | https://github.com/Quake4/MindMiner 4 | License GPL-3.0 5 | #> 6 | 7 | if ([Config]::UseApiProxy) { return $null } 8 | if (!$Config.Wallet) { return $null } 9 | 10 | $PoolInfo = [PoolInfo]::new() 11 | $PoolInfo.Name = (Get-Item $script:MyInvocation.MyCommand.Path).BaseName 12 | 13 | $Cfg = [BaseConfig]::ReadOrCreate([IO.Path]::Combine($PSScriptRoot, $PoolInfo.Name + [BaseConfig]::Filename), @{ 14 | Enabled = $false 15 | AverageProfit = "45 min" 16 | EnabledAlgorithms = $null 17 | DisabledAlgorithms = $null 18 | }) 19 | 20 | if ($global:AskPools -eq $true -or !$Cfg) { return $null } 21 | 22 | $Sign = "BTC" 23 | $wallets = $Config.Wallet | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name | 24 | Where-Object { ![string]::IsNullOrWhiteSpace($Config.Wallet.$_) } | Where-Object { "$_" -notmatch "nicehash" } 25 | if ($wallets -is [string]) { 26 | $Sign = "$wallets" 27 | } 28 | $Wallet = $Config.Wallet.$Sign 29 | if ($Config.Wallet."$($Cfg.Wallet)") { 30 | $Wallet = $Config.Wallet."$($Cfg.Wallet)" 31 | $Sign = $Cfg.Wallet 32 | } 33 | elseif (![string]::IsNullOrWhiteSpace($Cfg.Wallet)) { 34 | Write-Host "Wallet '$($Cfg.Wallet)' specified in file '$($PoolInfo.Name).config.txt' isn't found. $($PoolInfo.Name) disabled." -ForegroundColor Red 35 | return $null 36 | } 37 | if (!$Wallet) { return $null } 38 | 39 | $PoolInfo.Enabled = $Cfg.Enabled 40 | $PoolInfo.AverageProfit = $Cfg.AverageProfit 41 | 42 | if (!$Cfg.Enabled) { return $PoolInfo } 43 | 44 | # fake api data and broken accounting block reward - if you fix it write me 45 | [decimal] $Pool_Variety = if ($Cfg.Variety) { $Cfg.Variety } else { 0.5 } 46 | 47 | try { 48 | $RequestStatus = Get-Rest "http://www.nlpool.nl/api/status" 49 | } 50 | catch { return $PoolInfo } 51 | 52 | try { 53 | if (![Config]::UseApiProxy -and $Config.ShowBalance) { 54 | $RequestBalance = Get-Rest "http://www.nlpool.nl/api/wallet?address=$Wallet" 55 | } 56 | } 57 | catch { } 58 | 59 | if (!$RequestStatus) { return $PoolInfo } 60 | $PoolInfo.HasAnswer = $true 61 | $PoolInfo.AnswerTime = [DateTime]::Now 62 | 63 | if ($RequestBalance) { 64 | $PoolInfo.Balance.Add($Sign, [BalanceInfo]::new([decimal]($RequestBalance.balance), [decimal]($RequestBalance.unsold))) 65 | } 66 | 67 | $FixCurrentHash = @("equihash125", "equihash144", "equihash192") 68 | 69 | $RequestStatus | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name | ForEach-Object { 70 | $Algo = $RequestStatus.$_ 71 | $Pool_Algorithm = Get-Algo $Algo.name 72 | if ($Pool_Algorithm -and $Cfg.DisabledAlgorithms -notcontains $Pool_Algorithm -and 73 | $Algo.actual_last24h -ne $Algo.estimate_last24h -and [decimal]$Algo.estimate_current -gt 0) { 74 | $Pool_Host = "mine.nlpool.nl" 75 | $Pool_Port = $Algo.port 76 | $Pool_Diff = if ($AllAlgos.Difficulty.$Pool_Algorithm) { "d=$($AllAlgos.Difficulty.$Pool_Algorithm)" } else { [string]::Empty } 77 | $Divisor = 1000000 * $Algo.mbtc_mh_factor 78 | 79 | # convert to one dimension and decimal 80 | $Algo.actual_last24h = [decimal]$Algo.actual_last24h / 1000 81 | $Algo.estimate_current = [decimal]$Algo.estimate_current 82 | # fix fake current profit 83 | if ($FixCurrentHash -contains $Pool_Algorithm) { 84 | $Algo.estimate_current /= 2 85 | } 86 | # fix very high or low daily changes 87 | if ($Algo.estimate_current -gt $Algo.actual_last24h * $Config.MaximumAllowedGrowth) { $Algo.estimate_current = $Algo.actual_last24h * $Config.MaximumAllowedGrowth } 88 | if ($Algo.actual_last24h -gt $Algo.estimate_current * $Config.MaximumAllowedGrowth) { $Algo.actual_last24h = $Algo.estimate_current * $Config.MaximumAllowedGrowth } 89 | 90 | [decimal] $Profit = ([Math]::Min($Algo.estimate_current, $Algo.actual_last24h) + $Algo.estimate_current * ((101 - $Algo.coins) / 100)) / 2 91 | $Profit = $Profit * (1 - [decimal]$Algo.fees / 100) * $Pool_Variety / $Divisor 92 | $ProfitFast = $Profit 93 | if ($Profit -gt 0) { 94 | $Profit = Set-Stat -Filename $PoolInfo.Name -Key $Pool_Algorithm -Value $Profit -Interval $Cfg.AverageProfit 95 | } 96 | 97 | if ([int]$Algo.workers -ge $Config.MinimumMiners -or $global:HasConfirm) { 98 | $PoolInfo.Algorithms.Add([PoolAlgorithmInfo] @{ 99 | Name = $PoolInfo.Name 100 | Algorithm = $Pool_Algorithm 101 | Profit = if (($Config.Switching -as [eSwitching]) -eq [eSwitching]::Fast) { $ProfitFast } else { $Profit } 102 | Protocol = "stratum+tcp" 103 | Hosts = @($Pool_Host) 104 | Port = $Pool_Port 105 | PortUnsecure = $Pool_Port 106 | User = "$([Config]::WalletPlaceholder -f $Sign).$([Config]::WorkerNamePlaceholder)" 107 | Password = Get-Join "," @("c=$Sign", $Pool_Diff) 108 | Priority = if ($AllAlgos.EnabledAlgorithms -contains $Pool_Algorithm -or $Cfg.EnabledAlgorithms -contains $Pool_Algorithm) { [Priority]::High } else { [Priority]::Normal } 109 | }) 110 | } 111 | } 112 | } 113 | 114 | Remove-Stat -Filename $PoolInfo.Name -Interval $Cfg.AverageProfit 115 | 116 | $PoolInfo -------------------------------------------------------------------------------- /run.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cd /D "%~dp0" 3 | if not exist "bin" ( 4 | powershell -version 5.0 -executionpolicy bypass -noprofile -command "Get-ChildItem -File *.ps1 -Recurse | Unblock-File" 5 | ) 6 | :start 7 | powershell -version 5.0 -executionpolicy bypass -noprofile -command "&.\MindMiner.ps1" 8 | if exist "bin\mm.new" ( 9 | xcopy Bin\MM.New . /y /s /c /q /exclude:run.bat 10 | rmdir /q /s Bin\MM.New 11 | goto start: 12 | ) else if exist "bin\.restart" ( 13 | rmdir /q /s Bin\.restart 14 | goto start: 15 | ) else if exist "bin\.stop" ( 16 | rmdir /q /s Bin\.stop 17 | goto end: 18 | ) 19 | echo %date% %time%: Unexpected exit of MindMiner. Check the RAM and CPU overclocking! >> unexpected.exit.txt 20 | goto start: 21 | :end 22 | pause --------------------------------------------------------------------------------