Ethereum mainnet · Uniswap v4 hook

Three percent of every swap,
paid out in ten assets.

The token has no tax. The pool does. A v4 hook skims 3% of every INDEX trade in native ETH, rotates through a ten-asset reward basket — majors, memes, tokenized equities — and pushes the tokens straight into holder wallets. Nothing to claim. Nothing to stake.

Swap fee
3.00%
Fee currency
ETH always
Basket legs
10 equal weight
Eligibility
10k INDEX
Supply
1B fixed

Mechanics

A fee that leaves the pool as ETH and comes back as assets

Three contracts, one loop. Everything is on-chain and the final step is permissionless — anyone can finish a distribution round if the keeper goes quiet.

  1. 01

    The hook takes the fee

    IndexRewardHook is attached to a single ETH/INDEX v4 pool. It charges 3% of the trade always denominated in ETH — in beforeSwap when ETH is the specified currency, in afterSwap when it isn't. Fees are held as ERC-6909 claims until swept.

  2. 02

    The distributor buys the next leg

    Collected ETH is wrapped and routed through Uniswap v3 into the next basket asset in rotation, then a round opens against a snapshot of eligible supply. Slippage floors are a parameter on every harvest.

  3. 03

    Holders get pushed, not prompted

    process() walks the holder registry in gas-bounded batches and transfers each wallet its pro-rata share. A wallet that can't receive a permissioned token is booked to pending and can pull it later — one blocked address never stalls a round.

Swap INDEX / ETH
3% in ETH
Hook v4, single pool
collect()
Distributor buys the leg
process()
Your wallet no claim

The basket

Ten legs, equal weight, one at a time

Each harvest buys the next asset in the rotation, so weight equalises over a full cycle instead of splitting every fee ten ways and paying dust. Addresses are the live mainnet contracts.

Why the equities are funded manually

Ondo's tokenized equities are permissioned ERC-20s with no ETH liquidity on mainnet — a fork test probes all three Uniswap v3 fee tiers for each of the five and every route fails. Those legs are marked MANUAL: the operator acquires the shares, funds the leg, and the distributor pushes them out exactly like a swapped asset. If a real ETH pool ever appears, one setRoute call flips the leg to fully automatic — no redeploy, no migration.

Specification

Every parameter, stated plainly

Token and pool parameters
Total supply1,000,000,000 INDEX, fixed. No mint function.
Transfer taxNone. The fee lives in the pool hook, so every router, bridge and aggregator works normally.
Swap fee3.00%, taken in native ETH on buys and sells. Hard-capped at 5% in code.
PoolUniswap v4, ETH / INDEX, 1% LP fee, tick spacing 200. The hook binds to one pool and rejects every other.
Launch liquidity80% of supply, one-sided INDEX only, range below the opening tick. LP position sent to the burn address.
Reward eligibilityWallets holding at least 10,000 INDEX. Infrastructure addresses are excluded from the registry.
DistributionPush, pro-rata over eligible supply, batched and resumable. process() is permissionless.
Blocked transfersFall back to a per-wallet pending balance, claimable at any time.
Owner powersThreshold, exclusions, routes, rotation, keeper and fee (≤5%). Rescue cannot touch an open round's asset.

Verified against live mainnet state

25 tests pass — 22 local, plus a fork suite that deploys the whole system onto forked mainnet, buys 50 ETH of INDEX through the real PoolManager, collects the 1.5 ETH fee and spends it through the real Uniswap routers, asserting each holder's pro-rata payout.

$ forge test --fork-url $ETH_RPC_URL -vv

[PASS] test_fork_endToEndCycle()
  accrued fee wei      1500000000000000000
  PEPE  → holder       87,225,610.43 PEPE
  MOG   → holder       2,301,496,781.55 MOG
  USDC  → holder       300.257631 USDC
  WETH  → holder       0.12 WETH
  USDT  → holder       300.232251 USDT
[PASS] test_fork_manualEquityLegPaysHolders()
[PASS] test_fork_probeEquityRoutes()
  SPYon / TSLAon / SPCXon / QQQon / NVDAon  no v3 route → MANUAL leg

Suite result: ok. 25 passed; 0 failed; 0 skipped

Contracts

Three contracts and the infrastructure they touch

IndexToken

Fixed-supply ERC-20 with an on-chain holder registry. Tracks exact eligible supply as balances cross the threshold, so distribution maths never drifts.

address TBD at launch

IndexRewardHook

The v4 hook. Mined so its address carries the permission flags 0x20CC, bound irreversibly to the first ETH/INDEX pool it initialises.

address TBD at launch

IndexDistributor

Buys the rotation's asset, snapshots eligible supply, pushes payouts in batches, and books blocked transfers for later claim.

address TBD at launch

Mainnet infrastructure

    Uniswap addresses per the official v4 deployments page; equity tokens per the Ondo Global Markets token list. Mechanics adapted from The Index.

    Read this part

    What can go wrong

    Gas scales with holders

    Push distribution costs gas per wallet. Rounds are batched and resumable; the minimum balance is the throttle.

    Harvests are MEV-visible

    Buying a leg is a public swap. Use a slippage floor and a private relay.

    Permissioned equities

    Transfers can be refused by the issuer. Those payouts are booked to a claimable balance instead.

    Owner keys matter

    Threshold, routes and fee are owner-settable. Ownership should sit behind a multisig or timelock.

    Gas-spike sweep

    When a spike makes a round cost more than it pays, the owner can sweepEth accrued fees to a safe address and distribute later. It is an emergency valve and a trust assumption — renounceSweep removes it permanently.

    One canonical pool

    A second INDEX pool without the hook pays no fee. Keep the hooked pool the only real venue.

    Not investment advice

    Experimental software on a public chain. Reward value is whatever the basket is worth — it can be nothing.