Skip to content

Instantly share code, notes, and snippets.

@AdvaithD
Created June 18, 2026 11:47
Show Gist options
  • Select an option

  • Save AdvaithD/891c183c9caa1c7ae575ddf6efd89f48 to your computer and use it in GitHub Desktop.

Select an option

Save AdvaithD/891c183c9caa1c7ae575ddf6efd89f48 to your computer and use it in GitHub Desktop.
Pumpfun Scope Data Source Map

Pumpfun Scope Data Source Map

This maps each Scope-facing data point to where it comes from, how we index it, where we aggregate it, and how it reaches the Scope page.

High-Level Rule

Scope should not infer Pumpfun protocol state in the browser.

The data should flow like this:

on-chain events/accounts
  -> solar-flare parser
  -> hermaus-rs processor event
  -> Redpanda topic
  -> azura-rs metadata-service aggregation
  -> Talos read/scope state
  -> azura-monorepo Scope UI

Simple card indicators should follow the existing cashback pattern:

Pump create metadata
  -> PumpfunMetadata
  -> prod.svm.pumpfun_metadata
  -> metadata-service canonical metadata
  -> Talos metadata
  -> Scope card icon / hover / filter

Running totals and chart markers need event streams:

Pump / Pump Fees / Agent event
  -> prod.svm.pumpfun_fee_events or prod.svm.pumpfun_agent_events
  -> metadata-service rollup
  -> Talos chart/tradefeed marker + Scope hover payload

Data Source Table

