Graphical application for crypto-coin mining
Groff C# Other
Latest commit a5a088b May 2, 2015 @nwoolls Typeo
Permalink
Failed to load latest commit information.
Installer Update version info May 2, 2015
MultiMiner.Blockchain Update version info May 2, 2015
MultiMiner.CoinApi Update version info May 2, 2015
MultiMiner.CoinChoose.Tests Simplifying the namespace depth and heirarchy Feb 13, 2014
MultiMiner.CoinChoose Update version info May 2, 2015
MultiMiner.CoinWarz.Tests Update tests - been too long, slacking Nov 21, 2014
MultiMiner.CoinWarz Update version info May 2, 2015
MultiMiner.Coinbase.Tests Update tests - been too long, slacking Nov 21, 2014
MultiMiner.Coinbase Update version info May 2, 2015
MultiMiner.Discovery.Tests Tune test parameters to speed them up where possible Nov 21, 2014
MultiMiner.Discovery Update version info May 2, 2015
MultiMiner.Engine.Tests Remove / rewrite slow tests with questionable benefit Nov 21, 2014
MultiMiner.Engine Update version info May 2, 2015
MultiMiner.Example Retarget version 4.0 of the .NET Framework Jan 26, 2015
MultiMiner.ExchangeApi Update version info May 2, 2015
MultiMiner.MobileMiner.Embed Typeo May 2, 2015
MultiMiner.MobileMiner.Tests Remove test(s) Dec 24, 2014
MultiMiner.MobileMiner Update version info May 2, 2015
MultiMiner.MultipoolApi Update version info May 2, 2015
MultiMiner.NiceHash Update version info May 2, 2015
MultiMiner.Remoting.Tests Update tests - been too long, slacking Nov 21, 2014
MultiMiner.Remoting Update version info May 2, 2015
MultiMiner.Services.Tests Update tests - been too long, slacking Nov 21, 2014
MultiMiner.Services Update version info May 2, 2015
MultiMiner.Stats.Tests Update tests - been too long, slacking Nov 21, 2014
MultiMiner.Stats Update version info May 2, 2015
MultiMiner.TUI.Tests Update tests for 4.0 Feb 8, 2015
MultiMiner.TUI Update version info May 2, 2015
MultiMiner.UX.Tests Update tests for 4.0 Feb 8, 2015
MultiMiner.UX Update version info May 2, 2015
MultiMiner.Update.Tests Update tests - been too long, slacking Nov 21, 2014
MultiMiner.Update Update version info May 2, 2015
MultiMiner.Utility.Tests Update tests for 4.0 Feb 8, 2015
MultiMiner.Utility Update version info May 2, 2015
MultiMiner.WhatMine Update version info May 2, 2015
MultiMiner.WhatToMine Update version info May 2, 2015
MultiMiner.Win.Tests Update tests for 4.0 Feb 8, 2015
MultiMiner.Win Update version info May 2, 2015
MultiMiner.Xgminer.Api.Client Retarget version 4.0 of the .NET Framework Jan 26, 2015
MultiMiner.Xgminer.Api.Tests Update tests for method signature changes Jan 2, 2015
MultiMiner.Xgminer.Api Update version info May 2, 2015
MultiMiner.Xgminer.Discovery.Tests Update tests for 4.0 Feb 8, 2015
MultiMiner.Xgminer.Discovery Update version info May 2, 2015
MultiMiner.Xgminer.Tests Update tests - been too long, slacking Nov 21, 2014
MultiMiner.Xgminer Update version info May 2, 2015
Newtonsoft.Json/net35 Minor updates to the project and references structure for Mono / Mono… Feb 5, 2014
RPC-API-Test Fix boolean logic in the RPC API test Jan 4, 2015
Screenshots Add TUI screenshots for 4.0 Feb 9, 2015
.gitignore Ignore IDE-specific VS vNext files Oct 5, 2014
LICENSE Adding MIT license file Jul 15, 2013
MultiMiner.Tests.sln Update tests for 4.0 Feb 8, 2015
MultiMiner.sln Introduce a basic TUI (console app) for MultiMiner Jan 16, 2015
README.md Remove hardware donations section, never happens Mar 29, 2015

README.md

MultiMiner

Your coins. Your pools. Your way.

MultiMiner is a graphical application for crypto-coin mining on Windows, OS X and Linux. MultiMiner simplifies switching individual devices (GPUs, ASICs, FPGAs) between crypto-currencies such as Bitcoin and Litecoin.

