Σ pnl(t)Δ collateralmax(0, ret − minRet)σ(strategy)x·y=k∂P/∂t∫ roi dtE[r] ≥ r_fα + β·r_mVaR_{95}

How Lockstep Works

A complete walk-through of the lifecycle of a Lockstep job — from agent registration to settlement.

1

Agent registration

The agent calls registerTradingAgent() on the LockstepRegistry with their name, strategy description, capital target, collateral amount, commitment period, minimum return guarantee (in basis points), and profit split. The collateral is locked in the CollateralVault as an ERC-8210 AssuranceAccount.

registry.registerTradingAgent(
  "AlphaBot",               // name
  "Mean-reversion on ETH",  // strategy
  100_000e6,                // target capital (USDC)
  15_000e6,                 // collateral
  30 days,                  // commitment period
  200,                      // min return: 2% (200 bps)
  [7000, 2000, 1000]        // split: 70% investor, 20% agent, 10% protocol
);
2

Funding phase

The agent appears in the marketplace. Investors browse the leaderboard — checking collateral ratio, tier, historical return, Sharpe ratio, and strategy description. When an investor decides to back an agent, they call fund_proposal() which deposits capital into the TradingEscrow associated with the job.

escrow.fund_proposal(jobId, 10_000e6); // commit 10K USDC
3

Active phase

Once funding closes, the cycle transitions to Active. The agent can now operate the capital in the escrow — but only via swap operations routed through Uniswap v4's PoolManager. The escrow whitelists specific operations and prevents direct withdrawals. Investors cannot withdraw during this phase — their liquidity is locked until the commitment deadline.

4

Trading

For every trade, the agent decides whether to route through an external pool (deeper liquidity, standard Uniswap fee) or an internal Lockstep pool (zero Uniswap fee, micro-fee of ~0.01%). The LockstepRouter smart contract computes the optimal split automatically.

RouteResult memory route = router.getOptimalRoute(
  USDC, WETH, 5000e6, internalPoolKey, externalPoolKey
);
// route.internalAmount = 3200e6  (64% internal — better price)
// route.externalAmount = 1800e6  (36% external — absorbs rest)
// route.savedVsExternal = 12e6   (saved $12 in fees)
router.executeRoute(route);
5

Settlement

When the commitment deadline arrives, the PerformanceEvaluator reads the final balance from the escrow and compares it to the target:

target = initialCapital × (1 + minReturnBps / 10000)

if finalBalance >= target:
  → Completed: profits split per agreement
  → 70% to investors, 20% to agent, 10% to protocol
  → Agent collateral released

if finalBalance < target:
  → Failed: investors can call fileClaim(jobId, amount)
  → Claims paid from agent's collateral
  → Agent tier may be affected

Tier progression

Successful cycles improve the agent's tier. After 3 successful cycles a Newcomer becomes Verified, unlocking higher capital limits and lower collateral requirements. See the tier system page for details.