Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions docs/DEPLOY_CHECKLIST.md
Original file line number Diff line number Diff line change
Expand Up @@ -1068,10 +1068,13 @@ claim が漏れ ありと判明、6 箇所に拡張):

### 9.6 MAv2 + Kaia defensive UI (実装済)

MAv2 経路は Pimlico Kaia 非対応で早期 throw され、`errorMav2KaiaPolygon` i18n
message で「Polygon / Base / Arbitrum / Optimism 等の他チェーン版をご利用くだ
さい」と案内する (commit `7ee8bc4`、Payment/Tip/Checkout 3 form × ja/en 全カ
バー)。
MAv2 経路は Pimlico Kaia 非対応で早期 throw される (`IncompatibleSmartAccountError`・
i18nKey `errorMav2KaiaPolygon`・commit `7ee8bc4`)。画面は Payment/Tip/Checkout の 3 form とも
`SmartAccountFallback` の banner を出す (/pay・/checkout は「通常決済に切替」・/tip は
「このウォレットではチップを送れません」)。`errorMav2KaiaPolygon` の名前の文 (「Polygon / Base /
Arbitrum / Optimism 等の他チェーン版をご利用ください」) は 3 form の namespace にあったが、画面に
描かれていなかったので消した (2026-11 第 10 回レビュー PR-28a)。i18nKey は error の種類の名前として
コードに残る。

**注意**: HashPort wallet は Kaia 非対応 (Ethereum/Polygon/Base/BNB/Avalanche/
Arbitrum/Aptos のみ) のため、本ガードは現時点で実発火しない defensive 実装。
Expand All @@ -1081,8 +1084,10 @@ Arbitrum/Aptos のみ) のため、本ガードは現時点で実発火しない
- [x] `lib/smartAccount/mav2.ts` chainId 8217/1001 で `errorMav2KaiaPolygon`
i18nKey throw
- [x] i18n message を `messages/{ja,en}.json` の Payment/Tip/Checkout 3
namespace に追加
- [x] `tests/lib/i18nKeys.test.ts` で 6 件全て存在を fence
namespace に追加 → 描かれていなかったので PR-28a で削除 (画面の文は
`SmartAccountFallback` namespace)
- [x] `tests/lib/i18nKeys.test.ts` で 6 件全て存在を fence → PR-28a で
「smart account の error の 7 つの名前の文が messages に無い」の fence に替えた
- [ ] **将来 MAv2+Kaia wallet 出現時**: Sentry
`smart_account.mav2_kaia_rejected` の実発火を観測したら、当該 wallet で
実機 QA + 文言再確認
Expand Down
2 changes: 1 addition & 1 deletion docs/plans/tip-widget-parity-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,7 @@ Tip widget の `params.to` (creator address) は EOA 想定。Kaia chain で USD

- creator が「Kaia で JPYC tip だけ受けたい」というユースケースは現実にあるか? それとも社内 demo only か?
- もし demo only なら chain chooser に注意書きを追加するか
- **推奨**: 注意書き不要 (PaymentForm 側でも Kaia 注意書きはない、`messages/ja.json:235-237` の `errorMav2KaiaPolygon` で UI fallback 済)
- **推奨**: 注意書き不要 (PaymentForm 側でも Kaia 注意書きはない、`messages/ja.json:235-237` の `errorMav2KaiaPolygon` で UI fallback 済 — 追記 2026-11: この文は画面に描かれておらず、第 10 回レビュー PR-28a で消した。画面が出すのは `SmartAccountFallback` の banner)

### Q4. cross-chain crossChain toggle の default ✅ 決定: default true

Expand Down
3 changes: 3 additions & 0 deletions lib/accountDetection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ export async function detectAccountKind(
return { kind: 'unknown', delegateAddress: target };
}

