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
Arc mainnet · Uniswap v4 hook
The token has no tax. The pool does. A v4 hook skims 3% of every ARC10 trade in native USDC — Arc's gas token — rotates through the ten largest Arc-native tokens by market cap, and pushes them straight into holder wallets. Nothing to claim. Nothing to stake.
Mechanics
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.
IndexRewardHook is attached to a single USDC/ARC10 v4 pool. It charges 3% of the trade
always denominated in native USDC — in beforeSwap when USDC is the
specified currency, in afterSwap when it isn't. Fees are held as ERC-6909 claims until swept.
Collected USDC is paid straight into the leg's own pool — Uniswap v3, WarpDex or DYORSwap, no router in between — and the tokens that come back open a round against a snapshot of eligible supply. Slippage floors are a parameter on every harvest.
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.
The basket
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. Ranked by market cap on Arc mainnet at launch-day close;
any leg can be swapped for a riser with one setRoute call.
All ten tokens have deep native-USDC pools — seven on Uniswap v3, WARP on WarpDex and ARCAT on DYORSwap. The distributor pays the pool directly through Arc's USDC facade and takes whatever the pool returns, so tokens with a buy tax (ARGUS 1%, ARCASH 3%) and pairs with a non-standard fee (WarpDex charges 1%) all settle correctly. Selection: liquidity above $50K, more than 300 holders, Arc-native only — the CRCL and NVDA mirrors and the $10-liquidity "ARCX10" were left out.
Specification
| Network | Arc mainnet, chain id 5042. Gas and fees settle in native USDC. |
|---|---|
| Total supply | 1,000,000,000 ARC10, fixed. No mint function. |
| Transfer tax | None. The fee lives in the pool hook, so every router, bridge and aggregator works normally. |
| Swap fee | 3.00%, taken in native USDC on buys and sells. Hard-capped at 5% in code. |
| Pool | Uniswap v4, native USDC / ARC10, 1% LP fee, tick spacing 200. The hook binds to one pool and rejects every other. |
| Opening valuation | $10,000 fully diluted — the start tick is derived from that target and the deploy reverts if it lands more than 1.5% off. |
| Launch liquidity | 80% of supply, one-sided ARC10 only, range below the opening tick. LP position sent to the burn address. |
| Reward eligibility | Wallets holding at least 10,000 ARC10. Infrastructure addresses are excluded from the registry. |
| Distribution | Push, pro-rata over eligible supply, batched and resumable. process() is permissionless. |
| Blocked transfers | Fall back to a per-wallet pending balance, claimable at any time. |
| Owner powers | Threshold, exclusions, routes, rotation, keeper and fee (≤5%). Rescue cannot touch an open round's asset. |
42 tests pass — 37 local, plus a fork suite that deploys the whole system onto forked Arc mainnet, buys 5,000 USDC of ARC10 through the real PoolManager, collects the 150 USDC fee and spends it in all ten real pools, asserting each holder's pro-rata payout.
$ forge test --match-path test/ForkArc.t.sol --fork-url $ARC_RPC_URL -vv
[PASS] test_fork_openingValuation()
ARC10 per 1 USDC (after fees) 96,644
implied opening FDV $9,936
[PASS] test_fork_endToEndAllTenLegs()
fees collected 150 USDC
ARGUS · LONG · TOLLY · COOL 1,327 · 1,572 · 2,422 · 2,604
BEANCAT · ARCASH · Architects 9,191 · 10,077 · 9,627
WARP · ARCAT · BANCOR 13,630 · 25,119 · 23,596
per 15 USDC harvest, pushed to holders pro-rata
[PASS] test_fork_sellPaysFeeInUsdc()
[PASS] test_fork_sweepParksFeesWithoutDistributor()
[PASS] test_fork_facadeMirrorsNativeBalanceOnRealPools()
Suite result: ok. 5 passed; 0 failed · 37 passed locally
Contracts
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
The v4 hook. Mined so its address carries the permission flags 0x20CC, bound irreversibly
to the first USDC/ARC10 pool it initialises.
address TBD at launch
Pays each leg's pool directly in USDC, snapshots eligible supply, pushes payouts in batches, and books blocked transfers for later claim.
address TBD at launch
Uniswap addresses per the official deployments page; basket ranking per arcexplorer.org. Sister deployment on Ethereum: eth10.fund. Mechanics adapted from The Index.
Read this part
Push distribution costs gas per wallet. Rounds are batched and resumable; the minimum balance is the throttle.
Buying a leg is a public swap. Use a slippage floor and a private relay.
A leg can add a tax, pause or blacklist. Taxed buys settle at what the pool returns; refused transfers are booked to a claimable balance; a dead leg is skipped or swapped out.
Threshold, routes and fee are owner-settable. Ownership should sit behind a multisig or timelock.
When a round would cost more than it pays, the owner can sweepUsdc accrued fees to a safe address and distribute later. It is an emergency valve and a trust assumption — renounceSweep removes it permanently.
A second ARC10 pool without the hook pays no fee. Keep the hooked pool the only real venue.
Arc mainnet is days old. Today's top ten can look different next month — legs are owner-swappable, and every change is an on-chain setRoute event.
Experimental software on a public chain. Reward value is whatever the basket is worth — it can be nothing.