Skip to content

feat(solana-exec): multi-platform support — pump.fun, photon, bullx, GMGN, Axiom, FOMO - #1829

Merged
Flotapponnier merged 3 commits into
devfrom
feat/solana-exec-multiplatform
Aug 11, 2026
Merged

feat(solana-exec): multi-platform support — pump.fun, photon, bullx, GMGN, Axiom, FOMO#1829
Flotapponnier merged 3 commits into
devfrom
feat/solana-exec-multiplatform

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

Summary

  • Add pump.fun, photon, bullx, GMGN (9 accounts), Axiom (20 accounts), FOMO (USDC)
  • Drop Helius enhanced API — pure Solana JSON-RPC (no credits, no rate limits)
  • Per-account cursors keyed as plt:feeAccount for independent pagination
  • FOMO: USDC fee detection via SPL postTokenBalances.owner
  • v0 tx support: custom accountKey unmarshaler + loadedAddresses
  • Fix CU price: use SetComputeUnitPrice discriminator (0x03) directly, not fee/consumed
  • Dedup raw_counts across multi-account platforms (Axiom 20 accounts)
  • Migration 003: multi-platform idempotency + cu_samples with (platform, sig) PK

Platforms added

Platform Accounts Fee type
pump.fun 1 SOL native
photon 1 SOL native
bullx 2 (current + legacy) SOL native
GMGN 9 SOL native
Axiom 20 SOL native
FOMO 1 (USDC ATA) USDC SPL

- Replace Helius enhanced API with standard getTransaction JSON-RPC
- Add pump.fun, photon, bullx, gmgn (9 accounts), axiom (20 accounts), fomo
- FOMO: USDC fee detection via SPL token balance diffs (FeeOwners + FeeToken)
- Per-account cursors keyed as plt:feeAccount for independent pagination
- v0 tx support: custom accountKey unmarshaler + loadedAddresses appended
- Sort allSigs by slot before stride-sample (fixes temporal bias on Axiom 20 accounts)
- Add from_cursor idempotency key to raw_counts (migration 003)
- Add solana_exec_cu_samples table + InsertCUSamples/PurgeCUSamples/PurgeEvents
- Materializer calls purge functions after each cycle
Parse ComputeBudget::SetComputeUnitLimit (discriminator 0x03) from tx
instructions. Priority fee schedule is based on requested CU limit, not
actual consumption — dividing by consumed inflates price for over-provisioned txs.
Falls back to cu_consumed when the instruction is absent.
…counts

- ComputeBudget disc 0x02=SetComputeUnitLimit(u32), 0x03=SetComputeUnitPrice(u64).
  Previous code read 0x03 as u32 → CULimit was the low 32 bits of the price, random noise.
- CUPriceDeclared read directly from disc 0x03 instruction — no division, no estimation.
  cuPriceMicro = CUPriceDeclared; 0 when instruction absent (base fee only, not a price).
- Raw counts now computed from merged+deduped allSigs, not per-account.
  A tx touching 2 Axiom collectors was counted twice before; now exactly once.
  from_cursor is a compound of all account cursors for idempotency on retry.
@Flotapponnier
Flotapponnier merged commit 09bcc15 into dev Aug 11, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant