Report of EURC/USDC FXswap Curve Pool on base

EURC/USDC Curve Pool (Base) — Analysis Report

Pool: 0x1c53971800c111a32b7889177c56e3488cfe0be0 (Twocrypto-NG, Base chain)


Pool Configuration

Parameter Raw value Scaled Meaning
A 500,000 500,000 Amplification; higher = tighter liquidity near oracle
gamma 1×10¹⁵ 0.001 Width of concentrated liquidity region
mid_fee 5,000,000 0.05% Fee when pool is at oracle price (balanced)
out_fee 10,000,000 0.10% Fee when pool is maximally off-balance
admin_fee 5×10⁹ 50% Share of gross fee routed to DAO + rebalancing
fee_gamma 1×10¹⁶ 0.01 Controls how fast fee ramps from mid to out
allowed_extra_profit 1×10⁶ 1×10⁻¹² Profit threshold before price_scale update triggers
adjustment_step 1×10¹³ 0.00001 (0.001%) Minimum price_scale gap to trigger rebalancing
ma_time 2,498 ~42 min EMA half-life for price_oracle
virtual_price (Mar 31) 1.002753 LP token value growth since inception (+0.28%)
xcp_profit (Mar 31) 1.004598 Cumulative pool profit growth (+0.46%); includes Admin share not yet extracted
xcp_profit_a (Mar 31) 1.003232 Baseline at last DAO claim (~Jan 2026); pending DAO = (1.004598 − 1.003232) × 25% ≈ $3.89
donation_shares (Mar 31) 0 Refuel fully consumed; no active donation

Fee split (same as all Twocrypto-NG pools):

Destination Share Mechanism
Rebalancing buffer 50% of gross Stays in pool as xcp gap; funds price_scale updates
DAO 25% of gross Minted as LP tokens via _claim_admin_fees()
LP 25% of gross Accrues via virtual_price increase

Reading the fee range: mid_fee 0.05% → out_fee 0.10% is a 2× spread, meaning fees stay relatively stable regardless of pool balance. Compare the Gnosis pool (0.01% → 0.30%, 30× spread) — this Base pool is tuned for a tighter, more predictable fee experience, better suited to the small trade sizes seen here.

adjustment_step = 0.001% is very small (Gnosis = 0.1%), meaning the oracle price_scale adjusts in tiny increments — appropriate for a near-stable pair where sudden large moves should not shift the internal reference price aggressively.

donation_shares = 0 at time of writing means the refuel balance is fully consumed. During the analysis period (Nov 2025 – Mar 2026), $42.68 was donated and $39.53 net consumed to cover gas for oracle/rebalancing updates on Base chain. Gas on Base (~$0.01–0.05 per update) is far cheaper than Ethereum mainnet but still meaningful at $10K TVL.


1. Summary Stats — Nov 10, 2025 → Apr 19, 2026

Metric Value
Period Nov 10, 2025 – Apr 19, 2026 (160 days)
Total swaps 4,795
Overall median trade size $24.42
Overall mean trade size $30.65 (right-skewed; outliers pull mean up 1.3×)
Total USD swap volume $146,975
TVL range ~$9,975 – ~$10,714 (Nov–Mar28), ~$11,264 – ~$11,466 (second LP Mar29–Apr8), ~$10,074 – ~$10,123 (after Apr 9 exit)
Average TVL (pre-deposit, 138.2 days) $10,127
Direction split 50.5% USDC→EURC / 49.5% EURC→USDC (near-perfect balance)
Median slippage 5.68 bps
Mean slippage 7.16 bps
EUR/USD price range 1.1446 – 1.2044 (EUR peaked +4.2% then reversed; net change +1.55% start→end: 1.1562 → 1.1742)

Monthly breakdown

Month Trades Volume (USD) Gross Fees
Nov 2025 610 $15,249 $8.14
Dec 2025 737 $20,178 $10.90
Jan 2026 718 $20,115 $13.68
Feb 2026 838 $26,946 $15.49
Mar 2026 1,510 $53,791 $30.40
Apr 2026 (1–19) 382 $10,696 $7.66

March 2026 remained the standout month — 1,510 trades and $53,791 volume, more than the prior four months combined. April (through Apr 19) added 382 trades at $10,696, on pace for a lower monthly volume than March reflecting both fewer trading days counted and reduced activity.

Charts: charts_base/eurc_usdc_pool_analysis.png (4 panels)

  • Panel 1: 6H-slot median trade size + IQR band + trade count
  • Panel 2: Stacked TVL (USDC balance + EURC in USD)
  • Panel 3: Pool balance imbalance — EURC share of TVL (50% = perfectly balanced)
  • Panel 4: 6H-slot median/TVL ratio (bps) with rolling average

2. Fee Income, Divergence Loss & Full P&L — Nov 10, 2025 → Apr 19, 2026

Fee income

The pool's admin_fee is 50% (ADMIN_FEE = 5×10⁹ out of 10¹⁰, confirmed on-chain). The fee field in each TokenExchange event is the total fee — but the split between LP, DAO and rebalancing is not 50/50 LP/DAO.

The actual fee split — confirmed from _claim_admin_fees() Vyper source:

"Since half of the profits go to rebalancing the pool, we are left with half; so divide by 2."

fees = (xcp_profit − xcp_profit_a) × admin_fee / (2 × 10¹⁰)
     = growth × 50% / 2  =  growth × 25%
Destination Share Mechanism
Rebalancing buffer 50% of gross Stays in pool as xcp_profit gap; funds price_scale updates
DAO 25% of gross Claimed as LP tokens via _claim_admin_fees()
LP 25% of gross Accrues via virtual_price (residual after DAO claim)
Metric Value APY (avg TVL $10,127, 160 days)
Total gross fees (through Apr 19) $86.27 +1.94%
├─ Rebalancing buffer (50%) $43.14
├─ LP share (25%) $21.57 +0.49%
└─ DAO share (25%, as LP tokens) $21.57 +0.49%
Average fee rate (gross) 0.0587% of volume

