Skip to main content

Documentation

PoolKey data, quote behavior, and acceptance criteria for aggregators integrating FewToken liquidity on Uniswap v4.

Structured reference
TOC available

FewToken liquidity on Uniswap v4

Few Protocol wraps supported assets into ERC-20 FewTokens. These FewTokens can trade against other FewTokens or connect back to their underlying assets through Uniswap v4 wrapper hooks.

Ethereum integration at a glance

Network and deployment

NetworkChain IDFewFactoryPoolManager
Ethereum Mainnet10x7D86394139bf1122E82FDF45Bb4e3b038A4464DD0x000000000004444c5dc75cB358380D2e3dE08A90

Pool coverage

Pool typePoolsHookRecommended integration path
Standard FewToken trading pools16NoneIndex first through the existing uniswap-v4 source
FewToken wrapper pools9Token-specific Few HookReview as custom v4 Hooks; start with the included fwUSDC/USDC vectors
Recommended first release

Integrate the 16 standard pools first. They use the standard Uniswap v4 execution path and do not require hook-specific handling. Ring can provide test vectors for the remaining wrapper deployments. Contact [email protected].

Machine-readable integration files: manifest · JSON Schema · pool state and execution vectors · aggregator status · SHA-256 checksums

Hook artifacts: FewTokenHook ABI · FewUSDTHook ABI · FewETHHook ABI

The static manifest is the ingestion source. The status file is a reproducible snapshot, not a live-liquidity API.

This package is specific to FewToken liquidity on Ethereum Uniswap v4. Ring Swap is a different AMM and has separate multi-network deployment and pool references for Ethereum, BNB Smart Chain, HyperEVM, and MegaETH. Keep those Factory/pair records out of this v4 manifest so an integration cannot mix incompatible pool identities or execution paths.

Core contracts

ComponentAddress
Chain ID1
PoolManager0x000000000004444c5dc75cB358380D2e3dE08A90
StateView0x7fFE42C4a5DEeA5b0feC41C94C136Cf115597227
V4Quoter0x52F0E24D1c21C8A0cB1e5a5dD6198556BD9E1203
Permit20x000000000022D473030F116dDEE9F6B43aC78BA3
Universal Router (2.0.0)0x66a9893cC07D91D95644AEDD05D03f95e1dBA8Af
FewFactory0x7D86394139bf1122E82FDF45Bb4e3b038A4464DD
Few Wrapped Token init code hash0x2bdba5734ddf754fb149ef1faa937956c52cfd1f24d68163a95f42d08ec06d38

The manifest keeps the router address and source version as separate fields. Integrators using a different router or adapter can still use the same PoolKeys, but must generate calldata for their own execution stack.

The FewToken addresses and decimals in this package come from the deployed contracts. Verify each wrapper through FewFactory and read token(), factory(), symbol(), and decimals() onchain. The status file records metadata and CREATE2 address checks at a fixed block. Local or historical FewWrappedToken source files are not an address or metadata authority for this integration package.

Pool identity

A pool is identified by its complete PoolKey:

currency0
currency1
fee
tickSpacing
hooks

The pool ID is the hash of this key. Aggregators must keep every field exactly as published because changing the fee, tick spacing, currency order, or hook address identifies a different pool.

Primary FewToken pools on Ethereum

The 25 Ethereum mainnet pools below are Ring's primary FewToken pools on Uniswap v4. The set contains 16 FewToken trading pools and nine wrapper pools. Pools are listed alphabetically within each type; their order does not indicate priority.

The two pool types play different roles in a route. The FewToken trading pools carry the core FewToken liquidity and are standard Uniswap v4 concentrated-liquidity pools with no hook, so they require no hook-specific handling. The wrapper pools are optional route edges: each uses a token-specific Few hook to convert between an underlying asset and its FewToken, which lets a route start or end in the underlying asset. Wrapper-hook support is not required to quote or swap through the FewToken trading pools.

The manifest contains the same 25 pools, token symbols and decimals, FewToken underlying mappings, hook metadata, complete PoolKey, initialization block, initialization transaction, initial sqrtPriceX96, and initial tick.

