Field notes

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

  1. Version 1 transactions Zero rows, no error
  2. A new reward type Zero rows, no error
  3. Inner instructions Almost no rows
  4. Events written two ways Every trade counted two times
  5. Shared event names Events from the wrong program
  6. Integers in JSON Wrong amounts
  7. Arguments left out Decode errors on valid trades
  8. The size limit of one upload Upload fails at the end
  9. The engine build Out of memory at build
  10. A database you did not ask for Out of memory at run
  11. One wrong setting Four times slower
  12. 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.

Zero rows, no error

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.

Zero rows, no error

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.

Almost no rows

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.

Every trade counted two times

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.

Events from the wrong program

Shared event names: SwapEvent

Cause. Jupiter and Raydium both name an event SwapEvent, with the same discriminator. A log line from Raydium under a Jupiter route then decodes as a Jupiter event.

In Trawl: Each event is decoded with the IDL of the program that wrote it.

Wrong amounts

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.

Decode errors on valid trades

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.

Upload fails at the end

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.

Out of memory at build

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.

Out of memory at run

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.

Four times slower

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.

A bill with no job

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.

Get a price