Jetstreamer and Old Faithful errors, explained
We scanned Solana history with Jetstreamer and the Old Faithful archive from August to October 2026. These twelve problems each cost us test runs. Most of them write zero rows and give no error, so the scan only looks slow.
Updated
The list
- Version 1 transactions Zero rows, no error
- A new reward type Zero rows, no error
- Inner instructions Almost no rows
- Events written two ways Every trade counted two times
- Shared event names Events from the wrong program
- Integers in JSON Wrong amounts
- Arguments left out Decode errors on valid trades
- The size limit of one upload Upload fails at the end
- The engine build Out of memory at build
- A database you did not ask for Out of memory at run
- One wrong setting Four times slower
- Machines that stay alive A bill with no job
Each entry gives the symptom and the cause. Trawl handles all twelve, so you do not have to. To skip the setup, compare a managed scan with an agent that runs the tools.
Version 1 transactions: Attempting to read 8256 bytes
Cause. About a third of mainnet transactions are version 1 by Oct 2026. Upstream Jetstreamer 0.7.0 fails each data node with Attempting to read 8256 bytes, retries without end, and writes nothing.
In Trawl: Reads legacy, v0 and v1 transactions.
A new reward type: DeactivatedStake
Cause. In July 2026 Solana added the DeactivatedStake reward type. The engine rejected each block that held one, and retried. One real job read 709 GB of a 968 GB epoch, wrote nothing and hit its timeout.
In Trawl: Reads the new type. The release of 19 Oct 2026 scanned recent epochs before it shipped.
Inner instructions
Cause. Jupiter calls Raydium, Orca and Meteora as inner instructions (CPI). A filter that reads only top-level instructions misses most swaps on those programs.
In Trawl: The filter matches top-level and inner instructions. Four columns show where each one sat.
Events written two ways
Cause. Pump.fun, PumpSwap and Raydium LaunchLab write each event as a self-CPI and also as a log line. Count both and the volume doubles. Read only the logs and you lose the events after a 10 KB log cut.
In Trawl: One event is one row, with no double count.
Integers in JSON
Cause. A JSON number is a double. A u64 lamport amount above 2^53 silently loses digits.
In Trawl: A u64 column uses the exact Arrow type. u128, and any large integer inside JSON, is a string.
Arguments left out
Cause. Pump.fun accepts an instruction that leaves out the arguments at the end. A strict Borsh decoder fails on it.
In Trawl: A missing argument at the end reads as null. A cut in the middle is still an error.
The size limit of one upload
Cause. R2 refuses one PUT over 4.995 GiB. One epoch of SPL Token gives about 6.9 GB of Parquet. A first test with a small result never sees this.
In Trawl: Large results upload while the scan runs, with no size limit to hit.
The engine build
Cause. The optimized build of the engine runs out of memory on a small machine. On a larger one, the build and its tests take about half an hour, before the first scan.
In Trawl: Built and tested once. Each job boots the same prebuilt binary.
A database you did not ask for
Cause. By default the engine starts a database that a scan does not need. On a small machine, it runs out of memory.
In Trawl: Off, on every machine.
One wrong setting
Cause. One engine setting, copied from an old setup note, cut the scan to a quarter of its speed. Nothing reports it: the scan is only slow, and each hour bills.
In Trawl: Tuned and measured on real scans. The quote uses a measured rate.
Machines that stay alive
Cause. A stopped cloud machine still bills. A hung machine bills until somebody sees it. A block volume outlives the machine it was attached to.
In Trawl: Each machine is deleted when its job ends. A hung job is stopped, and you get a credit.
Skip the test runs.
Trawl already handles each of these. Get a firm price for your range.