btccom / btcpool-ABANDONED

backend of pool.btc.com
https://pool.btc.com
MIT License
635 stars 406 forks source link

NiceHash's DaggerHashimoto order always be DEAD when pool's EthereumStratum/1.0.0 protocol enabled #131

Closed YihaoPeng closed 6 years ago

YihaoPeng commented 6 years ago

This is a bug report I submitted to NiceHash. I look forward to receiving timely feedback here.


Hello, I am a developer of a Ethereum (DaggerHashimoto) mining pool. At present, my pool has encountered compatibility issues with NiceHash. I have done a lot of work, but still can't make the order work. Maybe it's a issue in NiceHash and not in my pool.

The problem is that when the pool enabled the EthereumStratum/1.0.0 protocol, the order status is always DEAD. When the pool disabled the protocol (so that the normal Stratum protocol is used), the order status returns to normal.

As we know, EthereumStratum/1.0.0 is a protocol that proposed by NiceHash to improve the efficiency of mining in Ethereum: https://www.nicehash.com/sw/Ethereum_specification_R1.txt

I think I have implemented the protocol by following the specification completely. And my Nonce size has been set to 2 bytes, and the lowest difficulty has been set to 1. NiceHash's pool validator did not detect any compatibility issues. And the ethminer (https://github.com/ethereum-mining/ethminer/releases) that also supports the EthereumStratum/1.0.0 protocol can successfully mine in my pool.

So, I have no idea. I hope you can investigate this issue with me.

The pool's setting (the main pool server that 100% follows the EthereumStratum/1.0.0 specification): Pool host: ***** Pool port: 3333 Pool user: stiger.x Pool pass: x Algorithm: DaggerHashimoto

The backup pool's setting (there are extra fields in protocol texts): Pool host: us-eth.ss.btc.com Pool port: 3333 Pool user: stiger.x Pool pass: md=4294967296 Algorithm: DaggerHashimoto

None of the above two pool settings can work.

The attachment contains some screenshots:

YihaoPeng commented 6 years ago

I finally found the reason. It is because the return value of "mining.authorized" lacks the error field.

It should be: {"id":3,"result":true,"error":null}

But be:

{"id":3,"result":true}

Add field "error" and the order works.