Skip to content
Finance Lessons

Cross-Chain Arbitrage & Bridge MEV

Inventory & Rebalancing

Why cross-chain arb pre-positions capital on both chains, how same-direction flow drains one inventory to zero, and how rebalancing cost and idle capital cap capacity.

12 min Updated Jun 20, 2026

Atomic on-chain arbitrage has a beautiful cheat code: the flash loan. You borrow a million dollars, do the trade, and repay it inside a single transaction — if any step fails, the whole thing reverts and you never needed the capital at all. Cross-chain arb does not get that toy. There is no flash loan that reaches across chains, because a transaction on Chain A cannot atomically wrap a transaction on Chain B. The money has to be yours, and it has to already be sitting on both chains before the opportunity shows up.

That single fact — capital must be pre-positioned, finite, and idle — is the whole economic story of this lesson. It turns a strategy that looks like free money per trade into a capital-intensive business with a return-on-capital problem.

Why you must pre-position on both sides

Picture a currency-exchange kiosk at an airport. To serve a tourist who wants euros for dollars, the kiosk must keep both dollars and euros in the till. It cannot conjure euros the instant a tourist walks up — if the euro drawer is empty, the deal simply doesn’t happen, no matter how good the rate is. Cross-chain arb is exactly this kiosk, run across two blockchains.

Before you read — take a guess

ETH trades at $2000 on Chain A and $2020 on Chain B. To buy cheap on A and deliver on B and fill BOTH legs promptly, what must already be sitting where, before the gap appears?

Definition. Inventory is the working capital you hold on each chain so you can fill a leg the moment a price gap opens. For our canonical setup you hold the buy-side currency (USDC) and the sell-side asset (ETH) on each chain, so you’re ready to trade in either direction:

Capital locked=InventoryA+InventoryB\text{Capital locked} = \text{Inventory}_A + \text{Inventory}_B

Worked example. You pre-position $2,000,000 of working capital on Chain A and $2,000,000 on Chain B. Total capital committed:

2,000,000+2,000,000=4,000,0002{,}000{,}000 + 2{,}000{,}000 = 4{,}000{,}000

That’s $4,000,000 parked across two chains before you’ve made a single dollar of profit, just so both kiosk drawers are stocked.

Warning:

The flash-loan reflex

The atomic-arb instinct is “I’ll borrow the capital, trade, repay — zero inventory risk.” That reflex is wrong across chains. There is no cross-chain flash loan: the buy executes on A and the sell finalizes on B in separate transactions, so nothing can wrap and unwind them together. The capital is yours, it’s exposed during the settlement window, and it must be there first.

Fill in the contrast between atomic and cross-chain arb.

Choose the correct option for each blank and check.

Atomic on-chain arb can be because a funds the whole trade inside one transaction. Cross-chain arb is because the inventory must be on both chains.

When it matters

Pre-positioning matters the instant you size a cross-chain strategy. If you budget like an atomic arber — “I only need gas, the flash loan does the rest” — you’ll model a capacity that doesn’t exist. The real question isn’t “how big is the gap?” but “how much inventory am I willing to lock on each chain, idle, to chase it?”

Same-direction flow drains one side

Now suppose the mispricing is persistent: ETH is reliably cheaper on A than on B, so every trade is “buy on A, deliver on B.” Back at the kiosk: every customer hands you dollars and wants euros. Your euro drawer empties, your dollar drawer overflows, and eventually you’re out of euros and have to close the window — even though customers are still lining up.

Before you read — take a guess

You keep doing the SAME trade — buy on A, sell on B — over and over. What happens to your two inventories?

Drag the slider below until one side hits zero. This is the whole pitfall in one picture: push net flow toward “sell on B” and watch the B drawer drain while A overflows. When B hits zero you’ve hit capacity for this cycle — the gap can stay wide open and you still can’t trade.

Pre-positioned inventory drains as you arbBoth sides stocked
Chain A inventory
1,000
Chain B inventory
1,000
Total capital locked
2,000
Rebalance cost to recenter
0

Each cross-chain arb delivers to one chain and piles up on the other, so same-direction trades drain one inventory toward zero. Hit zero and your throughput is capped — not by the opportunity, but by your stock. To keep going you must rebridge inventory back (a fee, plus settlement time), and the whole time your total capital sits locked on both chains earning nothing. That capital drag is the opposite of capital-light atomic arb, where a flash loan funds the trade for free inside one transaction.

Definition. Same-direction (one-way) flow is a sequence of arbs that all consume the same chain’s inventory. Each trade subtracts your trade size from the depleting side:

InventoryB(n)=InventoryB(0)n×s\text{Inventory}_B^{(n)} = \text{Inventory}_B^{(0)} - n \times s

where ss is the per-trade size and nn the number of trades. Inventory hits zero when n=InventoryB(0)/sn = \text{Inventory}_B^{(0)} / s.

Worked example. You start with $2,000,000 on B and trade $200,000 of ETH per arb:

n=2,000,000200,000=10n = \frac{2{,}000{,}000}{200{,}000} = 10