Scope Data Source of Truth Raw Fields / Events First Indexing Owner Topic / Store Aggregation Owner Scope Output
Offchain-created indicator Pump create event CreateEvent.user, CreateEvent.creator; derive user != creator solar-flare prod.svm.pumpfun_metadata metadata-service canonical metadata metadata.isOffchainCreated
Cashback indicator Pump create event CreateEventV2.is_cashback_enabled already mostly exists in solar-flare prod.svm.pumpfun_metadata metadata-service canonical metadata metadata.isCashbackEnabled
Mayhem indicator Pump create/trade/bonding curve is_mayhem_mode, mayhem_mode solar-flare prod.svm.pumpfun_metadata, trades metadata-service / Talos metadata.isMayhemMode
Mayhem countdown Pump launch/create timestamp CreateEvent.timestamp or pool/card launch timestamp solar-flare / Talos metadata/card state Talos normalizes metadata.mayhemEndsAt
Mayhem active/finished Derived from launch time default: now < launchedAt + 24h Talos Talos state Talos metadata.mayhemStatus
Mayhem bot trades Static wallet + trade user TradeEvent.user == BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s solar-flare trade parser already has trader/user prod.svm.trades Talos trade annotation chart/tradefeed actorTags: ["mayhem_bot"]
Creator address Pump create/bonding curve/set creator creator, SetCreatorEvent, bonding curve creator solar-flare prod.svm.pumpfun_metadata metadata-service canonical metadata metadata.creator
Creator fee accrued Pump/PumpSwap trade events TradeEvent.creator_fee, creator_fee_basis_points; PumpSwap coin creator fee fields solar-flare prod.svm.trades and/or prod.svm.pumpfun_fee_events metadata-service fee rollup creatorRewards.totalFees
Creator fee claimed Pump/PumpSwap claim events CollectCreatorFeeEvent.creator_fee, CollectCoinCreatorFeeEvent.coin_creator_fee solar-flare prod.svm.pumpfun_fee_events metadata-service fee rollup creatorRewards.claimed + chart marker
Creator unclaimed Derived totalFees - claimed/distributed, or vault/account balance for exact state metadata-service Postgres rollup metadata-service creatorRewards.unclaimed
Creator fee authority Pump Fees sharing config SharingConfig.admin / creator authority fields solar-flare account/event parser prod.svm.pumpfun_fee_events or metadata metadata-service creatorRewards.feeAuthority
Locked/unlocked fee authority Pump Fees sharing config likely SharingConfig.admin_revoked; exact product meaning still needs confirmation solar-flare prod.svm.pumpfun_fee_events or metadata metadata-service creatorRewards.locked
Fee share rows Pump Fees sharing config SharingConfig.shareholders[] { address, share_bps } solar-flare prod.svm.pumpfun_fee_events or metadata metadata-service creatorRewards.shares[]
Per-share amounts Derived from totals + share bps share_amount = total_or_claimed * share_bps / 10_000 metadata-service Postgres rollup metadata-service creatorRewards.shares[].amount
GitHub/social profile Pump Fees social PDA/events SocialFeePda.user_id, platform, SocialFeePdaCreatedEvent, SocialFeePdaClaimedEvent solar-flare prod.svm.pumpfun_fee_events metadata-service profile enrichment creatorRewards.shares[].profile
Social fee claimed Pump Fees social claim event SocialFeePdaClaimedEvent.amount_claimed, lifetime_claimed, claimable_before solar-flare prod.svm.pumpfun_fee_events metadata-service fee rollup hover totals + chart marker
Charity indicator donate.gg token route + Pump Fees donation state donate.gg /{chainId}/tokens/{address} active config; DonationFeePda events metadata-service + solar-flare Postgres metadata + optional fee events metadata-service metadata.charity.enabled
Charity name/icon donate.gg charity APIs charity name, logo, website/social fields metadata-service Postgres metadata cache metadata-service charity.allocations[].name/iconUrl
Charity allocation donate.gg active config active config charities + weights metadata-service Postgres metadata cache metadata-service charity.allocations[].weightBps
Agent indicator Agent Payments program AgentInitializeEvent or TokenAgentPayments account exists solar-flare prod.svm.pumpfun_agent_events metadata-service agent rollup metadata.agent.enabled
Agent payment authority Agent Payments account/events TokenAgentPayments.authority, AgentUpdateAuthorityEvent.new_authority solar-flare prod.svm.pumpfun_agent_events metadata-service latest-state rollup agent.paymentAuthority
Agent rate Agent Payments account/events TokenAgentPayments.buyback_bps, AgentUpdateBuybackBpsEvent.new_buyback_bps solar-flare prod.svm.pumpfun_agent_events metadata-service latest-state rollup agent.rateBps
Agent revenue Agent payment accepted events AgentAcceptPaymentEvent.amount solar-flare prod.svm.pumpfun_agent_events metadata-service agent rollup agent.revenue
Agent buybacks Agent distribute/buyback events AgentDistributePaymentsEvent.buyback_amount, AgentBuybackTriggerEvent.currency_mint_amount_for_buyback solar-flare prod.svm.pumpfun_agent_events metadata-service agent rollup agent.buybacks
Agent claimed Agent withdrawals AgentWithdrawEvent.amount solar-flare prod.svm.pumpfun_agent_events metadata-service agent rollup agent.claimed
Agent unclaimed Derived or account/vault state revenue - buybacks - claimed, or live vault balances for exact state metadata-service Postgres rollup / account snapshot metadata-service agent.unclaimed
Tokens bought back and burned Agent buyback event/account tokens_bought_back_and_burned, new_tokens_bought_and_burned_for_currency solar-flare prod.svm.pumpfun_agent_events metadata-service agent rollup agent.tokensBoughtBackAndBurned

Creator Rewards Flow

flowchart TD
  Trade["Pump/PumpSwap trades"] --> Accrued["creator fee accrued"]
  Claim["CollectCreatorFee events"] --> Claimed["creator fee claimed"]
  Dist["DistributeCreatorFees events"] --> Distributed["creator fee distributed"]
  Sharing["SharingConfig account/events"] --> Shares["shareholders + bps"]
  Social["SocialFeePda events"] --> Profiles["GitHub/social identity"]

  Accrued --> Rollup["metadata-service creatorRewards rollup"]
  Claimed --> Rollup
  Distributed --> Rollup
  Shares --> Rollup
  Profiles --> Rollup

  Rollup --> Talos["Talos metadata/read model"]
  Talos --> Scope["Scope fee hover"]
Loading

Recommended formulas:

creator_total_fees =
  sum(Pump TradeEvent.creator_fee)
  + sum(PumpSwap coin creator fees)

creator_claimed =
  sum(CollectCreatorFeeEvent.creator_fee)
  + sum(CollectCoinCreatorFeeEvent.coin_creator_fee)

creator_unclaimed =
  creator_total_fees - creator_claimed/distributed

share_amount =
  relevant_total * share_bps / 10_000

