Browser-based FROST threshold signing portal for BotWallet. Authorizes withdrawals and transfers initiated from the BotWallet dashboard using your recovery phrase (Key 1 / S1).
Your private key never leaves the browser. This app performs client-side FROST partial signature computation and communicates only the partial signature to the server. The full signing key is never reconstructed.
Live: sign.botwallet.co
- You initiate a withdrawal or transfer from the BotWallet dashboard.
- The dashboard creates a signing intent on the server and redirects you here with a one-time token.
- You review the transaction details (amount, from, to, fees).
- You enter your 12-word recovery phrase (Key 1 / S1) — this is processed entirely in your browser.
- The app computes a FROST nonce commitment and partial signature, sends only those to the server.
- The server computes its own partial signature using Key 2 (S2), aggregates both, and submits the transaction to Solana.
At no point does the full private key exist in any single location.
You can clone and run this yourself to verify the code or host your own instance:
git clone https://github.com/botwallet-co/botwallet-sign.git
cd botwallet-sign
npm install
npm run devThe dashboard has a hidden option to specify a custom signing portal URL if you're self-hosting.
npm run buildOutput is in dist/ — serve it from any static hosting (S3, Netlify, Vercel, GitHub Pages, etc.).
- No server-side key access. The recovery phrase is processed client-side using
@noble/hashesand@noble/curves— audited, pure-JS cryptography libraries. - Memory zeroing. Key material is overwritten in memory immediately after use.
- Single-use tokens. Each signing session uses a cryptographically random token that expires in 15 minutes and can only be used once.
- No inline scripts. CSP policy is
script-src 'self'— no third-party scripts, no inline execution. - Open source. Inspect every line of code. The FROST signing logic is in
src/lib/frost.tsandsrc/lib/mnemonic.ts.
- React 18 + TypeScript
- Vite
- Tailwind CSS
@noble/hashes/@noble/curvesfor cryptography@scure/bip39for mnemonic validation
Apache License 2.0 — see LICENSE.