You get about 10 trades before B is exhausted and the window slams shut — regardless of how many more juicy gaps appear in block 11.

Warning:

“The opportunity is infinite, so I'll just keep trading”

The gap may be persistent, but your inventory is not. Each fill is a withdrawal from a finite drawer. Treating a recurring opportunity as recurring capacity is how desks discover, mid-session, that they’re out of B-side asset with the spread still glowing on screen. Opportunity is a flow; inventory is a stock — and the stock runs dry.

You start with $1,500,000 of deliverable inventory on B and trade $250,000 per arb in the same direction. How many trades before B is empty?

When it matters

It matters the moment your flow stops being two-directional. A market that oscillates (cheap on A, then cheap on B, then back) self-rebalances for free. A market with a structural one-way lean — one chain that’s persistently the buy side — drains you steadily and forces paid rebalancing. Know which regime you’re in before you commit inventory.

Capacity is capped by inventory, not opportunity

Here’s the line that should be tattooed on every cross-chain desk: throughput per cycle is set by your inventory on the depleting side, divided by your trade size — full stop. The size, frequency, and lusciousness of the gap don’t enter the formula. You already met this shape in the prerequisite course as the AMM-depth ceiling: pool depth capped how much you could trade before slippage ate the edge. Same idea, new bottleneck — now it’s your own capital that’s the depth.

Before you read — take a guess

What primarily caps how many cross-chain arbs you can fill in one cycle (before rebalancing)?

Definition / formula. Cycle capacity is the number of arbs fundable before you must rebalance:

Capacity=Inventorydepletings\text{Capacity} = \frac{\text{Inventory}_\text{depleting}}{s}

Bigger inventory buys more trades per cycle — but it also locks more capital. The dial that turns up capacity is capital, and capital is never free.

Depleting-side inventoryTrade size ssTrades per cycleCapital locked (both sides)
$1,000,000$200,0005$2,000,000
$2,000,000$200,00010$4,000,000
$4,000,000$200,00020$8,000,000
$2,000,000$100,00020$4,000,000

Worked example. Doubling depleting-side inventory from $2,000,000 to $4,000,000 (at ss = $200,000) doubles trades per cycle from 10 to 20 — but it also doubles total capital locked to $8,000,000. You bought throughput with capital, one-for-one.

Sort each factor by whether it changes your per-cycle TRADE COUNT or only your PROFIT PER TRADE.

Place each item in the right group.

  • Trade size s
  • How much capital you pre-position
  • Depleting-side inventory size
  • Net edge after fees and drift
  • Width of the price gap (e.g. 1% vs 2%)
Warning:

Confusing a fat gap with high capacity

A 2% gap is twice as profitable per trade as a 1% gap — but it does not let you do more trades. If your inventory funds 10 fills, it funds 10 fills whether each one nets 0.7% or 1.4%. Sizing your strategy off the gap’s width instead of your inventory’s depth is how you promise a backer throughput you physically cannot deliver.

When it matters

Capacity-as-inventory matters whenever you’re forecasting volume or pitching size. “We can capture this all day” is only true up to inventory ÷ trade size trades — after that you’re idle until a (costly, slow) rebalance. Forecast in cycles, not in opportunities.

Rebalancing cost & time

So B is empty and A is overflowing. To reopen the window you must rebalance: rebridge inventory from the full side back to the empty side. That costs the bridge fee, and — because this is itself a cross-chain transfer — it eats the settlement/finality wait too. While the capital is in transit it is unusable: not trading, not earning, just floating between chains like luggage on a delayed flight.

Before you read — take a guess

Rebalancing inventory from the full chain back to the empty one costs you which TWO things?

Definition / formula. The rebalancing fee is the bridge rate times the amount moved; amortized per trade it’s that fee spread across the trades the rebalance re-enables:

Rebalance fee=r×M,Net per trade=gr×Mn\text{Rebalance fee} = r \times M, \qquad \text{Net per trade} = g - \frac{r \times M}{n}

where rr is the bridge rate (5 bps here), MM the amount rebridged, gg the gross spread captured per trade, and nn the trades the rebalance unlocks.

Worked example. You rebridge $1,000,000 back to B at a 0.05% bridge fee:

0.0005×1,000,000=500,i.e. $5000.0005 \times 1{,}000{,}000 = 500, \quad \text{i.e. } \$500

plus roughly 4 minutes of downtime while that $1,000,000 settles (no trading on those funds meanwhile). That $1,000,000 refills 5 trades of $200,000. Amortized, the rebalance costs:

5005=100,i.e. $100 per trade\frac{500}{5} = 100, \quad \text{i.e. } \$100 \text{ per trade}

On a $200,000 trade, $100 is 5 bps of drag — small if you rebalance rarely, but a recurring tax that grows the more often you have to do it. Rebalance after every 2 trades instead of every 5 and the per-trade tax climbs sharply.

Trades unlocked per rebalance, nnRebalance feeAmortized cost per tradeAs bps of a $200k trade
10$500$502.5 bps
5$500$1005 bps
2$500$25012.5 bps
Warning:

Sizing the strategy as if rebalancing were free

