Essentials
Security
Octo is non-custodial. Each wallet's private key is generated in your browser (or the SDK), never transmitted to Octo, and never stored on our servers. We build nothing that can move your funds — every transaction is signed on your device.
Key management
- Keys are generated client-side from a BIP-39 recovery phrase and derived via SEP-0005 (SLIP-0010 ed25519). The mnemonic is shown once at creation — store it out-of-band.
- Your key is backed up as an opaque blob encrypted under your password (PBKDF2-SHA256 → AES-256-GCM, in the browser). Octo stores this blob for recovery but cannot decrypt it — only your password can, and your password never leaves your device.
- Because we never hold your key, a full compromise of Octo's database and servers cannot move your funds.
Deposits & transactions
- Deposits are credited only when the transaction is successful on-chain, and are idempotenton the immutable operation id — a replay or reorg can't double-credit.
- Outbound transfers are built and signed on your device; Octo validates the signed transaction (source must be your wallet; operation-type allowlist) and relays it to the network. It cannot alter or forge a transaction — it has no key to do so.
- Gas sponsorship is paid from a per-wallet gas tank: a separate, Octo-held account that holds only fee float. Worst-case exposure there is the gas budget — never customer balances.
Credentials
- Passwords are hashed with argon2id; API keys are stored only as a SHA-256 hash(a leak can't expose them).
- An API key can relay a transaction you signed, but it cannot sign one — moving funds always requires your key.
ℹ
Trade-off of true non-custodial: if you lose both your password and your recovery phrase, your funds are unrecoverable — Octo cannot reset them for you. Report vulnerabilities responsibly — do not open public issues for security reports.