<divclass="header-actions"><spanclass="network"><i></i> PRIVATE LOCAL CHAIN</span><buttonid="theme-toggle"class="theme-toggle quiet"type="button"aria-label="Toggle color theme">☀ Light</button></div>
<sectionclass="hero"><div><pclass="eyebrow">BITCOIN, WITH ROOM TO EXPERIMENT</p><h1>Your own little<br>Bitcoin universe.</h1><pclass="intro">Mine a block. Inscribe a thought. See it land in your wallet.<br>All in your browser, all with pretend money.</p></div><divclass="orbit"aria-hidden="true"><divclass="cube"><svgviewBox="0 0 100 100"width="82"height="82"fill="none"stroke="currentColor"stroke-width="5"aria-hidden="true"><pathd="M35 17v12m12-12v12M35 76v12m12-12v12M24 29h25c22 0 22 23 0 23H24m0 0h28c22 0 22 24 0 24H24m7-47v47"/></svg></div><span>YOUR CHAIN. YOUR PACE.</span></div></section>
<asideclass="notice"><strong>Test coins only.</strong> This is a private simulation, not Bitcoin testnet or mainnet. Keys stay in this browser, unencrypted. Never load real keys or send real funds here.</aside>
<divid="status"role="status"aria-live="polite">Create a test wallet to start your first loop.</div>
<sectionclass="workspace">
<articleclass="panel wallet"><divclass="panel-title"><spanclass="step">01</span><h2>Your test wallet</h2><spanid="wallet-state"class="tag">NOT CREATED</span></div>
<divid="empty-wallet"><p>One wallet. A whole chain to play with.</p><buttonid="create-wallet"class="primary">Create test wallet <span>↗</span></button></div>
<divid="active-wallet"hidden><pclass="label">FAKE BTC BALANCE</p><divclass="balance"><spanid="balance">0</span><small>BTC</small></div><pid="reserved"class="muted"></p><labelfor="address">Local regtest-format address</label><inputid="address"readonly><buttonid="export-wallet"class="quiet">↓ Save test wallet</button></div>
<divclass="wallet-footer"><labelclass="file-button"for="load-wallet">↑ Load test wallet or lab backup</label><inputid="load-wallet"type="file"accept=".json,application/json"><pclass="muted">Saved on this device. A wallet backup contains its test key; a lab backup also preserves the chain.</p></div>
<articleclass="panel"><divclass="panel-title"><spanclass="step">02</span><h2>Make some blocks</h2></div><p>Skip the faucet queue. Every block gives you <strong>50 fake BTC</strong>, ready to use immediately.</p><divclass="chain-stats"><div><spanclass="label">BLOCK HEIGHT</span><strongid="height">0</strong></div><div><spanclass="label">PENDING TXS</span><strongid="pending">0</strong></div></div><buttonid="mine"class="primary"disabled>Mine now <span>+</span></button><labelfor="miner-interval">Auto miner</label><selectid="miner-interval"><optionvalue="0">OFF</option><optionvalue="10">10s</option><optionvalue="30">30s</option><optionvalue="60">60s</option></select><pid="miner-status"aria-live="polite">Auto mining OFF</p><pclass="muted">Keep a lab tab open; browser throttling may delay blocks. Mining also confirms your pending inscriptions.</p></article>
<articleclass="panel inscribe"><divclass="panel-title"><spanclass="step">03</span><h2>Leave a little something</h2><spanclass="tag">INSCRIPTION LAB</span></div><labelfor="mime-type">Content type</label><selectid="mime-type"></select><labelfor="body-file">Or upload a local file (16 KiB maximum)</label><inputid="body-file"type="file"><labelfor="parent">Parent inscription (optional, immutable)</label><selectid="parent"><optionvalue="">No parent</option></select><labelfor="payload">What will you put on your chain?</label><textareaid="payload"placeholder="Hello, little Bitcoin universe…"rows="3"disabled></textarea><labelfor="metadata">JSON metadata (optional, independent of body)</label><textareaid="metadata"rows="3"placeholder='{"protocol":"my-experiment","note":"hello"}'></textarea><pid="metadata-count"class="muted">0 / 2048 CBOR bytes · ord tag 5 · JSON is authoring format only</p><divclass="compose-footer"><spanid="byte-count"class="muted">0 / 16384 bytes</span><buttonid="review"disabled>Review inscription ↗</button></div>
<divid="review-panel"hidden><h3>Review before signing</h3><divid="review-preview"></div><preid="review-text"></pre><pid="review-parent"></p><preid="review-metadata"></pre><p>Two transactions: commit + reveal. <strong>1,000 fake sats</strong> in fees; <strong>1,000 fake sats</strong> reserved in your collectible. It returns to your current wallet.</p><pclass="muted">The next button signs both transactions locally with this test wallet and submits them to your private chain.</p><buttonid="sign"class="primary">Sign & inscribe</button><buttonid="cancel-review"class="quiet">Cancel</button></div>
<sectionclass="collection-section"><divclass="section-title"><div><pclass="eyebrow">04 / THE THINGS YOU MADE</p><h2>Your inscriptions <spanid="collection-count">0</span></h2></div><spanclass="muted">Owned by this wallet</span></div><divid="collectibles"class="collectibles"><pclass="empty">Your first inscription belongs here.<br><span>Fund your wallet, write some text, and make it yours.</span></p></div></section>
<divclass="section-title"><div><pclass="eyebrow">05 / FOLLOW THE TRAIL</p><h2>Chain explorer</h2></div><buttonid="export-lab"class="quiet">↓ Save complete lab</button></div>
<divclass="chain-board">
<divclass="mempool-head"><div><spanclass="chain-kicker">MEMPOOL</span><strong>Waiting for the next block</strong></div><spanclass="muted">commit + reveal transactions live here before mining</span></div>
<pid="protocol-stats"></p><h3>Ordered raw events</h3><pclass="muted">Confirmed blocks in chain order, then mempool order.</p><divid="protocol-events"></div>
<labelfor="reducer">Optional trusted local indexer</label><selectid="reducer"><optionvalue="">None</option><optionvalue="event-counter">Example: event-counter</option></select>
<h3>Derived state (separate from raw events)</h3><preid="derived-state">No reducer selected.</pre>
</section>
<sectionclass="panel"id="api-explorer"><h2>API explorer <spanclass="tag">LOCAL / IN-BROWSER</span></h2>
<p>LocalOrdAPI reads this browser’s chain and indexes. These paths are not server URLs; the static host cannot access your lab.</p>
<detailsclass="about"><summary>Under the hood & attribution</summary><p>Real serialized Bitcoin transactions, Schnorr signatures and Taproot commit/reveal scripts, on a deliberately simplified local UTXO chain. No proof of work, Bitcoin consensus, peer network, public broadcast, or production custody. Collectibles can only be spent by explicit child reveals that preserve the parent in the same wallet.</p><p>Built from and inspired by <ahref="https://github.com/supertestnet/testnet_generator">Supertestnet’s testnet_generator</a>, <ahref="https://github.com/supertestnet/inscriptions-online">inscriptions-online</a>, and <ahref="https://github.com/supertestnet/vanilla-js-browser-wallet">vanilla-js-browser-wallet</a>. <ahref="https://github.com/supertestnet/node_faker">node_faker</a> was evaluated for future RPC compatibility.</p><p>Transaction library: <ahref="https://github.com/cmdruid/tapscript">tapscript by Christopher Scott</a> (<ahref="/licenses/tapscript.txt">CC-BY-1.0</a>). <ahref="/licenses/supertestnet-CC0.txt">Supertestnet CC0 license</a> · <ahref="/licenses/noble-curves.txt">noble-curves license</a> · <ahref="/licenses/noble-hashes.txt">noble-hashes license</a>.</p></details>