coinpayportal: what we found
x402 settle: Solana payments sent as version 1 transactions stay "pending" forever.
Public since 2026-10-28. GitHub issue profullstack/coinpayportal/issues/521 was posted.
Code: profullstack/coinpayportal, their default branch on 2026-10-28. Reported to them: profullstack/coinpayportal/issues/521.
Status: Open: no fix merged yet
Findings
breaks money
x402 settle: Solana payments sent as version 1 transactions stay "pending" forever
src/app/api/x402/settle/route.ts (line 216) posts getTransaction with maxSupportedTransactionVersion: 0. For a version 1 payment the RPC returns an error (-32015) and no result, so the code reaches if (!data.result) return { confirmed: false, txHash, pending: true }, and the payment never leaves pending. src/lib/blockchain/providers.ts (line 797) has the same cap.
Version 1 transactions are a large share of mainnet now (about 40% of non-vote transactions in a block I sampled), so this depends only on which wallet or SDK the payer uses.
src/app/api/x402/settle/route.ts:216src/lib/blockchain/providers.ts:797
getTransaction(<v1 signature>, { maxSupportedTransactionVersion: 0 }) -> error -32015 "Transaction version (1) is not supported by the requesting client"
getTransaction(<v1 signature>, { maxSupportedTransactionVersion: 1 }) -> the transaction (version 1, meta present)Fix: maxSupportedTransactionVersion: 1 in both places, and treat a JSON-RPC error as an error rather than as pending.
What we measured
| What | Result | How | Checked |
|---|---|---|---|
| Reported to them | profullstack/coinpayportal/issues/521, posted 2026-10-28 | https://github.com/profullstack/coinpayportal/issues/521 | Oct 28, 2026, 3:00 PM UTC |
| Status | Open: no fix merged yet | GitHub issue profullstack/coinpayportal#521 | Oct 31, 2026, 1:55 AM UTC |
Tools run on this project
Check it yourself
Every Pulse tool, live on mainnet, starting with tx_version. Paste any signature from this report, or your own.
Toolbox
Pick any tool, change any input, run it on mainnet, and reopen any call to change it and run it again.
Ctrl ↵ runs the tool
Run when code can't find or read a transaction that is on chain, or before relying on code that reads other people's transactions. Read the docs
Response
Run the request to see the live response. The inputs are real mainnet data, so it works as it is.
Your calls 0
Calls you run appear here and stay in this browser. Open one to change its inputs and run it again.