FewToken trading pools

These pools trade one FewToken against another through standard Uniswap v4 concentrated liquidity. They have no hook.

PairTypecurrency0currency1FeeTick spacingHookPool IDLinks
fwDAI / fwUSDTFewToken TradingfwDAI
0x8a6fe57c08c84e0f4ee97aae68a62e820a37d259
fwUSDT
0xef87f4608e601e8564800265aee1c1ffadf73283
500 (0.05%)10None0x279b3de65ea3f86261c507a6f0ef6471908e6f41ef1a82e166d8387032f2836dUniswap Explorer
Init tx
fwEURC / fwUSDTFewToken TradingfwEURC
0x88cb762635408db93e0970a8d41b7c4692cc6ab3
fwUSDT
0xef87f4608e601e8564800265aee1c1ffadf73283
500 (0.05%)10None0x278f11274052a2e85cf010cc2c895b769e71cd25e490f3881d876f6dc5c1ba98Uniswap Explorer
Init tx
fwUSDC / fwDAIFewToken TradingfwUSDC
0x0492560fa7cfd6a85e50d8be3f77318994f8f429
fwDAI
0x8a6fe57c08c84e0f4ee97aae68a62e820a37d259
500 (0.05%)10None0xb3026b10bb2ef58c7f7f572ec750656f13ddf3449433c2cf81d3943accd8fbfeUniswap Explorer
Init tx
fwUSDC / fwEURCFewToken TradingfwUSDC
0x0492560fa7cfd6a85e50d8be3f77318994f8f429
fwEURC
0x88cb762635408db93e0970a8d41b7c4692cc6ab3
500 (0.05%)10None0x4a4ed1af49b5ed3a5c3e4a01931979a4bf6192e8de0a9b4f7f19895669cafef9Uniswap Explorer
Init tx
fwUSDC / fwUSDeFewToken TradingfwUSDC
0x0492560fa7cfd6a85e50d8be3f77318994f8f429
fwUSDe
0x459f878908b5d6e8a0f2eb089b0cd29d9766afe5
500 (0.05%)10None0xdb73646599452fc04ef24c85701b1f9da9653d1ae918b188308aace3d0796de5Uniswap Explorer
Init tx
fwUSDC / fwUSDRFewToken TradingfwUSDC
0x0492560fa7cfd6a85e50d8be3f77318994f8f429
fwUSDR
0x29a294f8fe285dfb259705213e375ecb7fcf9d9b
500 (0.05%)10None0x2c24e189a517bb2cb9920157af067b4aa0f894696628f387d52dd46a0fe44904Uniswap Explorer
Init tx
fwUSDC / fwUSDSFewToken TradingfwUSDC
0x0492560fa7cfd6a85e50d8be3f77318994f8f429
fwUSDS
0xd777151c92c05fea839b2c21b345a78e1f1163fe
500 (0.05%)10None0xfce820cbcba5623dabb0e4c269847abb9a6587f4c4f45538058739a224fdb74eUniswap Explorer
Init tx
fwUSDC / fwUSDTFewToken TradingfwUSDC
0x0492560fa7cfd6a85e50d8be3f77318994f8f429
fwUSDT
0xef87f4608e601e8564800265aee1c1ffadf73283
500 (0.05%)10None0x6199c1a871328a693bbc9cd80a7e4874a4a7e2ebc862b51fa04bb6b587dbac47Uniswap Explorer
Init tx
fwUSDe / fwDAIFewToken TradingfwUSDe
0x459f878908b5d6e8a0f2eb089b0cd29d9766afe5
fwDAI
0x8a6fe57c08c84e0f4ee97aae68a62e820a37d259
500 (0.05%)10None0x46931d2a68b5207eeed8a05d4d5373409f6de46a7d608520dbb340192876cd77Uniswap Explorer
Init tx
fwUSDe / fwUSDSFewToken TradingfwUSDe
0x459f878908b5d6e8a0f2eb089b0cd29d9766afe5
fwUSDS
0xd777151c92c05fea839b2c21b345a78e1f1163fe
500 (0.05%)10None0xfdd2e0f6ef7f0eb6f1fe367c9f4f2c62e3409eac786554983b6fdfb9dd31c29cUniswap Explorer
Init tx
fwUSDe / fwUSDTFewToken TradingfwUSDe
0x459f878908b5d6e8a0f2eb089b0cd29d9766afe5
fwUSDT
0xef87f4608e601e8564800265aee1c1ffadf73283
500 (0.05%)10None0x6fbffe7837d4e26d990281df43bc760ebc866a04914ab9457383152e2f5776ddUniswap Explorer
Init tx
fwUSDR / fwDAIFewToken TradingfwUSDR
0x29a294f8fe285dfb259705213e375ecb7fcf9d9b
fwDAI
0x8a6fe57c08c84e0f4ee97aae68a62e820a37d259
500 (0.05%)10None0x726b804bbb82b6fc2338d8604e9ca627ba2cddc9000ffcf6eeba430e93261beaUniswap Explorer
Init tx
fwUSDR / fwUSDSFewToken TradingfwUSDR
0x29a294f8fe285dfb259705213e375ecb7fcf9d9b
fwUSDS
0xd777151c92c05fea839b2c21b345a78e1f1163fe
500 (0.05%)10None0x39a15c04c518118b62a08407bf5bf9479d8f5c01905d2a7764c812f74414cba1Uniswap Explorer
Init tx
fwUSDR / fwUSDTFewToken TradingfwUSDR
0x29a294f8fe285dfb259705213e375ecb7fcf9d9b
fwUSDT
0xef87f4608e601e8564800265aee1c1ffadf73283
500 (0.05%)10None0xd14e79ec722a4755872f54f860d70ed144c21c70d6b5bbbf5086e91b49609583Uniswap Explorer
Init tx
fwUSDS / fwUSDTFewToken TradingfwUSDS
0xd777151c92c05fea839b2c21b345a78e1f1163fe
fwUSDT
0xef87f4608e601e8564800265aee1c1ffadf73283
500 (0.05%)10None0x8d029076eb683707baaf2f614bbdf364729e438594aa6b0b34f9672f4bd2949cUniswap Explorer
Init tx
fwWBTC / fwcbBTCFewToken TradingfwWBTC
0x2078f336fdd260f708bec4a20c82b063274e1b23
fwcbBTC
0xdbf1703e5d29afefbf1bd958ce7a6023c67f3e5d
100 (0.01%)1None0x2dbdb92a8162fb5d7709d39d34a4ecf6de6cbc64122bfc1c4a6b75b29a8429adUniswap Explorer
Init tx

