Non-custodial Solana trading vaults where your strategy thresholds are evaluated inside Arcium's MPC network, so the platform operator never sees them.
Working on devnet. Not audited. Not on mainnet. Do not use with real funds.
The program's upgrade authority is a single hot key — a plain system-owned keypair, not a multisig. Every custody statement below describes the bytecode running today, not a promise about tomorrow's: whoever holds that key can replace
withdraw. Moving it to a multisig is the one blocker on mainnet.scripts/check-upgrade-authority.mjsrefuses a deploy while the authority is a plain keypair, and exits 1 today.
| What | Grade | Evidence |
|---|---|---|
| Browser-encrypted strategy → MPC evaluation on live Pyth SOL/USD → BLS-attested callback → withdraw | Verified end to end against the live devnet cluster | tests/e2e-devnet.ts |
| The swap that spends an authorization (devnet has no routable liquidity) | Verified on a surfpool mainnet fork with a live Jupiter route | tests/swap-execution.ts |
| Cluster pinning (T-37), the most custody-critical check in the program | CODED, not ENFORCED — the derivation has Rust unit tests, the call site has no runtime detector. A previous test claimed to catch its removal; a mutation run proved it did not. | SECURITY.md |
| Program upgrade authority (T-3) | UNVERIFIED | SECURITY.md |
The last full pass found eight real issues: seven fixed, one not — T-37 above. Two of the
fixed ones would have cost a user money: a cooldown that disabled the stop-loss, and a
strategy replacement that left the old strategy trading. Both now have detectors confirmed by
deleting the fix and watching the test fail. Enforced, merely coded, and claimed-but-absent
are graded threat by threat in SECURITY.md.
- Connect a Solana wallet and create a vault — a PDA controlled by the program, not by us.
- Build a strategy visually, e.g. buy SOL below $150, sell above $180, stop at $120.
- The strategy is encrypted in your browser before it leaves it, and stored on-chain as confidential state.
- Arcium's MPC network evaluates it against a Pyth price and outputs only
BUY,SELLorHOLD. Inputs are secret-shared across nodes; under its dishonest-majority model your parameters stay private as long as at least one node is honest. - The result returns in a callback carrying a BLS threshold signature from the whole cluster, verified on-chain in our program. The operator cannot forge one; a compromised backend can only refuse to schedule work — a liveness failure, never a safety one. Valid results execute via Jupiter.
- You withdraw to your own wallet whenever you want. Funds leave a vault by exactly two paths: a swap between allowlisted mints where both sides stay inside the same vault, or a withdrawal signed by the owner. No instruction in the deployed program accepts an operator authority — a property of the instruction set, not a runtime check.
- The program can still be changed. No instruction lets the operator withdraw your funds, but until the upgrade authority is a timelocked multisig, the operator can replace the instructions.
- Your strategy does not stay hidden forever. Every executed trade is public, and an observer correlating prices against your trades narrows your thresholds over time. That is inherent to acting on a public chain; no cryptography fixes it.
- We hold the Arcium MXE authority. Using it would halt every bot visibly on-chain and cannot forge a trade, but it would let us decrypt previously stored strategies. There is currently no way to burn or timelock it.
- Trade intent is briefly public before execution. Front-running is possible.
- Not for HFT. MPC evaluation takes seconds. Suited to threshold strategies over hours and days; unsuited to arbitrage, scalping, or stop-losses that must fill at a price.
Fast path — the web app against the already-deployed devnet program. Copy .env.example
to .env and fill it in, then:
pnpm install
pnpm --filter @silentedge/web dev # http://localhost:3000Full path — build, deploy and test.
pnpm surfpool # terminal 1: surfpool, forked from devnet
anchor build # terminal 2
anchor deploy --provider.cluster http://127.0.0.1:8899
pnpm test:local # vault + authorization, against the fork
pnpm test:devnet # end-to-end, against the live devnet cluster
pnpm test:fork # swap execution, mainnet fork + live JupiterForking devnet means the real wSOL and USDC mints exist, so the production allowlist is
genuinely exercised (docs/testing.md).
Devnet SOL. A deploy needs roughly 5.3 SOL of headroom for the temporary buffer,
refunded afterwards. solana airdrop is rate-limited to the point of being unavailable, so
top the deploy wallet up at https://faucet.solana.com or from another devnet wallet first.
Never put a funded keypair path in .env. The backend holds no key that can move funds.
| Path | Contents |
|---|---|
programs/vault/ |
Anchor program — custody, limits, intents, swap CPI |
encrypted-ixs/ |
Arcis circuits (Arcium workspace convention) |
programs/hello_arcium/ |
Disposable proof the Arcium pipeline works; its strategy circuits are retired |
apps/web/ |
Next.js — dashboard, strategy studio, client-side encryption |
apps/api/ |
Untrusted service — scheduling, indexing, RPC relay |
packages/ |
sdk strategy encryption (RescueCipher + x25519), types model and validation, config mints and allowlists |
tests/ |
Local-fork, live-devnet and mainnet-fork suites |
scripts/ |
Upgrade-authority check, circuit registration, fork seeding |
Verified toolchain: Rust 1.97.1, Solana CLI 3.1.11 (Agave), Anchor 1.1.2, Arcium 0.14.1, Surfpool 1.5.0, Node 24.7.0, pnpm 11.21.0.
| Document | What it is |
|---|---|
SECURITY.md |
Every threat graded ENFORCED / CODED / UNVERIFIED, plus disclosure policy. Read this before trusting any claim above. |
ARCHITECTURE.md |
The design, and the data, money and strategy flows |
docs/privacy.md |
What the engine hides, and what leaks anyway |
docs/arcium.md |
How the MPC pipeline and persistent encrypted state work |
docs/testing.md |
Test environments, coverage, and a false-pass trap |
docs/research.md |
Verified findings from official docs, with sources |
Also: FEES.md (no protocol fee — a fee would be a third way for value to leave a
vault), docs/oracle.md (why Pyth triggers and Jupiter quotes), and
docs/magicblock-evaluation.md (why an Ephemeral Rollup
cannot sit on this critical path).
Apache-2.0. Permissive, with an explicit patent grant — the licence Solana and Anchor themselves use.