<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.bitcoin.it/w/index.php?action=history&amp;feed=atom&amp;title=Stratum_v2</id>
	<title>Stratum v2 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://en.bitcoin.it/w/index.php?action=history&amp;feed=atom&amp;title=Stratum_v2"/>
	<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Stratum_v2&amp;action=history"/>
	<updated>2026-04-25T19:20:53Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Stratum_v2&amp;diff=69970&amp;oldid=prev</id>
		<title>Alejandrobitcoin: page about stratum v2</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Stratum_v2&amp;diff=69970&amp;oldid=prev"/>
		<updated>2023-12-15T17:19:41Z</updated>

		<summary type="html">&lt;p&gt;page about stratum v2&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Stratum v2 =&lt;br /&gt;
&lt;br /&gt;
Before Stratum V2, transaction sets were selected by pools. With this SV2 configuration they’re selected by individual miners, making the network more censorship-resistant. Miners run SV2 firmware, connecting to the SV2 proxy server. Miners can pick their transactions locally and declare them to an SV2 pool.&lt;br /&gt;
The SRI stack is made by the open-source bitcoin community. It allows you to run a few different configurations. The easiest way to test these configurations is to use the SRI role [https://example.com SRI role implementations].&lt;br /&gt;
&lt;br /&gt;
== Most Commonly Used Configurations ==&lt;br /&gt;
&lt;br /&gt;
Below are the most commonly used configurations you can run to get started.&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
* Rust installed on your machine. If it&amp;#039;s not:&lt;br /&gt;
  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  curl --proto &amp;#039;=https&amp;#039; --tlsv1.2 -sSf https://sh.rustup.rs | sh&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Locally clone the Stratum repository:&lt;br /&gt;
  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  git clone https://github.com/stratum-mining/stratum.git&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Config C: SV1 Firmware &amp;gt; Translation Proxy &amp;gt; SV2 Pool ===&lt;br /&gt;
&lt;br /&gt;
This configuration allows mining devices running SV1 firmware to connect to an SV2 Pool through a Translation Proxy (tProxy). The proxy is designed to sit in between a SV1 downstream role (most typically Mining Device(s) running SV1 firmware) and a SV2 upstream role (most typically a SV2 Pool Server).&lt;br /&gt;
&lt;br /&gt;
1. &amp;#039;&amp;#039;&amp;#039;Start SV2 Pool&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
   cd stratum/roles/v2/pool/&lt;br /&gt;
   &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   The pool-config-example.toml is a configuration example which can be copy/paste into /conf directory by the party that is running the SV2 Pool (most typically the pool service provider) to address the most preferred customization. To better understand and learn about information present in the configuration file, check [https://github.com/stratum-mining/stratum/blob/main/roles/v2/pool/README.md this README].&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
   cp pool-config-example.toml ./conf/pool-config.toml&lt;br /&gt;
   cd conf/&lt;br /&gt;
   &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   To run this configuration, for simplicity, you can point the SV2 Pool to our hosted Template Provider (testnet or regtest), commenting/uncommenting the corresponding lines in your pool-config.toml. For example, if you want to use our hosted testnet TP, your config file should be like this:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;source lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
   # SRI Pool config&lt;br /&gt;
authority_public_key = &amp;quot;2di19GHYQnAZJmEpoUeP7C3Eg9TCcksHr23rZCC83dvUiZgiDL&amp;quot;&lt;br /&gt;
authority_secret_key = &amp;quot;2Z1FZug7mZNyM63ggkm37r4oKQ29khLjAvEx43rGkFN47RcJ2t&amp;quot;&lt;br /&gt;
cert_validity_sec = 3600&lt;br /&gt;
test_only_listen_adress_plain =  &amp;quot;0.0.0.0:34250&amp;quot;&lt;br /&gt;
listen_address = &amp;quot;0.0.0.0:34254&amp;quot;&lt;br /&gt;
# list of compressed or uncompressed pubkeys for coinbase payout (only supports 1 item in the array at this point)&lt;br /&gt;
coinbase_outputs = [&lt;br /&gt;
    &amp;quot;04466d7fcae563e5cb09a0d1870bb580344804617879a14949cf22285f1bae3f276728176c3c6431f8eeda4538dc37c865e2784f3a9e77d044f33e407797e1278a&amp;quot;,&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
# Template Provider config&lt;br /&gt;
# local TP (this is pointing to localhost so you must run a TP locally for this configuration to work)&lt;br /&gt;
# tp_address = &amp;quot;127.0.0.1:8442&amp;quot;&lt;br /&gt;
# hosted testnet TP &lt;br /&gt;
tp_address = &amp;quot;89.116.25.191:8442&amp;quot;&lt;br /&gt;
# hosted regnet TP &lt;br /&gt;
# tp_address = &amp;quot;75.119.150.111:8442&amp;quot;&lt;br /&gt;
# hosted testnet TP &lt;br /&gt;
# tp_address = &amp;quot;89.116.25.191:8442&amp;quot;&lt;br /&gt;
# hosted regnet TP &lt;br /&gt;
# tp_address = &amp;quot;75.119.150.111:8442&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# SRI Pool JN config&lt;br /&gt;
listen_jn_address = &amp;quot;127.0.0.1:34264&amp;quot;&lt;br /&gt;
   &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Warning:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; If you want to mine spendable bitcoin on regtest, you can do it with bitcoin-cli:&lt;br /&gt;
&lt;br /&gt;
* Get a legacy Bitcoin address:&lt;br /&gt;
  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  bitcoin-cli -regtest -rpcwallet=&amp;quot;&amp;lt;PUT YOUR WALLET NAME HERE&amp;gt;&amp;quot; getnewaddress &amp;quot;test&amp;quot; &amp;quot;legacy&amp;quot;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Retrieve its corresponding public key:&lt;br /&gt;
  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  bitcoin-cli -regtest getaddressinfo &amp;lt;PUT THE ADDRESS GENERATED HERE&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Copy the pubkey showed in the output;&lt;br /&gt;
* Paste it in the coinbase_outputs of pool-config.toml, after deleting the one which is already present;&lt;br /&gt;
* Mine a block;&lt;br /&gt;
* Generate 100 blocks:&lt;br /&gt;
  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  bitcoin-cli -regtest generatetoaddress 100 bcrt1qc5xss0cma0zldxfzzdpjxsayut7yy86e2lr6km&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the mined bitcoin are spendable!&lt;br /&gt;
&lt;br /&gt;
Once your preferred config is set, you can run the SV2 Pool:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cargo run -p pool_sv2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the pool properly starts you should see the following log lines:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
2023-03-28T10:34:24.205288Z  INFO pool_sv2: Pool INITIALIZING with config: &amp;quot;pool-config.toml&amp;quot;&lt;br /&gt;
2023-03-28T10:34:24.279421Z  INFO pool_sv2::lib::template_receiver: Connected to template distribution server at 89.116.25.191:8442&lt;br /&gt;
2023-03-28T10:34:24.437363Z  INFO pool_sv2::lib::template_receiver::setup_connection: Setup template provider connection success!&lt;br /&gt;
2023-03-28T10:34:24.437865Z  INFO pool_sv2::lib::mining_pool: PUB KEY: [TxOut { value: 5000000000, script_pubkey: Script(OP_PUSHBYTES_65 04466d7fcae563e5cb09a0d1870bb580344804617879a14949cf22285f1bae3f276728176c3c6431f8eeda4538dc37c865e2784f3a9e77d044f33e407797e1278a OP_CHECKSIG) }]&lt;br /&gt;
2023-03-28T10:34:24.438053Z  INFO pool_sv2::lib::mining_pool: Starting up pool listener&lt;br /&gt;
2023-03-28T10:34:24.438115Z  INFO pool_sv2::lib::job_negotiator: JN INITIALIZED&lt;br /&gt;
2023-03-28T10:34:24.438623Z  INFO pool_sv2::lib::mining_pool: Listening for encrypted connection on: 0.0.0.0:34254&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Warning:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; If you want to create more custom configs, you can save them in the same conf/ directory. To run the specific custom config, you can do it by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cargo run -p pool_sv2 -- -c [your-custom-config.toml]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. Start Translator (tProxy) ==&lt;br /&gt;
&lt;br /&gt;
Once the SV2 pool is running, let&amp;#039;s run the tProxy that will facilitate communication between the pool and a SV1 miner.&lt;br /&gt;
&lt;br /&gt;
=== In a new terminal: ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd stratum/roles/translator/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The proxy-config-example.toml is a configuration example which can be copy/paste into /conf directory by the party that is running the Translator Proxy (most typically the mining farm/miner hobbyist) to address the most preferred customization. To better understand and learn about information present in the configuration file, check [https://example.com this README].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp proxy-config-example.toml ./conf/proxy-config.toml&lt;br /&gt;
cd conf/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within the proxy-config.toml you will be able to specify which pool should a translation proxy connect to. For this specific configuration, the tProxy will connect to a locally hosted pool (which you deployed in the first step). Feel free to switch the pools while testing things out.&lt;br /&gt;
&lt;br /&gt;
=== Configuration File Example ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
# Braiins Pool Upstream Connection&lt;br /&gt;
# upstream_authority_pubkey = &amp;quot;u95GEReVMjK6k5YqiSFNqqTnKU4ypU2Wm8awa6tmbmDmk1bWt&amp;quot;&lt;br /&gt;
# upstream_address = &amp;quot;18.196.32.109&amp;quot;&lt;br /&gt;
# upstream_port = 3336&lt;br /&gt;
&lt;br /&gt;
# Local SRI Pool Upstream Connection&lt;br /&gt;
upstream_address = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
upstream_port = 34254&lt;br /&gt;
upstream_authority_pubkey = &amp;quot;2di19GHYQnAZJmEpoUeP7C3Eg9TCcksHr23rZCC83dvUiZgiDL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Local Mining Device Downstream Connection&lt;br /&gt;
downstream_address = &amp;quot;0.0.0.0&amp;quot;&lt;br /&gt;
downstream_port = 34255&lt;br /&gt;
&lt;br /&gt;
# Version support&lt;br /&gt;
max_supported_version = 2&lt;br /&gt;
min_supported_version = 2&lt;br /&gt;
&lt;br /&gt;
# Minimum extranonce2 size for downstream&lt;br /&gt;
# Max value: 16 (leaves 0 bytes for search space splitting of downstreams)&lt;br /&gt;
# Max value for CGminer: 8&lt;br /&gt;
# Min value: 2&lt;br /&gt;
min_extranonce2_size = 8&lt;br /&gt;
coinbase_reward_sat = 5_000_000_000&lt;br /&gt;
&lt;br /&gt;
# JN config (optional), if set (uncommented) the tProxy starts on JN mode&lt;br /&gt;
# [jn_config]&lt;br /&gt;
# local pool JN (local pool must be run before tProxy to work)&lt;br /&gt;
jn_address = &amp;quot;127.0.0.1:34264&amp;quot;&lt;br /&gt;
# local TP (this is pointing to localhost so you must run a TP locally for this configuration to work)&lt;br /&gt;
tp_address = &amp;quot;127.0.0.1:8442&amp;quot;&lt;br /&gt;
# hosted testnet TP &lt;br /&gt;
# tp_address = &amp;quot;89.116.25.191:8442&amp;quot;&lt;br /&gt;
# hosted regnet TP &lt;br /&gt;
# tp_address = &amp;quot;75.119.150.111:8442&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Difficulty params&lt;br /&gt;
[downstream_difficulty_config]&lt;br /&gt;
# hashes/s of the weakest miner that will be connecting&lt;br /&gt;
min_individual_miner_hashrate=5_000_000.0&lt;br /&gt;
# minimum number of shares needed before a mining.set_difficulty is sent for updating targets&lt;br /&gt;
miner_num_submits_before_update=5&lt;br /&gt;
# target number of shares per minute the miner should be sending&lt;br /&gt;
shares_per_minute = 6.0&lt;br /&gt;
&lt;br /&gt;
[upstream_difficulty_config]&lt;br /&gt;
# interval in seconds to elapse before updating channel hashrate with the pool&lt;br /&gt;
channel_diff_update_interval = 60&lt;br /&gt;
# estimated accumulated hashrate of all downstream miners&lt;br /&gt;
channel_nominal_hashrate = 5_000_000.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once your preferred config is set, you can run the tProxy:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cargo run -p translator_sv2 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the translator starts properly, you should see the following log lines:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
2023-03-28T10:57:06.624837Z  INFO translator_sv2::upstream_sv2::upstream: PROXY SERVER - ACCEPTING FROM UPSTREAM: 127.0.0.1:34254&lt;br /&gt;
2023-03-28T10:57:06.650990Z  INFO translator_sv2::upstream_sv2::upstream: Up: Sending: SetupConnection { protocol: MiningProtocol, min_version: 2, max_version: 2, flags: 4, endpoint_host: Owned([48, 46, 48, 46, 48, 46, 48]), endpoint_port: 50, vendor: Owned([]), hardware_version: Owned([]), firmware: Owned([]), device_id: Owned([]) }&lt;br /&gt;
2023-03-28T10:57:06.663001Z  INFO translator_sv2::upstream_sv2::upstream: Up: Receiving: Sv2Frame { header: Header { extension_type: 0, msg_type: 1, msg_length: U24(6) }, payload: None, serialized: Some(Slice { offset: 0x7f7b0c95b000, len: 12, index: 1, shared_state: SharedState(128), owned: None }) }&lt;br /&gt;
2023-03-28T10:57:06.663187Z  INFO translator_sv2::upstream_sv2::upstream: Up: Sending: OpenExtendedMiningChannel(OpenExtendedMiningChannel { request_id: 0, user_identity: Owned([65, 66, 67]), nominal_hash_rate: 5000000.0, max_target: Owned([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255]), min_extranonce_size: 8 })&lt;br /&gt;
2023-03-28T10:57:06.663286Z  INFO translator_sv2: Connected to Upstream!&lt;br /&gt;
2023-03-28T10:57:06.665887Z  INFO translator_sv2::upstream_sv2::upstream: Up: Successfully Opened Extended Mining Channel&lt;br /&gt;
2023-03-28T10:57:06.666147Z  INFO translator_sv2::upstream_sv2::upstream: Is future job: true&lt;br /&gt;
&lt;br /&gt;
2023-03-28T10:57:06.666208Z  INFO translator_sv2::upstream_sv2::upstream: Up: New Extended Mining Job&lt;br /&gt;
2023-03-28T10:57:06.666353Z  INFO translator_sv2::upstream_sv2::upstream: Up: Set New Prev Hash&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Warning:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; If you want to create more custom configs, you can save them in the same conf/ directory. To run the specific custom config, you can do it by running:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cargo run -p translator_sv2 -- -c [your-custom-config.toml]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Start SV1 Miner ==&lt;br /&gt;
&lt;br /&gt;
After starting a pool, and a translation proxy, let’s start a SV1 miner.&lt;br /&gt;
&lt;br /&gt;
=== Physical ASIC miner ===&lt;br /&gt;
If you have a physical miner, setup is very easy since you just have to point your ASIC miner to the local tProxy which you deployed in the last step of this guide.&lt;br /&gt;
&lt;br /&gt;
=== CPU Miner ===&lt;br /&gt;
If you don&amp;#039;t have a physical miner, you can do tests with CPUMiner.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Setup the correct CPUMiner for your OS:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  * You can download the binary directly from [https://example.com here];&lt;br /&gt;
  * Or compile it from [https://github.com/pooler/cpuminer here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd Downloads/&lt;br /&gt;
./minerd -a sha256d -o stratum+tcp://localhost:34255 -q -D -P&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will connect to the translator proxy and speak sv1. If this is successful you should see the following output:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
* Connected to localhost (127.0.0.1) port 34255 (#0)&lt;br /&gt;
* Connection #0 to host localhost left intact&lt;br /&gt;
[2023-03-28 13:08:51] &amp;gt; {&amp;quot;id&amp;quot;: 1, &amp;quot;method&amp;quot;: &amp;quot;mining.subscribe&amp;quot;, &amp;quot;params&amp;quot;: [&amp;quot;cpuminer/2.5.1&amp;quot;]}&lt;br /&gt;
[2023-03-28 13:08:51] &amp;lt; {&amp;quot;id&amp;quot;:1,&amp;quot;error&amp;quot;:null,&amp;quot;result&amp;quot;:[[[&amp;quot;mining.set_difficulty&amp;quot;,&amp;quot;ae6812eb4cd7735a302a8a9dd95cf71f&amp;quot;],[&amp;quot;mining.notify&amp;quot;,&amp;quot;ae6812eb4cd7735a302a8a9dd95cf71f&amp;quot;]],&amp;quot;000000000000000000000000000000010000000000000000000000000001&amp;quot;,2]}&lt;br /&gt;
[2023-03-28 13:08:51] Stratum session id: ae6812eb4cd7735a302a8a9dd95cf71f&lt;br /&gt;
[2023-03-28 13:08:51] &amp;gt; {&amp;quot;id&amp;quot;: 2, &amp;quot;method&amp;quot;: &amp;quot;mining.authorize&amp;quot;, &amp;quot;params&amp;quot;: [&amp;quot;&amp;quot;, &amp;quot;&amp;quot;]}&lt;br /&gt;
[2023-03-28 13:08:51] &amp;lt; {&amp;quot;id&amp;quot;:2,&amp;quot;error&amp;quot;:null,&amp;quot;result&amp;quot;:true}&lt;br /&gt;
[2023-03-28 13:08:52] &amp;lt; {&amp;quot;method&amp;quot;:&amp;quot;mining.set_difficulty&amp;quot;,&amp;quot;params&amp;quot;:[0.03571428571428571]}&lt;br /&gt;
[2023-03-28 13:08:52] Stratum difficulty set to 0.0357143&lt;br /&gt;
[2023-03-28 13:08:52] &amp;lt; {&amp;quot;method&amp;quot;:&amp;quot;mining.notify&amp;quot;,&amp;quot;params&amp;quot;:[&amp;quot;1&amp;quot;,&amp;quot;9973803c689d114202d8fa6e7a812464ec5968614898bef00000000800000000&amp;quot;,&amp;quot;02000000010000000000000000000000000000000000000000000000000000000000000000ffffffff25036e052500&amp;quot;,&amp;quot;ffffffff02dbd4250000000000434104466d7fcae563e5cb09a0d1870bb580344804617879a14949cf22285f1bae3f276728176c3c6431f8eeda4538dc37c865e2784f3a9e77d044f33e407797e1278aac0000000000000000266a24aa21a9edf91da350df08181fe10fa729adb64397b97fcf1680d030db9ef9ad124423caa800000000&amp;quot;,[&amp;quot;2bfe0456baee2eff5f1fdcbcab78aab12c7313b012ac27363aa9798c274bd593&amp;quot;,&amp;quot;2d82a85bd4f3a555db28b11cfae0665c2f0217601756ea8d35936679425ec02a&amp;quot;,&amp;quot;cae46b308f58e509a0e55d13f232b8077cf20561096d843be0ac2aaa56d3a3b3&amp;quot;,&amp;quot;c9260f546d915dba514bb933ab06bb1337c544835c61c117fb20c6abb9ef6e45&amp;quot;,&amp;quot;fbae0b78208cb543bf8f25a5f616271e1671e44c0191b2d8b3c3bc6313f78b6a&amp;quot;,&amp;quot;d30f4074e3588d2f07c0d1dedcee893954cbbc6b2a6714b0ce915a58ca88fc27&amp;quot;,&amp;quot;e72cac419d4edfcd794343ac08805bf49db6f26970e49aab7351c53b8ae51e24&amp;quot;,&amp;quot;3a888db192e72c75ba383b9b73fe85cb1f423f8d935289e769a5229d73d545c1&amp;quot;,&amp;quot;761b4af369aaadd5180df680632a535060c350900aa7fedb1b5d4eb65a5da929&amp;quot;,&amp;quot;ae190c0907f7638fcbb9e46e0d9c2a85b916b9712616ffdea7179704ccd682b2&amp;quot;,&amp;quot;b702b7b8c1956699fe58d9570bdb75d7c0c87d78889d92abd7089ec2c57384c9&amp;quot;,&amp;quot;d0a5fb4f50c214775d9970972164105c3acbbf08a22576e6e91ccf70196ec2c1&amp;quot;],&amp;quot;20000000&amp;quot;,&amp;quot;1929ee8d&amp;quot;,&amp;quot;6422ca0e&amp;quot;,true]}&lt;br /&gt;
[2023-03-28 13:08:52] DEBUG: job_id=&amp;#039;1&amp;#039; extranonce2=0000 ntime=6422ca0e&lt;br /&gt;
[2023-03-28 13:08:52] Stratum requested work restart&lt;br /&gt;
[2023-03-28 13:08:54] DEBUG: hash &amp;lt;= target&lt;br /&gt;
Hash:   000000136077f7444332e7885526a371afdc00f17a08c9aa077fb845d6074536&lt;br /&gt;
Target: 0000001bffe40000000000000000000000000000000000000000000000000000&lt;br /&gt;
[2023-03-28 13:08:54] &amp;gt; {&amp;quot;method&amp;quot;: &amp;quot;mining.submit&amp;quot;, &amp;quot;params&amp;quot;: [&amp;quot;&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0000&amp;quot;, &amp;quot;6422ca0e&amp;quot;, &amp;quot;bd5c6540&amp;quot;], &amp;quot;id&amp;quot;:4}&lt;br /&gt;
[2023-03-28 13:08:54] &amp;lt; {&amp;quot;id&amp;quot;:4,&amp;quot;error&amp;quot;:null,&amp;quot;result&amp;quot;:true}&lt;br /&gt;
[2023-03-28 13:08:54] accepted: 1/1 (100.00%), 33963 khash/s (yay!!!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eventually, the Translation Proxy log output will show successful share, which means you&amp;#039;ve run the configuration successfully!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
2023-03-28T11:08:51.052292Z  INFO translator_sv2::downstream_sv1::downstream: PROXY SERVER - ACCEPTING FROM DOWNSTREAM: 127.0.0.1:50225&lt;br /&gt;
2023-03-28T11:08:51.052704Z  INFO translator_sv2::downstream_sv1::downstream: Down: Subscribing&lt;br /&gt;
2023-03-28T11:08:51.054303Z  INFO translator_sv2::downstream_sv1::downstream: Down: Authorizing&lt;br /&gt;
2023-03-28T11:08:54.552777Z  INFO roles_logic_sv2::utils: reduce_path: coinbase_id: [55, 0, 43, 216, 197, 11, 114, 249, 81, 1, 236, 139, 193, 183, 192, 161, 226, 175, 179, 206, 208, 147, 206, 20, 71, 31, 50, 216, 79, 177, 68, 0]&lt;br /&gt;
2023-03-28T11:08:54.553161Z  INFO translator_sv2::proxy::bridge: SHARE MEETS DOWNSTREAM TARGET&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Config D: SV1 firmware &amp;gt; Translation Proxy JD (Job Declarator) &amp;gt; SV2 Pool ==&lt;br /&gt;
&lt;br /&gt;
This configuration allows mining devices running SV1 firmware to connect to an SV2 Pool through a Translation Proxy (tProxy). In this case, the tProxy is designed also to implement the Job Declarator (JD) sub-protocol.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Install, setup and run local regtest Template Provider&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Warning:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; To setup a local Template Provider you need to run it from a linux machine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/stratum-mining/bitcoin.git&lt;br /&gt;
git checkout last-tested-tp&lt;br /&gt;
cd bitcoin/&lt;br /&gt;
./autogen.sh &amp;amp;&amp;amp; ./configure --enable-template-provider&lt;br /&gt;
make check&lt;br /&gt;
rm -r ~/.bitcoin/regtest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once installed, in bitcoin/ directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./src/bitcoind -regtest&lt;br /&gt;
cd bitcoin/&lt;br /&gt;
./src/bitcoin-cli -regtest generatetoaddress 16 bcrt1qttuwhmpa7a0ls5kr3ye6pjc24ng685jvdrksxx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2. Start SV2 Pool&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd stratum/roles/v2/pool/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pool-config-example.toml is a configuration example which can be copy/paste into /conf directory by the party that is running the SV2 Pool (most typically the pool service provider) to address the most preferred customization. To better understand and learn about information present in the configuration file, check this [https://github.com/stratum-mining/stratum/blob/main/roles/v2/pool/README.md README].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp pool-config-example.toml ./conf/pool-config.toml&lt;br /&gt;
cd conf/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Pool role in this configuration should be configured to point to the local Template Provider which you deployed in the first step of this guide. In the pool-config.toml file you should see the tp_address = &amp;quot;127.0.0.1:8442&amp;quot; line uncommented. The correct config file to exploit the local TP should be like this:&lt;br /&gt;
&lt;br /&gt;
=== Pool Configuration File Example ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
# SRI Pool config&lt;br /&gt;
authority_public_key = &amp;quot;2di19GHYQnAZJmEpoUeP7C3Eg9TCcksHr23rZCC83dvUiZgiDL&amp;quot;&lt;br /&gt;
authority_secret_key = &amp;quot;2Z1FZug7mZNyM63ggkm37r4oKQ29khLjAvEx43rGkFN47RcJ2t&amp;quot;&lt;br /&gt;
cert_validity_sec = 3600&lt;br /&gt;
test_only_listen_adress_plain =  &amp;quot;0.0.0.0:34250&amp;quot;&lt;br /&gt;
listen_address = &amp;quot;0.0.0.0:34254&amp;quot;&lt;br /&gt;
# list of compressed or uncompressed pubkeys for coinbase payout (only supports 1 item in the array at this point)&lt;br /&gt;
coinbase_outputs = [&lt;br /&gt;
    &amp;quot;04466d7fcae563e5cb09a0d1870bb580344804617879a14949cf22285f1bae3f276728176c3c6431f8eeda4538dc37c865e2784f3a9e77d044f33e407797e1278a&amp;quot;,&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
# Template Provider config&lt;br /&gt;
# local TP (this is pointing to localhost so you must run a TP locally for this configuration to work)&lt;br /&gt;
tp_address = &amp;quot;127.0.0.1:8442&amp;quot;&lt;br /&gt;
# hosted testnet TP &lt;br /&gt;
# tp_address = &amp;quot;89.116.25.191:8442&amp;quot;&lt;br /&gt;
# hosted regnet TP &lt;br /&gt;
# tp_address = &amp;quot;75.119.150.111:8442&amp;quot;&lt;br /&gt;
# hosted testnet TP &lt;br /&gt;
# tp_address = &amp;quot;89.116.25.191:8442&amp;quot;&lt;br /&gt;
# hosted regnet TP &lt;br /&gt;
# tp_address = &amp;quot;75.119.150.111:8442&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# SRI Pool JN config&lt;br /&gt;
listen_jn_address = &amp;quot;127.0.0.1:34264&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Warning:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; If you want to mine spendable bitcoin on regtest, you can do it with bitcoin-cli:&lt;br /&gt;
&lt;br /&gt;
Get a legacy Bitcoin address:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
bitcoin-cli -regtest -rpcwallet=&amp;quot;&amp;lt;PUT YOUR WALLET NAME HERE&amp;gt;&amp;quot; getnewaddress &amp;quot;test&amp;quot; &amp;quot;legacy&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retrieve its corresponding public key:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
bitcoin-cli -regtest getaddressinfo &amp;lt;PUT THE ADDRESS GENERATED HERE&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Copy the pubkey showed in the output;&lt;br /&gt;
Paste it in the coinbase_outputs of pool-config.toml, after deleting the one which is already present;&lt;br /&gt;
Mine a block;&lt;br /&gt;
Generate 100 blocks:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
bitcoin-cli -regtest generatetoaddress 100 bcrt1qc5xss0cma0zldxfzzdpjxsayut7yy86e2lr6km&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the mined bitcoin are spendable!&lt;br /&gt;
&lt;br /&gt;
Once your preferred config is set, you can run the SV2 Pool:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cargo run -p pool_sv2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the pool properly starts you should see the following log lines:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
2023-03-28T11:59:40.951579Z  INFO pool_sv2: Pool INITIALIZING with config: &amp;quot;pool-config.toml&amp;quot;&lt;br /&gt;
2023-03-28T11:59:40.952304Z  INFO pool_sv2::lib::template_receiver: Connected to template distribution server at 127.0.0.1:8442&lt;br /&gt;
2023-03-28T11:59:41.024149Z  INFO pool_sv2::lib::template_receiver::setup_connection: Setup template provider connection success!&lt;br /&gt;
2023-03-28T11:59:41.024398Z  INFO pool_sv2::lib::mining_pool: PUB KEY: [TxOut { value: 5000000000, script_pubkey: Script(OP_PUSHBYTES_65 04466d7fcae563e5cb09a0d1870bb580344804617879a14949cf22285f1bae3f276728176c3c6431f8eeda4538dc37c865e2784f3a9e77d044f33e407797e1278a OP_CHECKSIG) }]&lt;br /&gt;
2023-03-28T11:59:41.025534Z  INFO pool_sv2::lib::mining_pool: Starting up pool listener&lt;br /&gt;
2023-03-28T11:59:41.026100Z  INFO pool_sv2::lib::job_negotiator: JN INITIALIZED&lt;br /&gt;
2023-03-28T11:59:41.026343Z  INFO pool_sv2::lib::mining_pool: Listening for encrypted connection on: 0.0.0.0:34254&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Warning:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; If you want to create more custom configs, you can save them in the same conf/ directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cargo run -p pool_sv2 -- -c [your-custom-config.toml]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 3. Start Translator (tProxy) JD ===&lt;br /&gt;
&lt;br /&gt;
After the SV2 pool is running, the tProxy facilitates communication between the pool and an SV1 miner. This setup involves the tProxy acting as a Job Declarator (JD).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd stratum/roles/translator/&lt;br /&gt;
cp proxy-config-example.toml ./conf/proxy-config.toml&lt;br /&gt;
cd conf/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;proxy-config-example.toml&amp;#039;&amp;#039;&amp;#039; serves as a configuration example. It can be copied and pasted into the /conf directory.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Warning:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; Ensure the [jn_config] line in proxy-config.toml is uncommented to enable the JN sub-protocol.&lt;br /&gt;
&lt;br /&gt;
==== Proxy Configuration File Example ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
# Braiins Pool Upstream Connection&lt;br /&gt;
# upstream_authority_pubkey = &amp;quot;u95GEReVMjK6k5YqiSFNqqTnKU4ypU2Wm8awa6tmbmDmk1bWt&amp;quot;&lt;br /&gt;
# upstream_address = &amp;quot;18.196.32.109&amp;quot;&lt;br /&gt;
# upstream_port = 3336&lt;br /&gt;
&lt;br /&gt;
# Local SRI Pool Upstream Connection&lt;br /&gt;
upstream_address = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
upstream_port = 34254&lt;br /&gt;
upstream_authority_pubkey = &amp;quot;2di19GHYQnAZJmEpoUeP7C3Eg9TCcksHr23rZCC83dvUiZgiDL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Local Mining Device Downstream Connection&lt;br /&gt;
downstream_address = &amp;quot;0.0.0.0&amp;quot;&lt;br /&gt;
downstream_port = 34255&lt;br /&gt;
&lt;br /&gt;
# Version support&lt;br /&gt;
max_supported_version = 2&lt;br /&gt;
min_supported_version = 2&lt;br /&gt;
&lt;br /&gt;
# Minimum extranonce2 size for downstream&lt;br /&gt;
# Max value: 16 (leaves 0 bytes for search space splitting of downstreams)&lt;br /&gt;
# Max value for CGminer: 8&lt;br /&gt;
# Min value: 2&lt;br /&gt;
min_extranonce2_size = 8&lt;br /&gt;
coinbase_reward_sat = 5_000_000_000&lt;br /&gt;
&lt;br /&gt;
# JN config (optional), if set (uncommented) the tProxy starts on JN mode&lt;br /&gt;
[jn_config]&lt;br /&gt;
# local pool JN (local pool must be run before tProxy to work)&lt;br /&gt;
jn_address = &amp;quot;127.0.0.1:34264&amp;quot;&lt;br /&gt;
# local TP (this is pointing to localhost so you must run a TP locally for this configuration to work)&lt;br /&gt;
tp_address = &amp;quot;127.0.0.1:8442&amp;quot;&lt;br /&gt;
# hosted testnet TP &lt;br /&gt;
# tp_address = &amp;quot;89.116.25.191:8442&amp;quot;&lt;br /&gt;
# hosted regnet TP &lt;br /&gt;
# tp_address = &amp;quot;75.119.150.111:8442&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Difficulty params&lt;br /&gt;
[downstream_difficulty_config]&lt;br /&gt;
# hashes/s of the weakest miner that will be connecting&lt;br /&gt;
min_individual_miner_hashrate=5_000_000.0&lt;br /&gt;
# minimum number of shares needed before a mining.set_difficulty is sent for updating targets&lt;br /&gt;
miner_num_submits_before_update=5&lt;br /&gt;
# target number of shares per minute the miner should be sending&lt;br /&gt;
shares_per_minute = 6.0&lt;br /&gt;
&lt;br /&gt;
[upstream_difficulty_config]&lt;br /&gt;
# interval in seconds to elapse before updating channel hashrate with the pool&lt;br /&gt;
channel_diff_update_interval = 60&lt;br /&gt;
# estimated accumulated hashrate of all downstream miners&lt;br /&gt;
channel_nominal_hashrate = 5_000_000.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Running the tProxy ===&lt;br /&gt;
At this point, run the tProxy with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cargo run -p translator_sv2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the translator starts properly, you should see log lines similar to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
2023-03-28T12:16:03.130356Z  INFO translator_sv2::upstream_sv2::upstream: PROXY SERVER - ACCEPTING FROM UPSTREAM: 127.0.0.1:34254&lt;br /&gt;
2023-03-28T12:16:03.175910Z  INFO translator_sv2::upstream_sv2::upstream: Up: Sending: SetupConnection { protocol: MiningProtocol, min_version: 2, max_version: 2, flags: 6, endpoint_host: Owned([48, 46, 48, 46, 48, 46, 48]), endpoint_port: 50, vendor: Owned([]), hardware_version: Owned([]), firmware: Owned([]), device_id: Owned([]) }&lt;br /&gt;
2023-03-28T12:16:03.177935Z  INFO translator_sv2::upstream_sv2::upstream: Up: Receiving: Sv2Frame { header: Header { extension_type: 0, msg_type: 1, msg_length: U24(6) }, payload: None, serialized: Some(Slice { offset: 0x7f50fe42a010, len: 12, index: 1, shared_state: SharedState(128), owned: None }) }&lt;br /&gt;
2023-03-28T12:16:03.178368Z  INFO translator_sv2::upstream_sv2::upstream: Up: Sending: OpenExtendedMiningChannel(OpenExtendedMiningChannel { request_id: 0, user_identity: Owned([65, 66, 67]), nominal_hash_rate: 5000000.0, max_target: Owned([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255]), min_extranonce_size: 8 })&lt;br /&gt;
2023-03-28T12:16:03.179222Z  INFO translator_sv2: Connected to Upstream!&lt;br /&gt;
2023-03-28T12:16:03.182523Z  INFO translator_sv2::template_receiver: Template Receiver try to set up connection&lt;br /&gt;
2023-03-28T12:16:03.190738Z  INFO translator_sv2::job_negotiator: JN proxy: setupconnection Proxy address: 0.0.0.0:34255&lt;br /&gt;
2023-03-28T12:16:03.192886Z  INFO translator_sv2::job_negotiator: JN CONNECTED&lt;br /&gt;
2023-03-28T12:16:03.232878Z  INFO translator_sv2::template_receiver: Template Receiver connection set up&lt;br /&gt;
2023-03-28T12:16:03.233755Z  INFO translator_sv2::upstream_sv2::upstream: Up: Successfully Opened Extended Mining Channel&lt;br /&gt;
2023-03-28T12:16:03.234006Z  INFO translator_sv2::upstream_sv2::upstream: Is future job: true&lt;br /&gt;
&lt;br /&gt;
2023-03-28T12:16:03.234211Z  INFO translator_sv2::upstream_sv2::upstream: Up: Set New Prev Hash&lt;br /&gt;
2023-03-28T12:16:03.284539Z  INFO translator_sv2::template_receiver: Received SetNewPrevHash, waiting for IS_NEW_TEMPLATE_HANDLED&lt;br /&gt;
2023-03-28T12:16:03.285990Z  INFO translator_sv2::template_receiver: IS_NEW_TEMPLATE_HANDLED ok&lt;br /&gt;
2023-03-28T12:16:03.287963Z  INFO translator_sv2::upstream_sv2::upstream: Send custom job to upstream&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Warning:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; To create more custom configs, save them in the same conf/ directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cargo run -p translator_sv2 -- -c [your-custom-config.toml]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. Start SV1 Miner ===&lt;br /&gt;
&lt;br /&gt;
After initiating a pool and a translation proxy, the next step is to start an SV1 miner.&lt;br /&gt;
&lt;br /&gt;
==== Physical ASIC Miner ====&lt;br /&gt;
For those with a physical ASIC miner, setup is straightforward. Point your ASIC miner to the local tProxy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
stratum+tcp://&amp;lt;tProxy ip&amp;gt;:34255&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here, &amp;#039;&amp;#039;&amp;#039;tProxy ip&amp;#039;&amp;#039;&amp;#039; refers to the IP address of the local machine running the tProxy.&lt;br /&gt;
&lt;br /&gt;
==== CPU Miner ====&lt;br /&gt;
If a physical miner is not available, testing can be done with CPUMiner.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; Download the binary directly or compile it from the provided URLs.&lt;br /&gt;
&lt;br /&gt;
You can download the binary directly from here (opens new window);&lt;br /&gt;
Or compile it from https://github.com/pooler/cpuminer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd Downloads/&lt;br /&gt;
./minerd -a sha256d -o stratum+tcp://localhost:34255 -q -D -P&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will establish a connection to the translator proxy using the sv1 protocol.&lt;br /&gt;
&lt;br /&gt;
==== Expected Output ====&lt;br /&gt;
Upon successful connection, the output should resemble:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
* Connected to localhost (127.0.0.1) port 34255 (#0)&lt;br /&gt;
* Connection #0 to host localhost left intact&lt;br /&gt;
[2023-03-28 14:18:11] &amp;gt; {&amp;quot;id&amp;quot;: 1, &amp;quot;method&amp;quot;: &amp;quot;mining.subscribe&amp;quot;, &amp;quot;params&amp;quot;: [&amp;quot;cpuminer/2.5.1&amp;quot;]}&lt;br /&gt;
[2023-03-28 14:18:11] 128 miner threads started, using &amp;#039;sha256d&amp;#039; algorithm.&lt;br /&gt;
[2023-03-28 14:18:11] &amp;lt; {&amp;quot;id&amp;quot;:1,&amp;quot;error&amp;quot;:null,&amp;quot;result&amp;quot;:[[[&amp;quot;mining.set_difficulty&amp;quot;,&amp;quot;ae6812eb4cd7735a302a8a9dd95cf71f&amp;quot;],[&amp;quot;mining.notify&amp;quot;,&amp;quot;ae6812eb4cd7735a302a8a9dd95cf71f&amp;quot;]],&amp;quot;000000000000000000000000000000010000000000000002&amp;quot;,8]}&lt;br /&gt;
[2023-03-28 14:18:11] Stratum session id: ae6812eb4cd7735a302a8a9dd95cf71f&lt;br /&gt;
[2023-03-28 14:18:11] &amp;gt; {&amp;quot;id&amp;quot;: 2, &amp;quot;method&amp;quot;: &amp;quot;mining.authorize&amp;quot;, &amp;quot;params&amp;quot;: [&amp;quot;&amp;quot;, &amp;quot;&amp;quot;]}&lt;br /&gt;
[2023-03-28 14:18:11] &amp;lt; {&amp;quot;id&amp;quot;:2,&amp;quot;error&amp;quot;:null,&amp;quot;result&amp;quot;:true}&lt;br /&gt;
[2023-03-28 14:18:12] &amp;lt; {&amp;quot;method&amp;quot;:&amp;quot;mining.set_difficulty&amp;quot;,&amp;quot;params&amp;quot;:[0.0011655011655011655]}&lt;br /&gt;
[2023-03-28 14:18:12] Stratum difficulty set to 0.0011655&lt;br /&gt;
[2023-03-28 14:18:12] &amp;lt; {&amp;quot;method&amp;quot;:&amp;quot;mining.notify&amp;quot;,&amp;quot;params&amp;quot;:[&amp;quot;1&amp;quot;,&amp;quot;ba521c4aba4886ca7319ba89333714504dbd4b2ea11a7b09295e6e046e1407e6&amp;quot;,&amp;quot;020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff2402f20000&amp;quot;,&amp;quot;ffffffff0200f2052a01000000434104466d7fcae563e5cb09a0d1870bb580344804617879a14949cf22285f1bae3f276728176c3c6431f8eeda4538dc37c865e2784f3a9e77d044f33e407797e1278aac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000&amp;quot;,[],&amp;quot;30000000&amp;quot;,&amp;quot;207fffff&amp;quot;,&amp;quot;6422d610&amp;quot;,true]}&lt;br /&gt;
[2023-03-28 14:18:12] DEBUG: job_id=&amp;#039;1&amp;#039; extranonce2=0000000000000000 ntime=6422d610&lt;br /&gt;
[2023-03-28 14:18:12] Stratum requested work restart&lt;br /&gt;
[2023-03-28 14:18:13] DEBUG: hash &amp;lt;= target&lt;br /&gt;
Hash:   000001b0a8b6be5c01c2e79656080eea652a30f49b5d04565ad923753dd9c811&lt;br /&gt;
Target: 00000359fca60000000000000000000000000000000000000000000000000000&lt;br /&gt;
[2023-03-28 14:18:13] &amp;gt; {&amp;quot;method&amp;quot;: &amp;quot;mining.submit&amp;quot;, &amp;quot;params&amp;quot;: [&amp;quot;&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0000000000000000&amp;quot;, &amp;quot;6422d610&amp;quot;, &amp;quot;1b4f00da&amp;quot;], &amp;quot;id&amp;quot;:4}&lt;br /&gt;
[2023-03-28 14:18:13] &amp;lt; {&amp;quot;id&amp;quot;:4,&amp;quot;error&amp;quot;:null,&amp;quot;result&amp;quot;:true}&lt;br /&gt;
[2023-03-28 14:18:13] accepted: 1/1 (100.00%), 171.09 khash/s (yay!!!)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Translation Proxy Log Output ====&lt;br /&gt;
A successful share will be indicated in the Translation Proxy log:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
2023-03-28T11:08:51.052292Z  INFO translator_sv2::downstream_sv1::downstream: PROXY SERVER - ACCEPTING FROM DOWNSTREAM: 127.0.0.1:50225&lt;br /&gt;
2023-03-28T11:08:51.052704Z  INFO translator_sv2::downstream_sv1::downstream: Down: Subscribing&lt;br /&gt;
2023-03-28T11:08:51.054303Z  INFO translator_sv2::downstream_sv1::downstream: Down: Authorizing&lt;br /&gt;
2023-03-28T11:08:54.552777Z  INFO roles_logic_sv2::utils: reduce_path: coinbase_id: [55, 0, 43, 216, 197, 11, 114, 249, 81, 1, 236, 139, 193, 183, 192, 161, 226, 175, 179, 206, 208, 147, 206, 20, 71, 31, 50, 216, 79, 177, 68, 0]&lt;br /&gt;
2023-03-28T11:08:54.553161Z  INFO translator_sv2::proxy::bridge: SHARE MEETS DOWNSTREAM TARGET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Warning:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; If the Translation Proxy log indicates an error, such as &amp;quot;difficulty-too-low&amp;quot;, adjust the difficulty parameters in your proxy-config.toml and restart the tProxy.&lt;/div&gt;</summary>
		<author><name>Alejandrobitcoin</name></author>
	</entry>
</feed>