Wrapper pools

These pools connect an underlying asset with its FewToken representation through a token-specific wrapper hook.

PairTypecurrency0currency1FeeTick spacingHookPool IDLinks
cbBTC / fwcbBTCWrappercbBTC
0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf
fwcbBTC
0xdbf1703e5d29afefbf1bd958ce7a6023c67f3e5d
0 (0%)1FewTokenHook (cbBTC deployment)
0x8347b7a3807c681513d2b51b8223e59aa16a2888
0x8f8b0b21fb429ffb5210f2bf0f8b7cb267b944a0c61beaae35f20f6839c0f33bUniswap Explorer
Init tx
DAI / fwDAIWrapperDAI
0x6b175474e89094c44da98b954eedeac495271d0f
fwDAI
0x8a6fe57c08c84e0f4ee97aae68a62e820a37d259
0 (0%)1FewTokenHook (DAI deployment)
0x85b648a64aed6307d5d5ce26e6ae086c17bde888
0xf906beb74154ca4d057b7079c90eb1044efaf40ef468e62ec983930cf80a1e2bUniswap Explorer
Init tx
ETH / fwWETHWrapperETH
0x0000000000000000000000000000000000000000
fwWETH
0xa250cc729bb3323e7933022a67b52200fe354767
0 (0%)1FewETHHook
0x044301939deb7ca53c4733dd4d9b3bc5ea0c6888
0x7a5a8f5a36a6a2e9961caf6bb047a5a7580d0fe16a532aad93efc596028dfa54Uniswap Explorer
Init tx
fwUSDC / USDCWrapperfwUSDC
0x0492560fa7cfd6a85e50d8be3f77318994f8f429
USDC
0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
0 (0%)1FewTokenHook (USDC deployment)
0x4b2eb653d13e6c9ac5a0a01fde22f2c8d6592888
0x5837e6b4fd4b8193f2f7a8b4490c0f154344bb9a52b36a885578ff6d3193fc47Uniswap Explorer
Init tx
fwWBTC / WBTCWrapperfwWBTC
0x2078f336fdd260f708bec4a20c82b063274e1b23
WBTC
0x2260fac5e5542a773aa44fbcfedf7c193bc2c599
0 (0%)1FewTokenHook (WBTC deployment)
0x0fe942afdb2f51e25cbf892aad175c6a574f2888
0x18605c7a76101aeccc414cc300dd5e5ae44b30d6c247ba164ccd88952c259735Uniswap Explorer
Init tx
fwweETH / weETHWrapperfwweETH
0x9553d5f1f564ede30f5a9f0274cd0af7a00546e7
weETH
0xcd5fe23c85820f7b72d0926fc9b05b43e359b7ee
0 (0%)1FewTokenHook (weETH deployment)
0x877323adbf747f85eb8d182d42f01f34a5492888
0x6933dfbf7441cc4ee4439843fdd464e215a6c90f07c5a769198e2a047f1f3f3eUniswap Explorer
Init tx
UNI / fwUNIWrapperUNI
0x1f9840a85d5af5bf1d1762f925bdaddc4201f984
fwUNI
0xe8e1f50392bd61d0f8f48e8e7af51d3b8a52090a
0 (0%)1FewTokenHook (UNI deployment)
0x4b3e2a8cf36c7eb0fba2a5b39b20c896c6f22888
0x301d41ff23b73b209ab2b1112f4effd0d8ff978ec29d743c1431463f84cbec24Uniswap Explorer
Init tx
USDT / fwUSDTWrapperUSDT
0xdac17f958d2ee523a2206206994597c13d831ec7
fwUSDT
0xef87f4608e601e8564800265aee1c1ffadf73283
0 (0%)1FewUSDTHook
0xbadf77d50478b4432ef1f243b9c0bc7869486888
0x7db868544c8f7f6ddb107c7749c94f03c9e0155f2138aef3f8a020e4a469d95aUniswap Explorer
Init tx
wstETH / fwwstETHWrapperwstETH
0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0
fwwstETH
0xb90e63487bc6a4fa3d58f707510dab3c28a63137
0 (0%)1FewTokenHook (wstETH deployment)
0x75ae0292e8ad3ab60b9a1a7b3046d3f4abdfa888
0xe7c2f30fd89238331b0e3e6ac6351578d5e3091b7839eff321c29cf88e17274eUniswap Explorer
Init tx

