9 releases
0.3.1 | Nov 30, 2022 |
---|---|
0.1.7 | Dec 12, 2018 |
0.1.6 | May 8, 2018 |
#5 in #difficulty
44KB
928 lines
Nano work server
This project is a dedicated work server for the Nano cryptocurrency. See the documentation for details on work generation and the current network difficulty.
nano-work-server supports the work_generate
, work_cancel
, and work_validate
commands from the Nano RPC.
For details on these commands, see the Nano RPC documentation.
To see available command line options, run nano-work-server --help
.
If using more than one work peer, give the flag --shuffle
. This makes it so that the next request is picked randomly instead of sequentially, which leads to more efficient work generation with multiple peers, especially when they are not in the same network.
Current base difficulty
0xfffffff800000000
since a75d984. See the Nano work generation guide for more information.
Installation
OpenCL
Ubuntu:
sudo apt install ocl-icd-opencl-dev
Fedora:
sudo dnf install ocl-icd-devel
Windows:
- AMD GPU: OCL-SDK
- Nvidia GPU: CUDA Toolkit
Rust
Linux:
curl https://sh.rustup.rs -sSf | sh
Windows: follow instructions in https://www.rust-lang.org/tools/install
GCC
Ubuntu:
sudo apt install gcc
Fedora:
sudo dnf install gcc
Build
git clone https://github.com/nanocurrency/nano-work-server.git
cd nano-work-server
cargo build --release
Depending on your system configuration and if the OpenCL library cannot be found in the PATH
, it may be necessary to link against explicitly:
cargo rustc --release -- -l OpenCL -L "/path/to/opencl.lib"
Using
nano-work-server --help
Note difficulty values may be outdated in these examples.
-
work_generate
example:{ "action": "work_generate", "hash": "718CC2121C3E641059BC1C2CFC45666C99E8AE922F7A807B7D07B62C995D79E2", "difficulty": "ffffffc000000000", "multiplier": "1.0" // overrides difficulty }
Response:
{ "work": "2bf29ef00786a6bc", "difficulty": "ffffffd21c3933f4", "multiplier": "1.3946469" }
-
work_validate
example:{ "action": "work_validate", "hash": "718CC2121C3E641059BC1C2CFC45666C99E8AE922F7A807B7D07B62C995D79E2", "work": "2bf29ef00786a6bc", "difficulty": "ffffffc000000000", "multiplier": "1.0" // overrides difficulty }
Response:
{ "valid_all": "1", "valid_receive": "1", "difficulty": "ffffffd21c3933f4", "multiplier": "1.3946469" }
-
work_cancel
example:{ "action": "work_cancel", "hash": "718CC2121C3E641059BC1C2CFC45666C99E8AE922F7A807B7D07B62C995D79E2" }
Response:
{ }
Benchmarking
Example request:
{
"action": "benchmark",
"count": "10"
}
Note use a sufficiently high count as work generation is a random process.
Example response:
{
"average": "481",
"count": "10",
"difficulty": "fffffff800000000",
"duration": "4813",
"hint": "Times in milliseconds",
"multiplier": "1"
}
Status
Example request:
{
"action": "status"
}
Example response:
{
"generating": "1",
"queue_size": "3"
}
Troubleshooting
- Linux OpenCL AMD GPU series error:
thread 'main' panicked at 'Failed to create GPU from string "00:00"
- see solution here
Dependencies
~12–23MB
~310K SLoC