Website · Devnet App · Dashboard · Guided Demo · X / Twitter
Onchain ops firewall for Solana protocols.
Praetor monitors privileged Solana protocol operations, detects suspicious treasury, governance, signer, and upgrade-authority actions, produces deterministic risk decisions, and creates real Solana devnet attestation proof for guardian challenge and blocked execution workflows.
Detect → Attest → Challenge → BlockPraetor is live, Solana devnet-enabled, QuickNode-powered, wallet-connectable, and built for Colosseum demo review. It is not mainnet, not custodial, and not fake-signature based.
- Website: https://praetores.com
- Devnet App: https://praetores.com/app
- Dashboard: https://praetores.com/dashboard
- Guided Walkthrough: https://praetores.com/demo
- GitHub: https://github.com/RaptorLabsHQ/praetores.com
- X: https://x.com/PraetorHQ
Praetor is a security control plane for high-risk Solana protocol operations:
- Monitors privileged protocol actions such as treasury withdrawals, governance changes, signer activity, and upgrade-authority operations.
- Detects suspicious treasury, governance, signer, and upgrade-authority actions using deterministic risk rules.
- Scores the operation and emits a clear decision path for operators and guardians.
- Creates a real Solana devnet attestation transaction using the Memo Program.
- Ships a live Anchor v1.0 devnet program for protocol profiles, attestation records, and guardian challenges.
- Sends and confirms the signed transaction through QuickNode RPC.
- Shows a Solana Explorer devnet link for the resulting transaction.
- Supports a guardian challenge / blocked execution workflow so unsafe operations are visibly denied by Praetor policy.
Detect → Attest → Challenge → Block- Detect a risky privileged operation.
- Attest to the deterministic risk decision on Solana devnet.
- Challenge the attempted operation through the guardian workflow.
- Block execution under Praetor policy.
/— landing page with Praetor positioning, live status badges, and CTAs for the devnet app and dashboard./app— primary wallet-connected devnet workflow for triggering a suspicious operation, signing a real Memo Program attestation, submitting through QuickNode RPC, and viewing the Solana Explorer devnet link./dashboard— live command center with devnet status, latest slot when available, protected protocol profile, latest incident, and latest local attestation evidence./demo— guided non-wallet walkthrough for judges who want to review the flow without connecting a wallet. This route is secondary to/app.
- User opens
/appand connects a Solana wallet on devnet. - Praetor stages editable operation inputs against the DemoDAO Treasury profile.
- Praetor computes a deterministic rule-based score, risk level, decision, and rule trace.
- User creates a Memo Program devnet attestation that commits that computed decision.
- Wallet signs the transaction client-side.
- QuickNode RPC sends and confirms the signed transaction.
- App shows the signature and Solana Explorer devnet link.
- Execution is marked blocked by Praetor policy.
Praetor now includes a deployed Anchor v1.0 devnet program for the onchain MVP primitive:
- Program ID:
HKQ5WMoZFuT2zrDJyoKKpQFLQgtVMsuHUhuAM1DcqLbk - Explorer: https://explorer.solana.com/address/HKQ5WMoZFuT2zrDJyoKKpQFLQgtVMsuHUhuAM1DcqLbk?cluster=devnet
- Workspace:
solana/praetor_program
Current instructions:
initialize_protocol_profile— creates the protected protocol profile PDArecord_attestation— writes a risk attestation PDA for a privileged actionsubmit_guardian_challenge— opens a guardian challenge PDA and flips the attestation into blocked state
Current PDAs:
- Protocol profile PDA
- Attestation PDA (one per incident sequence)
- Guardian challenge PDA (one per attestation and guardian)
The web app still uses Memo Program attestations for the fastest demo-safe live path. The Anchor program is the shipped onchain primitive that demonstrates the upgrade path from logging-only proof to native protocol security state on Solana.
QUICKNODE_RPC_URL powers Praetor's server-side Solana devnet RPC access. It is used by API routes for:
- Devnet health and slot status.
- Latest blockhash retrieval.
- Signed attestation transaction submission.
- Transaction confirmation.
QuickNode endpoint secrets must be configured as environment variables and must not be hardcoded in the repository.
- The server never handles private keys.
- The server never signs transactions.
- Wallet signing happens client-side through the connected Solana wallet.
/api/solana/send-attestationaccepts only a base64 signed transaction and the known Praetor incident id.- The current MVP is devnet only.
- The Memo Program is used for MVP attestation proof.
- Mainnet deployment, production policy enforcement, and audited protocol integrations are roadmap items.
GET /api/healthreturns clean JSON service health.GET /api/incidents/simulateandPOST /api/incidents/simulatereturn410 Gone; local incident simulation has been removed so Solana-facing screens rely on live devnet RPC and wallet-signed attestations.POST /api/webhooks/quicknodeaccepts QuickNode webhook payloads and verifiesx-quicknode-secretwhenQUICKNODE_WEBHOOK_SECRETis configured.GET /api/solana/statusreturns QuickNode-backed Solana devnet status, slot, health, blockhash preview, Solana core version, and the live Praetor Anchor program account state.GET /api/solana/blockhashreturns a fresh Solana devnet blockhash from QuickNode RPC.POST /api/solana/send-attestationrejects invalid payloads, rejects private-key shaped payload fields, never signs server-side, and submits the signed transaction bytes through QuickNode RPC.
Example health response:
{ "ok": true, "service": "praetor-api" }The old simulated incident endpoint intentionally no longer returns fixture incident data.
QUICKNODE_RPC_URL=
NEXT_PUBLIC_SOLANA_RPC_URL= optional
QUICKNODE_WEBHOOK_SECRET=
PRAETOR_PROGRAM_ID=HKQ5WMoZFuT2zrDJyoKKpQFLQgtVMsuHUhuAM1DcqLbk
NEXT_PUBLIC_PRAETOR_PROGRAM_ID=HKQ5WMoZFuT2zrDJyoKKpQFLQgtVMsuHUhuAM1DcqLbk
DEMO_VAULT_PROGRAM_ID=
NEXT_PUBLIC_APP_URL=
NEXT_PUBLIC_API_URL=
NEXT_PUBLIC_SOLANA_CLUSTER=devnetNotes:
QUICKNODE_RPC_URLshould point to a Solana devnet QuickNode endpoint.NEXT_PUBLIC_SOLANA_CLUSTERshould remaindevnetfor this MVP.NEXT_PUBLIC_SOLANA_RPC_URLis optional; server-side Solana routes useQUICKNODE_RPC_URL.PRAETOR_PROGRAM_IDandNEXT_PUBLIC_PRAETOR_PROGRAM_IDshould point to the deployed Praetor Anchor program on devnet.- Do not commit real secrets.
npm install
npm run dev
npm run build
npm run startOpen http://localhost:3000 while npm run dev is running.
For the onchain workspace:
cd solana/praetor_program
anchor build
cargo test
anchor deploy --provider.cluster devnet1. Open /app
2. Connect Solana wallet on devnet
3. Trigger suspicious operation
4. Review risk score
5. Create devnet attestation
6. Sign with wallet
7. Open Solana Explorer link
8. Confirm blocked execution statelib/risk-engine.ts contains deterministic local scoring for demo incidents:
- Treasury transfer above threshold:
+30 - Unknown signer:
+25 - Non-allowlisted destination:
+25 - Upgrade authority interaction:
+40 - Policy mismatch:
+20 - Repeated suspicious attempt:
+15
Risk levels:
0-29low30-59medium60-79high80-100critical
- Next.js App Router
- TypeScript
- Tailwind CSS
- Solana Web3.js
- QuickNode Solana devnet RPC
- Push this repository to GitHub on the
mainbranch. - Configure production environment variables in the hosting provider.
- Use these commands:
- Build command:
npm install && npm run build - Run command:
npm run start - HTTP port:
3000
- Build command:
- Point
praetores.comto the deployed app through the hosting provider's custom domain flow.
Jelena — Founder and CEO, Strategy, Partnerships
Bob — Co-founder, CTO, Security Architect
Praetor includes an optional premium hero animation system for the landing page.
- Source scene:
components/hero/PraetorHeroScene.tsx. - Landing page video/live-scene wrapper:
components/hero/PraetorHeroMedia.tsx. - Recorder route:
/render/hero-animation.
To export the hero video:
- Run the app locally with
npm run dev. - Open
/render/hero-animationin a browser that supportsHTMLCanvasElement.captureStreamandMediaRecorder. - Click Record WebM.
- The browser downloads
praetor-hero.webm. - Place the exported file at
public/brand/praetor-hero.webm.
The recording step is manual and optional. npm run build does not generate or require the WebM file. If public/brand/praetor-hero.webm is absent or fails to load, the homepage gracefully falls back to the live browser-rendered Praetor hero scene.