Pravelle tutorial & user guide
← home Launch app ↗ Tutorial

Pravelle — Operations & Proof System

Architecture, infrastructure and proof-system reference for operators, builders and reviewers. If you are here to use the app, start with the tutorial instead — it does not require any of this.

Contents

  1. Architecture at a glance
  2. Running the infrastructure
  3. The proof system

1. Architecture at a glance

 Browser host (Mac or SSH-only VFS)       Private compute                 BSC Testnet (97)
┌─────────────────────────────────┐     ┌──────────────────────┐       ┌────────────────────────┐
│ Vercel app + WASM               │     │ dual-RTX-4090 Venus  │       │ DarkPool.sol           │
│ - master key stays in browser   │     │ raw proof on 2 GPUs  │       │ deposit/placeOrder/    │
│ - builds operation authorization│     │ CPU PLONK wrapper    │       │ withdraw/settleMatch2  │
│                                 │     └──────────▲───────────┘       │                        │
│ 127.0.0.1:8799 ─ private SSH ───┼────────────────┘                   │ VenusDarkPoolVerifier  │
│ browser indexer rebuilds trees  │──────────────────────────────────▶│ 16 finalized VKs       │
└─────────────────────────────────┘                                    └────────────────────────┘
             │
             └── matcher on 127.0.0.1:8798 (terms and public linkage; no spending keys)

Live deployment (BNB Smart Chain Testnet, chain 97; depth-20 pool, deployed 2026-08-25)

ContractAddress
DarkPool0xBE945fADB5917FdD20f7cA46A76163b17B526E0f
VenusDarkPoolVerifier0xE518b138b5AC298993c470102F06b21d5419238d
Venus recursion verifier (ZiskVerifier)0xDC01F8DDd42aF2fD9581d127a9874C563c30279F
PoseidonT6Hasher0xD051CEDa4Aa2CE5340894976fC43f10493E28Fb6
pTST fixture token0x6f8807E70c7DE2d218388Fb2D9418190A48481C9
pUSD fixture token0x42003a22247B271caeA327944a62aA5Ce46989D7

Web app: pravelle.vercel.appGuided mode (hold / trade / withdraw) and Proof workspace (raw order book + on-chain settlement).

The controlled BSC testnet split-proof settleMatch2 used 9,642,056 gas, below the chain's 2²⁴ (16,777,216) transaction gas cap. DarkPool is Safe-controlled and remains paused outside scheduled test windows.


2. Running the infrastructure

Guided browser builders keep the master spending key in the page and send only derived authority material plus a signature bound to the exact proof intent. The derived nullifying key remains sensitive metadata, so the configured prover is privacy-trusted. Hosted production uses a pinned, authenticated HTTPS prover; local development can use a loopback SSH forward.

Where 127.0.0.1 lives

Loopback always means the machine running the browser, not Vercel and not automatically the GPU server. The supported topologies are:

For a local browser, generate a new passphrase-protected tester key, send only its .pub file to the operator, and keep the private key on your machine:

ssh-keygen -t ed25519 -a 64 -f ~/.ssh/pravelle-tester -C "pravelle-bsc-testnet"
chmod 600 ~/.ssh/pravelle-tester
# send ~/.ssh/pravelle-tester.pub only; never send ~/.ssh/pravelle-tester

The operator must privately return the restricted alias and the expected SHA256 host fingerprint. Collect the advertised key and compare the fingerprint through that independent channel before installing it. A mismatch is a stop condition:

RESTRICTED_HOSTNAME="operator-provided-real-hostname"
ssh-keyscan -t ed25519 "$RESTRICTED_HOSTNAME" > /tmp/pravelle-host-key
ssh-keygen -lf /tmp/pravelle-host-key
# only after an exact fingerprint match:
ssh-keygen -H -f /tmp/pravelle-host-key
grep -v '^#' /tmp/pravelle-host-key >> ~/.ssh/known_hosts
chmod 600 ~/.ssh/known_hosts

Then download both v1.0.1 release assets and verify the archive before extraction:

curl -fLO https://github.com/cysic-labs/pravelle-tester-tunnel/releases/download/v1.0.1/pravelle-tester-tunnel-v1.0.1.tar.gz
curl -fLO https://github.com/cysic-labs/pravelle-tester-tunnel/releases/download/v1.0.1/SHA256SUMS
shasum -a 256 -c SHA256SUMS  # Linux: sha256sum -c SHA256SUMS
tar -xzf pravelle-tester-tunnel-v1.0.1.tar.gz
cd pravelle-tester-tunnel-v1.0.1
shasum -a 256 -c SHA256SUMS && ./tests/test.sh
./bin/pravelle-tester-tunnel <restricted-ssh-host> ~/.ssh/pravelle-tester

The verified archive SHA-256 is 4346c66d82f156a7d366e7f8edee5593a823db2695d922ca1763817f7bbcdc86. The client refuses unknown or changed SSH host keys. Stop immediately if the restricted account opens a remote shell.

Before starting the tunnel, confirm that local ports 8798 and 8799 are free with lsof -nP -iTCP:8798 -sTCP:LISTEN and the equivalent :8799 command on macOS, or ss -ltn '( sport = :8798 or sport = :8799 )' on Linux. Do not kill an unfamiliar process.

Example operator access (replace <vfs-host> with the private host):

ssh -N -L 6080:127.0.0.1:6080 <vfs-host>
# then open http://127.0.0.1:6080/vnc.html

Service and browser checks

On the current VFS, both durable units should report active, and loopback health should report ok plus proverReady:

systemctl is-active pravelle-prover-tunnel.service pravelle-vnc-browser.service
curl -fsS http://127.0.0.1:8799/health

If prover authentication is enabled, pair the browser once with the individual token assigned by the operator. For hosted testing, the operator can send a private URL whose fragment is #proverToken=<token>; the fragment is not sent in the HTTP request and the page removes it after storing the token for that origin. Never put the token in source control or a screenshot. Local operators may set the same value manually:

localStorage.setItem("pravelle:proverToken", prompt("Paste the test-window prover token"))
location.reload()

3. The proof system

The July 14 dual-4090 validation passed 16/16 statements, two complete repeatability runs (32/32 raw proofs), and 16/16 offline SDK wrapper replays/self-verifications. Independent deployed-verifier validation remains a promotion gate. These are proof-stage wall-clock measurements; queue, file, network, and browser time can add latency:

StatementRaw GPU averageCPU wrapperApprox. live proof path
deposit22.7s49.9s72.6s
place35.7s47.5s83.2s
half-match49.4s51.6s101.0s per side
transfer67.7s53.6s121.3s
batch164.6s53.1s217.7s

Both cards cooperate on one raw proof. This validation establishes correctness and observed two-card latency; it does not isolate the speedup over one 4090. See the full 16-statement timing matrix.