Machine-readable integration manifest

The static manifest contains the complete integration package. Its top-level tokens array records every PoolKey currency's symbol, decimals, and FewToken underlying. hookContracts records the deployed contract type, address, source and ABI status. pools contains the exact PoolKeys and initialization events.

schemaVersion changes when the JSON structure changes. manifestVersion changes when a published integration parameter changes. Validate the file against its linked JSON Schema and use the checksum file when caching it. Each pool also has an integrationPath field that distinguishes generic v4 ingestion from custom-Hook review. The currency0 and currency1 order is part of the PoolKey; it is not a base/quote preference.

Quoting FewToken trading pools

Read each pool through its exact PoolKey and the current PoolManager state. A quote must account for the current square-root price, active liquidity, initialized ticks, LP fee, swap direction, and requested amount.

The trading pools use standard Uniswap v4 fee units:

  • 100 means 0.01%
  • 500 means 0.05%
  • 3000 means 0.3%

Use the v4 Quoter or an equivalent state-simulation path. A recognized token or pool ID is not sufficient if the quote engine cannot read the pool, simulate the swap, and return an executable result.

Few wrapper hooks

Seven deployments use the generic FewTokenHook, the USDT deployment uses FewUSDTHook, and the native-ETH deployment uses FewETHHook. Names such as FewUSDCHook or FewDAIHook are deployment labels, not Solidity contract types.

