I spent 9 hours across 3 days building a lab on DuskEVM, forking Uniswap V3 Core, running Foundry tests and then opening Remix to trace each swap... by the 18th time I sat there in silence for nearly half an hour.

Pair.sol compiled cleanly, chainId was correct, Router calls worked, at that point I still believed EVM equivalence could preserve the familiar workflow.

then _reserves no longer gave me the old way of debugging.

Hedger holds liquidity depth, view function no longer reads state the way it used to, balanceOf also does not expose enough reserveIn and reserveOut.

I tried pool x = 1,200 and y = 2,400, constant product gives k = x*y = 2,880,000.

put in an input of 120 with a 0.3% fee, the remaining amount is 119.64... the math is elegant, but when the LP share lives inside a Zedger note, having getAmountOut return the correct value is still not enough.

ConfidentialERC20 means permit, approve and allowance all change semantics, SafeCast comes together with HedgedUint256, while swap becomes consuming the old note and then minting a new note.

honestly, I spent more time here than writing Router!

circuit has to prove old note amount - input = new note amount + output, PLONK protects the amount, market maker cannot see sensitive data but view key can still audit it.

so does privacy make the protocol stronger, or does it merely push the difficulty into tooling?

Oracle is even harder.

TWAP needs consistent sampling, but when the sampling object becomes a note commitment and direct read disappears, observability cannot rely on just a few logs.

I still reuse Solidity, Foundry, Remix, but with Pair, Router, Oracle sharing the same arithmetic path for mint, burn, swap, I would rather redesign the state model than try to rescue the old abstraction.

my view is fairly rigid, confidential AMM only matures when privacy and debugging are designed together.

if liquidity can be hidden but developers struggle to prove the state is correct, do you call that progress or merely a different kind of complexity?

#dusk $DUSK @Dusk