Misquote
the venue report loaded.

Where PancakeSwap is not Uniswap

The cores are the same source. Everything below is a place they diverge, and each one is a defect this project hit before it was a paragraph.

The math is Uniswap's

PancakeSwap v3 forks Uniswap v3, so the tick and liquidity libraries are the same source. That is what makes a differential corpus meaningful rather than circular.

Upstream libraries, at the commits they were recorded from
LibraryCommitPinned
forge-std467ffd422ca02026-08-10
v3-cored0831dc6b8a32026-04-30
v3-periphery0682387198a22024-07-25

19,546 recorded answers across 9 functions, replayed at exact integer equality — no tolerance anywhere. What was recorded, and whether it still holds →

Where it is not

Each row cost something before it was written down. The last column is what catches it now.

The protocol takes 34% of every fee, by default

Uniswap v3

protocol fee off unless governance turns it on

PancakeSwap v3

slot0.feeProtocol packs (fee0, fee1); this pool reads 3400, so LPs keep 66%

Reconstructing fees from swap volume — the natural way to write a replay engine — overstates LP earnings by 1.515x, and that error lands on the headline APR.

P-1, P-8: no constant is right for both of our pools

Pools are deployed by a separate PancakeV3PoolDeployer

Uniswap v3

CREATE2 from the factory, address derivable offline

PancakeSwap v3

a different init-code hash, so Uniswap's computeAddress constants are wrong

Deriving a pool address offline produces a plausible address that is not the pool. Resolve through factory.getPool(), always.

P-6

The callbacks are renamed

Uniswap v3

uniswapV3MintCallback

PancakeSwap v3

pancakeV3MintCallback

A direct pool call built against the Uniswap ABI reverts. Everything here goes through the position manager instead, never the pool.

P-6

The router keeps deadline inside the params struct

Uniswap v3

SwapRouter02 dropped it from the struct

PancakeSwap v3

it is still a member, so the calldata shape differs

The wrong shape costs 23,000 gas and reverts with empty data, which looks like nothing at all. Check the selector, not the documentation.

P-6

There is no 3000 fee tier, and so no spacing of 60

Uniswap v3

3000 -> 60 is the most-used tier

PancakeSwap v3

100 -> 1 · 500 -> 10 · 2500 -> 50 · 10000 -> 200

A width copied from a Uniswap example assumes a spacing that does not exist. And MIN_TICK is not a multiple of any of these — 887272 % 10 = 2 — so clamping a bound to the extreme yields a tick the pool refuses and the mint reverts.

P-6, V-10

The Swap event is not Uniswap's

Uniswap v3

seven parameters; topic0 0xc42079f9…

PancakeSwap v3

nine — it carries protocolFeesToken0 and protocolFeesToken1; topic0 0x19b47279…

Filtering on the Uniswap signature returns zero logs from a pool doing millions in volume. The two extra fields are also why the accountant reads the protocol's actual take per swap rather than modelling it.

P-1

The pool charges one fee. The LP is not paid all of it, and a replay written from Uniswap v3’s documentation has no reason to know that.

the LP receives 66.0% — feeProtocol 3,400the protocol takes 34.0%

1.515× — how much a replay that reconstructs fees from swap volume overstates what a position earned, and it lands on the headline return.

The pools we actually read

One DEX, and no constant is right for all of them — which is why every field below is read rather than defaulted.

Every pool this project has read, and where they differ
PoolFee tier · spacingLPs keep · checked
PancakeSwap v3 WBNB/USDT 0.05%500 · 1066.0% — feeProtocol 3400 · 9 checks passed
PancakeSwap v3 WBNB/USDT 0.25%2500 · 5068.0% — feeProtocol 3200 · 9 checks passed
PancakeSwap v3 TSLAx/USDT 0.25%2500 · 5068.0% — feeProtocol 3200 · 9 checks passed
PancakeSwap v3 WBNB/BUSD 0.05% (chapel mirror)500 · 1066.0% — feeProtocol 3400 · not checked — /vetting reads chain 56

0x3669…2050 · 0x1401…15D2 · 0x5E12…d492 · 0xEF15…d11d · 3 of 4 through the 9 checks →

Fee tiers here, and the one that is not.

  • 1001
  • 50010
  • 250050
  • 10000200
  • 3000→60

The dashed one is Uniswap v3’s most-used tier, and it does not exist here. A position sized for it has 2 ticks of remainder that cannot be minted at any spacing this venue offers.

Which pool, and how wide

Measured over the indexed tape, as ranges rather than a ranking — two widths whose bands overlap have not been shown to differ.

What the ladder covered
MetricValueNote
Pools examined33 carry a due-diligence badge
Ranked21 refused for want of evidence
Widths measured7±40 to ±800 ticks, per unit of capital

PancakeSwap v3 WBNB/USDT 0.05%

+/-80 ticks leads at the median, but its P25-P75 band overlaps +/-130 — not separated at this sample size

Fee APR by width, net of the convexity cost, per unit of capital in WBNB
WidthP25 – P75Median · windows
±40 ticks8.5% – 30.9%15.5% · 20 windows
±80 ticks12.7% – 28.2%17.0% · 20 windows · leads
±130 ticks10.1% – 23.2%16.3% · 20 windows
±200 ticks9.0% – 19.8%15.6% · 20 windows
±244 ticks9.8% – 17.9%14.8% · 20 windows
±400 ticks11.9% – 17.8%13.4% · 20 windows
±800 ticks7.3% – 11.5%10.7% · 20 windows

PancakeSwap v3 WBNB/USDT 0.25%

+/-400 ticks leads at the median, but its P25-P75 band overlaps +/-244 — not separated at this sample size

Fee APR by width, net of the convexity cost, per unit of capital in WBNB
WidthP25 – P75Median · windows
±40 ticks-1586.1% – 9.5%2.8% · 20 windows
±80 ticks-1592.6% – 16.5%7.1% · 20 windows
±130 ticks-1571.7% – 17.7%9.8% · 20 windows
±200 ticks-1380.2% – 16.5%12.2% · 20 windows
±244 ticks-1290.0% – 15.4%12.4% · 20 windows
±400 ticks-1015.6% – 16.3%13.8% · 20 windows · leads
±800 ticks-558.1% – 11.8%10.8% · 20 windows

A P25 below −100% is an annualised rate, not a realized loss — one bad day scaled to a year lands in the hundreds.

PancakeSwap v3 TSLAx/USDT 0.25%

no width has enough evidence on this pool

No width on the ladder cleared the evidence floor on this pool, so there is no answer here rather than a small number. It saw 85 swaps across the whole tape.

Where the depth already there is being paid thinly — which is where adding liquidity would improve the venue rather than dilute it.

Fee income per unit of liquidity, against the pool that saw the most volume
PoolPer unit of liquidityDepth · flow
PancakeSwap v3 WBNB/USDT 0.05%the busiest poolmedian depth 1,292,700,124,451,397,500,000,000 · 163,090 WBNB over 252,923 swaps, 5,712 of which moved the tick
PancakeSwap v3 WBNB/USDT 0.25%3.4× itmedian depth 15,390,901,016,687,716,000,000 · 1,288 WBNB over 14,016 swaps, 729 of which moved the tick
PancakeSwap v3 TSLAx/USDT 0.25%4.0× itmedian depth 1,576,166,738,998,165,200 · 0 TSLAx over 85 swaps, 80 of which moved the tick

Hold a position in a pool that is not listed? Ask directly — the answer tells you whether it was unverified or simply unrankable.