Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.geode.ag/llms.txt

Use this file to discover all available pages before exploring further.

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
Core invariant: A batch cannot withdraw more settlement reward than that batch economically contributed, except for a tightly capped gas reimbursement.

Fee Sources

FeeRateSourceBeneficiary
Settlement fee0.1% (10 bps)Deducted from each filled intent’s inputSettler
Direct swap fee0.2% standard / 1% launch poolsCharged on non-intent swaps via beforeSwap50% treasury, 50% surplus
Gas reimbursementGas-basedDrawn from surplus, capped per batchSettler

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:
gross input = intent.amountIn
settlement fee = gross input × settlementFeeBps / 10,000
net input = gross input - settlement fee
  • 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 launch 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:
settlerReward = batchSettlementFees + min(surplusAvailable, gasReimbursement)

Component 1: Batch Settlement Fees

buyFees  = totalFilledBuyInput  × settlementFeeBps / 10,000   (in currency0)
sellFees = totalFilledSellInput × settlementFeeBps / 10,000   (in currency1)
The settler always receives these in full — they come from the intent owners’ own deposits.

Component 2: Gas Reimbursement

gasUsed = gasStart - gasleft()
gasCost = gasUsed × tx.gasprice
gasReimbursement = min(
    gasCost × gasReimbursementMultiplier / 100,
    maxGasReimbursement
)
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:
event SettlerPaid(
    PoolId indexed poolId,
    address indexed settler,
    uint256 settlementFee0,      // from buyer input (currency0)
    uint256 settlementFee1,      // from seller input (currency1)
    uint256 gasReimbursement0,   // from surplusCurrency0
    uint256 gasReimbursement1    // from surplusCurrency1
);
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. When someone swaps through a Geode-configured pool without using intents:
  1. The hook charges directSwapFeeBps (default 0.2% for standard pools, 1% for launch pools)
  2. 50% goes to the protocol treasury
  3. 50% accumulates as surplus (held as ERC20 balance on the hook contract)

Draw-Down

Surplus is drawn for two purposes only:
  1. Gas reimbursement — capped, per-batch, gas-based (for any pool)
  2. Deployer royalty — launch mode 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):
Wash VolumeFee Cost (Both Sides)Max Surplus ExtractedNet P&L
1 ETH0.002 ETH0.01 ETH+0.008 ETH
5 ETH0.01 ETH0.01 ETH0 ETH
10 ETH0.02 ETH0.01 ETH-0.01 ETH
50 ETH0.10 ETH0.01 ETH-0.09 ETH
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:
Batch Size (N)Total GasPer-Intent Gas
1~397K~397K
5~556K~111K
10~1.06M~106K
25~2.58M~103K
50~5.16M~103K
The per-intent marginal cost converges to ~103K gas. The fixed overhead (~290K) covers batch validation, clearing price computation, and settler payment.

Default Parameters

ParameterValueDescription
settlementFeeBps10 (0.1%)Per-intent fee on input amount
directSwapFeeBps20 (0.2%) standard / 100 (1%) launchFee on direct (non-intent) swaps
maxGasReimbursement0.01 ETHHard cap on surplus draw per batch
gasReimbursementMultiplier150 (1.5×)Gas cost multiplier (covers gas + margin)
batchInterval1 blockMinimum blocks between settlements
maxBatchSize128Maximum intents per side per batch
PROTOCOL_FEE_SHARE_BPS5000 (50%)Protocol’s share of direct swap fees

Security Properties

PropertyMechanism
Fees come from intent owner’s own inputInput-side deduction before routing
One-sided batches pay feesNo dependency on opposite-side output
Wash trading is net-negativeBoth sides pay fees; surplus draw is capped
Surplus cannot be drained by volumeGas reimbursement is gas-based, not volume-based
Curve reserves reflect net economicsNet input after fee deduction
Settler competition prevents manipulationFirst valid batch wins; omitted intents lose to complete batches
Verified: All economic properties are tested in SettlementEconomics.t.sol — including adversarial wash trade scenarios, gas cap enforcement, and surplus accounting invariants.