security
Where your keys live, what motion can and cannot touch, and eight checks you can run in this browser right now.
where your keys are
hover or tap a point on the lineoutside the key pathholds no keys · serves the page and the engine · the real risk is altered JavaScript
motion's own description of its architecture, drawn from the code — not an independent verification. The checks below test parts of it in your browser.
what motion cannot — and can — do
cannot — while the page you run is the real one
Move your trading fundsthe server never holds those keys: they exist as ciphertext in your browser and in your backup file. Only altered page code could reach them — the right column is about exactly that.
Sign with your main walletsigning needs your Privy session and happens in Privy's enclave.
Read your private keys from the serverthey never travel there. In the browser the decrypted keys live inside the engine, not on window; the encryption key cannot be copied out of this browser, and since 13 Oct the vault runs on its own origin, vault.motion.gift, whose storage this page's scripts cannot reach at all.
Change a transaction after Buycalldata is built, dry-run and signed in your browser; the server serves data and sees the signed transaction no earlier than the node does.
can — and how you would notice
Ship the page and enginea hacked server could ship altered JavaScript — the real risk of any web wallet, and the one every "cannot" rests on. The engine is hash-pinned (SRI), hashes are in /releases.json, CSP blocks inline and third-party scripts, and the engine itself asks the server to verify your 2FA code before an export or an outside transfer — a script that skips the page dialog still needs your code.
See your trading addressesthey are public on chain anyway; the page sends addresses, never keys.
Show a wrong price or routethe engine dry-runs every buy with eth_call first, so a broken route fails in the preview, not with your money. A deliberately wrong quote is not caught by that — compare the quote with the chart before Buy.
Go offlineyour keys stay in your browser and your backup file; export them and use any wallet.
sign-in · 2fa · signing
Sign-in
- Privy session — email / Google / passkey / wallet
- sessions expire; the page re-checks them
- motion stores no password of yours
Two-factor
- TOTP app + ten one-time recovery codes
- you choose the gates: outside withdrawals, key export, transfers, backups
- a correct code opens the action for 10 min in this browser; repeated wrong codes lock 2FA for a while
- the engine checks the code with the server itself, from inside the isolated vault origin, so page scripts cannot skip the gate
- 2FA secrets sit encrypted on the server and can never move funds by themselves
Signing
- trading wallets sign in the page — no pop-ups, no confirm step: speed is the point of a terminal
- that is why 2FA sits on the exits
- no method signs arbitrary calldata or messages: the engine composes every transaction itself
- the main wallet signs through Privy's flow with your session
if something goes wrong
The server is hacked
- No keys to steal there — the server holds your session, settings and encrypted 2FA secrets, never wallet keys
- The danger is a modified page. The engine's hash is pinned in the page and published; compare it with the release file (the check below does)
- Limitation, plainly: hashes published by the same server cannot prove the server is honest — that is what an independent audit and an open-source engine are for
The site is down or gone
- Your trading keys are still here — in this browser's storage and in your backup file
- export a private key (2FA) and import it into any wallet; the backup file opens with your passphrase in any browser via the restore flow
- your Privy wallet is reachable through Privy, independently of motion
checks you can run now
computed in this browser · nothing shows pass until it ranThe fuller, more technical version is the self-test: it also dry-runs a real buy on every venue through eth_call without signing anything.
the same code as on GitHub
you don't have to trust us — check itin plain words
check it yourself
git clone https://github.com/motiongift/motion-vault → npm ci → npm run build:engine → npm run verify — three “OK” lines mean your build, the live file and the published fingerprint are the same byteschecked — and not yet
done
vault.motion.gift: a separate origin with its own storage and a policy that names the RPC nodes only; wallets made before were moved in once, encryptednot yet
evidence
Found a problem? Send the details by direct message to @motiongift — please do not post them publicly; serious findings are fixed first and credited here.
