-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsolo-mining-guide.html
More file actions
557 lines (535 loc) · 32.3 KB
/
Copy pathsolo-mining-guide.html
File metadata and controls
557 lines (535 loc) · 32.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Kaspa Solo Mining Guide | Kaspa Explained</title>
<meta name="description" content="A Kaspa solo mining guide for connecting an ASIC miner to your own node through the Rusty Kaspa Stratum Bridge.">
<meta name="robots" content="index,follow,max-snippet:-1,max-image-preview:large">
<link rel="canonical" href="https://kaspaexplained.com/solo-mining-guide">
<link rel="icon" href="kaspa-favicon.svg?v=20260512-real-k" type="image/svg+xml">
<link rel="icon" href="favicon.svg?v=20260512-k4" type="image/svg+xml">
<link rel="icon" href="favicon.ico" sizes="any">
<link rel="icon" href="favicon.png" type="image/png">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="manifest" href="site.webmanifest">
<meta name="application-name" content="Kaspa Explained">
<meta name="apple-mobile-web-app-title" content="Kaspa Explained">
<meta name="theme-color" content="#000000">
<meta property="og:title" content="Kaspa Solo Mining Guide">
<meta property="og:description" content="A Kaspa solo mining guide for connecting an ASIC miner to your own node through the Rusty Kaspa Stratum Bridge.">
<meta property="og:type" content="article">
<meta property="og:url" content="https://kaspaexplained.com/solo-mining-guide">
<meta property="og:image" content="https://kaspaexplained.com/og-kaspa-explained-20260514.png?v=20260514-logo-clearance">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Kaspa Explained - proof-of-work blockDAG guide">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Kaspa Solo Mining Guide">
<meta name="twitter:description" content="A Kaspa solo mining guide for connecting an ASIC miner to your own node through the Rusty Kaspa Stratum Bridge.">
<meta name="twitter:image" content="https://kaspaexplained.com/og-kaspa-explained-20260514.png?v=20260514-logo-clearance">
<meta name="dateModified" content="2026-07-08">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "Kaspa Solo Mining Guide",
"url": "https://kaspaexplained.com/solo-mining-guide",
"dateModified": "2026-07-08",
"description": "A Kaspa solo mining guide for connecting an ASIC miner to your own node through the Rusty Kaspa Stratum Bridge.",
"about": ["Kaspa", "Solo Mining", "Rusty Kaspa", "Stratum Bridge", "Toccata"]
}
</script>
<link rel="stylesheet" href="styles.css?v=20260711-table-wrap-fix">
<script defer src="nav.js?v=20260708-dark-default"></script>
</head>
<body>
<a class="skip-link" href="#top">Skip to content</a>
<header class="site-header">
<nav class="nav" aria-label="Primary">
<a class="brand" href="/" aria-label="Kaspa Explained home">
<span class="brand-mark" aria-hidden="true"></span>
Kaspa Explained
</a>
<button class="nav-menu-button" type="button" aria-expanded="false" aria-controls="primary-links">Menu</button>
<div id="primary-links" class="nav-links">
<a href="/what-is-kaspa">What is Kaspa</a>
<a href="/status">Live now</a>
<a href="/kaspa-claims-checker">Check claims</a>
<a href="/skeptical-case">Risks</a>
<a href="/build-on-kaspa">Build</a>
<a href="/sources">Sources</a>
</div>
<button class="theme-toggle" type="button" aria-label="Switch theme">Light</button>
<a class="nav-cta" href="/toccata-status">Toccata status</a>
</nav>
</header>
<main id="top" tabindex="-1" class="builder-page">
<section class="section">
<p class="eyebrow">Mining guide</p>
<h1>Kaspa solo mining guide</h1>
<p class="lead">An ASIC and a node don't talk to each other directly. Your miner speaks Stratum; your Kaspa node speaks Kaspa RPC. The Rusty Kaspa Stratum Bridge is the translator that sits between them.</p>
<p class="fit-note"><strong>Status checked June 30, 2026:</strong> Rusty Kaspa v2.0.1 is the Toccata upgrade release. The Rusty Kaspa Stratum Bridge is marked beta in the official docs. Toccata activated at DAA score 474,165,565.</p>
<div class="actions">
<a class="button primary" href="#quick-path">Start</a>
<a class="button" href="#windows">Windows</a>
<a class="button" href="#mac-linux">macOS / Linux</a>
<a class="button" href="#miner">Miner setup</a>
<a class="button" href="#sources">Sources</a>
</div>
</section>
<section class="section">
<p class="eyebrow">Plain version</p>
<h2>What you're building</h2>
<div class="reference-grid">
<article>
<h3>Miner</h3>
<p>The ASIC does the hashing. Its web screen usually asks for a pool URL, username, and password.</p>
</article>
<article>
<h3>Bridge</h3>
<p>The Rusty Kaspa Stratum Bridge accepts the miner connection and talks to a Kaspa node.</p>
</article>
<article>
<h3>Node</h3>
<p>The node hands the bridge block templates and takes back solved blocks.</p>
</article>
<article>
<h3>Wallet address</h3>
<p>The address in the miner username is where a solo block reward lands if the miner finds a block.</p>
</article>
</div>
<p class="fit-note">A miner can submit shares for a long stretch without finding a block. Shares only prove the miner is talking to the bridge. A block reward arrives when the hardware finds a valid block, and solo variance means that can take a while even on working hardware.</p>
</section>
<section id="quick-path" class="section">
<p class="eyebrow">Quick path</p>
<h2>The beginner setup</h2>
<p>One computer runs both the node and bridge. Keep two terminal windows open on that computer, then open the miner's web screen in a browser.</p>
<ol class="learning-steps">
<li>Download the Rusty Kaspa zip for the node computer.</li>
<li>Extract the zip and open a terminal in that folder.</li>
<li>Terminal window A runs <code>kaspad</code>. Leave it open.</li>
<li>Terminal window B runs <code>stratum-bridge</code>. Leave it open.</li>
<li>The bridge dashboard opens at <code>http://127.0.0.1:3030/</code> on the node computer.</li>
<li>The miner points to the node computer's local IP plus port <code>5555</code>.</li>
<li>The miner username is the Kaspa receive address plus a worker name.</li>
<li>The dashboard should show a worker, shares, and hashrate.</li>
</ol>
<p class="fit-note">Keep the node, bridge, and miner on the same local network for the first setup. Do not expose RPC, dashboard, or Stratum ports to the public internet while learning.</p>
</section>
<section class="section">
<p class="eyebrow">What you need</p>
<h2>Before touching the miner</h2>
<div class="summary-grid">
<article><span>ASIC</span><p>An IceRiver, Bitmain, Goldshell, or another compatible Kaspa ASIC. The bridge docs also list BzMiner support.</p></article>
<article><span>Node computer</span><p>A computer running Rusty Kaspa v2.0.1 or newer. Running bridge and node on the same machine avoids a second network hop while learning.</p></article>
<article><span>Wallet address</span><p>A Kaspa address for rewards. Copy it carefully. Never paste a private key into miner or bridge settings.</p></article>
<article><span>Local IP</span><p>The node computer's address on the home network, such as <code>192.168.1.10</code>.</p></article>
<article><span>Bridge folder</span><p>The Rusty Kaspa release archive includes the <code>stratum-bridge</code> binary and the sample config path <code>bridge/config.yaml</code>.</p></article>
</div>
</section>
<section class="section">
<p class="eyebrow">Download</p>
<h2>Which Rusty Kaspa file do I download?</h2>
<p>Use the official Rusty Kaspa v2.0.1 release page and grab the archive matching the computer that will run the node and bridge.</p>
<div class="table-wrap">
<table class="reality-table">
<thead>
<tr>
<th>Computer</th>
<th>Release asset</th>
</tr>
</thead>
<tbody>
<tr><td>Windows</td><td><a href="https://github.com/kaspanet/rusty-kaspa/releases/download/v2.0.1/rusty-kaspa-v2.0.1-win64.zip"><code>rusty-kaspa-v2.0.1-win64.zip</code></a></td></tr>
<tr><td>macOS</td><td><a href="https://github.com/kaspanet/rusty-kaspa/releases/download/v2.0.1/rusty-kaspa-v2.0.1-osx.zip"><code>rusty-kaspa-v2.0.1-osx.zip</code></a></td></tr>
<tr><td>Linux, 64-bit Intel/AMD</td><td><a href="https://github.com/kaspanet/rusty-kaspa/releases/download/v2.0.1/rusty-kaspa-v2.0.1-linux-amd64.zip"><code>rusty-kaspa-v2.0.1-linux-amd64.zip</code></a></td></tr>
</tbody>
</table>
</div>
<p class="fit-note">Grab the release asset for your operating system. Skip the GitHub Source code zip and the WASM SDK zip: those build from source or target browser apps, and neither matches this setup.</p>
</section>
<section class="section">
<p class="eyebrow">Extract</p>
<h2>Get from zip file to working folder</h2>
<p>Every command below runs from the extracted Rusty Kaspa folder. Nothing in the archive runs until it's unpacked.</p>
<div class="summary-grid">
<article><span>Windows</span><p>Right-click the downloaded zip, choose Extract All, then open the extracted folder. Expect to see <code>kaspad.exe</code>, <code>stratum-bridge.exe</code>, and a <code>bridge</code> folder.</p></article>
<article><span>macOS</span><p>Double-click the zip (Safari may have already unpacked it). Open the extracted folder and look for <code>kaspad</code>, <code>stratum-bridge</code>, and <code>bridge/config.yaml</code>.</p></article>
<article><span>Linux</span><p>Use the file manager's Extract option, or run <code>unzip rusty-kaspa-v2.0.1-linux-amd64.zip</code>. Enter the extracted folder before running any commands.</p></article>
</div>
<p class="fit-note">"Open a terminal in that folder" means the extracted Rusty Kaspa folder containing the node, bridge, and <code>bridge/config.yaml</code>. It is neither the zip nor its parent directory.</p>
</section>
<section class="section">
<p class="eyebrow">Pick your route</p>
<h2>Which instructions apply to you?</h2>
<div class="table-wrap">
<table class="reality-table">
<thead>
<tr>
<th>Your setup</th>
<th>Use this route</th>
</tr>
</thead>
<tbody>
<tr><td>Node already runs on Windows</td><td>Use the Windows bridge command in external-node mode, then point the ASIC at the Windows computer's local IP.</td></tr>
<tr><td>Node already runs on macOS or Linux</td><td>Use the macOS / Linux bridge command in external-node mode, then point the ASIC at that computer's local IP.</td></tr>
<tr><td>Rusty Kaspa is downloaded but the node hasn't started yet</td><td>Start <code>kaspad</code> first, wait for sync, then start the bridge.</td></tr>
<tr><td>The bridge should start its own node</td><td>Use in-process mode from the official bridge docs. The beginner route below uses external-node mode, which assumes a node already running.</td></tr>
<tr><td>The node runs on another computer</td><td>Keep the first attempt on one machine if possible. If the node stays remote, edit the bridge config so <code>kaspad_address</code> points to that node's RPC address.</td></tr>
</tbody>
</table>
</div>
</section>
<section class="section">
<p class="eyebrow">Step 1</p>
<h2>Open terminal window A and run the node</h2>
<p>Get into the extracted Rusty Kaspa folder first. On Windows, open the folder in File Explorer, click the address bar, type <code>powershell</code>, and press Enter. On macOS or Linux, open Terminal, type <code>cd </code>, drag the extracted folder into Terminal, and press Enter.</p>
<p>Run the node command for your system, and leave this window open. The bridge needs the node running continuously to fetch templates and submit blocks.</p>
<div class="api-command-grid">
<article class="api-command-card">
<span class="command-method">Windows PowerShell</span>
<h3>Terminal window A</h3>
<pre><code>.\kaspad.exe --utxoindex --rpclisten=127.0.0.1:16110</code></pre>
</article>
<article class="api-command-card">
<span class="command-method">macOS / Linux</span>
<h3>Terminal window A</h3>
<pre><code>./kaspad --utxoindex --rpclisten=127.0.0.1:16110</code></pre>
</article>
</div>
<p class="fit-note">Templates from an unsynced node point at stale chain state, so let sync finish before judging mining results. If a node already runs with custom flags, keep those flags and add the RPC listen setting only if the bridge can't reach the node. The official bridge docs use <code>127.0.0.1:16110</code> for the node RPC address.</p>
</section>
<details id="windows" class="section guide-detail">
<summary>
<span class="eyebrow">Step 2A</span>
<h2>Open terminal window B and run the bridge on Windows</h2>
<span class="guide-detail-preview">PowerShell command, dashboard check, port check, and debug logs.</span>
</summary>
<div class="guide-detail-body">
<ol class="learning-steps">
<li>Leave the node running in terminal window A.</li>
<li>Open a second PowerShell window in the same extracted Rusty Kaspa folder.</li>
<li>Run the bridge in external-node mode.</li>
<li>Leave this window open too.</li>
</ol>
<pre><code>.\stratum-bridge.exe --config bridge/config.yaml --node-mode external</code></pre>
<p>Open the dashboard in a browser on the node computer:</p>
<pre><code>http://127.0.0.1:3030/</code></pre>
<p>To check whether the bridge is listening on port <code>5555</code>:</p>
<pre><code>netstat -ano | findstr :5555</code></pre>
<p>To turn on more detailed bridge logs before starting it:</p>
<pre><code>$env:RUST_LOG="info,kaspa_stratum_bridge=debug"</code></pre>
<p class="fit-note">"Cannot find bridge/config.yaml" in PowerShell almost always means the wrong folder. A dashboard that won't open means the sample config didn't load or the bridge process stopped: check the last few lines printed in terminal window B.</p>
</div>
</details>
<details id="mac-linux" class="section guide-detail">
<summary>
<span class="eyebrow">Step 2B</span>
<h2>Open terminal window B and run the bridge on macOS or Linux</h2>
<span class="guide-detail-preview">Terminal command, dashboard check, port check, and debug logs.</span>
</summary>
<div class="guide-detail-body">
<ol class="learning-steps">
<li>Leave the node running in terminal window A.</li>
<li>Open a second Terminal window in the same extracted Rusty Kaspa folder.</li>
<li>If needed, allow the binary to run.</li>
<li>Run the bridge in external-node mode.</li>
<li>Leave this window open too.</li>
</ol>
<pre><code>chmod +x ./stratum-bridge
./stratum-bridge --config bridge/config.yaml --node-mode external</code></pre>
<p>Open the dashboard in a browser on the node computer:</p>
<pre><code>http://127.0.0.1:3030/</code></pre>
<p>To check whether the bridge is listening on port <code>5555</code>:</p>
<pre><code>lsof -i :5555</code></pre>
<p>To turn on more detailed bridge logs for one run:</p>
<pre><code>RUST_LOG="info,kaspa_stratum_bridge=debug" ./stratum-bridge --config bridge/config.yaml --node-mode external</code></pre>
<p class="fit-note">"Cannot find bridge/config.yaml" in Terminal almost always means the wrong folder. On macOS, Gatekeeper may ask for approval before it runs a downloaded binary. Only approve binaries pulled from the official Rusty Kaspa release page.</p>
</div>
</details>
<details class="section guide-detail">
<summary>
<span class="eyebrow">Other route</span>
<h2>If the bridge should start its own node</h2>
<span class="guide-detail-preview">In-process mode from the official bridge docs.</span>
</summary>
<div class="guide-detail-body">
<p>In-process mode, also documented by the bridge, starts <code>kaspad</code> inside the same process as the bridge rather than as a separate program.</p>
<div class="api-command-grid">
<article class="api-command-card">
<span class="command-method">Windows PowerShell</span>
<h3>Bridge plus in-process node</h3>
<pre><code>.\stratum-bridge.exe --config bridge/config.yaml --node-mode inprocess -- --utxoindex --rpclisten=127.0.0.1:16110</code></pre>
</article>
<article class="api-command-card">
<span class="command-method">macOS / Linux</span>
<h3>Bridge plus in-process node</h3>
<pre><code>./stratum-bridge --config bridge/config.yaml --node-mode inprocess -- --utxoindex --rpclisten=127.0.0.1:16110</code></pre>
</article>
</div>
<p class="fit-note">The <code>--</code> separator is not optional. Bridge flags go before it, node flags after.</p>
</div>
</details>
<section class="section">
<p class="eyebrow">Step 3</p>
<h2>Find the node computer's local IP address</h2>
<p>The miner needs the local network address of the computer running the bridge, usually something like <code>192.168.x.x</code> or <code>10.0.x.x</code>.</p>
<div class="api-command-grid">
<article class="api-command-card">
<span class="command-method">Windows</span>
<h3>PowerShell or Command Prompt</h3>
<pre><code>ipconfig</code></pre>
<p>Look for the active Wi-Fi or Ethernet adapter and copy the IPv4 Address.</p>
</article>
<article class="api-command-card">
<span class="command-method">macOS</span>
<h3>Wi-Fi</h3>
<pre><code>ipconfig getifaddr en0</code></pre>
<p>If Ethernet is active, System Settings can be easier: Network, then your active connection, then Details.</p>
</article>
<article class="api-command-card">
<span class="command-method">Linux</span>
<h3>Terminal</h3>
<pre><code>hostname -I</code></pre>
<p>Use the address on the same network as your miner.</p>
</article>
</div>
</section>
<section id="miner" class="section">
<p class="eyebrow">Step 4</p>
<h2>Point the ASIC at the bridge</h2>
<p>Open the miner's web screen. If you don't know the miner's IP address, check your router's connected-device list or the manufacturer's setup tool. Type the miner IP into a browser, sign in, and find the mining or pool configuration page.</p>
<p>Use the bridge computer's local IP address and one of the Stratum ports from the sample config, starting with port <code>5555</code>.</p>
<div class="table-wrap">
<table class="reality-table miner-settings-table">
<thead>
<tr>
<th>Miner field</th>
<th>Put this in</th>
<th>Example</th>
</tr>
</thead>
<tbody>
<tr>
<td>Pool URL</td>
<td><code><node-computer-ip>:5555</code></td>
<td><code>192.168.1.10:5555</code></td>
</tr>
<tr>
<td>Username / worker</td>
<td><code>kaspa:YOUR_WALLET_ADDRESS.WORKERNAME</code></td>
<td><code>kaspa:kaspa:qq...abcd.ks0</code></td>
</tr>
<tr>
<td>Password</td>
<td>Use the miner UI default if it requires a value.</td>
<td><code>x</code> is common in miner UIs, but the Rusty Kaspa bridge docs define only pool URL and username.</td>
</tr>
</tbody>
</table>
</div>
<p class="fit-note">A Kaspa address already starts with <code>kaspa:</code>, so the username field ends up looking like <code>kaspa:kaspa:...</code>. That duplication matches the official bridge format; it's not a typo. Some miner screens expect a URL prefix instead. The official bridge docs give the pool URL as <code><your_pc_IPv4>:<stratum_port></code>; if a miner rejects that format, check its manual for the exact Stratum URL syntax it wants.</p>
</section>
<details class="section guide-detail">
<summary>
<span class="eyebrow">Miner brands</span>
<h2>What changes by miner or software type?</h2>
<span class="guide-detail-preview">IceRiver, Bitmain, BzMiner, Goldshell, and field-name differences.</span>
</summary>
<div class="guide-detail-body">
<p>The bridge detects several miner and mining-software types automatically and adjusts protocol handling per type. The setup screen itself still belongs to the miner manufacturer, so field labels vary.</p>
<div class="summary-grid">
<article><span>IceRiver</span><p>Listed in the bridge docs; these miners require extranonce plus a single hex string job format.</p></article>
<article><span>Bitmain</span><p>Bitmain and GodMiner are listed; these miners use no extranonce, with array plus timestamp job format.</p></article>
<article><span>BzMiner</span><p>Listed in the bridge docs; requires extranonce plus a single hex string job format.</p></article>
<article><span>Goldshell</span><p>Listed in the bridge docs; requires extranonce plus a single hex string job format.</p></article>
</div>
<p class="fit-note">Whatever the brand, the fields that matter stay the same: pool URL, username or wallet field, and a password only if the miner UI demands one.</p>
</div>
</details>
<details class="section guide-detail">
<summary>
<span class="eyebrow">Ports</span>
<h2>Pick the first port</h2>
<span class="guide-detail-preview">Start with 5555, then use lower difficulty ports only for troubleshooting.</span>
</summary>
<div class="guide-detail-body">
<p>The sample config exposes several Stratum ports, each tuned to a different worker difficulty. Start with <code>5555</code>. Drop to a lower-difficulty port only when troubleshooting a connection or matching a weaker worker per the bridge docs.</p>
<div class="table-wrap">
<table class="reality-table">
<thead>
<tr>
<th>Port</th>
<th>Sample config purpose</th>
</tr>
</thead>
<tbody>
<tr><td><code>5559</code></td><td>Very low-difficulty workers.</td></tr>
<tr><td><code>5560</code></td><td>Low-difficulty workers.</td></tr>
<tr><td><code>5561</code></td><td>Medium-difficulty workers.</td></tr>
<tr><td><code>5555</code></td><td>Higher-difficulty workers. Start here for a normal ASIC setup.</td></tr>
<tr><td><code>5556</code>, <code>5557</code>, <code>5558</code></td><td>Higher difficulty ports.</td></tr>
</tbody>
</table>
</div>
</div>
</details>
<details class="section guide-detail">
<summary>
<span class="eyebrow">Step 5</span>
<h2>Check that it's working</h2>
<span class="guide-detail-preview">Bridge window, dashboard, miner screen, and node checks.</span>
</summary>
<div class="guide-detail-body">
<div class="summary-grid">
<article><span>Bridge window</span><p>Should keep running and show miner connection or job activity.</p></article>
<article><span>Dashboard</span><p>Open <code>http://127.0.0.1:3030/</code> and look for active workers, shares, hashrate, and recent activity.</p></article>
<article><span>Miner screen</span><p>Should show an active pool, accepted shares, and hashrate.</p></article>
<article><span>Node</span><p>Should stay synced and keep receiving network updates.</p></article>
</div>
<p class="fit-note">Accepted shares confirm the setup is wired correctly. They are not the reward event: a found block is. A correctly configured rig can run for a long stretch with steady shares and zero blocks. That is solo variance. It isn't a fault.</p>
</div>
</details>
<details class="section guide-detail">
<summary>
<span class="eyebrow">Toccata</span>
<h2>Toccata mining checks</h2>
<span class="guide-detail-preview">Version, activation record, post-Toccata template fields, and testnet checks.</span>
</summary>
<div class="guide-detail-body">
<p>Post-activation block templates can carry new transaction fields. The official node guide warns pools and custom mining stacks to preserve those fields all the way from block template to solved block submission, or risk submitting an invalid block.</p>
<div class="summary-grid">
<article><span>Upgrade</span><p>Use Rusty Kaspa v2.0.1 or newer for the node and bridge path.</p></article>
<article><span>Activation record</span><p>Mainnet activation crossed DAA score <code>474,165,565</code>. Check <a href="/toccata-status">Toccata status</a> for post-activation checks.</p></article>
<article><span>Template fields</span><p>Custom mining software must preserve post-Toccata fields: transaction version, storage mass, compute budget, and covenant outputs.</p></article>
<article><span>Test first</span><p>Run it on Testnet-10 where possible before trusting a mainnet mining path built after the activation score.</p></article>
</div>
</div>
</details>
<details class="section guide-detail">
<summary>
<span class="eyebrow">Fixes</span>
<h2>If it doesn't connect</h2>
<span class="guide-detail-preview">Pool dead, empty dashboard, bridge-node RPC, firewall, rewards, and activation-day checks.</span>
</summary>
<div class="guide-detail-body">
<div class="table-wrap">
<table class="reality-table">
<thead>
<tr>
<th>Symptom</th>
<th>Check</th>
</tr>
</thead>
<tbody>
<tr><td>Miner says pool dead</td><td>Use the node computer's local IP address. <code>127.0.0.1</code> points the miner back at itself.</td></tr>
<tr><td>Dashboard is empty</td><td>Check the bridge is still running, the miner is on the same network, and the pool URL uses a port from the sample config.</td></tr>
<tr><td>Bridge cannot reach node</td><td>Confirm the node is running with RPC at <code>127.0.0.1:16110</code>, or update the bridge config to the node's actual RPC address.</td></tr>
<tr><td>Firewall blocks connection</td><td>Allow the Stratum port on the node computer for the local network.</td></tr>
<tr><td>No rewards</td><td>Check shares first. Rewards need a solved block, and solo variance can leave a working rig without one for a long time.</td></tr>
<tr><td>Toccata activation day</td><td>Recheck versions and logs. Past the activation score, a block that strips new fields is invalid.</td></tr>
</tbody>
</table>
</div>
</div>
</details>
<details class="section guide-detail">
<summary>
<span class="eyebrow">Safer setup</span>
<h2>What to avoid</h2>
<span class="guide-detail-preview">Network exposure and wallet safety.</span>
</summary>
<div class="guide-detail-body">
<div class="summary-grid">
<article>
<span>Network exposure</span>
<p>Keep node RPC, the bridge dashboard, and Stratum ports on the local network while learning. Exposing them publicly invites avoidable trouble.</p>
</article>
<article>
<span>Wallet safety</span>
<p>Use a public Kaspa receive address for the miner username. Never paste a seed phrase or private key into miner, bridge, or dashboard settings.</p>
</article>
</div>
</div>
</details>
<details id="sources" class="section guide-detail">
<summary>
<span class="eyebrow">Sources</span>
<h2>Official references</h2>
<span class="guide-detail-preview">Rusty Kaspa bridge docs, config, node guide, release files, and activation status.</span>
</summary>
<div class="guide-detail-body">
<div class="reference-grid">
<article>
<h3>Bridge how-to</h3>
<p><a href="https://github.com/kaspanet/rusty-kaspa/blob/master/bridge/docs/README.md">Rusty Kaspa Stratum Bridge docs</a>: beta status, external-node mode, in-process mode, dashboard, ports, miner setup, and username format.</p>
</article>
<article>
<h3>Bridge config</h3>
<p><a href="https://github.com/kaspanet/rusty-kaspa/blob/master/bridge/config.yaml">Sample bridge config</a> shows the default dashboard port, Stratum ports, and bridge settings.</p>
</article>
<article>
<h3>Toccata node guide</h3>
<p><a href="https://github.com/kaspanet/rusty-kaspa/blob/master/docs/toccata-guide.md">Toccata node setup guide</a> covers v2.0.1 upgrade guidance, miner and pool checks, fee policy, and post-Toccata field preservation.</p>
</article>
<article>
<h3>Release files</h3>
<p><a href="https://github.com/kaspanet/rusty-kaspa/releases/tag/v2.0.1">Rusty Kaspa v2.0.1 release</a> has the Windows, macOS, and Linux archives used in this guide.</p>
</article>
<article>
<h3>Activation status</h3>
<p><a href="/toccata-status">Kaspa Explained Toccata status</a> tracks activation separately from the setup instructions.</p>
</article>
</div>
</div>
</details>
<!-- related-links:start -->
<section class="section site-related" aria-labelledby="related-links-title">
<p class="eyebrow">Keep reading</p>
<h2 id="related-links-title">Next pages</h2>
<div class="site-related-grid">
<a href="/command-line"><span>Previous</span><strong>How to verify a Kaspa transaction yourself</strong><p>How to verify a Kaspa transaction yourself: use explorers, second sources, wallets, hosted APIs, nodes, RPC, and accepted-transaction...</p></a>
<a href="/builder-evidence"><span>Next</span><strong>How to prove a Kaspa builder claim</strong><p>How to prove a Kaspa builder claim: status label, source, artifact, user-visible result, and remaining blocker.</p></a>
<a href="/status"><span>Status</span><strong>Kaspa current status</strong><p>What is live, targeted, roadmap, and research on Kaspa right now, checked against mainnet, releases, and KIPs.</p></a>
</div>
</section>
<!-- related-links:end -->
</main>
<footer class="footer">
<div class="footer-grid">
<p><strong>Independent Kaspa explainer.</strong> Claims are labeled live, targeted, roadmap, research, unsupported, or wrong. Not investment advice.</p>
<nav class="footer-nav-groups" aria-label="Footer">
<div class="footer-link-group" aria-label="Learn">
<span>Learn</span>
<a href="/start-here">Start here</a>
<a href="/what-is-kaspa">Kaspa 101</a>
<a href="/overview">90-second overview</a>
<a href="/glossary">Glossary</a>
</div>
<div class="footer-link-group" aria-label="Verify">
<span>Verify</span>
<a href="/status">Status</a>
<a href="/kaspa-claims-checker">Claims checker</a>
<a href="/toccata-status">Toccata status</a>
<a href="/skeptical-case">Skeptical case</a>
<a href="/sources">Sources</a>
</div>
<div class="footer-link-group" aria-label="Build">
<span>Build</span>
<a href="/build-on-kaspa">Build on Kaspa</a>
<a href="/builder-guide">Builder guide</a>
<a href="/kaspa-app-ideas">App ideas</a>
</div>
<div class="footer-link-group" aria-label="Site">
<span>Site</span>
<a href="/search">Search</a>
<a href="/about">About</a>
<a href="/about#corrections">Corrections</a>
</div>
</nav>
</div>
</footer>
</body>
</html>