Skip to main content

Overview

Geode’s economic model ensures three things:
  1. Settlers are incentivized to settle batches promptly
  2. Wash trading is unprofitable — batches can’t extract more than they contribute
  3. The protocol captures value from direct swap activity while permanently strengthening curve markets
Core invariant: A batch cannot withdraw more settlement reward than that batch economically contributed, except for a tightly capped gas reimbursement.

Fee Sources

The 3-Way Fee Split (Curve Pools)

Direct swaps on curve pools charge a 0.3% fee that is split three ways: The reserve fee is the most interesting piece — it means every direct swap permanently ratchets the curve’s floor price upward. The more trading activity a token has, the higher its floor.
For standard pools (non-curve), there is no reserve fee. The fee is split ~1/3 to treasury and ~2/3 to surplus.

Settlement Fee

Every filled intent pays a settlement fee from its own input before that input routes to internal matching, the curve, or the AMM:
  • Buy intents: fee is denominated in currency0 (e.g., WETH)
  • Sell intents: fee is denominated in currency1 (e.g., the token)
  • Only net input participates in matching, curve, or AMM routing
  • The fee amount remains in the PoolManager as unrouted balance
The settler claims these fees via poolManager.take() at the end of settlement.

Why Input-Side?

Deducting fees from the input (not the output) has important properties:

One-Sided Batches Work

A batch with only buys (or only sells) still produces fees. There’s no dependency on opposite-side intents existing.

Self-Funding

Each batch’s fees come from that batch’s participants — not from a shared pool that could be drained.

Clean Distribution

Output distribution is already net of fees. No cross-side deduction needed — each buyer/seller gets their full pro-rata share.

Curve Integrity

In curve mode, curve reserves receive net input. Fees never inflate the Geocurve’s price or reserves.

Settler Reward

The total reward a settler earns from a batch:

Component 1: Batch Settlement Fees

The settler always receives these in full — they come from the intent owners’ own deposits.

Component 2: Gas Reimbursement

Gas reimbursement is drawn from the pool’s accumulated surplus. Key properties:
  • Capped: never exceeds maxGasReimbursement per batch (default: 0.01 ETH)
  • Gas-based: scales with actual gas consumed, NOT with matched volume
  • Surplus-funded: draws from surplusCurrency0 then surplusCurrency1
  • Best-effort: if surplus is insufficient, the settler receives less
This serves as a liveness backstop — settlement remains viable even when fees alone don’t cover gas costs.

SettlerPaid Event

Every settler payment emits an on-chain audit trail:
Off-chain monitoring can verify:
  • Settlement fees scale linearly with volume (input-funded)
  • Gas reimbursement is constant across volume tiers (gas-based, capped)

Surplus Management

Accumulation

Surplus comes from direct swap fees — the fee charged by the beforeSwap hook on non-intent swappers:
  • Curve pools: 1/3 of the 0.3% fee goes to surplus (~0.1% per swap)
  • Standard pools: ~2/3 of the fee goes to surplus
Surplus is held as ERC20 balance on the hook contract itself.

Draw-Down

Surplus is drawn for two purposes only:
  1. Gas reimbursement — capped, per-batch, gas-based (for any pool)
  2. Deployer royalty — curve pools only, sized from matched volume
Surplus is never used to fund settlement fees. Settlement fees are self-funded by each batch’s participants.

Wash Trade Resistance

The Attack

A wash trader submits matched buy and sell intents for the same amount. In a naive surplus-funded model, the settler reward would scale with matched volume, allowing surplus extraction.

The Defense

Under Geode’s per-intent fee model, wash trading is strictly net-negative:
1

Buy Side Pays

washAmount × settlementFeeBps / 10,000 from currency0 input
2

Sell Side Pays

washAmount × settlementFeeBps / 10,000 from currency1 input
3

Net P&L

The washer loses fees on both sides. They receive back less than deposited. The net cost is always negative.
4

Surplus Exposure Limited

Gas reimbursement is capped at maxGasReimbursement (0.01 ETH) regardless of volume. The washer can’t inflate the gas draw by adding more volume.

Worked Example

At default parameters (0.1% fee, 0.01 ETH gas cap): The break-even point is ~5 ETH. Above that, every additional ETH of wash volume costs the attacker more. The gas draw remains constant.

Gas Cost Profile

Settlement gas scales approximately linearly with batch size after a fixed overhead: The per-intent marginal cost converges to ~103K gas. The fixed overhead (~290K) covers batch validation, clearing price computation, and settler payment.

Default Parameters

Security Properties

Verified: All economic properties are tested in SettlementEconomics.t.sol and CurveDirectSwap.t.sol — including adversarial wash trade scenarios, gas cap enforcement, fee split verification, and curve state invariants.