This document aims to assist users in deploying the SRI software stack efficiently. Stratum V2 as a protocol is flexible, and allows users to run multiple configurations. In the getting started guide, we’re focusing on running roles (opens new window) which allow miners to construct their own block templates.
Rust installed on your machine. If it's not:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
There are two primary ways to use all roles:
Objective: Give Stratum V2 a try, mine blocks on the testnet with minimal setup.
git clone https://github.com/stratum-mining/stratum.git
cd roles/jd-client/config-examples/
cargo run -- -c jdc-config-hosted-example.toml
cd roles/translator/config-examples/
cargo run -- -c tproxy-config-local-jdc-example.toml
Connect mining device - Translator Proxy will be running on port 34255
, so you will need just to edit your mining device(s) configuration, adding the line:
stratum+tcp://<tProxy ip>:34255
If you don't have a physical miner, you can do tests with CPUMiner.
Setup the correct CPUMiner for your OS:
On the CPUMiner directory:
./minerd -a sha256d -o stratum+tcp://localhost:34255 -q -D -P
Depending on mining device you do run, you may have to adjust tproxy-config-local-jdc-example.toml
file in order to adjust the min_individual_miner_hashrate
and channel_nominal_hashrate
parameters accordingly
Objective: Establish a complete, self-hosted Stratum V2 environment for comprehensive testing and deeper understanding of all components.
Download a release from Sjors' fork of Bitcoin Core from https://github.com/Sjors/bitcoin/releases
Edit the bitcoin.conf
file stored in ~/.bitcoin/
by adding:
[testnet4]
server=1
rpcuser=username
rpcpassword=password
Unpack the Template Provider. For example, assuming you downloaded bitcoin-sv2-tp-0.1.12-x86_64-linux-gnu.tar.gz
:
tar xvf bitcoin-sv2-tp-0.1.12-x86_64-linux-gnu.tar.gz
⚠️ Note: macOS binaries are not code signed. Read release notes for instructions on how to proceed.
Start the Template Provider.
./bitcoin-sv2-tp-0.1.12/bin/bitcoind -testnet4 -sv2 -sv2port=8442 -debug=sv2
⚠️ Note: you need to wait until bitcoind
is fully synced with the testnet before you proceed.
Optional paremeters:
There are optional parameters which can be used to better manage the Template Provider:
sv2interval
- sets how often a new template is built (default is 30s)sv2feedelta
- defines the delta fees to reach before sending new templates to downstreams (default is 1000 sats)loglevel=sv2:trace
to get more detailed debuggingFor example:
./bitcoin-sv2-tp-0.1.12/bin/bitcoind -testnet4 -sv2 -sv2port=8442 -sv2interval=20 -sv2feedelta=1000 -debug=sv2 -loglevel=sv2:trace
This way new templates are constructed every 20 seconds (taking the most profitable txs from the mempool) and they are sent downstream if new fees collected are more than 1000 sats.
git clone https://github.com/stratum-mining/stratum.git
cd roles/pool/config-examples
cargo run -- -c pool-config-local-tp-example.toml
cd roles/jd-server/config-examples
cargo run -- -c jds-config-local-example.toml
cd roles/jd-client/config-examples/
cargo run -- -c jdc-config-local-example.toml
cd roles/translator/config-examples/
cargo run -- -c tproxy-config-local-jdc-example.toml
Connect mining device - Translator Proxy will be running on port 34255
, so you will need just to edit your mining device(s) configuration, adding the line:
stratum+tcp://<tProxy ip>:34255
If you don't have a physical miner, you can do tests with CPUMiner.
Setup the correct CPUMiner for your OS:
On the CPUMiner directory:
./minerd -a sha256d -o stratum+tcp://localhost:34255 -q -D -P
Once set up, monitor the machines and role logs for any valid blocks found.
Following pictures detail the logs from tProxy, JDC, and Pool when a block is found.
Pool logs
Job Declarator Client (JDC) logs
Translation Proxy tProxy logs
If you didn’t change anything in the configuration files present in every role subdirectory, the valid block mined will be recognized by the string Stratum V2 SRI Pool (0x5374726174756d2076322053524920506f6f6c)
inserted into the scriptSig of the coinbase tx input.
A way to look for it is to check the address tb1qa0sm0hxzj0x25rh8gw5xlzwlsfvvyz8u96w3p8
since the default coinbase output is configured to be a P2WPKH built with a public key = 036adc3bdf21e6f9a0f0fb0066bf517e5b7909ed1563d6958a10993849a7554075
You can perform a search on one of the following block explorers:
To customize the string which is inserted into the scriptSig
of the coinbase tx input, you need to run every role locally. To make changes, edit the pool_signature
field present in:
Double check that the strings are equal and that you save your changes in both configuration files!
To customize the coinbase tx output script, you need to run every role locally. To make changes, edit the coinbase_output
field present in:
You can use any of the following script types: P2PK,P2PKH, P2WPKH, P2SH, P2WSH, P2TR. In case a public key is required, as explained in the config files, you can start by creating a testnet wallet on mobile, using Green wallet, or a desktop one, using Electrum wallet, and extract the extended public key they provide. At this point, you can derive the child public key to use in the configuration files, using this script (opens new window).
If you get any issue during testing phase, feel free to join our community Discord (opens new window) to get community support or file a bug report on GitHub (opens new window).