Crypto Profit Switcher is an extensible open-source .Net Core console application that helps you to always mine the most profitable coin on a pool or an algorithm on NiceHash.
- Profit switching: Between pool mined coins and NiceHash algorithms
- GPUs + CPU: It supports mining with multiple GPUs (mainly AMD) and CPU.
- Benchmarking: It helps you to find the expected hashrate.
- Easy Configuration: Only one config file.
- Performance: Resource friendly with 0%-CPU usage
- Miners: TeamRedMiner, XmRig, Claymore's Dual Ethereum
- Profit data: It supports a lot of profit providers e.g. CryptUnit, WhatToMine, NiceHash etc.
- Manual mode: You can switch between automatic mode and manual mode
How to use?
- Download and extract the latest release of the app (Latest release)
- Edit the config.json to configure it.
- Start the app and profit.
How does it work?
- The app loads the configuration from the file config.json.
- It downloads the miners if they have not been downloaded already.
- It will benchmark all enabled algorithms that don't have a valid expected hashrate.
- It starts to mine the most profitable combination of device, algorithm and pool.
How to configure it?
All you need to do, is to edit the JSON file config.json.
|ProcessPriority||Normal | AboveNormal | BelowNormal | High | RealTime||Sets the process priority|
|ProfitSwitchStrategy||MaximizeFiat | PreferLowDifficulty||MaximizeFiat: Will select the miner pool combination that has the most profit in USD per day.
PreferLowDifficulty: It will multiplicate the profit in USD per day with the relative coin difficulty and maximize this new value. If the profit provider of a pool does not have data about the relative difficulty, it will use a default value of 1.
|EnableCaching||true | false||Enable or disable caching of JSON Api calls|
|EnableLogging||true | false||Enable or disable logging to a file|
|EnableManualModeByDefault||true | false||Set if the manual mode is enabled by default|
|DisableBenchmarking||true | false||Set if benchmarking on start should be disabled.|
|DisableDownloadMiners||true | false||Set if downloading of miners on start should be disabled.|
|StartMinerMinimized||true | false||Set if the miner should start minimized|
|MinerStartDelay||integer number||Delay in seconds before miner start|
|DisplayUpdateInterval||integer number||Time in seconds between display update|
|ProfitCheckInterval||integer number||Time in seconds between profit checks|
|ProfitSwitchInterval||integer number||Time in seconds between profit switch checks|
|ProfitSwitchThreshold||decimal number||Threshold between current profit and highest profit before switching (e.g. 0 means switch immediately, 0.1 means switch when the most profitable is 10% percent more profitable than current)|
|Algorithms||array of Algorithm objects||See Algorithm|
|DisplayName||string||Self defined name of the algorithm|
|Enabled||true | false||Set if algorithm is enabled|
|DeviceConfigs||array of DeviceConfig objects||See Device Config|
|Pools||array of Pool objects||See Pool|
|DeviceType||CPU | AMD | NVIDIA||Type of the device|
|DeviceId||string||Most likely the index of the GPU|
|Enabled||true | false||Set if device config is enabled|
|ExpectedHashrate||decimal number||Expected hash rate in H/s|
|PrepareScript||Path or empty||A script that will be executed before the miner starts|
|Miner||TeamRedMiner | XmRig | Claymore||Type of the miner|
|MinerPath||Path||Path to the executable of the miner|
|MinerArguments||arguments||Arguments that will be forwarded to the miner. These should include the algorithm but not information about the pool or devices.|
|MinerDeviceSpecificArguments||arguments||Arguments like eth_config or cn_config that are device specific.|
|MinerApiPort||integer number||Port of the miner api or use 0 for auto port selection.|
|UniqueName||string||Self defined unique name. Used for the UI and identification of the pool|
|Enabled||true | false||Set if pool is enabled|
|ProfitTimeframe||Live | Day||Sets the time frame of the profit data|
|ProfitProvider||NiceHashApi | CryptunitApi | MoneroOceanApi | MineXmrApi | MinerRocksApi | HeroMinersApi | WhatToMineApi||Sets the profit provider|
|ProfitProviderInfo||string||see Profit provider info|
|PreferFactor||decimal number||On the determination of the most profitable pool, the actual estimated profit will be multiplied by this.|
|PoolUrl||string||Pool url including the port number|
|PoolUser||string||Pool user, most likely a wallet address|
|PoolPassword||string||Pool password, most likely empty or x.|
Profit provider info
This value gives the profit provider information for which coin or algorithm you want to get the profit data. This value differs between the profit providers:
|Profit provider||Profit provider info|
|NiceHashApi||The API-ID of the algorithm (see the value of order in https://api2.nicehash.com/main/api/v2/mining/algorithms|
|CryptunitApi||The ticker value of the coin (see the value of ticker in https://www.cryptunit.com/api/coins|
|MinerRocksApi||The name of the subdomain for the coin e.g. for https://monero.miner.rocks/ it would be monero.|
|HeroMinersApi||The name of the subdomain for the coin e.g. for https://monero.herominers.com/ it would be monero.|
|WhatToMineApi||The key to the coin in https://whattomine.com/coins.json e.g. for Ethereum it would be Ethereum.|
If you download the latest release, there will be a default configuration, that is optimized for this config:
- CPU: AMD Ryzen 9 3900X
- GPU: AMD Vega 64 + AMD Vega 56
How can I help?
You can help me to make the app better. I'm open for pull requests. It is pretty easy to add support for more miners or profit providers. I did not test the app on Linux, so that would be something that would be helpful to do.
If you really liked the app you can donate me crypto coins (e.g. Monero) to one of the wallet addresses in the default config file. You could also mine to a wallet address of mine, for example while benchmarking.
BTW: There are no fees from my side in this app :)