feat(pumpfun): config-driven PDA surface + local surfpool TDD - #260
Merged
Conversation
…uestra_project Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Pump.fun bonding-curve program comprehended into packaged config. bonding_curve, global, event_authority + globals derive first-plan-correct; creator_vault is the GAP (seed = bonding_curve.data.creator, a dotted-path seed naive IDL->derivation drops) modelled as an honest resolver, proven derivable once resolved. All verified against real mainnet accounts on a surfpool fork ($0): addresses match, owners honest (Pump-owned data accounts vs the system-owned SOL vault). Co-Authored-By: Claude Opus 4.8 <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.
What
Comprehends the Pump.fun bonding-curve program (
6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P) into the config-driven backbone (PR #259), and proves its PDA derivations with local TDD: offline ($0, pure) + a real surfpool mainnet-fork verification.First new program on the config backbone — the "add a program = write config, not code" path in action.
Why
Berkay's ask: make local TDD point at real Solana programs so we accumulate proven simulations before any mainnet test. Pump.fun is the highest-volume of the three targets and its "swap" (buy/sell) shape matches the proven Meteora template.
The gap it showcases
creator_vault's seed isbonding_curve.data.creator— a field inside another account's data (a dotted path). Naive IDL→derivation generators silently drop it (Anchor #4057 shape). We model it honestly as a newresolverseed kind (ResolverPdaSeedNode: non-resolvable statically, dependency declared, never fabricated) — and prove that, once the value is resolved, the vault derives first-plan-correct.How
gecko/provider_config.py: newresolverseed kind →ResolverPdaSeedNode;ProgramSpec.orquestra_projectnow optional (a program can be comprehended for derivation before its execute/build URL is wired).gecko/providers/configs/orquestra/pumpfun.json: 7 PDA recipes (global, mint_authority, event_authority, global/user_volume_accumulator, bonding_curve, creator_vault). Registered under theorquestraprovider.tests/test_providers_pumpfun.py: offline derive-match + honest-gap assertions + an env-gated (GECKO_SURFPOOL_E2E=1) real surfpool verification.Proof (verified, not claimed)
Ground truth is a real mainnet Buy tx; every address independently re-derived by
derive_pda. On a live surfpool mainnet fork ($0, read-only, no signing):bonding_curve→EExN5XX…— exists, owned by Pump ✅global→4wTV1…— exists, owned by Pump ✅creator_vault→9B1eLf…— exists, owned by System Program (a SOL vault the program signs for) — derivation correct, owner honest ✅The vault-owner distinction was surfaced by the fork gate (it initially failed a naive owner-match assertion), then asserted truthfully — the harness catching a real semantic detail is the point.
Scope / follow-ons
Derivation-only for now (no execute URL / buy-sell plan). Follow-ons: the Orquestra project slug + a buy/sell plan with the
creatorresolution step (fetch bonding_curve + Anchor-decode), and constant-pubkey seeds formetadata/fee_config/associated_bonding_curve. Next programs queued: ORE, then MetaDAO ICO.Gate
ruff+mypy geckoclean; full suite 2176 passed, 11 skipped; the surfpool E2E passes withGECKO_SURFPOOL_E2E=1.🤖 Generated with Claude Code