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
We shipped the full CCTP V2 customer pay flow in PR #136 — endpoints, BullMQ worker, frontend rewrite, settlement wallet auto-provisioning. The code paths are exercised by unit tests (202 passing) and by curl smokes against the API. What hasn't happened: a real testnet USDC burn → attestation → mint round-trip.
Until that happens, "the crypto flow works" is a promise. This issue closes that gap.
Scope
Two deliverables:
Do the round-trip manually. Burn real testnet USDC on Base Sepolia through the checkout app, watch the worker drive it through PROCESSING → COMPLETED, confirm the USDC lands on the merchant's Stellar testnet address.
Write a runbook at `apps/api/docs/operations/crypto-e2e-smoke.md` so anyone on the team can rerun this in 15 minutes.
Has a USDC trustline already opened (testnet issuer `GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5`)
Mirror address is on `merchant.settlementAddress`
So all you need to do is register a new merchant and the destination side is ready.
Local stack
API on :3333 (`npm run start:api` from repo root)
Checkout on :3003 (`npm run dev:checkout`)
Dashboard on :3001 (`npm run dev:dashboard`)
Postgres + Redis via `docker compose up -d`
`apps/api/.env` has `STELLAR_NETWORK=testnet` and a real `SETTLEMENT_KEY_KEK` (any 32-byte hex)
The test flow
Register a fresh merchant at `http://localhost:3001/signup\` (use a throwaway email like `smoke+$(date +%s)@example.com`)
Confirm the wallet provisioned: `http://localhost:3001/settings\` → "Settlement wallet" card shows green "Settlement active" with a G… address. Copy it.
Worker can't reach Iris OR didn't get enqueued. Check: `/readyz` for circle probe; BullMQ dashboard for the `cctp.observe` queue; `docker logs` for Redis
API log
PROCESSING but never COMPLETED
Forwarder Service didn't broadcast the mint. Could be: hook data malformed (decode it via Stellar Lab), merchant Stellar address has no USDC trustline, Iris reports `forwardTxHash` is null.
API log + Iris response in worker logs
Mint reverts on Stellar
Settlement address has no trustline. Should never happen with the new auto-provisioning, but if it does, check `MerchantSettlementKey` row + Stellar account ops history.
Why
We shipped the full CCTP V2 customer pay flow in PR #136 — endpoints, BullMQ worker, frontend rewrite, settlement wallet auto-provisioning. The code paths are exercised by unit tests (202 passing) and by curl smokes against the API. What hasn't happened: a real testnet USDC burn → attestation → mint round-trip.
Until that happens, "the crypto flow works" is a promise. This issue closes that gap.
Scope
Two deliverables:
What you need before you start
Source side (customer wallet)
Destination side (merchant settlement wallet)
Local stack
The test flow
Where it'll probably break (and how to debug)
Runbook deliverable
Write `apps/api/docs/operations/crypto-e2e-smoke.md` with:
Acceptance criteria
Estimated effort
~0.5 day if the stack is up and faucets cooperate. Could blow up to 1 day if you hit a real bug — but finding bugs is the point.