A back-of-envelope that counts only gross spread per trade and ignores the rebalancing tax is the classic trap. A strategy that looks like +0.7% per fill can go net-negative once you amortize $500-a-pop rebalances over too few trades — especially in a structurally one-way market where you rebalance constantly. Always net the amortized rebalance cost out of the edge before declaring victory.

Gross edge is 0.7% on a $200,000 trade ($1,400). A rebalance costs $500 and unlocks just 2 trades. What's the NET edge per trade after amortizing the rebalance?

When it matters

Rebalancing cost matters most exactly when the opportunity looks best: a strong, persistent one-way gap. The stronger the lean, the faster you drain, the more often you rebalance, and the heavier the amortized tax. Net it in before scaling, not after.

The capital drag (return on capital)

Now the honest part — the part that turns a trader’s grin into an accountant’s frown. You’ve locked $4,000,000 across two chains. That capital is idle: it isn’t earning staking rewards or lending yield; it’s sitting in drawers waiting for tourists. The right scorecard for cross-chain arb is therefore not profit per trade. It’s return on capital (ROC): net profit per period divided by the capital you tied up to earn it.

Before you read — take a guess

Which metric honestly captures whether a cross-chain arb is worth running?

Definition / formula. Return on capital over a period:

ROC=net profit in periodcapital locked\text{ROC} = \frac{\text{net profit in period}}{\text{capital locked}}

And the opportunity cost is the yield that same capital would earn elsewhere (staking/lending) — the benchmark your arb must beat.

Worked example. One cycle: ~10 trades, each $200,000 at ~0.7% net edge (our clean post-fee, post-drift assumption from the prior lessons):

10×200,000×0.007=14,00010 \times 200{,}000 \times 0.007 = 14{,}000

So $14,000 per cycle on $4,000,000 locked — a per-cycle ROC of 14,000/4,000,000=0.35%14{,}000 / 4{,}000{,}000 = 0.35\%. Now annualize and benchmark. Suppose a cycle (drain + rebalance + redeploy) takes about a day; very roughly 250 trading cycles a year gives:

250×14,000=3,500,0003,500,0004,000,00087.5%250 \times 14{,}000 = 3{,}500{,}000 \quad\Rightarrow\quad \frac{3{,}500{,}000}{4{,}000{,}000} \approx 87.5\%

That looks fantastic — but it assumes a fresh, full cycle every day with no idle gaps and rebalancing already netted out. Thin the gap, add downtime, rebalance more often, and that number falls fast. The discipline is: compare whatever you actually clear against simply lending the $4,000,000 at, say, 5% ($200,000/yr risk-light). If your honest, rebalancing-and-downtime-adjusted arb nets less than $200,000 a year, you’d have been richer — and calmer — just lending the capital.

Match each quantity to what it measures.

Pick a term, then click its definition.

Warning:

A headline-positive arb that loses to a savings rate

This is the punchline of the whole lesson. A strategy can show a positive number on every single trade and still be the wrong use of capital — because $4,000,000 lent at 5% yields $200,000/yr for almost no work, while your arb, after rebalancing and idle-time drag, might clear less. Cross-chain arb is capital-intensive — the polar opposite of capital-light atomic arb, where a flash loan meant your own ROC denominator was nearly zero. Here the denominator is the strategy.

Info:

Why does atomic arb dodge all of this?

Because the flash loan makes the capital-locked denominator nearly zero. You borrow, trade, and repay atomically — almost no inventory pre-positioned, no drain, no rebalancing, no idle drag. ROC explodes because you risked almost no capital of your own. Cross-chain arb can’t borrow across the gap, so the capital is real, idle, and the dominant cost. Same arbitrage idea, completely different economics.

When it matters

ROC matters at the only moment that counts: deciding whether to run the strategy at all, and at what size. A backer doesn’t care that each trade was green; they care whether their $4,000,000 beat the boring alternative. Lead with ROC, net of rebalancing and downtime — and be honest about the cycles you’ll actually complete, not the ones you could in a frictionless dream.

Recap

Big picture

Inventory & rebalancing

  • Inventory & rebalancing
    • Pre-position both sides
      • No cross-chain flash loan
      • Hold buy-side & sell-side on each chain
      • Capital is yours, idle, exposed
    • Same-direction drain
      • One-way flow empties one side
      • Inventory is a finite stock, not a faucet
    • Capacity = inventory
      • Trades/cycle = inventory ÷ trade size
      • Gap width sets profit, not count
      • Cross-chain analogue of AMM-depth ceiling
    • Rebalancing cost & time
      • Bridge fee + finality downtime
      • Amortize fee across trades unlocked
      • Frequent rebalancing rivals the edge
    • Capital drag / ROC
      • ROC = net profit ÷ capital locked
      • Opportunity cost vs. lending the capital
      • Capital-intensive, unlike atomic arb
The capital story of cross-chain arb, from pre-positioning to return on capital.

Inventory & rebalancing — mixed recap

Question 1 of 80 correct

Why can't cross-chain arb use a flash loan to avoid pre-positioning inventory?

Check your answer to continue.

Mark lesson as complete