From 9bd3d7ed8dfe140ac197d6d834eacb2b5ea245ab Mon Sep 17 00:00:00 2001 From: Cho Young-Hwi Date: Mon, 23 Mar 2026 12:12:12 +0000 Subject: [PATCH 1/2] =?UTF-8?q?[#464]=20Disable=20USDC=20zap=20=E2=80=94?= =?UTF-8?q?=20no=20V4=20pool=20exists=20on=20Base=20mainnet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root cause: The USDC/ETH Uniswap V4 pool with fee=500, tickSpacing=10 is NOT initialized on Base mainnet's PoolManager (0x498581fF718922c3f8e6A244956aF099B2652b2b). Verified via extsload returning zero for the pool ID slot. The V4 Quoter does NOT revert on uninitialized pools — it returns garbage values (e.g. 4 USDC for a trade worth ~$2.7 in ETH), making estimateMint appear valid while actual Router.execute() reverts. MintPad's ZapUniV4MCV2 (0xa2e7BcA51A84Ed635909a8E845d5f66602742A75) has the same issue — its USDC estimates are equally nonsensical. Fix: Remove USDC from SUPPORTED_ZAP_TOKENS in the frontend. ETH and HUNT routes remain functional. Re-enable USDC when a V4 pool is deployed and contract's setUsdcPoolKey() is updated. Fixes #464 Co-Authored-By: Claude Opus 4.6 (1M context) --- lib/contracts/constants.ts | 8 ++++++-- src/app/token/page.tsx | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/contracts/constants.ts b/lib/contracts/constants.ts index f27c06b2..ce7cfb0e 100644 --- a/lib/contracts/constants.ts +++ b/lib/contracts/constants.ts @@ -62,10 +62,14 @@ export const HUNT = "0x37f0c2915CeCC7e977183B8543Fc0864d03E064C" as const; /** ETH represented as address(0) in the Zap contract */ export const ETH_ADDRESS = "0x0000000000000000000000000000000000000000" as const; -/** Supported input tokens for the Zap UI selector */ +/** Supported input tokens for the Zap UI selector. + * USDC disabled: no USDC/ETH Uniswap V4 pool exists on Base mainnet with + * the contract's configured params (fee=500, tickSpacing=10). The V4 Quoter + * returns garbage values for uninitialized pools, making estimates appear + * valid while actual swaps revert. Re-enable when a V4 pool is deployed + * and ZapPlotLinkV2.setUsdcPoolKey() is updated to match. */ export const SUPPORTED_ZAP_TOKENS = [ { symbol: "ETH", address: ETH_ADDRESS as `0x${string}`, decimals: 18 }, - { symbol: "USDC", address: USDC as `0x${string}`, decimals: 6 }, { symbol: "HUNT", address: HUNT as `0x${string}`, decimals: 18 }, ] as const; diff --git a/src/app/token/page.tsx b/src/app/token/page.tsx index a1463f36..93e2d29a 100644 --- a/src/app/token/page.tsx +++ b/src/app/token/page.tsx @@ -126,7 +126,7 @@ export default function TokenPage() {

- Use the Zap — buy story tokens with ETH, USDC, or HUNT and the zap contract handles PLOT conversion automatically. + Use the Zap — buy story tokens with ETH or HUNT and the zap contract handles PLOT conversion automatically.

From 00d4af01b318faa4bc8a96508593c174ad2bb2a7 Mon Sep 17 00:00:00 2001 From: Cho Young-Hwi Date: Mon, 23 Mar 2026 12:40:48 +0000 Subject: [PATCH 2/2] =?UTF-8?q?[#464]=20Fix=20stale=20comment=20=E2=80=94?= =?UTF-8?q?=20pool=20exists,=20encoding=20is=20the=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updates the USDC disable comment to reflect the actual root cause: the multi-hop SWAP_EXACT_IN encoding reverts inside the Router's unlockCallback, not a missing pool. Co-Authored-By: Claude Opus 4.6 (1M context) --- lib/contracts/constants.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/contracts/constants.ts b/lib/contracts/constants.ts index ce7cfb0e..9cafa487 100644 --- a/lib/contracts/constants.ts +++ b/lib/contracts/constants.ts @@ -63,11 +63,11 @@ export const HUNT = "0x37f0c2915CeCC7e977183B8543Fc0864d03E064C" as const; export const ETH_ADDRESS = "0x0000000000000000000000000000000000000000" as const; /** Supported input tokens for the Zap UI selector. - * USDC disabled: no USDC/ETH Uniswap V4 pool exists on Base mainnet with - * the contract's configured params (fee=500, tickSpacing=10). The V4 Quoter - * returns garbage values for uninitialized pools, making estimates appear - * valid while actual swaps revert. Re-enable when a V4 pool is deployed - * and ZapPlotLinkV2.setUsdcPoolKey() is updated to match. */ + * USDC disabled: ZapPlotLinkV2's multi-hop SWAP_EXACT_IN encoding reverts + * inside Universal Router's unlockCallback. The USDC/ETH V4 pool exists, + * but the contract's _executeV4MultiHopSwapExactIn ABI encoding doesn't + * match the deployed Router's expected format. Re-enable after contract + * fix + redeployment (see #464 for full investigation). */ export const SUPPORTED_ZAP_TOKENS = [ { symbol: "ETH", address: ETH_ADDRESS as `0x${string}`, decimals: 18 }, { symbol: "HUNT", address: HUNT as `0x${string}`, decimals: 18 },