RPC error -32015
Transaction version (1) is not supported by the requesting client
Your code asked the RPC for transactions up to version 0, and the transaction it wanted is version 1. The RPC refuses it instead of answering. The fix is one setting, plus a library new enough to read the answer.
Check a transaction
Paste the signature your code can't read. Solana Pulse's tx_version tool reads it from mainnet and says which version it is and what can read it.
No signature handy? . Free: 25 checks a day.
The fix
Ask for version 1 wherever you read transactions or blocks other people built: getTransaction, getParsedTransaction(s) and getBlock. Legacy and version 0 transactions still come back exactly as before.
{"jsonrpc":"2.0","id":1,"method":"getTransaction",
"params":["<signature>",{"encoding":"json","maxSupportedTransactionVersion":1}]}// npm install @solana/web3.js@^1.99.0 (1.98.x throws on version 1 even with this setting)
const tx = await connection.getTransaction(signature, { maxSupportedTransactionVersion: 1 });
const parsed = await connection.getParsedTransaction(signature, { maxSupportedTransactionVersion: 1 });
const block = await connection.getBlock(slot, { maxSupportedTransactionVersion: 1 });const tx = await rpc.getTransaction(signature, { maxSupportedTransactionVersion: 1 }).send();
// Before 7.1.0, tx.version comes back as the bigint 1n, so tx.version === 1 is false.client.get_transaction(signature, max_supported_transaction_version=1)
let config = RpcTransactionConfig {
max_supported_transaction_version: Some(1),
..RpcTransactionConfig::default()
};
client.get_transaction_with_config(&signature, config)?;Which library versions can read version 1
Each version was installed fresh and asked for the same real version 1 transaction (slot 463,371,847) on mainnet on 2026-10-30. Asking correctly isn't always enough: older web3.js rejects the answer it gets.
| Library | Versions tested | With max version 1 |
|---|---|---|
| @solana/web3.js | 1.95.8, 1.98.0, 1.98.4 | Throws on getTransaction, getParsedTransaction and getBlock, even with maxSupportedTransactionVersion: 1 |
| @solana/web3.js | 1.99.0, 3.0.0, 3.1.1 | Works. 1.99.0 is the first 1.x that reads version 1 |
| @solana/web3.js | 1.87.6, 1.91.8 | Unknown: they no longer install cleanly, so they could not be tested |
| @solana/kit (and web3.js 2.0.0) | 2.1.0 to 7.0.0 | Returns the transaction, but version is the bigint 1n, not the number 1. Its types reject maxSupportedTransactionVersion: 1 before 6.10.0 |
| @solana/kit | 7.1.0, 7.1.1, 8.0.0, 8.6.0 | Works |
| solana-py (with solders) | 0.30.2 to 0.41.0 | Works with max_supported_transaction_version=1 |
| Rust solana-client | all | Unknown: not tested yet. The setting is max_supported_transaction_version: Some(1) |
| Every library above | Asking for version 0 always fails with -32015 (the control check) |
Traps that look like other bugs
- One bad entry breaks a whole batch.
getParsedTransactionsandgetTransactionsin web3.js throw for the whole list when one transaction fails, so one version 1 payment can hide 49 others. Read them one by one, or fix the setting. - "Not found" that is really "refused". Code that catches the error and returns null reports a paid, confirmed transaction as missing.
- version === 1 is false on @solana/kit before 7.1.0, because the value is the bigint
1n. - Raw bytes start differently. A version 1 transaction starts with the byte
0x81before anything else; legacy and version 0 start with the signature count. Parsers that read the bytes the old way break too.
How common version 1 is
Version 1 went live on mainnet on 2026-09-15 (the first one we found is in slot 447,120,004). In sampled mainnet blocks it was 13.8% of non-vote transactions the week of Sep 14 and 41.9% from Oct 16 to 30 (44.4% of swaps). Whether your code sees one depends only on which wallet or SDK the sender used, so a payment, deposit or trade can fail for one customer and work for the next.
For agents
Agents can call the same check over MCP or HTTP: tx_version with {"tx_id": "<signature>"}. See Connect an agent.