Reverse engineered

The OTC desk, read off the chain account by account, and what our Raydium version does instead.

READ ON 2026-11-03

otcdesks.cash launches pump.fun coins that pay holders in tokenized stocks. We read its front end, the coins it launched and the transactions its wallets sign, then rebuilt the idea on Raydium LaunchLab with nothing in the middle: no hot wallet, no server, no worker. Every row below links to what we read. Where we could not confirm something, it says not found.

The OTC desk, on chain

What it doesEvidence
Launch. A normal pump.fun create_v2, signed by the creator's wallet and the mint key.create tx, anotherverified
Fees go to their wallet. In the same launch the creator signs pump's fee sharing: create_fee_sharing_config + update_fee_shares, 10000 bps to one wallet, 2k5h…pP5y.tx, txverified
For good. The coin's sharing config has admin_revoked = true: the creator can never point the fees anywhere else.sharing configverified
Claim and split. Their wallet sweeps the creator fee and splits it in one transaction: 67.5% stays for holders, 12.5% protocol, 10% buyback, 10% desk pot.curve coin, graduated coinverified
One pot for every coin. The holder share of all coins sits in that same hot wallet. There is no per-coin vault on chain.2k5h…pP5yverified
Buy the stock. A Jupiter swap, SOL into the reward, lands in the hot wallet.swap txverified
Pay holders. Separate transactions from the hot wallet, 12 transferChecked each. No claim, no swap, no account opening inside.payout, Token-2022 payoutverified
Holders open their own token accounts. 0.00307848 SOL per stock, and a $20 minimum holding, both constants in their front end.their JS bundle + docsverified
Buyback and burn. One wallet buys their token through Jupiter, then burns it in a second transaction.buy, burnverified
Desks. A Metaplex Core collection, 2,408 minted, its update authority is a config account of their own program.collection, programverified
The 5,000 desk cap.nothing on chain says itnot found
Desk pot address. Their docs name KLR4…UnJu; that address has no account. The split pays BZcv…BucR.BZcv…BucRdocs differ
Their totals (revenue, paid to holders, coins launched) come from their own API./api/revenue, /api/rewards, /api/coinsnot checked on chain

The pump.fun pieces

The desk rides on pump.fun's own programs. We read them in lalalune/pumpfun-source, a community reconstruction of pump.fun's public programs. We do not run pump.fun's code and we are not pump.fun.

pump.funWhat it does thereWhat we do on Raydium
create_v2Creates the coin, takes a quote mint and the is_holder_reward flag.LaunchLab initialize from your wallet. The basket is frozen in the metadata under extensions.otc.
check_quote_mint_extensionsRefuses quote mints with Token-2022 extensions it can't handle.Every reward mint is read before you can pick it: transfer hooks, transfer fees, frozen default accounts, pauses. Anything that would break a payout is blocked.
distribute_fee_to_holdersAn authority key passes a list of amounts; the program transfer_checkeds them from a holder-rewards account.The creator's own wallet sends transferChecked to each holder. Amounts come from balances read from chain at that moment.
create_fee_sharing_config, update_fee_sharesRoutes a coin's creator fee to shareholders by bps.LaunchLab has no fee sharing. The fee stays in your creator vault until you claim it. The split is written into the payout transactions.
distribute_creator_feesPays the sharing config's shareholders out of the creator vault.One transaction claims the vault (claimCreatorFee) and burns 10% as the main token.
sweep_creator_feeMoves the curve's creator fee into the creator vault.LaunchLab pays the creator fee into its vault on every trade, nothing to sweep.
buy_exact_quote_in_v2Spends an exact amount of the quote.Each asset gets an exact SOL amount, swapped through a Jupiter route inside the transaction that pays its first holders.

What our version does

The creator presses Pay holders on the coin page and signs once (one signAllTransactions):

  • Transaction 1: claim the LaunchLab creator fee vault, spend 10% buying the main token (on its curve, or through Jupiter) and burn exactly what was bought.
  • Then per asset: swap that asset's share of the holder cut, pay as many holders as fit 1,232 bytes, and carry the rest in follow-up transactions.
  • Holders are the top wallets by balance at that moment, read with getProgramAccounts. Pool and program accounts never count, nor does the creator.
  • Every transaction carries this desk's key and a memo, which is how the board, Rewards and Burns read history back from the chain with no database.

Holders get 90%, or 80% with 10% kept by the creator; the creator picks at launch. Where the OTC desk sends 12.5% to its protocol and 10% to desk holders, we take nothing.

What runs where

Raydium's program enforces the curve, the trading fees (0.25% protocol, 0.75% platform, 0.05% creator) and that only the creator wallet can claim its vault. The signed transactions do the claim, the burn, the swaps and the transfers; each is all or nothing. The creator decides when: payouts happen when the creator presses the button, and the basket in the metadata is followed by this site's code, not by Raydium's program. LaunchLab keeps one fee vault per creator wallet, so one claim takes the fees of every coin that wallet created.

The creator fee on Raydium's open platform is 0.05% of volume, so payouts start small and grow with volume.

The stocks

The 25 tokenized stocks on the launcher all trade on Solana with more than $20K of liquidity. Their mints are Token-2022 and carry the same extensions. We read them from the mints:

ExtensionWhat it means for a payout
DefaultAccountState = initializedNew token accounts start unfrozen, so a fresh wallet can receive a stock.
TransferHook, no program setTransfers run no extra program.
PausableConfigThe issuer can pause transfers. Not paused when we read them; the launcher checks again before you pick.
PermanentDelegateThe issuer can move or burn any balance.
freeze authority setThe issuer can freeze an account.
ScaledUiAmountConfigWallets show balances times a multiplier (1 to about 1.006 today). Payouts move raw units.

A token account for one of these mints costs 0.00307848 SOL of rent (3,078,480 lamports), the same number the OTC desk quotes.

Stock curves on LaunchLab

While looking for a way to price coins in stocks, we decoded every LaunchLab global config on chain: 646 of them. 24 use a tokenized stock as the quote, with thousands of curves on them. Three of them: TSLAx Fny7…e2nR, NVDAx 2NuV…WFQ4 and SPYx B7ct…9adg. Raydium's own API does not list them. Coins on this desk trade against SOL and pay in stocks.

The numbers

Assets per coin1 to 10, weighted 1 to 100
Holder share90%, or 80% with 10% to the creator
Main token burn10% of every claimed vault
Holders paid per payouttop 5 to 50 wallets, picked at launch
Trading fee0.25% protocol, 0.75% platform, 0.05% creator, read from the pool
Stock token account0.00307848 SOL, opened when the holder's share is worth more
Curve1B supply, 793.1M on the curve, 85 SOL to graduate, then a Raydium CPMM pool

The accounts

Raydium LaunchLab programLanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj
Raydium open platform4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4
SOL curve config6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX
This desk's key8b5CoZHeJHUvtibhbv5t3PJXu7vfb2yLCHo3z58pHbE7
SwapsJupiter routes, JUP6…TaV4
Main tokenset at its launch
NEW YORK,
LAUNCH