Skip to content

Checkout: remove vestigial HTLC-era references from the CCTP crypto flow #105

Description

@0xdevcollins

Rescoped — the CRITICAL fund-loss bug no longer exists

This issue originally described hardcoded zero-address HTLC params in CryptoPayment.tsx sending funds to the burn address. That code is gone — the crypto checkout has since been rebuilt on Circle CCTP V2:

  • CryptoPayment.tsx calls useCryptoSelectPOST /v1/checkout/:paymentId/select-crypto, which returns server-generated wallet.approve and wallet.burn calldata (the API is the only place that knows the CCTP V2 ABI).
  • The client signs approve(USDC, TokenMessengerV2, amount) then the burn using the addresses/calldata the server provides. Nothing is hardcoded; there is no client-side HTLC param construction.
  • Verified (2026-07): no 0x0000… zero addresses and no htlcAddress / hashlock / timelock construction remain anywhere in apps/checkout.

The fund-loss vulnerability is resolved. Downgraded from CRITICAL/security to a minor cleanup.

Remaining work (minor)

Vestigial HTLC-era references linger and should be purged so the UI matches the CCTP model:

  • apps/checkout/components/ErrorCard.tsx — an HTLC_TIMEOUT error entry
  • apps/checkout/components/ConfirmPageClient.tsx — treats HTLC_TIMEOUT as a terminal status

Replace these with the CCTP flow's real failure modes (attestation timeout, quote expired), then do a one-off end-to-end pass of the crypto checkout on testnet (approve → burn → settle) to confirm.

Acceptance

  • No HTLC_* strings remain in apps/checkout.
  • Crypto checkout approve → burn → settle verified once on testnet.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    frontendFrontend/UI work

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions