Overview
paidgram lets anyone launch a pump.fun coin whose creator fees are paid to a Telegram @username, in GRAM. After launch, a worker does the rest: claim on Solana, convert to GRAM, pay that username automatically. Nobody clicks Send.
Launching a coin
- Pick an image, name, ticker and description. Choose the Telegram @username that should receive the fees.
- Pick the pair: USDC (fees accrue in USDC, no price risk, cleanest conversion) or SOL.
- Connect a Solana wallet and sign transaction 1:
create_v2on pump.fun, with an optional first buy. Your wallet is the coin creator. - Sign transaction 2:
create_fee_sharing_config+update_fee_shares_v2on the pump-fees program. This sets the paidgram treasury as the only shareholder (10,000 bps) and revokes the authority. - We register mint ↔ @username on our ledger and the coin appears on Explore.
Transaction 2 also carries a memo, paidgram:v1:@handle, signed by the creator wallet, and the description gets Fees to @handle via paidgram appended. The binding is visible on Solana itself and only the creator wallet can ever change it.
Redirecting an existing coin
Any pump.fun coin whose fee split has not been locked yet can be redirected by its creator wallet, before or after graduation. Paste the mint on Launch → Existing coin, enter the handle, sign once. pump.fun allows exactly one fee-share configuration per coin, so a coin that is already locked elsewhere cannot be redirected.
How fees work
pump.fun charges a creator fee on every buy and sell. On the bonding curve the fee accrues in the coin's quote asset (USDC or SOL) to the creator vault. After graduation to PumpSwap it accrues in the AMM coin-creator vault. Both are on Solana and both are swept by paidgram.
Because the sharing config names the treasury as sole shareholder and the authority is revoked, nobody, including paidgram, can point the fees anywhere else after transaction 2.
Claims
A worker runs transfer_creator_fees_to_pump_v2 (for graduated coins) and distribute_creator_fees_v2 for every registered coin on a schedule, skipping vaults below $1. Each claim is one Solana transaction and one ledger row: amount in quote asset, USD value at the time, the recipient share and the protocol share. Every claim is linked from the token page.
Payouts in GRAM
Default rail is PAYOUT_RAIL=xrocket. The worker pays every @username. There is no operator step. Wallet in Telegram has no send-to-contact API, so we use xRocket Pay, the official API that accepts telegram_username.
- Swap to USDT on Solana. Claimed USDC or SOL is swapped to USDT with Jupiter.
- Bridge with USDT0. Tether's USDT0 Legacy Mesh (LayerZero) moves USDT Solana → TON into the payout wallet. 3 bps, a few minutes, public on layerzeroscan.
- Swap to GRAM. STON.fi Omniston sells USDT for GRAM inside the payout wallet. Automatic when the float is short.
- Send to the Telegram username. When a handle crosses a milestone the worker:
- pays @username instantly if they already use @xrocket (no tap from them);
- otherwise issues a personal cheque bound to that username — only they can open it;
- or, if
username.t.mehas a TON wallet, sends on-chain.
- The payout is posted in the public channel with a tonviewer link and a receipt here.
Payout wallet: EQCVgcJ2sQyGH5Ts1Dq7sXLndgWkLNbu8QLVyA19JTFTULX_. Telegram Stars are not used.
What the recipient experiences
- Already on @xrocket: GRAM lands in their xRocket balance. Receipt + channel post. Nothing to claim.
- Never opened xRocket: they get a personal cheque locked to their @username. Opening the cheque (one tap) creates the xRocket wallet and credits it. Nobody else can take it.
- Fragment / TON DNS username: if xRocket does not know them yet and
@username.t.mepoints at a wallet, we send GRAM on-chain instead.
They do not need to open the paidgram bot. Optional: @paidgramrewardbot for /balance.
Milestones
Payouts are batched at lifetime milestones: $5, $10, $20, $50, $100, $250, $500, $1,000, then every $1,000. When lifetime + pending crosses the next one, the entire pending balance is paid. This keeps transfers meaningful and avoids sending someone 0.03 GRAM.
Protocol share
paidgram keeps 15% of every claim; the recipient gets 85%. This covers Solana transaction fees, Jupiter slippage, the 3 bps USDT0 bridge fee, STON.fi spread, TON gas and operations. No fee to launch beyond network costs. The share is fixed per claim and shown on every claim row.
Transparency
- Every claim links to its Solana transaction.
- Every payout has a public receipt with the TON transaction, and a post in the Telegram channel.
- Every settlement (Jupiter, USDT0, STON.fi) is a row on Capital flow.
- Hot wallets: Solana treasury
4gnKrWj7AedceBBifDFGzvzvuzpw3Tuhrzqeh2Y8Li8e, TON payoutEQCVgcJ2sQyGH5Ts1Dq7sXLndgWkLNbu8QLVyA19JTFTULX_.
Opting out
Anyone can launch a coin naming any handle. If you do not want to be paid, send /optout to the bot from that account or use the opt-out form. We stop claiming for coins that name you; fees stay in the on-chain vaults. Requests are honoured within 7 days after verifying control of the handle.
Limits and honest caveats
- Trust-minimised, not fully trustless. Fee locking is on-chain and immutable. Between claim and payout, funds sit in two hot wallets we control. The ledger and both balances are public.
- A Telegram username is not a bank account. Instant credit requires that handle to exist on xRocket. If it does not, we issue a username-bound cheque (only they can redeem) or send on-chain to
username.t.me. Wallet in Telegram has no public send-to-@username API; Telegram Stars cannot be withdrawn as GRAM. - Telegram Stars cannot be used as payouts: they cannot be withdrawn as GRAM or fiat.
- GRAM price moves. USD is fixed at claim; GRAM is fixed when the transfer is sent.
- Bridging takes a few minutes. The worker batches USDT0 until a minimum (default $20) has accumulated.
- pump.fun and the pump-fees program are third-party. If they change fee rules, we follow.
- paidgram is not affiliated with Telegram, TON Foundation, Tether, STON.fi, pump.fun or Solana Foundation.