Indexer unreachable — start it with pnpm dev

Protocol reference

How Velanos works

An agent that wants outside capital posts its own capital first. Every action it takes is an EIP-712 signed intent, checked against an immutable mandate on-chain before any funds move. A rule-breaking intent is never executed — and the agent’s signature on it is cryptographic proof of misconduct that anyone can verify and that slashes its bond to depositors in the same transaction.

Prevent

The mandate is checked before funds move. No arbitrary calls exist.

Prove

A blocked intent still carries a signature. That is the evidence.

Pay

Evidence slashes the bond to depositors, automatically.

01Rulebook

The rulebook

Rules are banded by who is to blame, and the band decides the consequence. This is the most important distinction in the protocol: it is what lets us punish misconduct without punishing an agent for volatility.

Static rules — slashable

These depend only on the intent and the mandate. The agent could have evaluated every one of them before signing, so signing anyway is misconduct and the signature is the evidence. A breach moves the agent’s bond to depositors, whether or not the trade ever executed.

101

Asset not in mandate

ASSET_NOT_ALLOWED

The traded asset, or the asset being spent, is not one this vault may touch.

Slashable
102

Venue not in mandate

ADAPTER_NOT_ALLOWED

The intent routes through a venue the vault never approved.

Slashable
103

Trade larger than the per-trade cap

TRADE_SIZE_EXCEEDED

A single buy or position open exceeded the mandate maximum. Sells and closes are never capped.

Slashable
104

Leverage above the mandate limit

LEVERAGE_EXCEEDED

Requested leverage is above the cap, or any leverage at all on a spot vault.

Slashable
105

Signed outside the mandate term

OUTSIDE_TERM

The intent was signed before the mandate started or after it expired.

Slashable
106

Signed after the vault was frozen

SIGNED_WHILE_FROZEN

The agent kept signing after trading had already been halted.

Slashable
107

Validity window too long

VALIDITY_TOO_LONG

An intent may stay valid for at most 5 minutes. Longer windows let an agent pre-sign now and fire later under different conditions.

Slashable
108

Wrong instrument for this vault

KIND_NOT_ALLOWED

A perpetuals order on a spot vault, or the reverse.

Slashable

Stateful rules — never slashable

These depend on live vault and market state the agent cannot fully predict. An honest agent trips them. The action is blocked and recorded as a strike; the bond is untouched. Three strikes in a rolling day put the vault in a cooling-off period that clears itself.

201

Would breach the per-asset cap

EXPOSURE_EXCEEDED

After this trade the vault would hold more of one asset than the mandate allows as a share of NAV.

No slash
202

Price worse than the slippage limit

SLIPPAGE_EXCEEDED

The venue quote is further from the oracle fair value than the mandate permits.

No slash
203

Daily loss budget spent

DAILY_LOSS_EXCEEDED

NAV per share is below the day open by more than the mandate allows, so new risk pauses. Selling stays open.

No slash
204

Intent expired before execution

DEADLINE_PASSED

The intent reached the vault after its own deadline.

No slash
205

Not enough balance

INSUFFICIENT_BALANCE

The vault does not hold enough of the asset being spent.

No slash
206

Vault is not accepting trades

VAULT_NOT_ACTIVE

The vault is awaiting its bond, cooling off, frozen or settled.

No slash
207

Venue rejected the order

EXECUTION_FAILED

The trade was permitted but the venue failed to fill it. Not the agent’s fault.

No slash

Validity rules — ignored

The intent is not attributable to the agent at all. Nothing is recorded and nothing is slashed.

301

Signature does not match the agent key

BAD_SIGNATURE

Ignored. The intent cannot be attributed to this agent.

No slash
302

Nonce already resolved

NONCE_USED

Ignored. Each nonce is executed, rejected or slashed exactly once.

No slash
303

Intent is for a different vault or chain

WRONG_VAULT_OR_CHAIN

Ignored. The EIP-712 domain binds every signature to one vault on one chain.

No slash

02Deployments

Deployed contracts

Read from the deployment files the deploy scripts write. There is no address literal anywhere else in the codebase.

Nothing deployed yet. Run pnpm contracts:deploy:rh.

03Limitations

Known limitations

Stated plainly, because a loss floor is only worth something if its edges are known.

  • Payouts are capped by the bond. If a drawdown is deeper than the bond can cover, depositors keep the remainder of the loss. The fund screen shows that unbacked amount before anyone deposits.
  • The oracle is a role-gated test oracle. It exists so the drawdown demo is exact and reproducible. Production replaces it with Chainlink feeds; nothing else changes, because prices are only read through one interface.
  • The venue is not a real DEX. Fills come from an oracle-priced pool with a fixed spread and linear depth impact, so the arithmetic in the demo is checkable. Mainnet uses a Uniswap adapter.
  • A self-reporting operator can recover the bounty. Bounties are only paid on the reporting path and the agent and operator addresses are excluded, but an operator reporting from an unrelated address it controls keeps that share. The leak is bounded by the bounty rate, and violating is still strictly worse for the agent than not violating.
  • Perp NAV is simplified. One position per market, valued as collateral plus unrealised PnL.
  • Not audited. Testnet only.