A multi-currency taproot wallet keyed by your identity — your secp256k1 key (nostr or your Solid WebID's CID Multikey) is your taproot address across Bitcoin, Litecoin, and Vertcoin (mainnet + testnets). Inspired by nostr.app/wallet. Experimental.
- Pick a chain → see your taproot address (
bech32mwith the chain's prefix:bc/tb,ltc/tltc,vtc/tvtc), a QR, a copy button, and an explorer link. - Balance via mempool.space for the Bitcoin chains (testnet4/testnet3/mainnet). Litecoin/Vertcoin show the address + explorer (per-chain APIs aren't wired here).
- Shows your
npub— same key, your nostr identity.
The address is derived from your public key only (nostr getPublicKey() or the
WebID Multikey).
Send to any address (tb1…/bc1…, legacy/segwit/taproot), an npub, or a
raw 64-hex pubkey. Pick a fee rate (from mempool's recommendations), optionally
attach an OP_RETURN message (≤80 bytes), then review → broadcast.
How it signs (the careful part):
- This is a raw-key taproot output — your secp256k1 key is the witness-v1 output key (no BIP86 tweak), exactly matching the receive address.
- Inputs are signed with the BIP341 sighash + a BIP340 schnorr signature
computed by
@cmdcode/tapscript(Signer.taproot.hash/Signer.taproot.sign) — proven crypto, not hand-rolled. - Solid: signs locally with the secp256k1 key read from your pod's owner-only
/private/privkey.jsonld. The key is used in-memory, wiped after signing, and never leaves the page — only the signed transaction is broadcast. - Nostr: signs via your extension's
window.nostr.signSchnorr(needs an extension that supports it, e.g. Alby / nos2x). - Every input signature is verified under your output key before broadcast. If any check fails, nothing is sent.
- Mainnet is flagged in red and requires typing
SENDto broadcast.
Test on testnet4 first (faucets linked from the reference's awesome-testnet4). This is experimental software — go slow with real funds.
Static — open index.html, or install via the store to /public/apps/taproot/.
Sign-in required.
AGPL-3.0-only.