-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommand-line.html
More file actions
367 lines (355 loc) · 20.3 KB
/
command-line.html
File metadata and controls
367 lines (355 loc) · 20.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
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>How to Verify a Kaspa Transaction Yourself | Kaspa Explained</title>
<meta name="description" content="How to verify a Kaspa transaction yourself: use explorers, second sources, wallets, hosted APIs, nodes, RPC, and accepted-transaction checks without trusting one interface.">
<meta name="robots" content="index,follow,max-snippet:-1,max-image-preview:large">
<link rel="canonical" href="https://kaspaexplained.com/command-line">
<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="#09090b">
<meta property="og:title" content="How to Verify a Kaspa Transaction Yourself | Kaspa Explained">
<meta property="og:description" content="Use explorers, second sources, wallets, APIs, nodes, and accepted-transaction checks without depending on one screen.">
<meta property="og:type" content="article">
<meta property="og:url" content="https://kaspaexplained.com/command-line">
<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="How to Verify a Kaspa Transaction Yourself | Kaspa Explained">
<meta name="twitter:description" content="Explorer, API, wallet, node, and accepted-transaction verification paths for Kaspa.">
<meta name="twitter:image" content="https://kaspaexplained.com/og-kaspa-explained-20260514.png?v=20260514-logo-clearance">
<meta name="dateModified" content="2026-06-05">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "How to Verify a Kaspa Transaction Yourself",
"url": "https://kaspaexplained.com/command-line",
"dateModified": "2026-06-05",
"description": "A practical route for verifying Kaspa transactions with explorers, APIs, nodes, RPC, wallets, testnet, and future Toccata tooling.",
"about": ["Kaspa", "Rusty Kaspa", "RPC", "Wallets", "Testnet", "Toccata"]
}
</script>
<link rel="stylesheet" href="styles.css?v=20260606-anchor-clearance">
<script defer src="nav.js?v=20260606-anchor-clearance"></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="/start-here">Start</a>
<a href="/what-is-kaspa">Kaspa 101</a>
<a href="/status">Status</a>
<a href="/kaspa-claims-checker">Claims</a>
<a href="/toccata-status">Toccata</a>
<a href="/build-on-kaspa">Build</a>
<a href="/kaspa-app-ideas">Ideas</a>
<a href="/search">Search</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">Verify yourself</p>
<h1>How to verify a Kaspa transaction yourself.</h1>
<p class="lead">The goal is not to make every reader a node operator on day one. The goal is to show the route away from one hosted explorer, one wallet UI, or one dashboard when you need stronger assurance.</p>
<div class="actions">
<a class="button primary" href="#mainnet-node">Run a node</a>
<a class="button" href="#wallet-cli">Open CLI</a>
<a class="button" href="#hosted-api">Hosted API checks</a>
<a class="button" href="#testnet">Use testnet</a>
<a class="button" href="#tn12">TN12 practice</a>
<a class="button" href="#sources">Sources</a>
</div>
<p class="fit-note">Mainnet commands move around with releases. Check the source links before touching real funds.</p>
</section>
<section class="section">
<p class="eyebrow">Start here</p>
<h2>Pick the job.</h2>
<div class="reference-grid">
<article>
<h3>Verify chain state</h3>
<p>Run or query a node, compare explorers, and check accepted transactions without trusting one hosted screen.</p>
<p><a href="#mainnet-node">Start with node commands</a></p>
</article>
<article>
<h3>Use a wallet from terminal</h3>
<p>Open the Rusty Kaspa CLI route, inspect help, confirm network, and avoid signing until key storage is clear.</p>
<p><a href="#wallet-cli">Start with kaspa-cli</a></p>
</article>
<article>
<h3>Practice safely</h3>
<p>Use testnet or TN12 before mainnet. Testnet coins are for learning, not value storage.</p>
<p><a href="#testnet">Start with testnet</a></p>
</article>
<article>
<h3>Build app checks</h3>
<p>Use wRPC and accepted-transaction replay when an app needs to prove that a txid, payload, or output really landed.</p>
<p><a href="#wrpc">Start with wRPC</a></p>
</article>
<article>
<h3>Use a hosted API</h3>
<p>Use a documented API for address history, acceptance checks, and block ranges when a prototype cannot run its own indexer yet.</p>
<p><a href="#hosted-api">Start with KDP</a></p>
</article>
</div>
</section>
<section class="section">
<p class="eyebrow">Mental model</p>
<h2>Verification ladder.</h2>
<div class="reference-grid">
<article>
<h3>1. Explorer</h3>
<p>Use an explorer to see whether a transaction appears accepted. This is convenient, not the final trust model.</p>
</article>
<article>
<h3>2. Second source</h3>
<p>Compare another explorer, API, wallet, or indexer view. If two hosted views disagree, slow down.</p>
</article>
<article>
<h3>3. Your wallet</h3>
<p>Check network, address, balance, transaction history, fee, and signing intent inside wallet software you control.</p>
</article>
<article>
<h3>4. Your node</h3>
<p>Run or query a node when you need to verify chain state without depending on a hosted interface.</p>
</article>
</div>
<p class="fit-note">Independent verification means climbing this ladder when the situation matters. It does not mean every normal payment requires every step.</p>
</section>
<section id="hosted-api" class="section">
<p class="eyebrow">Hosted API</p>
<h2>KDP commands and boundaries.</h2>
<p>The <a href="https://docs.kas.fyi/">Kaspa Developer Platform</a> is a hosted API for chain data, transaction checks, block queries, and a node RPC proxy. It is useful for prototypes, dashboards, exchange/wallet integrations, and second-source checks.</p>
<div class="api-command-grid" aria-label="Kaspa Developer Platform command examples">
<article class="api-command-card">
<span class="command-method command-method-post">POST</span>
<h3>Transaction acceptance</h3>
<p>Batch-check txids for acceptance, accepting block hash, and confirmation count.</p>
<pre><code>curl --request POST \
--url https://api.kas.fyi/v1/transactions/acceptance \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '{"transactionIds":["<txid>"]}'</code></pre>
</article>
<article class="api-command-card">
<span class="command-method">GET</span>
<h3>DAA-score blocks</h3>
<p>Read a bounded DAA-score range. KDP limits these ranges to 100 scores per request.</p>
<pre><code>curl --request GET \
--url https://api.kas.fyi/v1/blocks/daa-score/{daa_score_start}/{daa_score_end} \
--header 'x-api-key: <api-key>'</code></pre>
<p class="api-command-note">For paginated jobs, advance the range deliberately and record the last checked score.</p>
</article>
<article class="api-command-card">
<span class="command-method">GET</span>
<h3>Blue-score blocks</h3>
<p>Read blocks by blue score when that is the progress marker your app stores.</p>
<pre><code>curl --request GET \
--url https://api.kas.fyi/v1/blocks/blue-score/{blue_score_start}/{blue_score_end} \
--header 'x-api-key: <api-key>'</code></pre>
</article>
<article class="api-command-card">
<span class="command-method">GET</span>
<h3>Address history</h3>
<p>Use cursor pagination for large address histories. Cache carefully and handle rate limits.</p>
<pre><code>curl --request GET \
--url 'https://api.kas.fyi/v1/addresses/<address>/transactions?limit=100' \
--header 'x-api-key: <api-key>'</code></pre>
</article>
<article class="api-command-card api-command-card-note">
<span class="command-method command-method-note">DATA</span>
<h3>API data rules</h3>
<p>Amounts are sompi strings, not floats. Hashes are 64-character hex strings. Addresses use the <code>kaspa:</code> prefix. API timestamps are Unix milliseconds.</p>
<pre><code>1 KAS = 100000000 SOMPI
amount: "31112708372"
blockTime: 1749531022210</code></pre>
</article>
<article class="api-command-card api-command-card-note">
<span class="command-method command-method-note">LIMITS</span>
<h3>Rate limits and keys</h3>
<p>Send the API key in <code>x-api-key</code>. Watch rate-limit headers, request-unit cost, 401 errors for key issues, and 429 errors for backoff.</p>
<pre><code>ratelimit-limit: 500;w=1
ratelimit-remaining: 490
x-request-cost-ru: 10</code></pre>
</article>
<article class="api-command-card api-command-card-note">
<span class="command-method command-method-note">BOUNDARY</span>
<h3>Production boundary</h3>
<p>API keys, rate limits, pricing, and provider uptime are product dependencies. Production apps should plan their own node, indexer, or redundant provider path when reliability, privacy, or scale matters.</p>
</article>
</div>
<p class="fit-note">KDP is a useful hosted read path. Protocol status still comes from source, releases, KIPs, nodes, and network evidence.</p>
</section>
<section id="mainnet-node" class="section">
<p class="eyebrow">Mainnet</p>
<h2>Run a Rusty Kaspa node.</h2>
<p>Prerequisites: Docker for the container route, or Rust/Cargo for the source route. A node can verify chain state; it does not create or protect wallet keys by itself.</p>
<p>Docker route with persistent storage:</p>
<pre><code>docker pull kaspanet/rusty-kaspad:latest
mkdir -p ~/kaspa-data
docker run -d --name kaspa-node --restart unless-stopped \
-v ~/kaspa-data:/app/data \
-p 16110:16110 -p 16111:16111 -p 17110:17110 -p 18110:18110 \
kaspanet/rusty-kaspad:latest</code></pre>
<p>Basic container checks:</p>
<pre><code>docker ps
docker logs --tail=80 kaspa-node</code></pre>
<p>Source-build route from the Rusty Kaspa README:</p>
<pre><code>git clone https://github.com/kaspanet/rusty-kaspa
cd rusty-kaspa
cargo run --release --bin kaspad</code></pre>
<p>Mainnet node with UTXO indexing:</p>
<pre><code>cargo run --release --bin kaspad -- --utxoindex</code></pre>
<p>Use <code>--utxoindex</code> when wallet or UTXO queries need indexed UTXO state. Let the node sync before treating its answers as current.</p>
</section>
<section id="wallet-cli" class="section">
<p class="eyebrow">Wallet and RPC</p>
<h2>Open the terminal wallet/RPC path.</h2>
<p>From a Rusty Kaspa checkout:</p>
<pre><code>cd cli
cargo run --release</code></pre>
<p>Use this as the current source-backed entry into the Rusty Kaspa terminal RPC and wallet runtime. Before creating wallets or signing anything:</p>
<div class="reference-grid">
<article><h3>Check network</h3><p>Confirm whether the CLI is connected to mainnet or testnet before creating or importing wallet material.</p></article>
<article><h3>Check files</h3><p>Find where wallet files, keys, and local state are stored. Do not guess.</p></article>
<article><h3>Check intent</h3><p>For every transaction, inspect address, amount, fee, network, and whether it is a send, sweep, or self-transfer.</p></article>
<article><h3>Test small</h3><p>Use tiny amounts first, then verify the accepted txid through independent sources.</p></article>
</div>
</section>
<section id="wrpc" class="section">
<p class="eyebrow">wRPC</p>
<h2>Enable a JSON WebSocket RPC endpoint.</h2>
<p>Rusty Kaspa documents wRPC as optional and disabled by default. For JSON wRPC:</p>
<pre><code>cargo run --release --bin kaspad -- --utxoindex --rpclisten-json=default</code></pre>
<p>This lets SDKs and scripts query node state over WebSocket. Bind carefully on public machines. A public RPC endpoint is infrastructure, not a wallet safety boundary.</p>
<p>Use wRPC when an app needs to read accepted transactions, inspect payload-capable routes, or compare indexer state against node-observed chain state.</p>
</section>
<section id="testnet" class="section">
<p class="eyebrow">Testnet</p>
<h2>Practice before mainnet.</h2>
<p>Generic Rusty Kaspa testnet route:</p>
<pre><code>cargo run --release --bin kaspad -- --testnet</code></pre>
<p>Older hard-fork testnet guides used explicit suffixes, for example:</p>
<pre><code>kaspad --testnet --netsuffix=10 --utxoindex
cargo run --bin kaspad --release -- --testnet --netsuffix=10 --utxoindex</code></pre>
<p>For TN12/Toccata work, verify the current netsuffix, release, endpoint, and flags from active public docs before running. Older TN10 examples are Crescendo-era context. The Rusty Kaspa <a href="https://github.com/kaspanet/rusty-kaspa/releases/tag/tn10-toc2">tn10-toc2</a> and <a href="https://github.com/kaspanet/rusty-kaspa/releases/tag/tn10-toc3">tn10-toc3</a> pre-releases plus <a href="https://api-tn10.kaspa.org/info/blockdag">Testnet-10 REST status</a> are the current Testnet-10 Toccata activation and hardening evidence.</p>
<p><a href="/builder-evidence">Builder Evidence</a> links the public site to the TN12 proof lab when you want accepted testnet examples.</p>
</section>
<section id="tn12" class="section">
<p class="eyebrow">TN12 practice</p>
<h2>Use the proof lab for covenant-shaped testnet work.</h2>
<p>TN12 is where covenant, payload, and replay experiments can be practiced before mainnet behavior changes. In the TN12 repo, the basic route is:</p>
<pre><code>git clone https://github.com/parker2017code/tn12-covenant-vault-demo
cd tn12-covenant-vault-demo
npm ci
npm run check:all
npm run check:tn12
npm run playground:wallets</code></pre>
<p>Then fund only the printed <code>kaspatest:</code> addresses with faucet tKAS, inspect txids in the TN12 explorer, and replay before believing app state. Anything with <code>--submit</code> is a real TN12 broadcast.</p>
<p>Status: testnet practice. Mainnet wallet, custody, and Toccata activation claims need mainnet evidence.</p>
</section>
<section class="section">
<p class="eyebrow">Toccata reminder</p>
<h2>Update this when mainnet behavior changes.</h2>
<p>Toccata/TN12 command examples stay in the testnet or scheduled lane until the activation score, public activation evidence, official docs, and working tool commands show that the behavior is live on mainnet.</p>
</section>
<section id="sources" class="section">
<p class="eyebrow">Sources</p>
<h2>Check these before running commands.</h2>
<div class="reference-grid">
<article>
<h3>Kaspa Developer Platform</h3>
<p><a href="https://docs.kas.fyi/">docs.kas.fyi</a></p>
<p><a href="https://docs.kas.fyi/api-reference/v1/transaction/create-transaction-acceptance">Transaction acceptance</a></p>
<p><a href="https://docs.kas.fyi/api-reference/v1/block/get-block-daa-score">DAA-score blocks</a></p>
<p><a href="https://docs.kas.fyi/api-reference/v1/block/get-block-blue-score">Blue-score blocks</a></p>
<p><a href="https://docs.kas.fyi/essentials/data-types">Data types</a></p>
<p><a href="https://docs.kas.fyi/rate-limits">Rate limits</a></p>
<p>Hosted API for address history, transaction acceptance, block ranges, and node RPC proxy access. Useful for prototypes and second-source checks.</p>
</article>
<article>
<h3>Kaspa Build</h3>
<p><a href="https://kaspa.org/build">kaspa.org/build</a></p>
<p>Node, SDK, query, explorer, and testnet entry points.</p>
</article>
<article>
<h3>Kaspa Docs</h3>
<p><a href="https://docs.kaspa.org/">docs.kaspa.org</a></p>
<p>Integration docs for RPC, payloads, accepted transactions, and node infrastructure.</p>
</article>
<article>
<h3>Rusty Kaspa</h3>
<p><a href="https://github.com/kaspanet/rusty-kaspa">github.com/kaspanet/rusty-kaspa</a></p>
<p>Current node, wallet, CLI, Docker, and wRPC source commands.</p>
</article>
<article>
<h3>TN10 Toccata tests</h3>
<p><a href="https://github.com/kaspanet/rusty-kaspa/releases/tag/tn10-toc3">tn10-toc3 release</a></p>
<p><a href="https://github.com/kaspanet/rusty-kaspa/releases/tag/tn10-toc2">tn10-toc2 release</a></p>
<p>Testnet-10 Toccata activation and hardening schedules. Use them as testnet evidence and check current release notes before running commands.</p>
</article>
<article>
<h3>Releases and explorers</h3>
<p><a href="https://github.com/kaspanet/rusty-kaspa/releases">Rusty Kaspa releases</a></p>
<p><a href="https://explorer.kaspa.org/">Kaspa explorer</a></p>
<p><a href="https://faucet-testnet.kaspanet.io/">Testnet faucet</a></p>
</article>
</div>
</section>
</main>
<footer class="footer">
<div class="footer-grid">
<p><strong>Independent resource.</strong> Kaspa-positive research guide, 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>