All nine deployed addresses report the same permissions:

Enabled callback or return-delta flagBehavior
beforeInitializeRequires the exact underlying/FewToken pair and fee 0
beforeAddLiquidityAllows the operation; it does not wrap liquidity deposits
beforeSwapWraps or unwraps the swap-side token
beforeSwapReturnDeltaReturns the conversion-aware delta to PoolManager

All other hook flags are disabled, including both remove-liquidity callbacks. Wrapper conversion occurs during swaps, not when liquidity is added or removed.

The listed wrapper pools use:

fee: 0 (0%)
tickSpacing: 1
initial sqrtPriceX96: 79228162514264337593543950336
initial tick: 0
hookData: 0x

Quote both directions with the exact PoolKey. The conversion is designed around a 1:1 wrapper path, but the quote engine should use the hook's returned deltas instead of hardcoding an output amount. Contract state, token behavior, protocol charges, gas, or product-specific fees can still affect execution.

The ETH wrapper pool uses native ETH, represented by address(0), as currency0. WETH is used inside FewETHHook; it is not a currency in that pool's PoolKey.

Wrapper pools can be used as route edges. An aggregator can wrap an input asset, trade through one or more FewToken pools, and unwrap the output in the same route. Calldata must include the exact PoolKey, direction, amount, slippage protection, and hookData required by the execution path.

Integration scope by pool type

ScopePoolsRecommended treatment
Standard FewToken trading pools16Ingest through the aggregator's generic uniswap-v4 source
ERC-20 wrapper pools8Review as custom v4 Hooks; start with the included fwUSDC/USDC vector
Native ETH wrapper pool1Review as a custom v4 Hook; verified source and ABI are published, and Ring can provide an ETH-specific execution vector

Verified source and ABI are necessary for custom-Hook review, but they do not prove that 0x, KyberSwap, 1inch, or any other aggregator supports both execution directions. Confirm support with reproducible quote and calldata vectors for the exact wrapper PoolKey.

Pool state and execution checks

Read current pool state through StateView and simulate the requested trade size before execution. If an integration depends on Ring's LP positions, also read their ownership and liquidity through PositionManager. A pool listing or historical nonzero liquidity does not establish current depth or price quality.

The snapshot appendix contains quote and execution examples for both directions of one trading pool and one wrapper pool, plus historical pool-state and LP-position checks. The status file includes their block numbers, timestamps, and calldata.

Aggregator integration status

Aggregator support changes independently from the static addresses. Confirm coverage for each target PoolKey and swap direction through fresh quotes and executable calldata. Treat partial-path results separately from all-pool coverage and production support.

Historical 0x, KyberSwap, and 1inch observations are in the aggregator status file, with a check time for each entry. An API failure means unavailable during that check; it does not mean unsupported.

Source, ABI, and control assumptions

At block 25,851,888, the seven FewTokenHook deployments and the FewUSDTHook deployment matched v4-periphery commit 31db16f7ebabe40827ab6dd1098d66840b7f80ad after masking immutable constructor values. Their ABIs are linked at the top of this page.

The deployed FewETHHook was separately reproduced from v4-periphery commit 0bc60b31c56d9115605b80720ceb8deb9c68b7ac with Solidity 0.8.26, optimizer runs 44,444,444, and EVM target cancun. The compiled and deployed runtimes are both 6,729 bytes and match after masking immutable constructor values. The exact deployed address also has verified explorer source and ABI.

The matched hook source uses immutable PoolManager/token dependencies and exposes no owner, upgrade, fee, pause, or withdrawal administration. The underlying FewToken contracts, PoolManager, tokens, and router remain separate trust and integration dependencies.

