-
Notifications
You must be signed in to change notification settings - Fork 0
Mining
- Introduction to Vapory mining (main wiki)
At Frontier, the first release of Vapory, you'll just need a) a GPU and b) an Vapory client, Gvap. CPU mining will be possible but too inefficient to hold any value.
At the moment, Gvap only includes a CPU miner, and the team is testing a GPU miner branch, but this won't be part of Frontier.
The C++ implementation of Vapory also offers a GPU miner, both as part of Eth (its CLI), AlethZero (its GUI) and EthMiner (the standalone miner).
NOTE: Ensure your blockchain is fully synchronised with the main chain before starting to mine, otherwise you will not be mining on the main chain.
When you start up your vapory node with gvap
it is not mining by default. To start it in mining mode, you use the --mine
command line option. The -minerthreads
parameter can be used to set the number parallel mining threads (defaulting to the total number of processor cores).
gvap --mine --minerthreads=4
You can also start and stop CPU mining at runtime using the console. miner.start
takes an optional parameter for the number of miner threads.
> miner.start(8)
true
> miner.stop()
true
Note that mining for real vapor only makes sense if you are in sync with the network (since you mine on top of the consensus block). Therefore the vap blockchain downloader/synchroniser will delay mining until syncing is complete, and after that mining automatically starts unless you cancel your intention with miner.stop()
.
In order to earn vapor you must have your vaporbase (or coinbase) address set. This vaporbase defaults to your primary account. If you don't have an vaporbase address, then gvap --mine
will not start up.
You can set your vaporbase on the command line:
gvap --vaporbase 1 --mine 2>> gvap.log // 1 is index: second account by creation order OR
gvap --vaporbase '0xa4d8e9cae4d04b093aac82e6cd355b6b963fb7ff' --mine 2>> gvap.log
You can reset your vaporbase on the console too:
miner.setEtherbase(vap.accounts[2])
Note that your vaporbase does not need to be an address of a local account, just an existing one.
There is an option to add extra Data (32 bytes only) to your mined blocks. By convention this is interpreted as a unicode string, so you can set your short vanity tag.
miner.setExtra("ΞTHΞЯSPHΞЯΞ")
...
debug.printBlock(131805)
BLOCK(be465b020fdbedc4063756f0912b5a89bbb4735bd1d1df84363e05ade0195cb1): Size: 531.00 B TD: 643485290485 {
NoNonce: ee48752c3a0bfe3d85339451a5f3f411c21c8170353e450985e1faab0a9ac4cc
Header:
[
...
Coinbase: a4d8e9cae4d04b093aac82e6cd355b6b963fb7ff
Number: 131805
Extra: ΞTHΞЯSPHΞЯΞ
...
}
See also this proposal
You can check your hashrate with miner.hashrate, the result is in H/s (Hash operations per second).
> miner.hashrate
712000
After you successfully mined some blocks, you can check the vapor balance of your vaporbase account. Now assuming your vaporbase is a local account:
> vap.getBalance(vap.coinbase).toNumber();
'34698870000000'
In order to spend your earnings you will need to have this account unlocked.
> personal.unlockAccount(vap.coinbase)
Password
true
You can check which blocks are mined by a particular miner (address) with the following code snippet on the console:
function minedBlocks(lastn, addr) {
addrs = [];
if (!addr) {
addr = vap.coinbase
}
limit = vap.blockNumber - lastn
for (i = vap.blockNumber; i >= limit; i--) {
if (vap.getBlock(i).miner == addr) {
addrs.push(i)
}
}
return addrs
}
// scans the last 1000 blocks and returns the blocknumbers of blocks mined by your coinbase
// (more precisely blocks the mining reward for which is sent to your coinbase).
minedBlocks(1000, vap.coinbase);
//[352708, 352655, 352559]
Note that it will happen often that you find a block yet it never makes it to the canonical chain. This means when you locally include your mined block, the current state will show the mining reward credited to your account, however, after a while, the better chain is discovered and we switch to a chain in which your block is not included and therefore no mining reward is credited. Therefore it is quite possible that as a miner monitoring their coinbase balance will find that it may fluctuate quite a bit.
The logs show locally mined blocks confirmed after 5 blocks. At the moment you may find it easier and faster to generate the list of your mined blocks from these logs.
Mining success depends on the set block difficulty. Block difficulty dynamically adjusts each block in order to regulate the network hashing power to produce a 12 second blocktime. Your chances of finding a block therefore follows from your hashrate relative to difficulty. The time you need to wait you are expected to find a block can be estimated with the following code:
INCORRECT...CHECKING
etm = vap.getBlock("latest").difficulty/miner.hashrate; // estimated time in seconds
Math.floor(etm / 3600.) + "h " + Math.floor((etm % 3600)/60) + "m " + Math.floor(etm % 60) + "s";
// 1h 3m 30s
Given a difficulty of 3 billion, a typical CPU with 800KH/s is expected to find a block every ....?
The algorithm is memory hard and in order to fit the DAG into memory, it needs 1-2GB of RAM on each GPU. If you get Error GPU mining. GPU memory fragmentation?
you havent got enough memory.
The GPU miner is implemented in OpenCL, so AMD GPUs will be 'faster' than same-category NVIDIA GPUs.
ASICs and FPGAs are relatively inefficient and therefore discouraged.
To get openCL for your chipset and platform, try:
- http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated-parallel-processing
- http://developer.amd.com/tools-and-sdks/graphics-development/display-library-adl-sdk/
download: ADL_SDK8.zip
and AMD-APP-SDK-v2.9-1.599.381-GA-linux64.sh
./AMD-APP-SDK-v2.9-1.599.381-GA-linux64.sh
ln -s /opt/AMDAPPSDK-2.9-1 /opt/AMDAPP
ln -s /opt/AMDAPP/include/CL /usr/include
ln -s /opt/AMDAPP/lib/x86_64/* /usr/lib/
ldconfig
reboot
apt-get install fglrx-updates
// wget, tar, opencl
sudo aticonfig --adapter=all --initial
sudo aticonfig --list-adapters
* 0. 01:00.0 AMD Radeon R9 200 Series
* - Default adapter
The following instructions are, for the most part, relevant to any system with Ubuntu 14.04 and a Nvidia GPU. Setting up an EC2 instance for mining
wget http://developer.download.nvidia.com/compute/cuda/7_0/Prod/local_installers/cuda_7.0.29_mac.pkg
sudo installer -pkg ~/Desktop/cuda_7.0.29_mac.pkg -target /
brew update
brew tap vapory/vapory
brew reinstall cpp-vapory --with-gpu-mining --devel --headless --build-from-source
You check your cooling status:
aticonfig --adapter=0 --od-gettemperature
The official Frontier release of gvap
only supports a CPU miner natively. We are working on a GPU miner, but it may not be available for the Frontier release. Gvap however can be used in conjunction with vapminer
, using the standalone miner as workers and gvap
as scheduler communicating via JSON-RPC.
The C++ implementation of Vapory (not officially released) however has a GPU miner. It can be used from vap
, AlethZero
(GUI) and vapMiner
(the standalone miner).
You can install this via ppa on linux, brew tap on MacOS or from source.
On MacOS:
brew install cpp-vapory --with-gpu-mining --devel --build-from-source
On Linux:
apt-get install cpp-vapory
On Windows: https://github.com/vaporyco/cpp-vapory/wiki/Building-on-Windows
To mine with vap
:
vap -m on -G -a <coinbase> -i -v 8 //
To install vapminer
from source:
cd cpp-vapory
cmake -DVAPASHCL=1 -DGUI=0
make -j4
make install
To set up GPU mining you need a coinbase account. It can be an account created locally or remotely.
gvap account new
gvap --rpc --rpccorsdomain localhost 2>> gvap.log &
vapminer -G // -G for GPU, -M for benchmark
tail -f gvap.log
vapminer
communicates with gvap on port 8545 (the default RPC port in gvap). You can change this by giving the --rpcport
option to gvap
.
Ethminer will find get on any port. Note that you need to set the CORS header with --rpccorsdomain localhost
. You can also set port on vapminer
with -F http://127.0.0.1:3301
. Setting the ports is necessary if you want several instances mining on the same computer, although this is somewhat pointless. If you are testing on a private cluster, we recommend you use CPU mining instead.
Also note that you do not need to give gvap
the --mine
option or start the miner in the console unless you want to do CPU mining on TOP of GPU mining.
If the default for vapminer
does not work try to specify the OpenCL device with: --opencl-device X
where X is 0, 1, 2, etc.
When running vapminer
with -M
(benchmark), you should see somvaping like:
Benchmarking on platform: { "platform": "NVIDIA CUDA", "device": "GeForce GTX 750 Ti", "version": "OpenCL 1.1 CUDA" }
Benchmarking on platform: { "platform": "Apple", "device": "Intel(R) Xeon(R) CPU E5-1620 v2 @ 3.70GHz", "version": "OpenCL 1.2 " }
To debug gvap
:
gvap --rpccorsdomain "localhost" --verbosity 6 2>> gvap.log
To debug the miner:
make -DCMAKE_BUILD_TYPE=Debug -DVAPASHCL=1 -DGUI=0
gdb --args vapminer -G -M
Note hashrate info is not available in gvap
when GPU mining. Check your hashrate with vapminer
, miner.hashrate
will always report 0.
vapminer
can be used in conjunction with vap
via rpc
vap -i -v 8 -j // -j for rpc
vapminer -G -M // -G for GPU, -M for benchmark
tail -f gvap.log
or you can use vap
to GPU mine by itself:
vap -m on -G -a <coinbase> -i -v 8 //
- vapor-proxy, a web interface for mining rigs (supports solo and pool mining proxy with web interface and rigs availability monitoring)
- vapory forum mining FAQ live update
- yates randall mining video
- https://blog.vapory.org/2014/07/05/stake/
- https://blog.vapory.org/2014/10/03/slasher-ghost-developments-proof-stake/
- https://blog.vapory.org/2014/06/19/mining/
- https://github.com/vaporyco/wiki/wiki/Ethash
- Benchmarking results for GPU mining
- historic moment
- live mining statistic
- netstat vapory network monitor
golang <3