With the cryptocurrency space being white-hot I've been very curious and learning all that I can. What better way to understand the core concepts than to start at the root of how cryptocurrency is generated aka mining. So here's some of what I've learned in the process of doing just that, hope you find it useful!
In the simplest terms, the act of mining serves two purposes. One, the miner is essentially providing book-keeping services for the crypto's public ledger aka blockchain by taking recent transactions every few minutes and writing them onto a page of the ledger referred to as a "block".
Although miners have to solve a puzzle / cryptographic function to be able to add their block to the blockchain, whoever is able to do this first, is rewarded with some crypto in exchange for their services.
This brings me to the second purpose, the crypto which is rewarded is considered "mined". This is essentially because it is new currency that's released to the network. All cryptocurrencies have a fixed number that is set to release to the network through this mining process.
As that unreleased currency dwindles down, miners are then incentivized by a reward attached to each transaction in the block. So the transactions that include this reward i.e transaction fee are likely to be processed faster.
Now that we understand the high level concept behind mining, let's figure out what to mine. Naturally, BTC (Bitcoin) or ETH (Ethereum) would be our obvious candidates as they are the most well known and popular currencies at the moment. Although the issue with both is the fact that they are not very profitable to mine using a basic CPU or GPUs. If you are starting out, I'm assuming that's pretty much what you will have access to.
In most cases, the popularity of a currency has a direct correlation with it's mining difficulty. The more miners that join the pool, the faster new pages are written on the ledger. To keep the number of pages created steady, the difficulty of the puzzle is increased at a regular interval.
So out of the top 10 currencies on coinmarketcap.com, the best candidate for CPU or GPU mining would be XMR (Monero) since it's based on a proof-of-work algorithm called CryptoNight which is designed to be suitable for ordinary CPU and GPUs and is resistant to mining with special hardware i.e ASIC. So having said that, let's pick XMR. If you need some more convincing, here's a good list of why XMR is a good bet.
So the next thing we'd have to figure out is where to store the proceeds from the mining. For XMR, the options are somewhat limited since it's still a currency in development. The best bet would be to download & install the official wallet.
Alternatively, you can setup an account in one of the online exchanges like Bittrex or Kraken and use their built-in wallet, although it's not recommended to use that as a long term storage for large amounts of currency.
Once you have this setup, take note of your wallet's address. We will need this in the next steps.
So while XMR is friendly to solo mining, the chances of earning a reward are low. So in order to boost our chances, we'll want to share our processing power in a network of other miners. We can then earn our reward according to the amount of hashing power we contributed towards creating a block.
Both have a good balance of # of miners and the hash rate. You don't want to join a pool with a lot of miners because your earnings can get very diluted, you'll want to stick to a good balance between hashing power and the # of members in a pool.
So now we are finally ready to start mining. We have two options, we can either use the CPU or the GPU to do the mining. Let's look at both the options and how they work.
sudo docker run -itd -e username=[YOUR_WALLET_ADDRESS] servethehome/monero_cpu_xmrpooldotnet
sudo docker run -itd -e username=[YOUR_WALLET_ADDRESS] servethehome/monero_cpu_moneropool
Again huge thanks to ServeTheHome for providing images for Nvidia GPUs which makes GPU mining super simple without having to install CUDA dependencies on your machine.
Although what you will need to install is nvidia-docker so the Docker container can utilize your GPU.
Installation on Ubuntu should be pretty straightforward:
# Install nvidia-docker and nvidia-docker-plugin wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb # Test nvidia-smi nvidia-docker run --rm nvidia/cuda nvidia-smi
Checkout installation steps on their repo for other distros. Once you have that working you can spin up the Docker instance:
NV_GPU=0 nvidia-docker run -itd -e username=[YOUR_WALLET_ADDRESS] --name GPU0_monero servethehome/monero_gpu_nv_xmrpooldotnet
NV_GPU=0 nvidia-docker run -itd -e username=[YOUR_WALLET_ADDRESS] --name GPU0_monero servethehome/monero_gpu_nv_moneropool
If you have multiple GPUs you will need to add
NV_GPU=0 prefix as shown above and spin up additional containers for each GPU you want to target. If you only have one, you can skip the prefix and explicit names.
Depending on your hardware and pool you might have to wait a day or so to see some rewards come your way. You can checkout this calculator to figure out what kind of return you can expect based on different variables.
Your best bet is to run this on a spare machine and leave it on for few days. You are probably not going to become the next crypto millionaire but it's an excellent opportunity to learn more about the crypto space and Docker containers.
May the odds be with you!