Market reality · 1 Nov 2026
ENA on Ethereum: how much real on-chain market is there?
Exchange listings, dashboards and token pages show a volume number. This page asks what stands behind it for ENA (Ethena) on Ethereum: how much can actually be sold or bought before the price moves, how much of the trading looks independent, who provides the liquidity, and how much of it we can verify. Everything comes from public chain data and every number can be re-derived.
Why ENA
ENA is a large token with a known team (Ethena Labs), real activity and liquidity spread over several venues on Ethereum: Uniswap v3 and v4, PancakeSwap v3, smaller concentrated-liquidity forks and one venue we do not decode. Our pipeline already collects its main pools, so this page can show both what we verify today and what is still missing. We have no relationship with Ethena Labs.
This week was not ordinary. On 29–30 Oct an address that had received ENA from the wallet labelled “Binance 14” sold it into Uniswap pools (documented block by block in our 29 Oct research page). Those two days carry 94% of the week's ENA volume, so where it matters we also give the numbers for the other five days.
ENA/WETH 0.3% and ENA/WETH 1%: the week hour by hour
Pool price at the last swap of each hour (WETH per ENA) and ENA swapped per hour · 2026-10-25 00:00 → 2026-11-01 00:00 UTC (blocks 26,265,959–26,316,188)
- ENA/WETH 0.3% price
- ENA/WETH 1% price
- ENA/WETH 0.3% lowest–highest swap price in the hour
- ENA sold by the outflow-linked address
- all other swaps in these pools
0x7f9d…15e3 sold 217.50 M ENA in 20 swaps into these two pools (29 Oct research page). Outside that window a typical hour moved 353,608 ENA through them; the peak hour (Fri 30 Oct, 00:00–01:00 UTC) moved 586.94 M. ENA/WETH 1% had swaps in only 80 of the 168 hours, so its line stays flat between them. The volume scale is set by the ordinary hours, so the hours of the sales are cut (break mark; exact values on hover). The 0.3% pool's in-hour high is off scale once: in block 26,301,991 a purchase of 11.35 M ENA inside a same-transaction round trip (section 3) pushed the price to 0.01115 WETH before arbitrage brought it back.Every section answers five questions: what was observed, where the evidence is, how it was computed, how far it can be trusted, and how to check it yourself.
1. Pool map
- Observed
- 268 pools hold ENA on Ethereum; 66 had swaps in the window. Our verified pipeline already collects 36.8% of the 7-day ENA volume — 94.3% on the five days without the 29–30 Oct sales. The gap is one pool: ENA/WETH 1%, which carried 58.4% of the week's volume, almost all of it on 29–30 Oct, was not pinned in our pipeline during the window, and was added on 1 Nov 2026 as a result of this analysis. With the pools decoded for this report, 99.5% is read from the pools' own Swap events.
- Evidence
- Pool creation logs on Ethereum that name ENA in an indexed field (Uniswap v2/v3 factories and forks, Uniswap v4
Initialize), blocks 19,000,000–26,318,400; the DexScreener pair list was used only to cross-check that no listed pool was missing. Swaps: the pools' Swap logs in 2026-10-25 00:00 → 2026-11-01 00:00 UTC (blocks 26,265,959–26,316,188); our ClickHouse rows for the verified pools. - Method
- Volume = sum of |ENA amount| per Swap event, in ENA units (no USD). Not-supported pools: ENA Transfer logs into + out of the pool.
- Trust
- Verified pools: our pipeline's 8,015 stored swaps are identical (transaction, log index, both amounts) to the chain's Swap logs in 8,015 of 8,015 cases. Pool-reported: standard event layouts decoded here, not yet receipt-reconciled by the pipeline. Two pools listed by DexScreener (Metric, Supernova) have no creation event that names ENA and were added from that list; pools of that kind that nobody lists, and Curve/Balancer-style vaults, can be missed.
- Check it
eth_getLogswithtopics[0]= the pool's Swap topic for any pool below; recipe at the end of this section.
Where ENA traded on Ethereum, 7 days
Share of gross ENA swap volume (token units) per pool · 2026-10-25 00:00 → 2026-11-01 00:00 UTC (blocks 26,265,959–26,316,188)
- verified (our pipeline)
- pool-reported (decoded for this report)
- not supported (transfer-based estimate)
| Pool | Address / PoolId | Trust | Swaps | ENA volume | Share |
|---|---|---|---|---|---|
| ENA/WETH 1% Uniswap v3 | 0x08b8…2c00 | pool-reported | 988 | 499.27 M | 58.38% |
| ENA/WETH 0.3% Uniswap v3 | 0xc3db…ea18 | verified | 6,113 | 309.68 M | 36.21% |
| ENA/sENA 0.05% Uniswap v3 | 0x6bbb…bcde | verified | 257 | 4.41 M | 0.52% |
| ENA/USDC 0.3685% Uniswap v4 | 0xe0db1a7d… | pool-reported | 51 | 4.16 M | 0.49% |
| ENA/USDC Metric | 0xc445…5f80 | not supported | 662 transfers | 4.00 M | 0.47% |
| ENA/ETH 0.3% Uniswap v4 | 0x5b29d38d… | pool-reported | 1,736 | 3.61 M | 0.42% |
| ENA/ETH 0.9998% Uniswap v4 | 0x621a8c8d… | pool-reported | 60 | 2.71 M | 0.32% |
| ENA/USDT 1.1501% Uniswap v4 | 0x1e245b4a… | pool-reported | 12 | 2.48 M | 0.29% |
| ENA/USDC 2.9% Uniswap v4 | 0x55a0fe49… | pool-reported | 3 | 2.38 M | 0.28% |
| ENA/USDT 2% Uniswap v4 | 0x584ff1a4… | pool-reported | 27 | 2.37 M | 0.28% |
| ENA/USDT 1.15% Uniswap v4 | 0xed524603… | pool-reported | 17 | 2.04 M | 0.24% |
| ENA/USDT 0.91% Uniswap v4 | 0x3d41b86a… | pool-reported | 13 | 1.66 M | 0.19% |
| ENA/USDC 0.435% Uniswap v4 | 0xf822a5b0… | pool-reported | 16 | 1.39 M | 0.16% |
| ENA/USDT 1.512% Uniswap v4 | 0x9ea9b741… | pool-reported | 18 | 1.38 M | 0.16% |
| ENA/USDT 0.9% Uniswap v4 | 0x43e62a61… | pool-reported | 327 | 1.35 M | 0.16% |
The other 51 active pools
| Pool | Address / PoolId | Trust | Swaps | ENA volume | Share |
|---|---|---|---|---|---|
| ENA/ETH 2.9999% Uniswap v4 | 0x686f31ac… | pool-reported | 7 | 1.35 M | 0.16% |
| ENA/USDT 1.02% Uniswap v4 | 0x7145cb0b… | pool-reported | 9 | 1.02 M | 0.12% |
| ENA/USDT 0.3% Uniswap v4 | 0xdfc30f4b… | pool-reported | 1,385 | 889,601 | 0.10% |
| ENA/USDT 1.06% Uniswap v4 | 0x3906a527… | pool-reported | 9 | 833,897 | 0.10% |
| ENA/USDT 0.75% Uniswap v4 | 0x9a593249… | pool-reported | 20 | 576,995 | 0.07% |
| ENA/USDT 0.8% Uniswap v4 | 0x8446d7c1… | pool-reported | 4 | 574,284 | 0.07% |
| ENA/WETH 0.05% Uniswap v3 | 0xae40…5a88 | verified | 1,645 | 507,734 | 0.06% |
| ENA/USDT 5.7143% Uniswap v4 | 0x1827698a… | pool-reported | 1 | 495,669 | 0.06% |
| ENA/USDC 0.65% Uniswap v4 | 0x929d7255… | pool-reported | 15 | 492,106 | 0.06% |
| ENA/USDT 1.511% Uniswap v4 | 0x5af145be… | pool-reported | 3 | 469,308 | 0.05% |
| ENA/sENA 0.0498% Uniswap v4 | 0xd74dca2a… | pool-reported | 39 | 468,409 | 0.05% |
| ENA/USDT 1.012% Uniswap v4 | 0xae8502fc… | pool-reported | 22 | 458,335 | 0.05% |
| ENA/USDT 0.5% Uniswap v4 | 0xc820e36d… | pool-reported | 14 | 449,242 | 0.05% |
| ENA/USDT 1.62% Uniswap v4 | 0xcadfeee0… | pool-reported | 6 | 383,339 | 0.04% |
| ENA/USDC 3.01% Uniswap v4 | 0x1507c45a… | pool-reported | 2 | 368,933 | 0.04% |
| ENA/USDC 0.3% Uniswap v4 | 0x8c52de69… | pool-reported | 815 | 333,315 | 0.04% |
| ENA/USDT 0.692% Uniswap v4 | 0xab02ae37… | pool-reported | 5 | 323,305 | 0.04% |
| ENA/WETH Supernova | 0xf0c7…1606 | not supported | 644 transfers | 304,429 | 0.04% |
| ENA/USDT 0.85% Uniswap v4 | 0xb6097eae… | pool-reported | 1 | 293,254 | 0.03% |
| ENA/USDC 0.89% Uniswap v4 | 0x3a4fcdf4… | pool-reported | 15 | 249,184 | 0.03% |
| ENA/WETH 0.27% Aerodrome-style CL fork (DexScreener: aero) | 0x3a5c…cf7f | pool-reported | 586 | 230,038 | 0.03% |
| ENA/USDT 0.666% Uniswap v4 | 0x1fae77ab… | pool-reported | 12 | 183,479 | 0.02% |
| ENA/USDC 3.1% Uniswap v4 | 0x0ce84e14… | pool-reported | 3 | 181,174 | 0.02% |
| ENA/USDC 2.0561% Uniswap v4 | 0x40271386… | pool-reported | 2 | 160,769 | 0.02% |
| ENA/USDC 0.87% Uniswap v4 | 0x228faeaa… | pool-reported | 4 | 144,090 | 0.02% |
| ENA/USDC 0.4865% Uniswap v4 | 0x1f450335… | pool-reported | 2 | 129,561 | 0.02% |
| ENA/USDC 0.9998% Uniswap v4 | 0xd9b6e1ce… | pool-reported | 290 | 80,353 | 0.01% |
| ENA/USDC 1.4% Uniswap v4 | 0x72097ef8… | pool-reported | 5 | 65,853 | 0.01% |
| ENA/USDC 3.01% Uniswap v4 | 0xf51a41ce… | pool-reported | 1 | 61,442 | 0.01% |
| ENA/USDC 5.0843% Uniswap v4 | 0x32604624… | pool-reported | 1 | 60,090 | 0.01% |
| ENA/USDT 0.64% Uniswap v4 | 0x31c02a08… | pool-reported | 2 | 57,803 | 0.01% |
| ENA/rust 1% Uniswap v4 | 0x93b30483… | pool-reported | 152 | 24,521 | 0.00% |
| ENA/ETH 3.1% Uniswap v4 | 0xdb411ebb… | pool-reported | 12 | 24,289 | 0.00% |
| ENA/sENA 0.045% Uniswap v4 | 0x56c61aa0… | pool-reported | 17 | 17,397 | 0.00% |
| ENA/USDC 5% Uniswap v4 | 0x5a21edbe… | pool-reported | 1 | 16,616 | 0.00% |
| ENA/WETH 1% PancakeSwap v3 | 0x413d…060f | pool-reported | 85 | 2,701 | 0.00% |
| ENA/CCDAO 1% Uniswap v3 | 0xffbf…cb3a | pool-reported | 36 | 1,631 | 0.00% |
| ENA/USDC 0.05% Uniswap v3 | 0xfc54…bd6d | pool-reported | 21 | 1,271 | 0.00% |
| ENA/UDS 3% Uniswap v4 | 0x0b462d91… | pool-reported | 10 | 304 | 0.00% |
| ENA/OPOS 0.3% Uniswap v2 | 0xb9e7…d04d | pool-reported | 13 | 171 | 0.00% |
| ENA/COMP 1% Uniswap v4 | 0xe48f5ab9… | pool-reported | 10 | 53.04 | 0.00% |
| ENA/WETH 0.3% unrecorded factory 0x2d723f60ad8da76286b2ac120498a5ea6babc792 | 0x8b3d…7960 | pool-reported | 8 | 40.54 | 0.00% |
| ENA/USDT 0.05% Uniswap v3 | 0xecd0…cec5 | pool-reported | 10 | 25.92 | 0.00% |
| ENA/USDC 0.3% Uniswap v3 | 0x408a…ba3f | pool-reported | 13 | 11.28 | 0.00% |
| ENA/sENA 0.0499% Uniswap v4 | 0xe5282e6c… | pool-reported | 1 | 8.93 | 0.00% |
| ENA/USDC 1% Uniswap v3 | 0x37cf…271a | pool-reported | 6 | 4.21 | 0.00% |
| ENA/TRX 1% Uniswap v4 | 0xd72c7db2… | pool-reported | 2 | 3.06 | 0.00% |
| ENA/WETH 0.3% Uniswap v2 | 0x8824…1e6d | pool-reported | 7 | 2.28 | 0.00% |
| ENA/USDT 0.3% Uniswap v2 | 0xfc6b…2d69 | pool-reported | 5 | 0.79 | 0.00% |
| ENA/USDe 1% Uniswap v4 | 0xed69edd9… | pool-reported | 2 | 0.56 | 0.00% |
| ENA/ONDO 0.3% Uniswap v2 | 0x82be…324d | pool-reported | 1 | 0.00 | 0.00% |
202 more pools exist but had no swaps in the window — most are Uniswap v4 pools pairing ENA with tokens that have no other market. Trust labels: verified = collected and receipt-checked by our pipeline; pool-reported = read from the pool's own Swap events for this report (standard layouts), not yet part of the verified pipeline; not supported = an event layout we do not decode, measured here only by ENA Transfer logs.
Check it yourself: the main pool's 7-day volume
curl -s https://gateway.tenderly.co/public/mainnet -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_getLogs","params":[{
"address":"0xc3db44adc1fcdfd5671f555236eae49f4a8eea18",
"topics":["0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67"],
"fromBlock":"0x190c967","toBlock":"0x1918d9c"}]}' |
python3 -c 'import json,sys; L=json.load(sys.stdin)["result"]; s=lambda h:int(h,16)-(1<<256)*(int(h,16)>=1<<255)
print(len(L), "swaps,", round(sum(abs(s(l["data"][2:66])) for l in L)/1e18), "ENA")' # amount0 = ENA (token0)
# printed on 01 Nov 2026: 6113 swaps, 309680651 ENA
2. Liquidity depth
- Observed
- Selling 516,045 ENA moves the exit pools −2%; 1.28 M moves them −5%, 2.52 M −10%. Buying side: 521,916 / 1.31 M / 2.51 M ENA for +2 / +5 / +10%. One pool, ENA/WETH 0.3%, holds 96% of the −2% depth.
- Evidence
- Pool state at block 26,318,400 (01 Nov 2026, 07:23 UTC):
slot0,liquidity,tickBitmapandticks(v3-style pools), the same through Uniswap's StateView contract for v4 pools,getReservesfor v2 pools. Only pools quoted in ETH/WETH, USDC or USDT count as exit depth. - Method
- Concentrated liquidity is walked tick by tick: between two initialized ticks the pool behaves like x·y = L² (amount of token0 = L·(1/√Plow − 1/√Phigh)), and crossing a tick adds or removes its
liquidityNet. The LP fee is added to the input. Routing assumption: the order is split so that every exit pool ends at the same relative price move (what arbitrage would enforce); real routers split less well, so a single-pool sale moves the price more. - Trust
- Independent check: Uniswap's QuoterV2 contract simulated the same sales against the live pool code at the same block — see the table below. Depth is a snapshot: liquidity providers can add or withdraw at any time. sENA pools (4.14 M ENA at −2%) are shown but not counted, since sENA is a staking receipt of ENA itself.
- Check it
- Run
check_depth.py(below): it reads the same state from any Ethereum node and asks QuoterV2.
How much ENA the pools absorb before the price moves
Exit pools (quoted in ETH/WETH, USDC, USDT) at block 26,318,400 (01 Nov 2026, 07:23 UTC)
- ENA/WETH 0.3% (Uniswap v3)
- all other exit pools
| Pool | Address / PoolId | −2% (ENA sold) | −5% | −10% | +2% (ENA bought) | Exit depth |
|---|---|---|---|---|---|---|
| ENA/sENA 0.05% Uniswap v3 | 0x6bbb…bcde | 3.52 M | 3.52 M | 3.52 M | 11.70 M | no |
| ENA/sENA 0.0498% Uniswap v4 | 0xd74dca2a… | 495,340 | 495,340 | 495,340 | 245,312 | no |
| ENA/WETH 0.3% Uniswap v3 | 0xc3db…ea18 | 493,764 | 1.23 M | 2.44 M | 479,211 | yes |
| ENA/sENA 0.3% Uniswap v3 | 0x0598…7e26 | 103,723 | 263,651 | 547,760 | 120,475 | no |
| ENA/sENA 0.174% Uniswap v4 | 0xe7712e23… | 24,185 | 24,185 | 24,185 | 369,019 | no |
| ENA/ETH 0.3% Uniswap v4 | 0x5b29d38d… | 9,826 | 22,816 | 30,727 | 9,502 | yes |
| ENA/WETH 1% Uniswap v3 | 0x08b8…2c00 | 3,578 | 4,580 | 5,516 | 20,727 | yes |
| ENA/USDT 0.3% Uniswap v4 | 0xdfc30f4b… | 2,741 | 6,007 | 9,530 | 5,646 | yes |
| ENA/USDT 0.9% Uniswap v4 | 0x43e62a61… | 2,738 | 7,006 | 14,585 | 2,631 | yes |
| ENA/WETH 0.27% Aerodrome-style CL fork (DexScreener: aero) | 0x3a5c…cf7f | 1,180 | 2,258 | 2,261 | 1,896 | yes |
| ENA/USDC 0.3% Uniswap v4 | 0x8c52de69… | 879 | 1,822 | 3,363 | 871 | yes |
| ENA/USDC 0.9998% Uniswap v4 | 0xd9b6e1ce… | 723 | 1,850 | 3,852 | 694 | yes |
Independent check with Uniswap's QuoterV2
QuoterV2 (0x61ff…b21e) runs the pool's own swap code in a simulated call. We asked it to sell exactly the amount our tick walk computed, in ENA/WETH 0.3%, at block 26,318,400:
| Target | ENA in | Our WETH out | QuoterV2 WETH out | QuoterV2 price move | Ticks crossed |
|---|---|---|---|---|---|
| −2% | 493,764 | 40.3288 | 40.3288 | -2.000% | 5 |
| −5% | 1.23 M | 99.3157 | 99.3157 | -5.000% | 9 |
| −10% | 2.44 M | 191.6334 | 191.6334 | -10.000% | 17 |
Price move for any ENA order size
Exit pools at block 26,318,400 (01 Nov 2026, 07:23 UTC), order split so every pool ends at the same move (routing assumption above)
- all exit pools (sell below zero, buy above)
- ENA/WETH 0.3% alone, sell side
- QuoterV2 simulation of that single-pool sale
Uniswap v4 check (ENA/ETH 0.3%, V4Quoter 0x52f0…1203): selling 9,826 ENA returns 0.804076 ETH; our walk gives 0.804076 ETH. v4 pools add a protocol fee (here 0.05%) to the LP fee; without it the two differed by 0.05%.
Check it yourself: check_depth.py (no dependencies, any Ethereum node)
"""Standalone check (no dependencies): how much ENA moves the Uniswap v3 ENA/WETH 0.3 % pool price by -2 / -5 / -10 %.
Reads slot0, liquidity, the tick bitmap and every initialized tick within ±1,300 ticks at one block, walks the price
down tick by tick (constant-liquidity math between ticks), then asks Uniswap's QuoterV2 to simulate the -2 % sale.
Usage: python3 check_depth.py [block]
"""
import json
import sys
import urllib.request
RPC = "https://gateway.tenderly.co/public/mainnet" # any Ethereum node that serves state at the block
POOL = "0xc3db44adc1fcdfd5671f555236eae49f4a8eea18" # ENA (token0, 18 dec) / WETH (token1, 18 dec), fee 0.3 %, spacing 60
QUOTER = "0x61ffe014ba17989e743c5f6cb21bf9697530b21e" # Uniswap QuoterV2
ENA, WETH = "57e114b691db790c35207b2e685d4a43181e6061", "c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
BLOCK = hex(int(sys.argv[1]) if len(sys.argv) > 1 else 26318400)
op = urllib.request.build_opener(urllib.request.ProxyHandler({}))
def call(to, data):
body = json.dumps({"jsonrpc": "2.0", "id": 1, "method": "eth_call", "params": [{"to": to, "data": data}, BLOCK]}).encode()
req = urllib.request.Request(RPC, body, {"Content-Type": "application/json", "User-Agent": "check"})
return json.load(op.open(req, timeout=60))["result"]
def word(h, i, signed=False):
v = int(h[2 + 64 * i:2 + 64 * (i + 1)], 16)
return v - (1 << 256) if signed and v >= 1 << 255 else v
def enc(v):
return format(v % (1 << 256), "064x")
slot0 = call(POOL, "0x3850c7bd")
s, tick = word(slot0, 0) / 2 ** 96, word(slot0, 1, True)
L = word(call(POOL, "0x1a686502"), 0)
ticks = {}
for w in range(((tick - 1300) // 60) >> 8, (((tick + 1300) // 60) >> 8) + 1):
bm = word(call(POOL, "0x5339c296" + enc(w)), 0) # tickBitmap(int16)
for bit in range(256):
t = (w * 256 + bit) * 60
if bm >> bit & 1 and t <= tick and tick - t <= 1300:
ticks[t] = word(call(POOL, "0xf30dba93" + enc(t)), 1, True) # ticks(int24) -> liquidityNet
for level in (0.02, 0.05, 0.10):
target, cur, liq, ena_in, weth_out = s * (1 - level) ** 0.5, s, L, 0.0, 0.0
for t in sorted(ticks, reverse=True): # cross initialized ticks downwards
st = 1.0001 ** (t / 2)
if st <= target:
break
ena_in += liq * (1 / st - 1 / cur); weth_out += liq * (cur - st); cur = st; liq -= ticks[t]
ena_in += liq * (1 / target - 1 / cur); weth_out += liq * (cur - target)
gross = ena_in / 0.997 # the 0.3 % LP fee is charged on the input
print(f"-{level:.0%}: sell {gross / 1e18:,.0f} ENA -> {weth_out / 1e18:,.4f} WETH")
if level == 0.02:
q = call(QUOTER, "0xc6a5026a" + enc(int(ENA, 16)) + enc(int(WETH, 16)) + enc(int(gross)) + enc(3000) + enc(0))
moved = (word(q, 1) / 2 ** 96) ** 2 / s ** 2 - 1
print(f" QuoterV2: {word(q, 0) / 1e18:,.4f} WETH out, pool price after {moved:+.3%}")
Output at block 26,318,400:
-2%: sell 493,764 ENA -> 40.3288 WETH QuoterV2: 40.3288 WETH out, pool price after -2.000% -5%: sell 1,234,629 ENA -> 99.3157 WETH -10%: sell 2,444,481 ENA -> 191.6334 WETH
3. Organic vs. inflated activity
- Observed
- 1,948 distinct traders made 14,975 swaps (850.86 M ENA gross). The top 10 addresses account for 67.8% of the volume, the largest alone for 25.6%. Our organic estimate is 73.2% of gross volume (60.6% if bot-like cadence is also removed). The week is two different markets: on 29–30 Oct, 94% of the week's volume traded in two days; on the other five days, 49.88 M ENA traded, 97% passed the exclusion rules, but only 14% came from addresses without a bot-like cadence and the top 10 addresses made 91% of it.
- Evidence
- Every Swap log of the decoded pools in the window and the receipt of each of its 10,823 transactions (sender, called contract, ENA Transfer logs).
- Method
- Trader = the address whose ENA balance went down (sale) or up (purchase) in that transaction's ENA Transfer logs, never a pool, router or settlement contract; if none qualifies, the transaction sender (
tx.from). This is the same rule as our live trader attribution. We do not use the Swap event'ssender/recipient, which are usually routers (604 distinct recipients vs 2,342 distinct transaction senders). 87% of swaps were attributed from Transfer logs. - Trust
- Patterns are measured, not intent: a wash-like round trip can be a market maker rebalancing, a sandwich-shaped sequence can be coincidence. We exclude only clear shapes, so the organic share is an upper bound: genuinely independent demand can only be lower.
- Check it
- Swap logs + receipts from any node; the rules are fixed numbers listed below (methodology market-reality/0.1).
ENA swap volume per day: what it is made of
Share of each day's gross ENA volume (total above each bar) · all decoded pools · 2026-10-25 00:00 → 2026-11-01 00:00 UTC (blocks 26,265,959–26,316,188)
- outflow-linked address (counted as no pattern)
- no pattern, no bot-like cadence
- bot-like cadence (flagged, kept in the base estimate)
- excluded patterns
Rules (all conservative: a swap is excluded only when the shape is clear)
- Same-transaction round trip (excluded, 225.74 M ENA): one transaction swaps ENA in two or more pools in opposite directions and its net ENA is within 1% of the gross — arbitrage between ENA pools or a route that passes through ENA. 710 transactions.
- Same-block sandwich (excluded, 569,838 ENA): in one block and pool, the same actor (the contract it calls, or its sender) trades before and after another trader's swap in the same direction, the back leg within 20% of the front leg's size. Only the two outer legs are excluded; the trade in the middle is real demand. 14 found.
- Wash-like round trip (excluded, 2.13 M ENA): one trader buys and sells with no more than 25 blocks (~5 minutes) between consecutive swaps, and the run's net ENA is within 2% of its gross. 24 runs by 21 traders.
- Bot-like cadence (flagged, removed only in the strict estimate, 217.03 M ENA by 23 traders): ≥ 50 swaps in 7 days, or ≥ 20 swaps at a regular rhythm (coefficient of variation of the block gaps < 0.5). Arbitrage and market-making bots keep pools in line with other markets, so they are not counted as fake.
When ENA trades: swaps per hour of day
UTC hour of day × day, number of swaps in all decoded pools, split by trader type
- swaps per hour:
- 1–25
- 26–50
- 51–100
- 101–200
- 201–400
- > 400
- none
Top 10 trader addresses
Top 10 trader addresses and what their volume is made of
Share of all 7-day ENA swap volume, split by our classification · all decoded pools
- outflow-linked address
- no pattern, no bot-like cadence
- bot-like cadence (flagged)
- excluded patterns (round trips, sandwich legs)
| # | Address | Type | ENA volume | Share | Swaps | Sold | Bought | Pattern |
|---|---|---|---|---|---|---|---|---|
| 1 | 0x7f9d…15e3 | account (EOA) | 217.50 M | 25.6% | 20 | 217.50 M | 0.00 | – |
| 2 | 0xc623…67c2 | contract | 122.32 M | 14.4% | 12 | 69.24 M | 53.08 M | same-tx round trip |
| 3 | 0xae2f…ae13 | account (EOA) | 48.25 M | 5.7% | 71 | 31.64 M | 16.60 M | same-tx round trip, sandwich-shaped, wash-like, bot-like cadence |
| 4 | 0x1f2f…f387 | contract | 47.57 M | 5.6% | 51 | 16.30 M | 31.28 M | same-tx round trip, sandwich-shaped, bot-like cadence |
| 5 | 0xbdb3…47b6 | contract | 46.93 M | 5.5% | 4,900 | 16.08 M | 30.85 M | wash-like, bot-like cadence |
| 6 | 0x51c7…2a7f | contract | 30.10 M | 3.5% | 1,589 | 17.08 M | 13.01 M | wash-like, bot-like cadence |
| 7 | 0xbdfa…026a | contract | 20.40 M | 2.4% | 2 | 10.35 M | 10.05 M | same-tx round trip |
| 8 | 0xea97…370b | account (EOA) | 16.12 M | 1.9% | 13 | 0.00 | 16.12 M | – |
| 9 | 0xdeda…1e02 | contract | 14.19 M | 1.7% | 2 | 10.03 M | 4.16 M | same-tx round trip |
| 10 | 0x832b…865a | account (EOA) | 13.82 M | 1.6% | 36 | 6.91 M | 6.91 M | same-tx round trip, bot-like cadence |
The largest address, 0x7f9d…15e3, is the ENA seller described in our 29 Oct research page: 217.50 M ENA sold in 20 swaps within about two hours on 29–30 Oct. It counts as organic here — it is a real seller, not a pattern. Most same-transaction round trips (225.74 M ENA, 27% of the week) are contracts that bought ENA in one pool and sold it in another in the same transaction while those sales pushed the pool prices apart; they move prices back into line but add volume without any net demand.
The sales block by block: ENA/WETH 0.3% and ENA/WETH 1%
29 Oct 22:51–30 Oct 00:41 UTC, blocks 26,301,494–26,302,060 · change vs. each pool's last swap before the first sale (block 26,301,506)
- lowest price inside a block with a sale by 0x7f9d…15e3
- pool price at the end of each block
Examples behind the rules
- Sandwich-shaped, block 26,301,507: front 0x936fe612…, back 0xe77e4c5d…, 264,522 ENA each way around 1 trade(s).
- Sandwich-shaped, block 26,302,782: front 0x0f153b92…, back 0xd1a33dec…, 14,139 ENA each way around 1 trade(s).
- Sandwich-shaped, block 26,305,690: front 0x5b3b96ee…, back 0x8ca928a7…, 1,914 ENA each way around 1 trade(s).
- Wash-like run by
0xbdb3…47b6: 49 swaps, 582,945 ENA gross, net 11,466, blocks 26,277,153–26,277,340, e.g. 0x07a154f3…. - Wash-like run by
0xbe75…972b: 2 swaps, 421,596 ENA gross, net 0.00, blocks 26,301,507–26,301,509, e.g. 0xaa7a2a52…. - Wash-like run by
0x51c7…2a7f: 14 swaps, 252,976 ENA gross, net 3,585, blocks 26,284,420–26,284,553, e.g. 0x0119c8ae…. - Same-transaction round trip: 0x005207b9….
- Same-transaction round trip: 0x0064251e….
4. Liquidity providers
- Observed
- 252 owners provide the ENA liquidity within ±2% of the price; the largest holds 46.2%, the top 5 71.3%, the top 10 82.1%. 68% of that band sits in positions first funded more than 30 days ago. In the window, 283 deposits added ≈ 125.42 M ENA-equivalent and 158 withdrawals removed ≈ 128.66 M. Almost all of that moved through ENA/WETH 1% on 29–30 Oct: deposits there were mostly WETH (9,823 WETH, 507,747 ENA) and withdrawals mostly ENA (29.79 M ENA, 7,748 WETH) — consistent with liquidity placed below the price that bought the sold ENA. In the main pool, ENA/WETH 0.3%, ≈ 5.65 M ENA-equivalent was added and ≈ 4.61 M withdrawn over the week (137 deposits, 50 withdrawals); positions first funded during the week hold 14% of today's ±2% band.
- Evidence
- Every
Mint/Burnlog of the v3-style ENA pools since before the token existed (to block 26,318,400 (01 Nov 2026, 07:23 UTC)); Uniswap v4ModifyLiquiditylogs of the ENA pools;positions(tokenId)andownerOf(tokenId)on the position managers at the snapshot. - Method
- Positions are rebuilt from the pools' own events (owner, tick range, liquidity). For positions held through the v3 PositionManager, the NFT id is read from the
IncreaseLiquiditylog next to eachMint; its current liquidity and holder come from the PositionManager. Each position's share = the ENA it would absorb or release while the price moves within ±2% (the same walk as the depth section). ENA-equivalent amounts convert the quote side at the pool's own snapshot price. - Trust
- Reconstruction check: summing the rebuilt in-range positions reproduces the pool's on-chain
liquidity()exactly for 258 of 258 pools (all 47 of 47 with liquidity). Position NFTs: 194 of 194 PositionManager ranges match the NFTs found. - Check it
cast call 0xc36442b4a4522e871399cd717abdd847ab11fe88 "positions(uint256)" <tokenId> --block 26318400andownerOffor any position.
Who provides the liquidity within ±2% of the price
Share of the ±2% band, exit pools, at block 26,318,400 (01 Nov 2026, 07:23 UTC)
| # | Owner | Type | ±2% share | ±10% share | Positions | Pools |
|---|---|---|---|---|---|---|
| 1 | 0x1c24…5dd0 | account (EOA) | 46.2% | 48.0% | 1 | ENA/WETH 0.3% |
| 2 | 0xcc81…021d | account (EOA) | 7.5% | 4.2% | 2 | ENA/WETH 0.3%, ENA/WETH 1% |
| 3 | 0x29fe…7a07 | account (EOA) | 7.0% | 7.3% | 1 | ENA/WETH 0.3% |
| 4 | 0x4199…0549 | account (EOA) | 6.4% | 6.6% | 1 | ENA/WETH 0.3% |
| 5 | 0x8914…c39d | account (EOA) | 4.1% | 3.7% | 1 | ENA/WETH 0.3% |
| 6 | 0x5055…14ba | contract | 3.5% | 2.1% | 1 | ENA/WETH 0.3% |
| 7 | 0xa547…de22 | account (EOA) | 2.9% | 3.1% | 1 | ENA/WETH 0.3% |
| 8 | 0xf0e0…be88 | contract | 1.9% | 2.0% | 1 | ENA/WETH 0.3% |
| 9 | 0x64cd…876e | account (EOA) | 1.4% | 1.4% | 1 | ENA/WETH 0.3% |
| 10 | 0xf6cc…b4b5 | account (EOA) | 1.1% | 1.1% | 1 | ENA/WETH 0.3% |
ENA/WETH 0.3%: liquidity near the price, hour by hour
ENA within 2% of the pool price at the end of each hour, and liquidity added or withdrawn · 2026-10-25 00:00 → 2026-11-01 00:00 UTC (blocks 26,265,959–26,316,188)
- ENA absorbed while the price falls 2%
- ENA released while the price rises 2%
- deposits (ENA-equivalent)
- withdrawals (ENA-equivalent)
Mint and Burn of the pool since it was created. The rebuild reproduces the in-range liquidity that the pool's own Swap events report in all 1,529 of 1,529 swaps we checked (every fourth swap of the week). Over the week the −2% side held between 411,818 and 530,871 ENA. Bars convert the WETH side at the snapshot price, as in the table below (187 deposits and withdrawals in total). The two largest withdrawals were short-lived positions placed during the sales: 1.68 M ENA-eq. deposited and withdrawn in the same block (26,301,772), and 992,987 ENA-eq. withdrawn in block 26,301,957 from a position opened earlier in the sales window — not long-standing liquidity leaving. In ENA/WETH 1%, deposits and withdrawals of up to 112.79 M ENA-eq. per hour were almost all on 29–30 Oct (see the text above).Largest withdrawals in the window
| Block | Transaction | Pool | ENA out | Quote out | ENA-equivalent | Owner |
|---|---|---|---|---|---|---|
| 26,301,996 | 0xdb8bd657… | ENA/WETH 1% | 6.12 M | 853.4826 WETH | 16.41 M | 0x06c0…a9fd |
| 26,302,037 | 0xe9613e01… | ENA/WETH 1% | 0.00 | 1,100.0000 WETH | 13.25 M | 0x06c0…a9fd |
| 26,302,035 | 0xd72e091a… | ENA/WETH 1% | 0.00 | 1,000.0000 WETH | 12.05 M | 0x60a8…85f6 |
| 26,301,991 | 0xab16f15d… | ENA/WETH 1% | 7.51 M | 284.2034 WETH | 10.94 M | 0x5aae…5588 |
| 26,301,959 | 0xffac9722… | ENA/WETH 1% | 5.08 M | 473.6513 WETH | 10.79 M | 0x5aae…5588 |
| 26,301,945 | 0xb2159255… | ENA/WETH 1% | 3.44 M | 588.2183 WETH | 10.53 M | 0x5aae…5588 |
Liquidity pull risk, in plain terms: if the largest provider withdrew, the ±2% band would shrink by 46%; if the top five did, by 71%.
5. Hook and pool risk (Uniswap v4)
- Observed
- 222 Uniswap v4 pools pair ENA with another token; 48 of them had swaps in the window (4.3% of the volume). 20 pools use a hook with permission bits set, 16 of them with a swap
ReturnDeltabit. None of the hooked pools had a swap in the window: all v4 trading in ENA went through hookless pools (hook address 0x0, no permission bits). - Evidence
- The pools'
Initializelogs on the PoolManager (0x0000…8a90), which carry the full PoolKey (currencies, fee, tick spacing, hook address); every key was re-hashed to its PoolId. - Method
- In Uniswap v4 a hook's permissions are fixed by its address: the lowest 14 bits of the hook address say which callbacks the PoolManager will call. We read those bits; we do not audit the hook's code.
- Trust
- Exact for the permission set (the PoolManager enforces it). What an enabled hook actually does needs a code review. Many of these pools pair ENA with tokens that have no other market (Pendle SY/PT wrappers, launch tokens); they hold no or little liquidity.
- Check it
int(hook_address, 16) & 0x3fff— each set bit is one permission in the table below.
The 20 hooked ENA pools and their permissions (none traded this week)
| Pool | PoolId | Hook | Flags | Enabled permissions | Swap ReturnDelta | Swaps (7 d) | Liquidity now |
|---|---|---|---|---|---|---|---|
| ENA/ANE 0% | 0xa1500340… | 0x3e0c…68cc | 0x28cc | beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta | yes | 0 | yes |
| ENA/DRAG 0% | 0xd8129a9f… | 0x281f…a0cc | 0x20cc | beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta | yes | 0 | yes |
| ENA/ETH 0% | 0x3883df1b… | 0x322d…68cc | 0x28cc | beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta | yes | 0 | no |
| ENA/ETH 0.5% | 0x24464978… | 0xb1bb…3acc | 0x3acc | beforeInitialize, afterInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta | yes | 0 | no |
| ENA/HYENA 0% | 0xb913ddd8… | 0x322d…68cc | 0x28cc | beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta | yes | 0 | yes |
| ENA/HYENA 1% | 0xaf141a82… | 0xcb69…c0c0 | 0x00c0 | beforeSwap, afterSwap | no | 0 | yes |
| ENA/LOOP 0% | 0x65926bd0… | 0xb05f…28a0 | 0x28a0 | beforeInitialize, beforeAddLiquidity, beforeSwap, beforeDonate | no | 0 | no |
| ENA/PT-ENA-29AUG2024 0% | 0x231ca75c… | 0x8c21…c088 | 0x0088 | beforeSwap, beforeSwapReturnDelta | yes | 0 | no |
| ENA/SQUIDO 0% | 0xd898921d… | 0x322d…68cc | 0x28cc | beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta | yes | 0 | yes |
| ENA/SUMCAP 0% | 0x06d018e7… | 0x322d…68cc | 0x28cc | beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta | yes | 0 | yes |
| ENA/SY-ENA 0% | 0x7430736b… | 0x81bd…c088 | 0x0088 | beforeSwap, beforeSwapReturnDelta | yes | 0 | no |
| ENA/SY-ENA 0% | 0xd3c39341… | 0x81bd…c088 | 0x0088 | beforeSwap, beforeSwapReturnDelta | yes | 0 | no |
| ENA/SY-rsENA 0% | 0xec4e947b… | 0x81bd…c088 | 0x0088 | beforeSwap, beforeSwapReturnDelta | yes | 0 | no |
| ENA/SY-sENA 0% | 0xdd3b71f5… | 0x81bd…c088 | 0x0088 | beforeSwap, beforeSwapReturnDelta | yes | 0 | no |
| ENA/WETH 0% | 0x13ee38a9… | 0xa176…2888 | 0x2888 | beforeInitialize, beforeAddLiquidity, beforeSwap, beforeSwapReturnDelta | yes | 0 | no |
| ENA/ZENA 1% | 0xec91cac8… | 0xcb69…c0c0 | 0x00c0 | beforeSwap, afterSwap | no | 0 | yes |
| ENA/sENA 0% | 0x8a1df5ea… | 0x8693…60c4 | 0x20c4 | beforeInitialize, beforeSwap, afterSwap, afterSwapReturnDelta | yes | 0 | no |
| ENA/sENA 0% | 0xa767bb8d… | 0x3fb4…1088 | 0x1088 | afterInitialize, beforeSwap, beforeSwapReturnDelta | yes | 0 | no |
| ENA/sENA 0% | 0xbf94687a… | 0xeeca…60c4 | 0x20c4 | beforeInitialize, beforeSwap, afterSwap, afterSwapReturnDelta | yes | 0 | no |
| ENA/sENA 0% | 0xccf4015e… | 0xded2…6880 | 0x2880 | beforeInitialize, beforeAddLiquidity, beforeSwap | no | 0 | no |
What each permission bit allows
| Bit | Permission | What it allows the hook to do |
|---|---|---|
| 13 | beforeInitialize | runs code before the pool is created |
| 12 | afterInitialize | runs code after the pool is created |
| 11 | beforeAddLiquidity | can run checks or block a liquidity deposit before it happens |
| 10 | afterAddLiquidity | runs code after a deposit |
| 9 | beforeRemoveLiquidity | can run checks or block a withdrawal before it happens |
| 8 | afterRemoveLiquidity | runs code after a withdrawal |
| 7 | beforeSwap | runs code before every swap (for example to set a dynamic fee or refuse a trade) |
| 6 | afterSwap | runs code after every swap |
| 5 | beforeDonate | runs code before a donation to liquidity providers |
| 4 | afterDonate | runs code after a donation |
| 3 | beforeSwapReturnDelta | can take or give tokens in a swap, so the Swap event no longer shows what the trader settled |
| 2 | afterSwapReturnDelta | can change the swap's output after the fact (same effect on the Swap event) |
| 1 | afterAddLiquidityReturnDelta | can change what a liquidity provider pays on deposit |
| 0 | afterRemoveLiquidityReturnDelta | can change what a liquidity provider receives on withdrawal |
The two …ReturnDelta swap bits matter most for data quality: with them, the Swap event no longer equals what the trader paid or received, so volume read from events can be wrong. None of the ENA pools that traded this week has a hook at all.
6. Anomaly timeline (our existing findings)
What our monitoring flagged for ENA on Ethereum since collection started (2026-10-24 to 2026-11-01). Each finding has an Evidence Card in the app with its baseline, query and ingestion runs.
| Window (UTC) | Finding | Severity | What it says | Finding id |
|---|---|---|---|---|
| 2026-10-24 → 2026-10-25 | liquidity spike | high | Median active liquidity in ENA/sENA 0.05% rose to 8.9× its baseline (pool liquidity units) | f_9a5786b8c3edbe49cd04 |
| 2026-10-24 | volume decline | high | Hourly ENA volume averaged 29,745 vs a baseline of 312,043 (0.095×) | f_252751a20ea7a7d345de |
| 2026-10-29 | buy sell imbalance | low | Buy share of swaps 91% vs 40% baseline (41 buys, 4 sells in the hour) | f_bca810b988ab875576d5 |
| 2026-10-29 → 2026-10-30 | volume spike | high | Hourly ENA volume averaged 50,491,848 vs a baseline of 538,437 (94×); peak 151,629,001 ENA in the hour from 00:00 UTC 2026-10-30 | f_7ba9b2fe71dd522be779 |
| 2026-10-30 | activity spike | high | Swaps per hour: 301 vs a baseline of 55.5 | f_8681f5cb307d6fe115f6 |
| 2026-10-30 | liquidity spike | high | Median active liquidity in ENA/sENA 0.05% rose to 8.9× its baseline (pool liquidity units) | f_9fc9bd8a013220dd2247 |
| 2026-10-31 | activity decline | medium | Swaps per hour: 13 vs a baseline of 35.5 | f_41e888d745dda6cd454c |
| 2026-10-31 | liquidity spike | high | Median active liquidity in ENA/sENA 0.05% rose to 8.9× its baseline (pool liquidity units) | f_205185c784f28570ddfe |
| 2026-10-31 | volume decline | high | Hourly ENA volume averaged 34,393 vs a baseline of 286,865 (0.12×) | f_48e382b9d053b11a65e3 |
| 2026-11-01 | volume decline | medium | Hourly ENA volume averaged 55,422 vs a baseline of 276,629 (0.2×) | f_fffcc12dd7726523d205 |
How to read this: the 29 Oct volume spike and 30 Oct activity spike are the sales described above. The liquidity finding for ENA/sENA 0.05% is one step change on 24 Oct (active liquidity about 9× higher) that the detector reports again on later days against the same baseline; it is a rise, not a withdrawal. The volume declines on 24 and 31 Oct are quiet hours against a busier baseline. Re-detections of the same finding on later runs are collapsed here (19 stored rows, 10 shown).
7. Market reality summary
Not a score and not a valuation: each line is a measured number with its caveat.
| Dimension | Measured | Caveat |
|---|---|---|
| Real depth | 516,045 ENA to move −2% · 1.28 M to −5% · 2.52 M to −10% | Snapshot at one block; assumes the sale is split across all exit pools; 96% sits in one pool. |
| Buy-side depth | 521,916 / 1.31 M / 2.51 M ENA for +2 / +5 / +10% | Same caveats. |
| Organic share | 73.2% of gross 7-day volume (60.6% strict); other five days: 97.4% (13.5% strict) | Pattern rules exclude only clear shapes; intent is not known. Bot-like traders are mostly arbitrage and market making. |
| Concentration of traders | Top 10 addresses: 67.8% of volume (other five days: 90.5%); largest: 25.6% | One address per trader; a person or desk can use several. |
| Concentration of liquidity | Top LP: 46.2% of the ±2% band; top 5: 71.3% | A vault counts as one owner. |
| LP stability | 68% of the ±2% band in positions first funded more than 30 days ago; 14% in positions opened this week | Past stability does not bind future withdrawals. Most of the week's LP flow (125.42 M in, 128.66 M out, ENA-eq.) was in the 1% pool on 29–30 Oct. |
| Coverage | 36.8% of 7-day volume in our verified pipeline (94.3% on the five days without the 29–30 Oct sales); 99.5% decoded from pool events | Gap = one supported pool not pinned yet (ENA/WETH 1%). Ethereum only; centralized exchanges and other chains are outside this view. |
What this does and does not say
- It describes on-chain DEX markets on Ethereum only. Centralized exchanges, other chains and OTC trading are outside this view, and for a large token they can be bigger than everything here.
- Depth is a snapshot of one block. Concentrated liquidity can be added or removed in a single transaction.
- “Organic”, “wash-like”, “sandwich” and “bot-like” are pattern labels from fixed rules, not findings about intent or wrongdoing. A different threshold gives a different number; the rules and thresholds are on this page.
- An address is not a person: one trader can use several addresses, and a contract (vault, smart wallet, settlement) can stand for many users.
- Pool discovery relies on creation events that name the token. Pools created by unusual factories, or vaults that do not index token addresses, can be missing; the venue we cannot decode is shown with an upper-bound estimate.
- Amounts are token units; quote-side amounts are in the pool's own quote token (WETH, USDC, USDT). We do not convert to USD.
- WATAM is independent and not affiliated with Ethena Labs, Uniswap, PancakeSwap or any venue named here. This is not investment advice and not a price or value assessment.
Inputs, cache and scripts: commercial-audit/research-data/market-reality/ (collect.py → analyze.py → build_page.py). Data read on 01 Nov 2026 from public Ethereum nodes (Tenderly public gateway, Pocket, dRPC, BlockPI) and our ClickHouse store.