No public professional audit report in the Ring v4-periphery repository names these Few hook deployments and an exact source commit as its scope. The repository's existing ABDK report covers upstream v4 periphery and Universal Router code, so it must not be cited as a Few-hook audit.

Integration completion criteria

FewToken liquidity support is complete when:

  • all 25 listed pools can be discovered by their complete PoolKey
  • the quote engine can read current pool state and return valid quotes when the pool supports the requested size
  • a pool can enter the route when it improves the quote
  • the router can produce executable calldata with the correct currencies, fee, tick spacing, hook, direction, amount, slippage protection, and hook data
  • the integration can replay the published standard and wrapper vectors from the pinned block
  • at least one mainnet transaction succeeds through a FewToken trading pool and at least one succeeds through a wrapper-hook pool
  • the quote response or transaction trace identifies the FewToken pool or the aggregator's FewToken liquidity source

Support can ship in stages. Trading-pool support is a valid first release on its own because those pools require no hook handling. Wrapper-pool support completes the integration by adding underlying-asset entry and exit points to FewToken routes.

Protocol and contract references

For ingestion questions, wrapper test vectors, or coverage confirmation, contact [email protected].

Appendix: quote and execution snapshots

These results apply to the recorded blocks. They are not live quotes or a guarantee of current liquidity. Re-query pool state and simulate the intended trade before execution.

Quote vectors

The status snapshot records V4Quoter calldata for both directions of one standard pool and one wrapper pool at Ethereum block 25,851,888:

VectorExact inputOutput at block 25,851,888
fwUSDC -> fwDAI1 fwUSDC0.999320102450204966 fwDAI
fwDAI -> fwUSDC1 fwDAI0.999429 fwUSDC
fwUSDC -> USDC1 fwUSDC1 USDC
USDC -> fwUSDC1 USDC1 fwUSDC

The same file records sqrtPriceX96, tick, raw protocol-fee field, LP fee, and active liquidity for every one of the 25 Pool IDs. All 25 were initialized and had nonzero active in-range liquidity at the snapshot block. This is a state check, not a TVL, depth, price-quality, or order-size guarantee.

Liquidity and Ring LP position snapshot

At Ethereum block 25,854,897, onchain reads of StateView and the Uniswap v4 PositionManager returned:

  • initialized state and nonzero active in-range liquidity for all 25 published Pool IDs
  • at least one nonzero PositionManager NFT owned by Ring's confirmed LP address in each of the 25 pools
  • the expected owner and nonzero position liquidity for all 27 Ring-controlled target positions

The status file records the block timestamp and these results. Position ownership establishes that Ring controlled LP positions in every listed pool at that block. It does not turn activeLiquidity into TVL or guaranteed executable depth, or establish that ownership and liquidity remain unchanged.

Executable Universal Router vectors

The status file also contains complete execute(bytes,bytes[],uint256) calldata for the same four directions. Each vector targets Universal Router 2.0.0, uses command V4_SWAP (0x10), and executes these v4 actions:

SWAP_EXACT_IN_SINGLE (0x06)
SETTLE_ALL (0x0c)
TAKE_ALL (0x0f)

The examples use a 50-basis-point minimum-output buffer, hookData=0x, value=0, and explicit ERC-20-to-Permit2 and Permit2-to-router allowance requirements. The Permit2 approval is intentionally separate from the swap calldata; no permit signature is embedded in the example.

Each calldata vector was replayed separately from the same starting state on a fork of block 25,851,888:

VectorInput spentOutput receivedFork gas used
fwUSDC -> fwDAI1 fwUSDC0.999320102450204966 fwDAI129,809
fwDAI -> fwUSDC1 fwDAI0.999429 fwUSDC128,946
fwUSDC -> USDC1 fwUSDC1 USDC172,667
USDC -> fwUSDC1 USDC1 fwUSDC180,025

These are local-fork results, not mainnet transactions. Aggregators should replace the sample deadline and allowance flow with their production policy.

Mainnet execution references

Both receipts contain a successful PoolManager Swap event for the named Pool ID. They record execution at their respective transaction blocks; they do not identify an aggregator source or prove complete production support by any aggregator.