// 名前は i18nKey だが、messages に同じ名前の文は無い (描かれていなかったので 2026-11 の第 10 回レビュー PR-28a で消した)。
// error の種類の名前として使う: 3 フォームは 'errorPristineNoBootstrap' かどうかだけを見て、文は SmartAccountFallback の
// namespace から出す (components/SmartAccountFallbackBanner.tsx)。
export type IncompatibleSmartAccountI18nKey =
| 'errorIncompatibleSmartAccount'
| 'errorMav2Disabled'
Expand Down
21 changes: 0 additions & 21 deletions messages/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -719,13 +719,6 @@
"errorGasCongested": "The network is congested and gas prices are too high. Please try again later.",
"errorGasQuote": "Failed to fetch the gas estimate. Check your network connection and try again.",
"errorMerchantUnderflow": "After deducting gas the merchant would receive 0. Minimum {min} required.",
"errorIncompatibleSmartAccount": "Your wallet is delegated to a Smart Account implementation that OpenPay does not support yet (delegate: {address}). If you are using MetaMask, toggle off \"Smart account\" in Account details to revert to a plain EOA. Or try a different wallet (Rabby / Frame, etc.).",
"errorMav2Disabled": "Payments from wallets backed by Alchemy Modular Account v2 (such as HashPort) are being rolled out gradually. Please try again later.",
"errorMav2KaiaPolygon": "Payments on Kaia are not supported for wallets delegated to Alchemy Modular Account v2. Please use a Polygon / Base / Arbitrum / Optimism payment QR, or try a different wallet.",
"errorMetaMaskKaia": "MetaMask Smart Account is not supported on Kaia yet (MetaMask has not deployed its delegator on Kaia). Toggle off \"Smart account\" in MetaMask Account details to revert to a plain EOA, or try a different wallet.",
"errorPristineNoBootstrap": "This wallet isn't set up for gasless payments yet. You can pay now in standard mode (you pay network gas).",
"errorChainNo7702": "Gasless USDC payments aren't available on this chain yet (its EIP-7702 implementation differs from the standard). You can pay now in standard mode (you pay network gas).",
"errorMetaMaskGaslessUnavailable": "Gasless payments via MetaMask Smart Account are temporarily unavailable (a wallet-side compatibility issue). You can pay now in standard mode (you pay network gas).",
"successTitle": "Payment complete",
"foreignSettlementTitle": "A previous pending payment has completed. This is not the payment on this screen.",
"foreignSettlementBody": "To continue with the payment on this screen, reload the page.",
Expand Down Expand Up @@ -893,8 +886,6 @@
"errorTitle": "Error",
"errorGasCongested": "The network is congested and gas prices are too high. Please try again later.",
"errorGasQuote": "Failed to fetch the gas estimate. Check your network connection and try again.",
"errorIncompatibleSmartAccount": "Your wallet is delegated to a Smart Account implementation that OpenPay does not support yet (delegate: {address}). If you are using MetaMask, toggle off \"Smart account\" in Account details to revert to a plain EOA. Or try a different wallet (Rabby / Frame, etc.).",
"errorMav2Disabled": "Tip sending from wallets backed by Alchemy Modular Account v2 (such as HashPort) is being rolled out gradually. Please try again later.",
"errorAmountPrecision": "Amount can have at most {decimals} decimal places. Trim the digits so the displayed amount matches what is actually sent.",
"errorReverted": "The tip failed on-chain (it was reverted). Check your balance and network, then try again.",
"errorRelayRateLimited": "Too many payments in a short period. Please wait a moment and try again.",
Expand All @@ -903,11 +894,6 @@
"errorRelayGeneric": "Could not complete the gasless transfer. Please try again later.",
"errorRelayFeePaused": "Gasless tips to this creator are currently paused. Please check with the creator.",
"errorRelayStorageUnavailable": "We can't save a payment record on this device, so gasless transfer isn't available (your JPYC didn't move). Check your browser's site data settings, or try another browser.",
"errorMav2KaiaPolygon": "Sending tips on Kaia is not supported for wallets delegated to Alchemy Modular Account v2. Please use a Polygon / Base / Arbitrum / Optimism Tip link, or try a different wallet.",
"errorMetaMaskKaia": "MetaMask Smart Account is not supported on Kaia yet. Toggle off \"Smart account\" in MetaMask Account details, or try a different wallet.",
"errorPristineNoBootstrap": "This wallet isn't set up for gasless payments yet, and tips require gasless mode. Please try a wallet that's already set up for gasless.",
"errorChainNo7702": "Gasless isn't available on this chain yet (its EIP-7702 implementation differs from the standard), and tips require gasless mode. Please use another chain such as Polygon / Base / Arbitrum / Optimism.",
"errorMetaMaskGaslessUnavailable": "Gasless payments via MetaMask Smart Account are temporarily unavailable (a wallet-side compatibility issue). Tips require gasless mode — please try a different wallet that's already set up for gasless.",
"ipRateLimitedTitle": "Temporarily busy",
"ipRateLimitedBody": "Please wait a moment, then retry with the same details. You do not need to sign again.",
"ipRateLimitedBodyWithRetryAfter": "Please wait about {seconds} seconds, then retry with the same details. You do not need to sign again.",
Expand Down Expand Up @@ -1662,14 +1648,7 @@
"errorGasQuote": "Failed to fetch the gas estimate. Check your network connection and try again.",
"errorMerchantUnderflow": "After deducting gas the merchant would receive 0. Minimum {min} required.",
"errorOrderMerchantBelowFloor": "This order can't be paid because the shop would receive less than 1 JPYC.",
"errorIncompatibleSmartAccount": "Your wallet is delegated to a Smart Account implementation that OpenPay does not support yet (delegate: {address}). If you are using MetaMask, toggle off \"Smart account\" in Account details to revert to a plain EOA. Or try a different wallet (Rabby / Frame, etc.).",
"errorMav2Disabled": "Payments from wallets backed by Alchemy Modular Account v2 (such as HashPort) are being rolled out gradually. Please try again later.",
"errorMav2KaiaPolygon": "Checkout on Kaia is not supported for wallets delegated to Alchemy Modular Account v2. Please use a Polygon / Base / Arbitrum / Optimism checkout URL, or try a different wallet.",
"errorReverted": "The payment failed on-chain (it was reverted). Check your balance and network, then try again.",
"errorMetaMaskKaia": "MetaMask Smart Account is not supported on Kaia yet. Toggle off \"Smart account\" in MetaMask Account details, or try a different wallet.",
"errorPristineNoBootstrap": "This wallet isn't set up for gasless payments yet. You can pay now in standard mode (you pay network gas).",
"errorChainNo7702": "Gasless USDC payments aren't available on this chain yet (its EIP-7702 implementation differs from the standard). You can pay now in standard mode (you pay network gas).",
"errorMetaMaskGaslessUnavailable": "Gasless payments via MetaMask Smart Account are temporarily unavailable (a wallet-side compatibility issue). You can pay now in standard mode (you pay network gas).",
"successTitle": "Payment complete",
"successBody": "Thanks for your purchase. The transaction is confirmed on-chain.",
"foreignSettlementTitle": "A previous pending payment has completed. This is not the payment on this screen.",
Expand Down
21 changes: 0 additions & 21 deletions messages/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -719,13 +719,6 @@
"errorGasCongested": "ネットワークが混雑しています。ガス代が高騰しているため、しばらく経ってから再度お試しください。",
"errorGasQuote": "ガス代見積の取得に失敗しました。ネットワーク接続を確認してから再度お試しください。",
"errorMerchantUnderflow": "この金額では gas を引くと店主受取が 0 になります。最低 {min} 必要です。",
"errorIncompatibleSmartAccount": "お使いのウォレットは OpenPay 未対応の Smart Account 実装に委任されています (delegate: {address})。MetaMask の場合は「アカウント詳細 → Smart account」をオフにすると元の EOA に戻せます。または別のウォレット (Rabby / Frame 等) でお試しください。",
"errorMav2Disabled": "現在 HashPort 等の一部ウォレット (Alchemy Modular Account v2) での決済は段階公開中です。少々お待ちください。",
"errorMav2KaiaPolygon": "Kaia チェーン上では Alchemy Modular Account v2 に委任されたウォレットでは決済できません。お手数ですが Polygon / Base / Arbitrum / Optimism 等の他チェーン版 QR をご利用いただくか、別のウォレットでお試しください。",
"errorMetaMaskKaia": "Kaia チェーン上では MetaMask Smart Account には現在対応していません (MetaMask は Kaia への delegator を未 deploy)。MetaMask の場合は「アカウント詳細 → Smart account」をオフにして元の EOA に戻すか、別のウォレットでお試しください。",
"errorPristineNoBootstrap": "このウォレットはまだガスレス決済の準備ができていません。通常決済 (ガス代自己負担) で今すぐ支払えます。",
"errorChainNo7702": "このチェーンでは現在 USDC ガスレス決済に対応していません (このチェーンの EIP-7702 実装が標準と異なるため)。通常決済 (ガス代自己負担) で今すぐ支払えます。",
"errorMetaMaskGaslessUnavailable": "MetaMask Smart Account でのガスレス決済は現在ご利用いただけません (ウォレット側の互換性問題のため一時停止中)。通常決済 (ガス代自己負担) で今すぐ支払えます。",
"successTitle": "決済が完了しました",
"foreignSettlementTitle": "前に確認中だった支払いが完了しました。この画面の支払いではありません。",
"foreignSettlementBody": "この画面の支払いを続けるには、読み込み直してください。",
Expand Down Expand Up @@ -893,8 +886,6 @@
"errorTitle": "エラー",
"errorGasCongested": "ネットワークが混雑しています。ガス代が高騰しているため、しばらく経ってから再度お試しください。",
"errorGasQuote": "ガス代見積の取得に失敗しました。ネットワーク接続を確認してから再度お試しください。",
"errorIncompatibleSmartAccount": "お使いのウォレットは OpenPay 未対応の Smart Account 実装に委任されています (delegate: {address})。MetaMask の場合は「アカウント詳細 → Smart account」をオフにすると元の EOA に戻せます。または別のウォレット (Rabby / Frame 等) でお試しください。",
"errorMav2Disabled": "現在 HashPort 等の一部ウォレット (Alchemy Modular Account v2) でのチップ送信は段階公開中です。少々お待ちください。",
"errorAmountPrecision": "金額の小数点以下は最大 {decimals} 桁までです。表示額と実際の送金額がずれないよう、桁を減らしてください。",
"errorReverted": "チップの送信がネットワーク上で失敗しました (処理が取り消されました)。残高やネットワーク状況を確認のうえ、再度お試しください。",
"errorRelayRateLimited": "短時間に送金が集中しています。少し時間をおいてから、再度お試しください。",
Expand All @@ -903,11 +894,6 @@
"errorRelayGeneric": "ガスレス送金を完了できませんでした。時間をおいて再度お試しください。",
"errorRelayFeePaused": "クリエイターへのガスレス送金は現在停止しています。クリエイターの方にご確認ください。",
"errorRelayStorageUnavailable": "この端末では支払い記録を保存できないため、ガスレス送金は使えません (JPYC は動いていません)。ブラウザの設定 (サイトのデータの保存) を確かめるか、別のブラウザでお試しください。",
"errorMav2KaiaPolygon": "Kaia チェーン上では Alchemy Modular Account v2 に委任されたウォレットからチップを送れません。お手数ですが Polygon / Base / Arbitrum / Optimism 等の他チェーン版 Tip リンクをご利用いただくか、別のウォレットでお試しください。",
"errorMetaMaskKaia": "Kaia チェーン上では MetaMask Smart Account には現在対応していません。MetaMask の「アカウント詳細 → Smart account」をオフにするか、別のウォレットでお試しください。",
"errorPristineNoBootstrap": "このウォレットはまだガスレス決済の準備ができていません。チップにはガスレスモードが必要です。ガスレス対応済みのウォレットでお試しください。",
"errorChainNo7702": "このチェーンでは現在 USDC ガスレスに対応していないため、チップを送れません (このチェーンの EIP-7702 実装が標準と異なるため)。Polygon / Base / Arbitrum / Optimism 等の他チェーンをご利用ください。",
"errorMetaMaskGaslessUnavailable": "MetaMask Smart Account でのガスレス決済は現在ご利用いただけません (ウォレット側の互換性問題のため一時停止中)。チップにはガスレスが必要なため、ガスレス対応済みの別ウォレットでお試しください。",
"ipRateLimitedTitle": "混雑しています",
"ipRateLimitedBody": "しばらくしてから、同じ内容でもう一度お試しください(再署名は不要です)。",
"ipRateLimitedBodyWithRetryAfter": "{seconds}秒ほど待ってから、同じ内容でもう一度お試しください(再署名は不要です)。",
Expand Down Expand Up @@ -1662,14 +1648,7 @@
"errorGasQuote": "ガス代見積の取得に失敗しました。ネットワーク接続を確認してから再度お試しください。",
"errorMerchantUnderflow": "この金額では gas を引くと店主受取が 0 になります。最低 {min} 必要です。",
"errorOrderMerchantBelowFloor": "この注文はお店に届く額が 1 JPYC 未満のため、お支払いできません",
"errorIncompatibleSmartAccount": "お使いのウォレットは OpenPay 未対応の Smart Account 実装に委任されています (delegate: {address})。MetaMask の場合は「アカウント詳細 → Smart account」をオフにすると元の EOA に戻せます。または別のウォレット (Rabby / Frame 等) でお試しください。",
"errorMav2Disabled": "現在 HashPort 等の一部ウォレット (Alchemy Modular Account v2) での決済は段階公開中です。少々お待ちください。",
"errorMav2KaiaPolygon": "Kaia チェーン上では Alchemy Modular Account v2 に委任されたウォレットでチェックアウトできません。お手数ですが Polygon / Base / Arbitrum / Optimism 等の他チェーン版のチェックアウト URL をご利用いただくか、別のウォレットでお試しください。",
"errorReverted": "送金がネットワーク上で失敗しました (処理が取り消されました)。残高やネットワーク状況を確認のうえ、再度お試しください。",
"errorMetaMaskKaia": "Kaia チェーン上では MetaMask Smart Account には現在対応していません。MetaMask の「アカウント詳細 → Smart account」をオフにするか、別のウォレットでお試しください。",
"errorPristineNoBootstrap": "このウォレットはまだガスレス決済の準備ができていません。通常決済 (ガス代自己負担) で今すぐ支払えます。",
"errorChainNo7702": "このチェーンでは現在 USDC ガスレス決済に対応していません (このチェーンの EIP-7702 実装が標準と異なるため)。通常決済 (ガス代自己負担) で今すぐ支払えます。",
"errorMetaMaskGaslessUnavailable": "MetaMask Smart Account でのガスレス決済は現在ご利用いただけません (ウォレット側の互換性問題のため一時停止中)。通常決済 (ガス代自己負担) で今すぐ支払えます。",
"successTitle": "お支払いが完了しました",
"successBody": "ご注文ありがとうございます。決済はオンチェーンで確定しました。",
"foreignSettlementTitle": "前に確認中だった支払いが完了しました。この画面の支払いではありません。",
Expand Down
Loading
Loading