Reports

x402scan: what we found

Solana channel sync fails for the whole batch when one payout is a version 1 transaction.

Public since 2026-10-30. GitHub issue Merit-Systems/x402scan/issues/1320 was posted.

Code: Merit-Systems/x402scan, their default branch on 2026-10-30. Reported to them: Merit-Systems/x402scan/issues/1320.

Status: Open: no fix merged yet

Findings

breaks money

Solana channel sync fails for the whole batch when one payout is a version 1 transaction

sync/transfers/trigger/chains/solana/bitquery-channels/query.ts (line 102) fetches the candidate payouts with connection.getParsedTransactions(chunk, { maxSupportedTransactionVersion: 0 }). @solana/web3.js throws for the whole batch if any one entry comes back as an error, so a single version 1 payout makes transformResponse throw and none of the channel payouts in that Bitquery response get recorded on that run.

This already happens on the payment-channels program. Of the last 200 successful transactions on CHNLxYvVA28MJP9PrFuDXccuoGXAx7jBacfLEkahyGsX, 2 are version 1, for example a payout from a now-closed channel vault (6LKxx951yhF9J2jxgduUuwaG7xFUyZvuRJGvfiYPwbxh) paying 0.001 USDC to each of two recipients: 2SmL3M6ucn5vxSwc2nFGE37YBP2HVxaKDksY7qpkNeYQKpipYApVBnbjVgwhvufqg4ZZRYDqjdFPuT8WyXfF7GkS (slot 462245428). Its sender account is closed, so findChannelSenders keeps it as a candidate and it goes into the batch.

Version 1 transactions are a large share of mainnet now (127 of 288 non-vote transactions, about 44%, in a block I sampled today), so this depends only on which wallet or SDK built the transaction.

  • sync/transfers/trigger/chains/solana/bitquery-channels/query.ts:102
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, plus @solana/web3.js 1.99.0 or later. The lockfile has 1.98.4, which rejects a version 1 answer even when asked for it (its response check only allows 0 | 'legacy'; 1.99.0 adds 1).

What we measured

WhatResultHowChecked
Reported to themMerit-Systems/x402scan/issues/1320, posted 2026-10-30https://github.com/Merit-Systems/x402scan/issues/1320Oct 30, 2026, 3:06 PM UTC
StatusOpen: no fix merged yetGitHub issue Merit-Systems/x402scan#1320Oct 31, 2026, 1:55 AM UTC

Proof you can repeat

2SmL3M6ucn5vxSwc2nFGE37YBP2HVxaKDksY7qpkNeYQKpipYApVBnbjVgwhvufqg4ZZRYDqjdFPuT8WyXfF7GkS (slot 462245428)

maxSupportedTransactionVersion: 0 → error -32015: Transaction version (1) is not supported by the requesting client

maxSupportedTransactionVersion: 1 → the transaction, version 1

checked Oct 30, 2026, 3:06 PM 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

25/25 free, then $0.01

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.