Conversation
l3wi
commented
Feb 19, 2026
- fix(cctp): handle MessageExpired (0x1780) on Solana mint with auto re-attestation
- fix(cctp): add CCTP v2 Solana error code mapping with user-friendly messages
- fix(cctp): toast-friendly error messages with specific titles and full log capture
- fix(cctp): add EVM revert reason mapping with toast-friendly error messages
- fix(history): resolve Solana wallet address from ATA when recovering transactions
- feat(bridge): ship multi-page tracking and app-owned rpc pipeline — add /bridge recovery flow, wallet-first transports, and generated metadata hooks
- chore(build): move generated artifacts to ignored .generated dir — switch metadata refresh to prebuild
…-attestation - Parse expirationBlock from CCTP v2 burn message body (byte 368) - Pre-send expiration check before wallet prompt in Solana mint path - Detect 0x1780 error code in Solana transaction simulation failures - Auto-request re-attestation via Iris API when message expires - Poll every 15s for fresh attestation after re-attest request - Show polling state in claim button (spinner + status text) - Unified messageExpired handling for both EVM and Solana paths - Manual re-attest fallback button if auto-reattest fails
…essages - New lib/cctp/solana/errors.ts with full error code → message map for MessageTransmitterV2 and TokenMessengerMinterV2 programs - Explicit simulation before send to capture program logs on failure (SendTransactionError.getLogs() doesn't work for simulation failures) - 0x1779 InvalidMintRecipient: tells user to connect the right wallet - 0x1780 MessageExpired: triggers auto re-attestation - 0x176e InvalidDestinationCaller: connect specific caller wallet - 0x1785 DenylistedAccount: account restricted by Circle - 0x177e/177f FeeExceedsAmount/MaxFee: request re-attestation - All unknown errors still show raw message for debugging - Full simulation logs always printed to console.error for diagnostics
…l log capture
- Shorten all CCTP error userMessages to fit 420px toast (1-2 sentences)
- Add 'title' field to CctpErrorInfo — used as toast title instead of
generic 'Claim failed' (e.g. 'Wrong wallet', 'Fee too high', 'CCTP paused')
- Add 'errorTitle' to MintResult type, thread through useClaimHandler
- Explicit simulateTransaction before send captures full program logs
(.simulationLogs on error object) — always logged to console.error
- 0x1779 InvalidMintRecipient now shows: title='Wrong wallet',
desc='Connect the wallet that was set as recipient when this transfer
was initiated.'
- Unknown errors show 'Error 0x{code}' as title with raw message
…ssages - New lib/cctp/evm/errors.ts with regex-based revert reason → message map - Covers all CCTP v2 EVM revert strings from MessageTransmitterV2, TokenMessengerV2, and TokenMinterV2 contracts - EVM handler now returns errorTitle for specific toast titles (e.g. 'Wrong chain', 'Already claimed', 'Attestation expired') - EVM handler passes attestation nonce for auto re-attestation on expiry - Full error context always logged to console.error (shortMessage, raw) - Matches Solana error handling parity: same flow for expired/claimed/known
…transactions When recovering a transaction via the history modal, mintRecipient from Iris API is the ATA (token account) for Solana destinations, not the user's wallet address. This caused targetAddress to store the ATA, making it impossible to identify the actual recipient. Now: - Derives ATA from connected Solana wallet and compares to mintRecipient - Stores actual wallet pubkey as targetAddress when matched - Shows warning if connected wallet doesn't match the transaction recipient - Prompts user to connect Solana wallet if none connected - Allows 'Add Anyway' to bypass check when needed - Also properly strips zero-padding for EVM recipient addresses
…dd /bridge recovery flow, wallet-first transports, and generated metadata hooks
…itch metadata refresh to prebuild
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
@codex pls take a look |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 785d870956
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
components/bridge-card.tsx
Outdated
| if (executedIntentKeys.has(executeIntentKey)) { | ||
| return; |
There was a problem hiding this comment.
Clear executed intent guard after execution attempts
The execute-intent dedupe uses a module-level Set and returns early when the same key is seen, but that key is only removed in handleBackToNew; the normal success path redirects to /bridge/... without clearing it, and failed starts also leave it set, so revisiting the same execute URL in-session can silently skip handleSend and leave users stuck on the waiting state.
Useful? React with 👍 / 👎.
|
@claude please take a look |
|
@claude review the changes |
…fore claim, tighten RPC/Iris validation, and add regression tests
PR Review: feat/solana altThis is a substantial PR — 10k+ lines covering multi-page tracking, an app-owned RPC pipeline, transaction recovery, structured error mapping, and auto re-attestation. Overall the architecture is solid and well-tested. Below are findings organized by severity. Medium Issues1. Silent failure when
|