MultiMiner uses the underlying mining engine (bfgminer) to detect available mining devices and then presents a user interface for selecting the coins you'd like to mine.

Main Screen

MultiMiner also offers several views, allowing you to display as much or as little information as you like.

Brief View

For new users, MultiMiner includes a Getting Started wizard that walks you through selecting an engine, a coin, a pool, and configuring MobileMiner.

Getting Started

MultiMiner will automatically download and install the latest version of bfgminer, making it simple for the new user to get started.

Downloading and Installing Cgminer

You can then use the Configure Coins dialog to setup each coin that you would like to mine along with their pools, including support for load balancing.

Configure Coins

MultiMiner supports automatically mining the most profitable coins based on a set of configurable strategies. Profitability information is updated regularly from CoinChoose.com.

Configure Strategies

MultiMiner also supports features such as relaunching crashed miners, starting with Windows, minimizing to the notification area, and mining on startup.

Settings

You can also use the interface provided by MultiMiner to adjust advanced settings such as API white-listing, disabling GPU mining, and automatically adjusting mining intensity based on the computer's idle time.

Advanced Miner Settings

Finally, MultiMiner supports MobileMiner, an open API with mobile apps for remotely monitoring and controlling your rigs.

MobileMiner

MobileMiner - Android

MobileMiner - Windows Phone

By entering your MobileMiner email address and application key in the Configure Settings dialog, you will be able to remotely monitor and control your rigs without having to open any firewalls or forward any ports.

Downloads

You can download installers and zip files for Windows, OS X, Linux and Mono on the GitHub Releases page.

Drivers

Depending on your OS and the mining devices you plan on using you will need one or more of the following drivers / kernel extensions installed:

Windows Installation

  1. Download and run the installer (.exe) file at the above link and follow instructions

The installer runs without needing admin rights and does not install to Program Files so as not to be intrusive. However, if you prefer you can use the zip file:

  1. Download and extract the .zip file at the GitHub Releases page
  2. Launch MultiMiner.Win.exe to get started

OS X Installation

  1. Install Xquartz available here
  2. Install the latest version of Mono
  3. Download and extract the .app.zip file at the GitHub Releases page
  4. Launch MultiMiner.app to get started

MultiMiner will automatically download redistributable binaries of bfgminer from the xgminer-osx project.

Main Screen - OS X

Linux Installation (Debian-Based)

  1. Install the latest version of Mono

    sudo apt-get install mono-complete
    
  2. Install your chosen mining engine

    sudo add-apt-repository ppa:unit3/bfgminer
    sudo apt-get update
    sudo apt-get install bfgminer
    
  3. Download and extract the .zip file at the GitHub Releases page

  4. Run MultiMiner.Win.exe using mono:

    mono MultiMiner.Win.exe
    

Main Screen - Linux

Generic Mono Installation

  1. Download and extract the zip file at the GitHub Releases page
  2. Install bfgminer. For OS X, you can find packages and for doing so here and instructions for using them here.
  3. Install X11. Under OS X you should install Xquartz available here.
  4. Install the latest version of Mono.
  5. Run MultiMiner.Win.exe using mono:

    mono MultiMiner.Win.exe
    

FAQ

  • How do I restart the setup wizard? How do I delete all my MultiMiner settings and start over?
    • Reset settings by deleting the contents of %appdata%\MultiMiner (type that into the address bar in Windows Explorer). Be sure to quit MultiMiner before you delete the contents. Then, restart MultiMiner.
  • Should I modify my GPU settings (overclock, undervolt, etc) with a utility like MSI Afterburner, or via config flags in MultiMiner?
    • Utilities like MSI Afterburner are recommended. Relying on bfgminer (via the config flags in MultiMiner) to do the clocking and fan speed does work, but if the bfgminer crashes it leaves things over/under-clocked/volted. GPU utilities seems to be more reliable.
  • I found a question and answer in the Support thread below (or through gosh darned trial and error) that I wish had been here in the FAQ - how do I save the next visitor all the trouble I went through?
    • Simple! Make a pull request to add to the FAQ, or email your Q and A to cooper dot marcus at gmail dot com (Qs without As will be ignored) and he'll add it to the FAQ for you.

Support

The official forums for MultiMiner can be found here.

Source Code