Fee APY formula: (amount / avg_tvl) / (days / 365) × 100

The pool's fee tier is low (mid_fee 0.05% → out_fee 0.10%, dynamic) because USDC/EURC is a near-stable pair. March 2026 was the peak month with $30.40 in fees; April through the 19th added $7.66 more.

LP lifecycle & second LP episode

Date Event TVL
Nov 10, 2025 Original LP seeds pool $10,005
Mar 28, 2026 Pre-deposit state $10,005
Mar 29, 2026 Second LP deposits ~$1,259 $11,264
Apr 8, 2026 Peak (EUR at 1.168) $11,466
Apr 9, 2026 Second LP exits (~$1,379 withdrawn) $10,074
Apr 19, 2026 Current (original LP ~100%) $10,104

The second LP deposited $1,259 on Mar 29 and exited 11 days later on Apr 9, recovering $1,379 (+$120, +9.5% gain) as EUR/USD rose from 1.150 to 1.166 during their window.

Full LP P&L — original LP (Nov 10, 2025 → Apr 19, 2026)

Line item Amount Notes
Start value $10,005.30 5,137 USDC + 4,210 EURC at 1.1562
HODL at Apr 19 oracle (1.17417) $10,080.86 Original assets, no AMM
Pool TVL Apr 19 $10,103.63 Original LP owns ~100% (2nd LP exited)
Pool vs HODL +$22.78 Pool ahead of HODL
Pure IL (pool − fees-in-pool − HODL) −$41.93 (10,103.63 − 64.71) − 10,080.86
Gross fees in pool (75%) +$64.71 Rebalancing buffer + LP share
DAO fees (25%, unclaimed) $21.57 Will reduce LP claim if DAO claims first
True LP-owned (excl. DAO) ~$10,082 ~+$1 vs HODL
Gross APY (160 days, pre-deposit TVL) 1.94%
LP APY (25% share) 0.49%

EUR/USD moved net +1.55% (1.1562 → 1.1742) over the full period. The AMM rebalanced continuously — selling EURC on the way up, accumulating USDC — resulting in pure IL of −$41.93 (−0.42% vs HODL). $64.71 in fees remained in the pool, more than covering the IL: pool TVL ends ahead of HODL by +$22.78 (+0.23%). Note: this does not include the $42.68 refuel cost paid separately — see Refuel account section for the full picture.

Phase-level P&L

Phase 1 — Original LP only (Nov 10 → Mar 28, 138 days)

EUR barely moved net (1.1562 → 1.1495, −0.58%). Pool TVL ~$10,005 both start and end. LP beats HODL by +$9 ($19 fees offset $49 pure IL).

Phase 2 — With second LP (Mar 29 → Apr 8, 11 days)

EUR rose 1.150 → 1.166 (+1.4%). TVL expanded from $11,264 → $11,466. Original LP's value tracked well; second LP earned ~+9.5% annualised (3.8K× annualised rate for a short window).

Phase 3 — After second LP exit (Apr 9 → Apr 19, 10 days)

EUR continued rising 1.166 → 1.174 (+0.7%). Pool TVL $10,074 → $10,104. 166 trades, $3.22 fees, 1 rebalancing event (Apr 13). price_scale frozen since Apr 13 (oracle 1.174, scale 1.161, 1.11% gap) — early signs of the stale state.

Refuel cost — subsidising the pool's rebalancing

The refuel mechanism (LP token donations to top up the rebalancing budget) was fully exhausted and no new donations have been made since early 2026. donation_shares = 0.

Amount
Total refuel donated (historical) $42.68
Total consumed $39.53
donation_shares remaining $0.00 (fully exhausted)
Net refuel cost −$42.68

The pool runs entirely on fee buffer for rebalancing. At current post-exit volume levels (166 trades, $3.22 fees in 10 days), the rebalancing budget rebuilds slowly — insufficient to close a 1.11% oracle/scale gap (each 20%-of-gap step at 1.1% gap costs roughly $14 in IL at $10K TVL).


3. Monthly P&L Snapshots

HODL = original assets (5,137 USDC + 4,210 EURC) held at current oracle. Pool rows through Mar 28 are single-LP; from Mar 29 the pool includes a second LP (11.18%); after Apr 9 original LP ~100% again.
DL vs HODL (single-LP periods) = (pool TVL − cumulative gross fees) − HODL. Positive = pool ahead of HODL before fees; negative = pool behind HODL.

Period USDC EURC EUR/USD Pool TVL HODL value Cum gross fees Pure IL vs HODL
Start (Nov 10) $5,137 4,210 1.1562 $10,005 $10,005 $0
End of Nov $5,027 4,339 1.1592 $10,056 $10,018 $8.14 +$30
End of Dec $5,156 4,226 1.1761 $10,126 $10,089 $18.96 +$18
End of Jan $5,306 4,098 1.1819 $10,149 $10,113 $32.40 +$3
End of Feb $5,088 4,284 1.1788 $10,138 $10,100 $48.12 −$10
Mar 28 (pre-deposit) $4,948 4,399 1.1495 $10,005 $9,977 $76.68 −$49
Mar 31 (pool incl. 2nd LP) 6,148 4,551 1.1555 $11,407 10,002 $78.54 n/a
Apr 8 (2nd LP still in) 6,427 4,312 1.1657 $11,453 10,045 $82.81 n/a
Apr 19 (current) 6,282 3,255 1.1742 $10,104 10,081 $86.14 −$42

Italicised rows include second LP's capital; pure IL comparison to original-LP HODL is not meaningful for those rows.

