EURC/USDC Curve Pool (Base) — Analysis Report
Pool: 0x1c53971800c111a32b7889177c56e3488cfe0be0 (Twocrypto-NG, Base chain)
coins[0]= USDC (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, 6 decimals)coins[1]= EURC (0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42, 6 decimals)price_scale/price_oracle= USDC per EURC (~1.15–1.19, meaning 1 EURC ≈ 1.15–1.19 USD)- Pool seeded by
0x48Ac5e02...cBbFdc8C7with ~$5,000 USDC + ~$4,329 EURC (~$10K TVL)
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 × 10000sold_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_scalehas 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:
- Budget exhausted (Jan 23): available budget ~$0.05 after weeks of steady rebalancing.
- EUR/USD spiked +2%:
price_oracleclimbed 1.1758 → 1.1998 (peak Jan 28). Budget failed every rebalancing check. price_scalefrozen at 1.1758: arb bots traded against the stuck pool, rebuilding the fee buffer.- EUR reversed and budget recovered: ~7 days of arb fees restored enough budget ($2.35 by Jan 31).
- One large catch-up step on Jan 30: 0.23% jump (230× normal step) — compressing 7 days of frozen drift.
- 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
-
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.
-
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).
-
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.
-
Pool approaching stale state:
price_scalehas 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. -
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. -
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
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_scaledrifts 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_scalewas 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.
