SeedSigner wallet simulator

Never enter a real seed phrase. On Mainnet this page holds the real mainnet keys for whatever you give it, with no secure element under them: treat anything typed in as public.

i

Never treat this as secure. Not on a phone, and not on an airgapped laptop with the network unplugged. Making device firmware run in a browser took a great deal of custom wiring, any of which could have introduced a critical bug. Treat every key it shows as public and never enter a seed phrase you rely on.

This is device firmware, not a re-creation of it. The Python that runs on a SeedSigner runs here, under Pyodide (CPython compiled to WebAssembly). Nothing in the wallet is patched, and the release it is built from is rebuilt below.

What is running

Firmware
…
Upstream
Tag
Commit
Interpreter
Pyodide , CPython compiled to WebAssembly

Each firmware is pinned to the newest release its project has published, by tag and by commit, rather than to a branch. A branch moves and can be rewritten out from under a rebuild; a published tag cannot.

The wallet zip this page loaded,

published sha256
what arrived here
published contents

The page is checking itself, so this is a convenience and not proof: only rebuilding the zip and comparing the hash is a check that does not depend on this page being honest.

What is in it

The upstream tree at the commit above, this repository's stand-ins for the hardware a browser does not have, and these pinned dependencies. Nothing else.

    Four things a browser cannot do, replaced from outside the firmware and never inside it:

    • Display: the device's own driver renders the frames; the page paints them at 320×240, pixel for pixel.
    • Buttons: the worker is blocked inside the wallet's main loop, so keys cross on a SharedArrayBuffer.
    • Camera: your webcam. pyzbar has no WebAssembly build, so decoding happens in the browser and reaches the unmodified decoder unchanged.
    • Smartcard: simulated SeedKeeper and Satochip cards answering real APDUs.

    Driving it. Press the drawn buttons, or the keyboard: arrows move, Enter selects, 1 to 3 are the side buttons.

    Nothing leaves your browser. The wallet has no network at all, and this page may reach one origin: signet.bitsaga.be.

    That origin is mine. Bitsaga Signet is a test network I run, asked only to see the chain and relay a transaction. No key, xpub or descriptor is ever sent to it, and the firmware never talks to it at all.

    Loading 0.0s

    starting…