three input sites lived in a div instead of a form, so pressing enter did nothing and the button was the only way in. chain source url, rescan search depth, and the inline wallet-rename field all get a <form onSubmit>, with every non-submit button in each marked type="button" (the rescan card's reset button was previously untyped, which would have submitted the form once wrapped). CoinsView.tsx has no text inputs (checkbox + buttons only) and SeedPhraseInput.tsx deliberately hijacks enter to advance between word boxes rather than submit, so both are left alone. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Wallet
A self-custodial bitcoin wallet inside Officer, with the keys held on your server rather than on a phone or in a browser.
What you get
- On-chain balance, receive addresses and transaction history
- Send, with fee control, coin selection and UTXO freezing
- Labels for addresses and transactions
- Multiple wallets, one active
- Chain data from Esplora or your own NBXplorer
How the keys are held
Read docs/wallet-key-custody.md in the platform for the full design. The short version:
- Your seed is encrypted under a key derived from your own passphrase (scrypt, N=2¹⁷), then encrypted again at rest. The server never stores the passphrase.
- The wallet is usable while locked — balances, history and fresh receive addresses all work without it. Unlocking is required only to sign.
- An unlock lasts 15 minutes by default and does not extend on use. A restart relocks everything.
- There is no "forgot passphrase". There is no recovery. Your seed backup is the recovery.
Multi-user
Each account gets its own wallet, sealed under its own passphrase. Granting the bitcoin-wallet permission
to a role gives those people a wallet of their own — it does not give them yours, and it does not give
you theirs. Not through the app, and not with root either: their seed is sealed under a passphrase you
do not have.
One caveat, stated plainly: balances and history are stored unencrypted so a locked wallet still shows them. Anyone with the database — or a backup of it — can see any user's balances. They can never move anything.
Permissions
One permission, bitcoin-wallet. Grantable per role like any other app permission.
Requirements
None to start. Esplora is used by default; point it at your own NBXplorer if you run one.