Long-awaited implementation of equihash (200.9) protocol for Yiimp crypto mining pool. Based on original stratum sources forked on this commit.
Currently app is in developement state (!), it able to receive getblocktemplate
from daemons, broadcast job to miners, accept and validate solutions, but it still not able to acquire current network diff to determine when accepted share is a block and when it should be send via . Work in progress, so, follow the updates.submitblock
to daemon
verifyEH
function.getblocktemplate
and stratum protocol for miners. To enable this mode use CFLAGS += -DNO_MYSQL
flag in Makefile
. Coin daemons credentials should be hardcoded in coins_data[NUM_COINS][NUM_PARAMS]
array in db.cpp
.-c=
param in password field in local (non mysql mode).coinbasetxn
field of getblocktemplate
. So, if coin has sapling active coinbase tx will be with version 4 and needed versiongroupid
set.How can i enable additional logging to see blockhashes, diffs, etc.?
Add the following lines in your equihash.conf
:
[DEBUGLOG]
client = 1
hash = 1
socket = 1
rpc = 0
list = 1
remote = 1
How can i start Stratum in solo mode?
Compile it with NO_MYSQL
flag as mentioned above, then place your equihash.conf
in same directory with stratum
binary and start it like ./stratum equihash
. Don't forget to fill coins array in db.cpp
for solo mode.
Where exactly should i fill coins array for local mode?
https://github.com/DeckerSU/yiimp-stratum-equihash/blob/ad5028798aac0be059a37e6afa8b6071544a6aa4/db.cpp#L230 - here. Also, don't forget to change NUM_COINS
if you plan to add more than one coin.
Any build instructions for Debian 10 Buster?
Yes, thx to @ca333 and @ComputerGenie:
$ git clone https://github.com/DeckerSU/yiimp-stratum-equihash
$ cd yiimp-stratum-equihash/
$ make -C iniparser/ -j$(nproc)
# apt install default-libmysqlclient-dev
$ make -C algos/ -j$(nproc)
$ make -C sha3 -j$(nproc)
# apt install libnghttp2-dev librtmp-dev libssh2-1 libssh2-1-dev libldap2-dev libidn11-dev libpsl-dev
# apt install libkrb5-dev
$ make -f Makefile -j$(nproc)
p.s. If your default compiler is gcc 8.3.0 (Debian 8.3.0-6)
you possible will get crash of app after share received. In this case you can try to build msvc
branch. Do:
make clean
git checkout msvc
git pull
stratum
msvc
branch already contains some fixes and can be build under Windows (with MSVC) and under Linux (with gcc). So, if you have crash with gcc-8, just try msvc
branch instead of master
. This is temporary solution till all needed fixes will be merged in master
branch.
What's the relationship between this stratum diff, z-nomp/s-nomp/k-nomp diff and NiceHash diff?
It's relatively easy, look on following table:
Yiimp Stratum | Nomp | Nicehash |
---|---|---|
1 | 0.03125 (1/32) | 15.058823529 (256/17) |
2176 | 68 | 32768 |
4352 | 136 | 65536 |
8704 | 272 | 131072 |
This implementation have two non-documented options, see the line: https://github.com/DeckerSU/yiimp-stratum-equihash/blob/f9e5c48d8e018f4873683883224bfaffad8f50d8/client_submit.cpp#L218
templ->nbits
stratum will send block to daemon when share_hash <= net_target
, where net target is calculated from nbits
received in getblocktemplate
. templ->nbits_from_target
stratum will send block to daemon when share_hash <= net_target
also, but net_target
here will be exactly match target
from getblocktemplate
.Both options are worked as expected.
Let's try to understand it on a small example:
04:32:47: blockhash: 00635db56f0646cedc5091103390b60e30196e9f2d729646c7a11c536ef75d7f
04:32:47: loc target: 007fff80ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
04:32:47: net target: 0000459fba000000000000000000000000000000000000000000000000000000
04:32:47: --- target: 0071a00000000000000000000000000000000000000000000000000000000000
04:32:47: share diff: 2.576
04:32:47: client diff: 2.000
04:32:47: coin diff: 14174.652
04:32:47: 0000635db56f0000 actual
04:32:47: 00007fff80000000 target
04:32:47: 000000049f96bf04 coin
We received a block candidate from client with hash 00635db56f0646cedc5091103390b60e30196e9f2d729646c7a11c536ef75d7f
. If we will use (1) (see above) this hash will be compared with net target
(which matches nbist
in getblocktemplate
) and if hash <= net target
it will be send to daemon. If we will use (2), int this case hash will be compared with --- target
, which matches target
field in getblocktemplate
. So, options above affects on with which target will be compared block candidate received from miner to determine what is it share or block.
In this example:
00635db56
vs. 0000459f
(target from gbt.nbist
)00635db56
vs. 0071a000
(target from gbt.target
)000179a65539ff4d4f358f05306b1d715293f01581fb959ecaa4894b1038829b
If you would like to support this project developement, you can simply do it by send some KMD or assetchains on RHNSpVd5T6efj98CioNQHGLcfAZ6qecnQ6
.