You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
USDC zap mint still reverts on mainnet despite multiple fix attempts. The estimateMint() call works but the actual mint() tx reverts with ZapPlotLink__SlippageExceeded(). The root cause is in the contract's USDC→ETH→PLOT multi-hop flow — the BOND.mint(storylineToken, ...) call fails after the Uniswap swap.
This is NOT a liquidity issue — pool was seeded with additional liquidity and estimates return valid amounts. The error comes from the try BOND.mint(...) catch { revert SlippageExceeded } block.
Study MintPad's deployed ZapUniV4MCV2 contract source code:
Read the verified source on Basescan: 0xa2e7BcA51A84Ed635909a8E845d5f66602742A75
Find successful USDC→HUNT child token mint txs on Basescan and trace the execution
Compare MintPad's mint() function flow vs our ZapPlotLinkV2's — specifically:
How does MintPad handle getReserveForToken return values? (Does it include royalty or not?)
How does MintPad call BOND.mint — what is the maxReserveAmount parameter?
Does MintPad do the swap THEN mint, or is the ordering different?
How does MintPad handle the PLOT balance after swap — does it check actual balance vs estimated?
Rewrite our USDC mint flow to exactly match MintPad's proven pattern
Redeploy and test with a real USDC trade
Key suspicion
The comment says getReserveForToken returns (reserveAmount, royalty) where reserveAmount already includes royalty — verify this is actually true. If reserveAmount does NOT include royalty, then plotRequired is too low, the swap gets insufficient PLOT, and BOND.mint fails because it needs reserveAmount + royalty.
Summary
USDC zap mint still reverts on mainnet despite multiple fix attempts. The
estimateMint()call works but the actualmint()tx reverts withZapPlotLink__SlippageExceeded(). The root cause is in the contract's USDC→ETH→PLOT multi-hop flow — theBOND.mint(storylineToken, ...)call fails after the Uniswap swap.This is NOT a liquidity issue — pool was seeded with additional liquidity and estimates return valid amounts. The error comes from the
try BOND.mint(...) catch { revert SlippageExceeded }block.Failed tx
0x5c6fbbe55b0e7744a70d75ba2dc2ba273b14082ca7c4792d9cbec2ddba0473e5mint(USDC, 0x25617...7c379, 2000 tokens, maxUSDC=8338)ZapPlotLink__SlippageExceeded()at theBOND.mintstagePrevious fix attempts (all insufficient)
What to do
Study MintPad's deployed ZapUniV4MCV2 contract source code:
0xa2e7BcA51A84Ed635909a8E845d5f66602742A75mint()function flow vs our ZapPlotLinkV2's — specifically:getReserveForTokenreturn values? (Does it include royalty or not?)BOND.mint— what is themaxReserveAmountparameter?Key suspicion
The comment says
getReserveForToken returns (reserveAmount, royalty) where reserveAmount already includes royalty— verify this is actually true. IfreserveAmountdoes NOT include royalty, thenplotRequiredis too low, the swap gets insufficient PLOT, andBOND.mintfails because it needsreserveAmount + royalty.Contract references
0x952606df750C01e0a12458C3F814598B94AD5C5f(source:plotlink-contracts/src/ZapPlotLinkV2.sol)0xa2e7BcA51A84Ed635909a8E845d5f66602742A75(verified on Basescan)0xc5a076cad94176c2996B32d8466Be1cE757FAa270xF8A2C39111FCEB9C950aAf28A9E34EBaD99b85C1After fix
ZAP_PLOTLINKinlib/contracts/constants.tsAcceptance Criteria
Branch
task/470-usdc-zap-final-fixin plotlink-contracts repo (+ plotlink for constants)