Velo Protocol
Velo is an oracle-priced perpetual futures protocol with a social layer, fully operational on Base Sepolia. Every order, position, and settlement happens on-chain — no off-chain matching engine, no custody, no trust required.
Introduction
Velo is a decentralised perpetual futures exchange where every trade is a real blockchain transaction. Underneath the trading terminal, a full social product lets traders post, follow, copy-trade, and compete on a transparent, on-chain-verified leaderboard. The trading floor and the community are the same room.
The protocol is live on Base Sepolia today. Mainnet follows a security audit — see the roadmap.
Velo currently runs on Base Sepolia with mock USDC (mUSDC) minted from a faucet. No real funds are at risk while the protocol is in testnet.
What Velo is
There is no traditional order book matching buyers and sellers. Instead, every trade is priced against a live Pyth Network oracle feed, collateral is held in the VeloPerps smart contract, and PnL is settled against a liquidity pool on close. This architecture means:
- Zero slippage on execution up to pool capacity — you get the oracle price, not a market-impact price.
- Instant settlement — positions open and close in a single transaction.
- Trustless liquidations — anyone can liquidate an underwater position for a 1% bounty; Velo runs its own keeper as a safety net.
- Verifiable everything — every position has a transaction hash; every closed trade has an on-chain proof.
How it works end-to-end
Onboarding — one signature, no popups
- Connect a wallet via Reown AppKit (MetaMask, WalletConnect, Coinbase Wallet, or social login).
- Choose a
@username— validated for format, verified on-chain for uniqueness via VeloRegistry. - Sign one
personal_signmessage — this derives your Velo Trading Wallet. - The rest is automatic: the gas sponsor sends 0.01 ETH, the wallet mints 1,000 mUSDC from the faucet, and your handle registers on-chain — with zero further popups.
Opening & closing a position
Pick a pair, choose LONG or SHORT, set collateral and leverage (up to 25×), and submit — the trading wallet signs locally. The contract fetches the Pyth price, pulls collateral, charges a 0.10% open fee, and stores the position. Closing reads the current oracle price, computes PnL, deducts a 0.10% close fee, and returns the net payout.
The Velo Trading Wallet
The Velo Trading Wallet (a session key, sometimes called the burner) is what makes Velo feel like a web2 app. It is a regular Ethereum account whose private key is derived deterministically from a single MetaMask signature.
Main Wallet (MetaMask)
→ signs VELO_DERIVATION_MESSAGE (fixed string + chain ID)
→ 65-byte signature (r ‖ s ‖ v)
→ keccak256(signature) → 32-byte hash
→ this hash is the trading wallet's private keyBecause personal_sign is deterministic, the same main wallet always derives the same trading wallet. Recovery is automatic — sign the same message on any device to re-derive the same key.
- Every trade signs locally in the browser — zero MetaMask popups after setup.
- The trading wallet holds only the funds you explicitly move there; the main wallet stays cold.
- The key can be exported from Settings and imported into any EVM wallet.
Order types & execution
Market
Executes immediately at the current Pyth oracle price; confirms in one block.
Limit & Stop
Set a trigger price. The order is stored fully on-chain with collateral locked immediately. A keeper scans open orders every minute and executes when the mark reaches the trigger — the contract re-validates the trigger on-chain, so a keeper cannot fill at the wrong price.
Take-profit & Stop-loss
Set via setTriggers(). The TP/SL keeper calls closeIfTriggered() when the mark crosses the trigger. A 0.25% keeper bounty is paid from the close payout.
Partial close
Close any fraction of a position (1–100%); the contract resizes proportionally and returns the payout pro-rata.
Trigger price vs fill price
This is the most important thing to understand about oracle-priced perps, and it is identical behaviour to GMX, Gains Network, and every other oracle perp. When a keeper executes an order, a fresh Pyth price is pushed on-chain and used for both the trigger check and the PnL calculation.
The price you set is the trigger — the threshold the keeper watches. The fill is the live oracle price at the moment the keeper's transaction mines, which can differ by a few dollars depending on movement in the window between the trigger being hit and the keeper's next tick.
A limit buy on ETH at $2,000 fills at $1,998 if price dipped when the keeper fired — price improvement. On mainnet with a fast keeper this spread narrows to near-zero; on Base Sepolia's once-per-minute cron you may see a few dollars of variance in volatile markets. This is a testnet infrastructure characteristic, not a protocol flaw.
Price oracle & execution model
Velo uses Pyth Network as its oracle with a pull-model architecture. Every transaction that needs a price fetches a fresh update from Pyth's Hermes gateway, passes it as calldata, and the contract charges the exact getUpdateFee() in ETH and reads a price no older than 60 seconds.
Velo reads Pyth and only Pyth across the entire interface, so every number agrees with the price you actually fill at — the live mark streams from Pyth's Hermes SSE endpoint, chart candles come from Pyth symbols, and fills, entries and PnL are the on-chain Pyth price.
Keeper infrastructure
Velo runs three automated keeper jobs, each executing every minute via Vercel Pro cron:
- Limit/Stop keeper — reads open conditional orders, fetches fresh Pyth prices, and executes triggered orders in parallel.
- TP/SL keeper — reads open positions, evaluates TP/SL off-chain with the same arithmetic as the contract, and submits triggered closes.
- Liquidation keeper — computes unrealised PnL off-chain and liquidates positions where loss ≥ 90% of collateral; the 1% bounty makes it partially self-funding.
The contract enforces msg.value == PYTH.getUpdateFee(updateData) with strict equality. All keepers query the exact fee on-chain before every submission — any deviation reverts with PythFeeMismatch.
Protocol fees
No spread, no withdrawal fee, no hidden markup. Fees accrue inside the contract and only the protocol owner can withdraw them.
| Action | Rate |
|---|---|
| Open fee | 0.10% of collateral |
| Close fee | 0.10% of gross payout |
| TP/SL keeper bounty | 0.25% of net payout |
| Liquidation bounty | 1.00% of collateral |
Leaderboard & copy-trading
The leaderboard ranks every trader by realised PnL computed from on-chain trade history — rankings cannot be faked. Copy-trading lets any user subscribe to a trader's positions; when the leader opens a position, the copier's session key mirrors it proportionally.
One-click copy-trading is rolling out alongside on-chain Velo Vaults — see the roadmap below.
Cross-chain deposits & withdrawals
Velo mUSDC is a LayerZero V2 OFT deployed on four Sepolia testnets. Deposit from any chain into your Base Sepolia trading wallet, and withdraw to any chain or address. Cross-chain transfers arrive on Base in 1–3 minutes; the Send modal resolves @usernames via VeloRegistry.
Tech stack
Smart contracts
Frontend
Backend & infra
Deployed contracts
All contracts are verified on BaseScan. The active engine reports its version on-chain (VERSION = 31).
| Contract | Chain | Address |
|---|---|---|
| VeloPerps v3.1 active engine | Base Sepolia | 0x41fD…e907 ↗ |
| VeloMockUSDC collateral · LZ OFT | Base Sepolia | 0x5EFa…6699 ↗ |
| VeloRegistry @handle resolver | Base Sepolia | 0x7e51…ECe2 ↗ |
Mainnet roadmap
- Now — Testnet (Base Sepolia). Fully operational: all order types, three keepers, social layer, cross-chain bridging, provable trade history.
- V2 — Mainnet (Base). After audit: real USDC, an insurance fund, hourly funding rate, a Chainlink sanity oracle, and 3-of-5 multisig ownership.
- V3 — Velo Vaults. On-chain copy-trading vaults with rules (performance fee, lockup, max drawdown) coded in Solidity.
- V4 — Governance token. Issued to early traders, vault leaders, and keepers by verifiable on-chain activity — no presale, no IDO.
- V5 — Multi-venue routing. Vaults route to any compatible execution venue for best execution.
The social layer
$TICKERcashtags; every embedded trade card carries an on-chain tx hash for verification.@usernameslive in VeloRegistry; the Send modal resolves a handle to an address on-chain.