fix(solana): support Transaction v1 when fetching transactions and blocks - #1040
Merged
Merged
Conversation
…ocks Transaction v1 activates on Solana mainnet on 2026-09-15 (epoch 1035). RPC providers reject getTransaction/getBlock for v1 transactions unless the client sets maxSupportedTransactionVersion to 1, which would stall the indexer once third-party token, DBC or DAMM transactions start landing as v1. - Request maxSupportedTransactionVersion=1 in FetchTransactionWithCache, the backfiller's getBlock calls, geyser_transform and sol_refresher. - Upgrade solana-go to upstream v1.23.0, which decodes v1 messages (SIMD-0385), and drop the rickyrombo/solana-go fork replace. The fork's decoder treated every versioned prefix as v0. All fork changes except getProgramAccountsV2 are already upstream. - Port the paginated getProgramAccountsV2 wrapper into cmd/reclaim_rent, its only caller. - Add a regression test asserting the indexer requests version 1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Helius flagged that our
getTransactioncalls do not setmaxSupportedTransactionVersion: 1. Transaction v1 activates on mainnet 2026-09-15 ~01:20 UTC (epoch 1035). After that, fetching a v1 transaction without the flag returns error-32015and the indexer would stall retrying.Every indexed transaction (including Geyser-subscribed ones) is re-fetched through
FetchTransactionWithCache, which pinned the version to 0. Two backfillergetBlockcalls and two CLI tools had the same pin.There was also a hidden blocker: we pinned a personal fork of solana-go (based on v1.13.0) via
replace. Its decoder treats every versioned prefix as v0, so setting the flag alone would have mis-parsed v1 bytes.What
maxSupportedTransactionVersion=1inFetchTransactionWithCache, the backfiller'sgetBlockcalls,geyser_transformandsol_refresher.github.com/gagliardetto/solana-goto upstream v1.23.0, which decodes v1 messages (SIMD-0385), and drop the forkreplace. All fork-only changes (ATL length encoding, ATASysVarRentremoval, signature padding,SetAccounts) are already upstream, exceptgetProgramAccountsV2.getProgramAccountsV2wrapper intocmd/reclaim_rent/gpa_v2.go, its only caller.transaction_version_test.goasserting the indexer requests version 1.go mod tidyalso bumps grpc v1.71.1 → v1.80.0 and several indirect deps.Notes
geyser_transformmaps reward types with a fallthrough toUnspecified, so the new v1 reward type is safe. Nothing parses ComputeBudget priority fees, so the fee relocation does not affect indexing.Verification
go build ./...,go vet, gofmt clean.TestFetchTransactionWithCache_*andTestResolveLookupTablespass.🤖 Generated with Claude Code