Authentication
The app gates entry behind the vault password — there are no accounts, no wallet connect, nothing to sign in to.
First visit
- Open the app — the gate offers vault creation.
- Choose a wallet count and a password (8+ characters).
- The 24-word BIP-39 phrase is shown once. Write it on paper, confirm, and the vault is created encrypted in
localStorage(jb:vault) and unlocked for the session.
Returning visits
The gate asks for the vault password. Unlocking derives all wallets from the decrypted phrase and verifies them against the stored address list — a wrong password fails decryption outright, a tampered vault fails the address check. The sidebar then shows wallet 0's address; lock from the same place.
Locking is just forgetting: the in-memory keys are dropped (JBVault.lock()), the encrypted blob stays. Closing the tab locks too.
Honest scope
This is not server-enforced access control — there is no server. A static page cannot stop anyone from reading it, and it does not try to. What the password protects is real: the AES-GCM-256 encryption of your keys. The security boundary is the vault, and the vault is genuine cryptography, not a login form.
One identity, two roles
There is no connected-wallet identity anymore — the vault is the identity:
- Wallet 0 — the deployer and funder. It receives your budget on the source chain, signs
launchAndBuy, and its address is whatcanLaunchchecks against the Pons whitelist. - Wallets 1…N — the bundle. Funded by relay.link distribution, they buy progressively and hold the position.