1. Wallet — Seed Phrase & Derivation
Generate a 24-word BIP39 mnemonic, optionally protect it with a passphrase,
and derive the BIP352 scan and spend keys using the standard derivation
paths: m/352'/0'/0'/1'/0 for the scan key and
m/352'/0'/0'/0'/0 for the spend key.
Write down your mnemonic. Anyone with the words can spend your funds.
Leave this empty for a standard seed. If you set one, you must enter it every time you restore — BIP39 has no checksum on the passphrase, so a single wrong character silently produces a different, empty wallet.
The passphrase is held in memory only and is never written to storage.
Recovery phrase (24 words)
Never share these words. Never type them into a website you do not fully trust.
Scan key (b_scan)
Spend key (b_spend)
2. Silent Payment Address (reusable)
The address encodes B_scan ‖ B_spend with bech32m under the
human-readable part sp, witness version 0
(so every valid address begins sp1q…). Post it anywhere —
every payment lands at a fresh on-chain P2TR output that only your wallet can detect.
QR rendered locally as inline SVG.
Labeled addresses (BIP352 labels)
Labels let you tell payment sources apart with one scan key: B_m = B_spend + hash(b_scan‖m)·G.
Label 0 is reserved for change; do not give it out. Hand out m ≥ 1 only.
| m | B_m (33-byte key) | Address |
|---|---|---|
| Generate a wallet first. | ||
3. Sender Simulation
List each transaction input (txid, vout, script type, input private key). Per BIP352 only
P2TR key-path, P2WPKH, P2SH-P2WPKH and P2PKH inputs are summed (taproot keys with odd Y are negated; NUMS-key
inputs and other types are skipped). The app computes input_hash, the ECDH shared secret against your
B_scan and derives one P2TR output per requested index (K ≤ 2323). An optional label m ≥ 1 targets
a labeled address; m = 0 is reserved for change.
Derived outputs
| k | t_k (hex) | P_k x-only | P2TR scriptPubKey |
|---|
4. Receiver Detection
Paste the summed input public key A, the smallest outpoint (outpoint_L) and the candidate output x-only keys. The app runs the BIP352 scan loop (k increments after each match, stops at the first miss, K ≤ 2323), including labels.
5. Backup & App Compatibility
This wallet uses standard BIP39 mnemonic + BIP32 derivation. Any wallet that supports BIP352 silent payments and the derivation path below can restore your funds.
- Backup type
- 24-word BIP39 mnemonic (+ optional passphrase)
- Scan path
- m/352'/coin_type'/account'/1'/0
- Spend path
- m/352'/coin_type'/account'/0'/0
- Address format
- bech32m, hrp "sp", version byte 0 (sp1q…)
- Compatible wallets
- Cake Wallet, BitBox02, Blue Wallet (SP builds), Silentium, Shroud
How to restore in another app
- Install a wallet that supports BIP352 silent payments (e.g. Cake Wallet).
- Choose "Restore from seed" and enter your 24 words.
- If you used a passphrase, enter it exactly.
- Select the account index (default 0) to match this derivation.
- The wallet will scan for payments to your
sp1…address.
Important caveats
- Silent payments require the receiving wallet to scan the chain. This takes time and battery.
- Not all wallets support silent payments yet. Verify before relying on a backup.
- Only version byte
0(sp1q…) is interoperable with current wallets.
6. Derivation Trace
7. Conformance Tests
Vectors marked spec are taken from the BIP/RFC/NIST texts (several from the specs you attached). Vectors marked ref are expected values produced by an independent implementation (Python/OpenSSL) and are not official test vectors.
| # | Test and vector source | Status | Detail |
|---|
8. Wallet Recovery Kit
Recover a Silent Payments wallet produced by this tool or by another
BIP352-capable wallet (Cake, Sparrow, Silentium, BitBox02, …). Optionally
match against a known sp1… address to confirm the correct derivation.
Up to 1 missing word (brute-force is slow).
9. Paper Wallet — PDF Generator (offline, zero-tracker)
Renders a vector PDF paper wallet entirely in your browser. No fonts, images, or
analytics are fetched — the PDF is generated byte-for-byte on this page and delivered as a
Blob download. A4 and US Letter are supported; the public side carries your
sp1q… address and B_scan / B_spend, the private side carries your 24-word
mnemonic and derivation paths.
Never print to a network printer. Never leave a printed paper wallet in view of a camera. Store the private side in a safe, offline place; the public side is safe to share.
Event Log
10. Power Tools
Offline helpers built on the same verified primitives. Nothing leaves the page.
Real BIP85 (HMAC "bip-entropy-from-k", SHAKE256 DRNG), path m/83696968'/39'/0'/words'/index'.
Splits the BIP32 master seed into k-of-n codex32 shares.
The reserved change label key and address (always scanned by this wallet).
scrypt (N=32768) + ChaCha20-Poly1305, authenticated header. Passphrase ≥ 8 characters.
One ? in a 12/15/18/21/24-word phrase; lists every checksum-valid word.
SHA-256 over the public address data, for verifying a restore.
Does this P2TR key belong to your wallet for that transaction? (k and labels 0–50 scanned.)
11. Toolbox: decoders, key tools, shares, backup
Retarget calculator
Segwit addresses (bech32/bech32m), silent payment addresses, Base58Check, WIF, xpub/xprv, or a scriptPubKey hex. Pasting private keys here is your choice; they stay in this page.
scrypt N=32768, r=8, p=1 → ChaCha20-Poly1305; the header is authenticated. Wrong password and file tampering are indistinguishable by design.
About & Provenance
Monolith implements Silent Payments (BIP352) — a scheme
where a sender derives a fresh P2TR output for a recipient without prior interaction. The
recipient publishes one static sp1q… address and scans for outputs using their
scan private key.
Inlined algorithms
- SHA-256 / SHA-512 / HMAC / PBKDF2 — FIPS + RFC (original JS).
- RIPEMD-160 — ISO/IEC 10118-3 (original JS).
- secp256k1 — SEC 2 v2 §2.4.1, BigInt Jacobian (original JS).
- bech32 / bech32m — BIP173 / BIP350 (original JS).
- Base58Check — original JS (WIF + xprv/xpub).
- BIP32 / BIP39 — derivation and mnemonics (original JS).
- QR encoder — byte mode, EC level L, inline SVG (original JS).
- PDF writer — uncompressed, vector-only, standard fonts (original JS).
Threat model
- Review tool, not a signing device. No network access.
- Seed, mnemonic and passphrase are held only in memory. JavaScript strings and BigInts cannot be reliably zeroed, so locking drops references and clears the page, but a memory-forensic attacker on a compromised machine is out of scope.
- Reveal and copy actions require explicit user confirmation.
- Session auto-lock zeroes secrets after inactivity (default 10 minutes).