Key observations:

  • Nov–Jan (EUR rising): Pure IL vs HODL positive — concentrated liquidity outperformed HODL. Pool captured EUR upside despite selling EURC as it rose.
  • February: EUR peaked (~1.2044 Jan 29), began reversing. IL turned negative (−$10) — AMM had sold EURC on the way up and was left USDC-heavy.
  • March: EUR fell to 1.1446 mid-month, then recovered to 1.1555 by Mar 31. Pure IL at Mar 28 = −$49, but pool TVL coincidentally back to $10,005.
  • April: EUR continued rising to 1.1742 (+1.55% since start). Second LP exited Apr 9. Pool back to original LP only with IL of −$42 and +$64.71 fees in pool → pool TVL beats HODL +$23. After $42.68 refuel cost, true LP net vs HODL ≈ +$1.

4. Top 50 Trades by Size — with Slippage

Slippage = deviation of actual execution price from price_scale (the pool's internal reference price).
Includes the fee component. Positive = trader paid more / received less than reference value. Negative = trader got a better-than-reference deal (pool was restoring balance).

Formula:

  • sold_id=0 (USDC→EURC): slippage = (tokens_sold/tokens_bought − price_scale) / price_scale × 10000
  • sold_id=1 (EURC→USDC): slippage = (price_scale − tokens_bought/tokens_sold) / price_scale × 10000

Slippage stats — all 4,795 trades

Stat Value
Median slippage +5.68 bps
Mean slippage +7.16 bps
Min −257.04 bps (favorable, pool was imbalanced)
Max +271.20 bps (large price impact)
P5 −28.55 bps
P95 +64.12 bps

Top 50 trades (unchanged from Mar 31 report — max April trade $93.21 did not crack the 50th entry at $131.07)

# Date (UTC) Direction USD Size Slippage (bps) Fee% Block
1 2026-02-25 14:58 USDC→EURC $738.63 +40.19 0.085% 42621081
2 2026-02-25 14:58 EURC→USDC $668.08 −28.81 0.052% 42621081
3 2026-02-25 03:14 EURC→USDC $588.85 +25.53 0.076% 42599949
4 2026-02-06 00:27 EURC→USDC $585.38 +45.70 0.086% 41774156
5 2026-02-25 03:14 USDC→EURC $561.58 −13.81 0.050% 42599949
6 2026-01-05 15:20 EURC→USDC $526.80 +31.29 0.079% 40418552
7 2026-03-23 11:15 USDC→EURC $492.83 −2.40 0.053% 43737587
8 2026-01-05 15:20 USDC→EURC $446.04 −21.54 0.054% 40418553
9 2026-02-25 03:17 EURC→USDC $353.31 +17.13 0.064% 42600066
10 2026-02-25 03:17 USDC→EURC $344.75 −5.91 0.050% 42600066
11 2025-12-01 15:08 EURC→USDC $321.50 −10.07 0.050% 38906175
12 2025-11-13 14:10 USDC→EURC $306.74 +17.76 0.063% 38126835
13 2026-02-06 00:42 USDC→EURC $293.03 −39.92 0.075% 41774589
14 2026-02-17 15:59 USDC→EURC $286.20 −0.97 0.051% 42277320
15 2026-03-18 19:23 EURC→USDC $263.54 +40.40 0.078% 43536235
16 2026-02-03 11:06 EURC→USDC $263.15 +31.61 0.073% 41663713
17 2025-12-23 21:51 USDC→EURC $261.81 +25.81 0.068% 39868680
18 2025-12-16 01:30 EURC→USDC $250.40 +16.78 0.061% 39529629
19 2026-02-06 00:45 USDC→EURC $243.87 −18.56 0.059% 41774704
20 2025-11-17 16:51 USDC→EURC $242.57 +5.58 0.053% 38304462
21 2026-01-29 15:25 EURC→USDC $239.17 −141.83 0.097% 41455499
22 2026-03-23 11:15 USDC→EURC $214.96 +26.44 0.066% 43737597
23 2026-01-30 17:41 EURC→USDC $207.73 −85.26 0.091% 41502771
24 2025-11-20 09:38 USDC→EURC $197.34 −6.92 0.051% 38421082
25 2025-12-09 13:08 USDC→EURC $193.41 −14.63 0.055% 39248171
26 2026-03-20 04:52 EURC→USDC $184.13 +25.11 0.066% 43596488
27 2026-02-17 16:04 USDC→EURC $177.96 −5.74 0.051% 42277469
28 2026-03-23 11:06 EURC→USDC $173.68 +27.38 0.067% 43737308
29 2026-02-17 15:59 EURC→USDC $162.57 −3.74 0.050% 42277322
30 2025-12-11 14:10 USDC→EURC $162.53 +33.18 0.071% 39336448
31 2025-12-23 21:57 EURC→USDC $151.92 −13.33 0.055% 39868858
32 2026-03-02 01:10 USDC→EURC $150.00 +2.14 0.050% 42812238
33 2026-03-09 09:33 USDC→EURC $150.00 +17.62 0.058% 43129721
34 2026-03-13 03:33 EURC→USDC $148.83 +15.20 0.057% 43291718
35 2026-02-19 15:08 USDC→EURC $145.50 −1.74 0.050% 42362193
36 2026-02-23 14:19 USDC→EURC $145.50 +1.24 0.050% 42533510
37 2026-03-11 14:01 USDC→EURC $145.50 +7.26 0.052% 43224167
38 2026-03-23 11:47 EURC→USDC $144.96 −41.45 0.079% 43738554
39 2025-12-29 14:33 USDC→EURC $142.50 +0.08 0.050% 40114719
40 2026-03-23 11:32 USDC→EURC $141.56 +50.88 0.080% 43738097
41 2026-03-19 13:51 USDC→EURC $141.00 +15.69 0.057% 43569458
42 2026-03-23 11:18 USDC→EURC $136.50 +52.03 0.080% 43737691
43 2025-12-23 22:01 EURC→USDC $133.60 −10.64 0.054% 39868986
44 2026-03-06 13:30 USDC→EURC $132.72 −10.33 0.056% 43007234
45 2026-02-19 14:26 EURC→USDC $131.50 +30.33 0.069% 42360912
46 2025-12-30 17:00 USDC→EURC $131.42 +2.25 0.050% 40162330
47 2026-02-25 17:52 USDC→EURC $131.07 +27.11 0.067% 42626316
48 2026-03-03 12:22 USDC→EURC $131.07 −26.74 0.067% 42875588
49 2026-03-12 13:54 USDC→EURC $131.07 −5.33 0.052% 43267152
50 2026-03-15 18:02 USDC→EURC $131.07 −16.38 0.063% 43404213

Notable patterns in top-50

  • Trades #1 & #2 (same block 42621081, Feb 25 14:58): $739 USDC→EURC and $668 EURC→USDC in the same block — two-sided arb or rebalancing bot. #1 paid +40 bps (pool EURC-short, expensive). #2 sold EURC back at −29 bps (pool EURC-heavy, offering discount). Net: bot captured the spread.
  • Trades #3 & #5 (block 42599949, Feb 25 03:14) and #9 & #10 (block 42600066, Feb 25 03:17): Back-to-back block pairs of opposing trades — same arb pattern recurring within minutes.
  • Trades #6 & #8 (Jan 5 15:20, consecutive blocks): $527 EURC→USDC then $446 USDC→EURC one block later.
  • Trade #21 (Jan 29, −141.83 bps): Large favorable slippage — pool significantly imbalanced (EURC-heavy during the Jan 23–30 freeze), AMM offering a discount to restore balance.
  • March cluster (trades #7, #22, #28, #38–#42): Multiple Mar 23 trades between 11:06–11:47 UTC totalling ~$1,300 — consistent arb bot working through pool imbalance.
  • April: Largest April trade was $93.21 (Apr 2) — well below the #50 threshold. April activity is smaller in size, concentrated in the $25–$70 range.
  • Fee range: 0.050%–0.097% across top-50, consistent with mid_fee 0.05% → out_fee 0.10% dynamic fee structure.

5. Rebalancing Cost Analysis

Two distinct cost concepts must not be conflated: the rebalancing cost (xcp budget consumed per price_scale step) and the divergence loss (LP position erosion vs HODL from trading through price cycles). The divergence loss is in section 2's P&L. This section explains both mechanisms.

Updated stats (Nov 10, 2025 → Apr 19, 2026, 4,795 events):

  • 3,977 rebalancing steps out of 4,795 events (83% trigger a price_scale update)
  • Last rebalancing: Apr 13 (price_scale has been frozen for 6 days at time of writing)
  • Current gap: price_oracle 1.17417 vs price_scale 1.16123 → 1.11% — approaching stale state

5a. Rebalancing cost (paid by refuel) vs divergence loss (borne by LP)

Rebalancing cost Divergence loss
What it is Budget consumed to execute each price_scale update step LP portfolio loss relative to HODL from continuous "sell winner, buy loser"
Who bears it Fees first (up to ~50% of gross fee income), then refuel as amplifier LP position automatically
Empirical value ~$67.06 (formula, through Mar 13); continued through Apr 19 $41.93 (through Apr 19, AMM vs HODL before fees)
How measured Formula back-test: TVL × (1 − (1+f₁(r−1))/√r) per step (Pool TVL − gross fees in pool) − HODL value

5b. How rebalancing is funded — the xcp_profit mechanism

(Unchanged from prior analysis — see original section 5b for full derivation)

Key recap:

  • Fee buffer (50% of gross): primary budget — ~$43.14 accumulated through Apr 19
  • Refuel ($39.53 donated, fully exhausted): amplified the budget during the Jan 23–30 freeze
  • Remaining buffer (Apr 19): (xcp_profit − virtual_price) × TVL ≈ $21 (from Mar 31 on-chain read)
  • Post-Apr-9 status: 166 trades earned $3.22 in fees → ~$1.61 new rebalancing buffer. Only 1 rebalancing fired (Apr 13). The 1.11% oracle gap requires a 20%-of-gap step (~$14 IL cost at $10K TVL) — far exceeding the ~$1.61 new buffer. Rebalancing is currently blocked (pool in stale state).

5c. The Jan 23–30 rebalancing freeze (7-day stale state)

Between Jan 23 19:20 UTC and Jan 30 17:41 UTC (6.9 days), the pool executed zero price_scale updates — the longest freeze in the analysis period.

What happened:

  1. Budget exhausted (Jan 23): available budget ~$0.05 after weeks of steady rebalancing.
  2. EUR/USD spiked +2%: price_oracle climbed 1.1758 → 1.1998 (peak Jan 28). Budget failed every rebalancing check.
  3. price_scale frozen at 1.1758: arb bots traded against the stuck pool, rebuilding the fee buffer.
  4. EUR reversed and budget recovered: ~7 days of arb fees restored enough budget ($2.35 by Jan 31).
  5. One large catch-up step on Jan 30: 0.23% jump (230× normal step) — compressing 7 days of frozen drift.
  6. Refuel topped up shortly after; by end of period budget grew to $12, then $21 by Mar 31.

Comparison to current Apr 19 state: The current 1.11% gap is smaller than the Jan peak (2%), but the refuel is exhausted and post-exit volume is much lower (few hundred trades/month vs thousands). Without new volume or a refuel donation, the pool may remain in stale state until the oracle/scale gap narrows organically.


5d. Divergence loss ($41.93) — the LP position cost

As EUR/USD rises, traders arb the pool — the AMM sells EURC (the appreciating asset) and accumulates USDC. When EUR/USD partially reverses, the pool is left USDC-heavy.

Measured empirically through Apr 19:

Divergence loss = (pool TVL − gross fees in pool) − HODL value = (10,103.63 − 64.71) − 10,081.73 = −$42.51

Note: small rounding difference vs −$41.93 above due to fee calculation method.

EUR/USD net change over the full period: +1.55% (1.1562 → 1.1742). The pool sold EURC on the way up; divergence loss reflects the "sell low, then miss the upside" path dependency. Fees of $64.71 in pool more than offset the divergence loss → pool TVL is ahead of HODL by +$23. Including the $42.68 refuel cost paid separately, true LP outcome vs HODL is approximately +$1 (see Refuel account section).


5e. Exact rebalancing cost formula — back-test validation

(From original analysis, data through Mar 13, 2026, 2,977 rebalancing steps)

Formula derivation (high-A limit, A=500,000):

r          = ps_new / ps_old           (price-scale ratio)
f₁         = (eurc × ps_old) / TVL    (EURC share of pool value)
xcp_ratio  = (1 + f₁ × (r − 1)) / √r
cost_usd   = TVL × (1 − xcp_ratio)    (positive = pool loses, negative = gains)

Back-test results (Nov 10, 2025 → Mar 13, 2026, 2,977 rebalancing steps):

Metric High-A formula Exact newton_D
Gross losses (steps where xcp decreases) $68.14
Gross gains (steps where xcp increases) $1.07
Net cost $67.06 $67.03

Monthly breakdown:

Month Steps Net cost Avg f₁ Avg step size
Nov 2025 563 $8.58 0.4993 0.0101%
Dec 2025 699 $10.42 0.4972 0.0099%
Jan 2026 430 $15.81 0.4991 0.0147%
Feb 2026 681 $12.29 0.5009 0.0110%
Mar 2026 604 $19.96 0.5051 0.0145%

January and March had the highest per-step costs — matching the EUR spike (Jan 23–30 freeze) and the sharp EUR reversal in March.

Relationship between the $67 formula result, the $39.53 refuel, the ~$27.53 fee contribution, and the $41.93 divergence loss:

Metric Value What it measures Who pays
Formula net cost $67.06 Total xcp budget consumed by all rebalancing steps (through Mar 13) Fee income + refuel
├─ Fee-funded portion ~$27.53 Up to 50% of gross fee income spent as rebalancing budget LP + DAO (fee earners)
└─ Refuel-funded portion $39.53 Additional budget from donations beyond fee capacity Refuel donor
Divergence loss $41.93 LP value at exit minus HODL (path-net result through Apr 19) LP position automatically

Why $67 ≠ $41.93: The formula accumulates xcp cost in both directions over the price path — every step adds to the total. The divergence loss only reflects the net LP position: EUR went up +4.2% then reversed partially to net +1.55%, so the "upward path cost" is only partially offset by the "downward recovery." The formula's $67 is the path-integral; the divergence loss's $41.93 is the net endpoint result.


5f. Full accounting — every dollar explained (Nov 10, 2025 → Apr 19, 2026)

LP account (started $10,005.30):

Component Amount
EUR/USD +1.55% (HODL rose $75 to $10,081) +$75
Divergence loss (AMM vs HODL, before fees) −$42
Fees in pool (75% of $86.27 gross) +$65
Pool TVL vs start +$98
Pending DAO claim (25% of $86.27) −$22
True LP-owned vs start ~+$76
True LP-owned vs HODL ~+$1

Refuel account (additional $42.68 deployed separately):

Component Amount
Refuel contributed −$42.68
donation_shares remaining $0.00 (fully exhausted)
Net refuel cost −$42.68

Total combined P&L:

Amount
True LP-owned pool value (Apr 19) ~$10,082
donation_shares remaining $0
Total LP-owned value ~$10,082
Total deployed (LP + refuel) $10,047.98
Total net P&L ~+$34

Combined P&L turns positive (+$34) because EUR/USD net appreciation (+$75) exceeds the combined divergence loss (−$42) and refuel cost (−$43).


6. Key Observations

  1. Volume surged in March, moderated in April: 1,510 trades and $53,791 volume in March — the peak month. April (1–19) added 382 trades at $10,696. Total: 4,795 trades, $146,975 volume, $86.27 gross fees through Apr 19.

  2. EUR/USD net +1.55% — pool ahead of HODL, but refuel cost flips the picture: EUR peaked at 1.2044 (Jan 29), fell to 1.1446 (mid-March), recovered to 1.1555 (Mar 31), then continued rising to 1.1742 (Apr 19). Net change: +1.55% vs start. Pool TVL ends $23 ahead of HODL ($10,104 vs $10,081) — fees of $65 cover the $42 pure IL with margin. However, the LP also paid $42.68 in refuel separately. Accounting for that, true LP-owned value ($10,082 after pending DAO claim) vs HODL is approximately +$1 — barely breakeven. Total net P&L including refuel: +$34 (only positive because EUR/USD appreciated +$75 vs start; see Refuel account section).

  3. Second LP episode (Mar 29 → Apr 9, 11 days): New LP deposited $1,259 on Mar 29, withdrew $1,379 on Apr 9 (+$120 profit, mostly EUR appreciation). Total pool TVL temporarily expanded to $11,466 peak.

  4. Pool approaching stale state: price_scale has been frozen since Apr 13. oracle 1.1742 vs scale 1.1612 (1.11% gap). With donation_shares = 0 and only 166 post-exit trades, the rebalancing budget cannot cover the ~$14 IL cost of a 20%-of-gap step at current TVL. The pool continues to trade but uses a stale price reference, widening arb opportunity.

  5. The fee split is 25% LP / 25% DAO / 50% rebalancing buffer — confirmed from deployed Vyper source and on-chain admin_fee. Gross fee APY is 1.94%, LP keeps 0.49% (25%). The other 50% funds rebalancing (xcp_profit buffer), 25% to Curve DAO.

  6. Low slippage throughout: Median 5.68 bps across 4,795 trades. Post-Apr-9 (stale state) median jumped to ~110 bps for the 166 post-exit trades, confirming the pool is offering favorable prices to arb traders to self-correct.


Last updated: 2026-04-21 (extended analysis to Apr 19, 2026; 4,795 trades, $146,975 volume)


7. Who Is Trading — Buyer Address Analysis

The TokenExchange event records buyer = msg.sender at the pool — i.e. the contract that directly called exchange(). All 40 unique buyer addresses across 4,795 trades are smart contracts. Zero EOA direct trades: no wallet or user is interacting with this pool without going through an intermediary.

Summary by type

Type Addresses Trades % Trades Volume % Volume
Unidentified contracts 26 1,610 33.6% $29,253 19.9%
0x Protocol / Matcha (BaseSettler) 4 1,104 23.0% $24,146 16.4%
Arb bot cluster (confirmed) 7 1,829 38.1% $81,158 55.2%
EIP-7702 smart wallets 2 207 4.3% $10,283 7.0%
Curve Router (Sidechain v1.1) 1 45 0.9% $2,136 1.5%
Total 40 4,795 $146,975

Arb bot : natural flow ratio

Natural flow = confirmed non-arb volume: 0x/Matcha BaseSettler (4 contracts, 1,104 trades, $24,146) + Curve Router (1 contract, 45 trades, $2,136) = 5 contracts, 1,149 trades, $26,282.

Metric Arb bots (7) Natural flow (Matcha + Curve Router) Ratio
Addresses 7 5
Trades 1,829 1,149 1.6× more arb than organic
Volume $81,158 $26,282 3.1× more arb than organic
% of total trades 38.1% 24.0%
% of total volume 55.2% 17.9%

Arb bots generate 3.1× the dollar volume of confirmed organic trades. The volume gap is larger than the trade-count gap because bots trade at high frequency with small sizes, while Matcha and Curve Router trades are larger user-initiated swaps. The remaining 18.1% of volume (1,610 unidentified trades, $29,253) is unclassified — likely a mix of additional bots and direct integrations.

Type notes

0x Protocol / Matcha BaseSettler — four separately deployed instances of the same settlement contract, verified on Basescan. Source file BaseTakerSubmittedFlat.sol is a taker-submitted settlement contract provided to ZeroEx Inc. by Euler Labs. Handles routing across Aerodrome, Uniswap v3 forks, and other Base DEXes. The multiple instances likely correspond to different solver deployments or contract upgrades.

EIP-7702 smart wallets — two addresses with only 23 bytes of code (0xef0100<impl_address>): these are EOAs that have set an EIP-7702 code delegation, pointing at a full smart-wallet implementation. In practice they behave as smart contract wallets but are controlled by an EOA private key. The larger one (#8, 205 trades, $9,328) is an active user; the smaller (#30, 2 trades) appears occasional.

Curve Router (Sidechain v1.1) — the official Curve Finance sidechain router (0x4f37...), 45 trades, $2,136. Trades routed via Curve's own UI or integrations that use the canonical router.

Arb bot cluster (7 confirmed, 55.2% of volume) — seven unverified contracts confirmed as atomic arbitrage bots. Six share the same operator EOA profit wallet 0xd2be32db... and route through Uniswap v4. The seventh (0xf4cd829526070c2c0af9e6dce2c9255130f7ec68, the #1 buyer by volume) is a separately operated bot with 21,404 bytes of code, confirmed arb bot — see base_usdc_eurc_arb_bot.md for full bytecode analysis. The confirmed cluster:

# Address Trades Volume Code size
1 0xf4cd829526070c2c0af9e6dce2c9255130f7ec68 842 $34,456 21,404 b Separate operator — see base_usdc_eurc_arb_bot.md
2 0x4e48...e525 527 $25,246 24,533 b 0xd2be32db... cluster
3 0x3100...3e98 130 $5,945 24,407 b 0xd2be32db... cluster
4 0xa7c5...8449 104 $5,845 23,431 b 0xd2be32db... cluster
5 0x31b7...43e9 122 $4,509 24,558 b 0xd2be32db... cluster
6 0x6805...c72 54 $3,059 22,380 b 0xd2be32db... cluster
7 0x493e...d93 50 $2,098 24,105 b 0xd2be32db... cluster

Arb bot confirmation (transaction-receipt analysis)

Methodology revision — the initial detection criterion ("tokens forwarded out in same transaction") was tested against a known control: 0x785648... (confirmed 0x/Matcha BaseSettler aggregator). Matcha also shows 100% same-tx forwarding and the pool as top ERC-20 recipient. This is expected: Matcha receives output tokens from the pool and immediately routes them to the end user — the same structural pattern as an arb bot. Same-tx forwarding does not distinguish arb bots from aggregators.

Correct criterion — the distinguishing signal is a fixed EOA recipient appearing in every transaction. Aggregators serve different end-users each tx, so no single EOA dominates. Arb bots forward profit to a fixed operator wallet in every tx.

Comparison across all >$1K addresses (30-tx sample each):

Address Unique recipients Top non-pool recipient EOA recipients
Matcha #1 (control) 23 30x (contract) none
Matcha #2 (control) 35 30x (contract) 7x (different users)
Matcha #3 (control) 27 30x (contract) 4x (different users)
Matcha #4 (control) 16 30x (contract) 4x (different users)
0x4e48...e525 12 30x EOA 0xd2be32db... 30/30
0x3100...3e98 9 30x EOA 0xd2be32db... 30/30
0xa7c5...8449 12 30x EOA 0xd2be32db... 30/30
0x31b7...43e9 11 30x EOA 0xd2be32db... 30/30
0x6805...c72 11 30x EOA 0xd2be32db... 30/30
0x493e...d93 11 30x EOA 0xd2be32db... 30/30
0xf4cd...ec68 15 30x (contract) 3x only confirmed arb bot (bytecode analysis)
0x9dd8...1dd1 14 30x (contract) 1x × 3 diff. addrs
0x4b19...1189 8 30x (contract) none
0xdf0f...4ef 10 30x (contract) 1x only

Confirmed arb bots: the six cluster contracts (0x4e48, 0x3100, 0xa7c5, 0x31b7, 0x6805, 0x493e) all route to the same operator EOA 0xd2be32dbf454ad8ff57851e9762cac12536ebee4 (0 bytes, pure EOA) in every sampled transaction, and route through 0x498581ff... (Basescan: PoolManager, Uniswap v4). This pattern is impossible for a user-serving aggregator.

Reverted to unidentified: 0x9dd8, 0x4b19, 0xdf0f — recipient patterns are within Matcha's range (10–16 unique, no fixed EOA in every tx). These are likely bots or aggregators of a different type, but the criterion used here cannot confirm them.

Confirmed via bytecode analysis: 0xf4cd829526070c2c0af9e6dce2c9255130f7ec68 — although the fixed-EOA recipient criterion was inconclusive (only 3/30 txs show an EOA, as profits are routed through an intermediate contract), full decompilation of the 21,404-byte code confirms a multi-DEX arbitrage bot with hardcoded profit recipient, whitelisted callers, Base L1+L2 gas accounting, and support for UniV2, UniV3, Curve, 1inch v5/v6, and Ekubo pools. See base_usdc_eurc_arb_bot.md.

The 7 confirmed arb bots account for 1,829 trades (38.1%) and $81,158 (55.2%) of total volume.

Full address table

# Address Trades Volume (USD) Code (bytes) Label
1 0xf4cd829526070c2c0af9e6dce2c9255130f7ec68 842 $34,456 21,404 Arb bot (confirmed — bytecode analysis)
2 0x4e48d4885871b4dd2ea91a2aed9390b8908fe525 527 $25,246 24,533 Arb bot (same operator cluster)
3 0x9dd8625d4b67dd1dc1ca9521fa884bf388151dd1 636 $12,403 2,154
4 0xdc5d8200a030798bc6227240f68b4dd9542686ef 354 $9,583 21,925 0x/Matcha BaseSettler
5 0x4b194f4fc8a9e134906a2992b7e934d3899e1189 574 $9,416 5,626
6 0x8407699e359ae158bd7ec0668600cc19a79f17c3 205 $9,328 23 EIP-7702 smart wallet (EOA)
7 0x785648669b8e90a75a6a8de682258957f9028462 320 $6,285 22,578 0x/Matcha BaseSettler
8 0xea758cac6115309b325c582fd0782d79e3502177 343 $6,193 22,907 0x/Matcha BaseSettler
9 0x3100bf451a887d9bb9307e00ae23d90d06d93e98 130 $5,945 24,407 Arb bot (same operator cluster)
10 0xa7c5a86668c2956b861ee2e6674e1ddb8b728449 104 $5,845 23,431 Arb bot (same operator cluster)
11 0x31b761a1dc1404d291d05bae055b78f99a9243e9 122 $4,509 24,558 Arb bot (same operator cluster)
12 0x68059f0907db8e27a78a75303ebc958907cf3c72 54 $3,059 22,380 Arb bot (same operator cluster)
13 0x4f37a9d177470499a2dd084621020b023fcffc1f 45 $2,136 12,586 Curve Router (Sidechain v1.1)
14 0x493ec3701385ec8c821a81978992be4396479d93 50 $2,098 24,105 Arb bot (same operator cluster)
15 0x49fb9c16b9b2a19452633573603c837673fd7e04 87 $2,086 22,210 0x/Matcha BaseSettler
16 0xdf0ff70b124c3e3d9027d8f83c9cc708ff1354ef 72 $1,902 21,404
17 0x86631c20314a54e6409c9fc61406f6a86780e4cd 2 $954 23 EIP-7702 smart wallet (EOA)
18 0xebe0fa42523f69ea1e97f5b08282654c19c2c0ee 194 $915 23,586
19 0x183f91b34265958fb5fef5b5494c9d517d8adf95 3 $692 11,421
20 0x062ef7fcbd328b92eea2c9124eeae8b4a001d164 16 $582 24,542
21 0xc10ee9031f2a0b84766a86b55a8d90f357910fb4 54 $538 20,486
22 0x36d582f7928aa2d2d81bf905567c5d2334ff5fac 2 $519 20,618
23 0x84e9062b902e5718f925f7b9bbeadd72e90fa54a 2 $384 11,126
24 0xc906d524234355aab1b12894cdfdbd3bac299436 11 $357 23,855
25 0xf0a907ef4209912056de307afb15fe1f40692a29 7 $266 23,986
26 0xf294c8b4d0525645d86676315b93cf654c6fb251 1 $243 20,605
27 0x7747f8d2a76bd6345cc29622a946a929647f2359 11 $208 20,842
28 0x267bcda9087aa71d8a8d5331a2ff7a27e75bc1eb 6 $201 23,483
29 0xff11500b35a3e48a298bcd6139b9a3d9c369537e 4 $185 21,990
30 0x3e419d8c219bea454811145102ca6505ef0aa9d4 2 $107 23,592
31 0x57f324f68ff7991c80d1471ca0ff71b9ca1af7d3 2 $80 22,018
32 0x9fb5d0941fcf704362a546d77f5de315073cbb33 1 $59 3,733
33 0xbaa5419df9dabc6efc31ee41377bc3ec30365b1e 3 $60 23,609
34 0x2779bc3bd93ca20ff67bbcef39f1a3134e46dcbf 1 $48 23,935
35 0x7beaec7ea579c656f4272e409b6bfda9f8ad8941 1 $29 24,287
36 0x2102ab11a3c74b1d543891020969dc3d46c132ab 1 $23 3,309
37 0x012731b48284dba9d18b1c4d38946137aa99888c 1 $20 23,568
38 0xfc049cd98018aae4c33b01a6a41629cfe5a625f1 1 $10 23,758
39 0x7192867d67329800345750f5a281ce1352c3df65 3 $7 24,530
40 0xc57775a3e13c7941eccfbaf740392c650b51453d 1 $3 12,044

Appendix — Charts

Chart 1 — Pool Overview (4 panels)

Four stacked panels covering the full Nov 10, 2025 → Apr 19, 2026 period at 6H resolution:

  • Panel 1 — Trade size (6H median ± IQR + count): The shaded blue band is the interquartile range of trade size per slot; the solid line is the median; the faint bars show trade count per slot. Median trades stayed in the $15–$50 range throughout, with occasional spikes during arb clusters (Feb 25, Mar 23). The brief gap around trade ~1700 corresponds to the Jan 23–30 rebalancing freeze.
  • Panel 2 — TVL (stacked USDC + EURC-in-USD): Blue = USDC balance; green = EURC balance converted to USD. The pool held steady near $10K from November through late March, jumped to ~$11.4K when the second LP deposited on Mar 29, then dropped back to ~$10K when that LP exited Apr 9. The pool composition shifted progressively toward USDC as EUR/USD rose over the period.
  • Panel 3 — Pool imbalance (EURC share of TVL): Oscillates around 50% (balanced) throughout most of the period. Notable dip toward 35–38% EURC-heavy in April (bottom-right pink zone) as EUR rose and the pool accumulated USDC — the pool was selling EURC faster than it was being replaced.
  • Panel 4 — Median trade / TVL ratio (bps): Measures each slot's median trade as a fraction of TVL. Mostly below 0.2%, with spikes during large arb events. The ratio increased slightly after the Apr 9 LP exit as TVL shrank; trade sizes did not shrink proportionally.

Chart 2 — Slippage Strip (chronological)

Every trade plotted in chronological order (x-axis = trade index 1–4,795), slippage in bps on the y-axis. Dot size scales with √trade size. Blue = USDC→EURC (buy EURC), red = EURC→USDC (sell EURC).

  • The tight band around 0 bps throughout Nov–Feb confirms the pool was mostly near balance and efficient.
  • The large red downward spikes around trade ~1900 (Jan 29) correspond to the rebalancing freeze: the pool was USDC-heavy and offering favorable rates to EURC sellers — arb bots collected significant negative slippage (a discount).
  • The far-right cluster (trades ~4600+, April post-exit) shows elevated slippage in both directions as price_scale drifts from the oracle and the pool operates in stale state. Buyers of EURC (blue) pay above oracle; sellers receive below oracle — both signs of a mis-priced pool.

Chart 3 — Slippage vs TVL

Slippage (bps) on the y-axis vs pool TVL at time of trade on the x-axis. Dot size scales with √trade size.

  • The main cluster near $10K TVL spans Nov–Mar28 and Apr9+. Most trades in this range are within ±30 bps, consistent with efficient execution at the pool's typical size.
  • The near-vertical bands of extreme slippage at ~$10,100–$10,200 TVL correspond to the Jan freeze period: pool had slightly higher TVL from accumulated fees, but price_scale was stale, causing large arb slippage.
  • The right cluster near $11,300–$11,450 TVL is the second-LP window (Mar 29 – Apr 8) — the pool was larger and better balanced, with notably tighter slippage bands for both directions.
  • Dashed trend lines (OLS) show USDC→EURC trades (blue) have a slight positive slope — larger TVL correlates with slightly higher positive slippage — while EURC→USDC (red) is flatter.

Chart 4 — Slippage vs Trade Size

Slippage (bps) vs trade size in USD on a log x-axis.

  • Trades below $10 are tightly clustered near 0 bps — tiny trades at the mid-fee rate.
  • As size grows past $50–$100, slippage fans out: large buyers of EURC (blue) increasingly pay positive slippage (pool is pushed out-of-balance), while large sellers (red) increasingly experience negative slippage (favorable arb prices when pool is already EURC-light).
  • The extreme outliers in the $200–$750 range are the identified arb clusters (Feb 25, Jan 29 freeze recovery, Mar 23) where slippage reached ±140–250 bps on the largest trades.
  • Dashed trend lines confirm the size–slippage relationship is directional: USDC→EURC buys get more expensive per dollar as size grows; EURC→USDC sales get cheaper (or more favorable) as pool absorbs the sell pressure.

Chart 5 — Slippage Coloured by Pool Imbalance

Same chronological strip as Chart 2, but dots are coloured by the pool's EURC share at trade time (green = EURC-heavy ≥50%, red = USDC-heavy ≤50%). Circles = buy EURC (USDC→EURC), triangles = sell EURC (EURC→USDC).

  • The strong red colouring around trade ~1900 (Jan freeze) confirms the pool was deeply USDC-heavy when negative slippage (discount for EURC sellers) peaked — arb was correctly identifying and correcting the imbalance.
  • The far-right section (April post-exit) is strongly red/orange: the pool is USDC-heavy (EURC share ~37–38%) as EUR/USD rose without the pool being able to rebalance price_scale. Buyers of EURC pay elevated positive slippage (pool charges more), sellers receive below-oracle prices — both consistent with a stale, USDC-heavy pool.
  • The mid-period (Mar 29 – Apr 8, second LP) shows a balanced green tint: larger TVL and active rebalancing kept the pool near 50/50.

Leave a Reply

Your email address will not be published. Required fields are marked *