The source code is structured in such a way that it should be fairly easy to use and re-use for other projects:

  • MultiMiner.Xgminer is an assembly for controlling the bfgminer executable - e.g. launching and enumerating devices
  • MultiMiner.Xgminer.Api assists in communicating with the underlying miner via the RPC API
  • MultiMiner.Coinchoose assists in consuming the cypto-currency information available at CoinChoose.com
  • MultiMiner.MobileMiner facilitates communicating with the MobileMiner REST API
  • MultiMiner.Engine is an assembly that can be used to interact with all functionality found in MultiMiner, but without a UI - useful for creating front-ends for other OS's
  • MultiMiner.Win is the Windows Forms application

Source Code Example

This simple example shows how to use MultiMiner.Xgminer.dll and MultiMiner.Xgminer.Api.dll to install bfgminer, iterate through available mining devices, and launch the miner.

Afterwards the bfgminer RPC API is used to output the miner hashrate for a minute before the mining process is stopped. You can try this code out yourself in the MultiMiner.Example project.

MultiMiner.Api.Example

//examples of using MultiMiner.Xgminer.dll and MultiMiner.Xgminer.Api.dll

//download and install the latest version of bfgminer
const string executablePath = @"D:\bfgminer\";
const string executableName = "bfgminer.exe";

Console.WriteLine("Downloading and installing {0} from {1} to the directory {2}",
    executableName, Xgminer.Installer.GetMinerDownloadRoot(), executablePath);

//download and install bfgminer from the official website
Xgminer.Installer.InstallMiner(executablePath);
try
{
    //create an instance of Miner with the downloaded executable
    MinerConfiguration minerConfiguration = new MinerConfiguration()
    {
        ExecutablePath = Path.Combine(executablePath, executableName)
    };
    Miner miner = new Miner(minerConfiguration);

    //use it to iterate through devices
    List<Device> deviceList = miner.ListDevices();

    Console.WriteLine("Using {0} to list available mining devices", executableName);

    //output devices
    foreach (Device device in deviceList)
        Console.WriteLine("Device detected: {0}\t{1}\t{2}", device.Kind, device.Driver, device.Name);

    //start mining if there are devices
    if (deviceList.Count > 0)
    {
        Console.WriteLine("{0} device(s) detected, mining Bitcoin on Bitminter using all devices", deviceList.Count);

        //setup a pool
        MiningPool pool = new MiningPool()
        {
            Host = "mint.bitminter.com",
            Port = 3333,
            Username = "nwoolls_deepcore",
            Password = "deepcore"
        };
        minerConfiguration.Pools.Add(pool);

        //specify algorithm
        minerConfiguration.Algorithm = CoinAlgorithm.SHA256;

        //disable GPU mining
        minerConfiguration.DisableGpu = true;

        //specify device indexes to use
        for (int i = 0; i < deviceList.Count; i++)
            minerConfiguration.DeviceDescriptors.Add(deviceList[i]);

        //enable RPC API
        minerConfiguration.ApiListen = true;
        minerConfiguration.ApiPort = 4028;

        Console.WriteLine("Launching {0}", executableName);

        //start mining
        miner = new Miner(minerConfiguration);
        System.Diagnostics.Process minerProcess = miner.Launch();
        try
        {
            //get an API context
            Xgminer.Api.ApiContext apiContext = new Xgminer.Api.ApiContext(minerConfiguration.ApiPort);
            try
            {
                //mine for one minute, monitoring hashrate via the API
                for (int i = 0; i < 6; i++)
                {
                    Thread.Sleep(1000 * 10); //sleep 10s

                    //query the miner process via its RPC API for device information
                    List<Xgminer.Api.Responses.DeviceInformationResponse> deviceInformation = apiContext.GetDeviceInformation();

                    //output device information
                    foreach (Xgminer.Api.Responses.DeviceInformationResponse item in deviceInformation)
                        Console.WriteLine("Hasrate for device {0}: {1} current, {2} average", item.Index,
                                item.CurrentHashrate, item.AverageHashrate);
                }
            }
            finally
            {
                Console.WriteLine("Quitting mining via the RPC API");

                //stop mining, try the API first
                apiContext.QuitMining();
            }
        }
        finally
        {
            Console.WriteLine("Killing any remaining process");

            //then kill the process
            try
            {
                minerProcess.Kill();
                minerProcess.WaitForExit();
                minerProcess.Close();
            }
            catch (InvalidOperationException ex)
            {
                //already closed
            }
        }
    }
    else
    {
        Console.WriteLine("No devices capable of mining detected");
    }
}
finally
{
    Console.WriteLine("Cleaning up, deleting directory {0}", executablePath);
    Directory.Delete(executablePath, true);
}

Console.WriteLine("Press any key to exit");
Console.ReadKey();

License

Copyright (C) 2013 Nathanial Woolls

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.