Open decision:

Confirm whether "locked" means SharingConfig.admin_revoked.

Agent Activity Flow

flowchart TD
  Init["AgentInitializeEvent"] --> Enabled["agent enabled"]
  Init --> Authority["payment authority"]
  Init --> Rate["buyback bps / rate"]

  AuthUpdate["AgentUpdateAuthorityEvent"] --> Authority
  RateUpdate["AgentUpdateBuybackBpsEvent"] --> Rate

  Payment["AgentAcceptPaymentEvent"] --> Revenue["revenue"]
  Distribute["AgentDistributePaymentsEvent"] --> Distributed["distributed"]
  Buyback["AgentBuybackTriggerEvent"] --> Buybacks["buybacks"]
  Withdraw["AgentWithdrawEvent"] --> Claimed["claimed"]
  Account["TokenAgentPaymentInCurrency account"] --> ExactTotals["latest account totals"]

  Revenue --> Rollup["metadata-service agent rollup"]
  Buybacks --> Rollup
  Claimed --> Rollup
  Authority --> Rollup
  Rate --> Rollup
  ExactTotals --> Rollup

  Rollup --> Talos["Talos metadata/read model"]
  Talos --> Scope["Scope agent hover"]
Loading

Recommended formulas:

agent_rate =
  latest buyback_bps / 100

agent_revenue =
  sum(AgentAcceptPaymentEvent.amount)

agent_buybacks =
  sum(AgentDistributePaymentsEvent.buyback_amount)
  or sum(AgentBuybackTriggerEvent.currency_mint_amount_for_buyback)

agent_claimed =
  sum(AgentWithdrawEvent.amount)

agent_unclaimed =
  revenue - buybacks - claimed

For exact live state, prefer account snapshots for TokenAgentPayments and TokenAgentPaymentInCurrency.

Charity Flow

flowchart TD
  Token["Token address + chain id"] --> DonateToken["donate.gg token route"]
  DonateToken --> Config["active charity config"]
  Config --> CharityIds["charity IDs + weights"]
  CharityIds --> CharityApi["donate.gg charity endpoints"]
  CharityApi --> Display["name/logo/socials"]
  Display --> Metadata["metadata-service charity metadata"]
  Metadata --> Talos["Talos Scope payload"]
  Talos --> Scope["Scope charity hover"]
Loading

Best lookup:

GET https://www.donate.gg/api/v1/{chainId}/tokens/{address}

Use charity endpoints to hydrate:

name
logo
website/socials
enabled/verified state
allocation weights

Mayhem Flow

flowchart TD
  Create["Pump create event"] --> Flag["isMayhemMode"]
  Create --> LaunchTime["launch timestamp"]
  LaunchTime --> EndsAt["mayhemEndsAt = launch + 24h"]
  Trade["Pump trades"] --> BotCheck["trader == Mayhem bot"]
  BotCheck --> TradeTag["actorTag: mayhem_bot"]

  Flag --> Talos["Talos Scope metadata"]
  EndsAt --> Talos
  TradeTag --> Talos
  Talos --> Scope["Mayhem icon, countdown, chart/tradefeed labels"]
Loading

Static Mayhem bot:

BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s

Default active/finished rule:

active if now < launched_at + 24h
finished otherwise

Repo Ownership

Repo Responsibility
solar-flare Decode Pump/Pump Fees/Agent events and account-derived fields
hermaus-rs Wrap decoded records into processor events and publish Redpanda topics
azura-rs metadata-service Consume topics, aggregate rollups, hydrate donate.gg, write Postgres/ClickHouse
talos-v2 Consume normalized metadata/events, expose Scope fields, tag chart/tradefeed
azura-monorepo Render icons, hovers, filters, countdowns, chart markers

Suggested Topics

prod.svm.pumpfun_metadata
prod.svm.pumpfun_fee_events
prod.svm.pumpfun_agent_events
prod.svm.trades

Main Open Questions

  • Does "locked" exactly mean SharingConfig.admin_revoked?
  • Should unclaimed values be event-derived or account/vault-balance-derived?
  • For agent buybacks, does product want allocated buyback amount or executed buyback amount?
  • Does Mayhem always finish exactly 24h after launch, or can migration/completion override it?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment