Stake LP. Earn the token.
Bulliq turns trading volume into rewards for the people providing liquidity on PumpSwap. This doc explains exactly how SOL becomes LP rewards, end to end.
What is Bulliq
Provide liquidity. Stake your LP tokens. Earn rewards.
Bulliq is a fair-launch meme token launchpad on Solana built on top of pump.fun + PumpSwap. Every launch spins up a custodial treasury wallet that collects trading revenue and custodies all PumpSwap LP tokens that users stake. SOL revenue is harvested, swapped into the launched token via Jupiter, and credited pro-rata to LP stakers. There is no platform emissions token and no inflation.
TL;DR
- • Launch a token for 0.025 SOL + optional dev buy (≤ 10 SOL).
- • Token launches on pump.fun. Trading revenue is owned by the launch's treasury wallet.
- • On graduation, liquidity migrates to PumpSwap and an LP mint is born.
- • Anyone provides liquidity on PumpSwap, then stakes the LP tokens with Bulliq.
- • Every 5 min: harvest revenue → swap to token → credit stakers pro-rata.
- • Stakers claim the launched token or unstake their LP at any time.
The liquidity flow
End-to-end, here is what a single dollar of trading volume does on Bulliq:
SOL revenue ─▶ treasury wallet ─▶ Jupiter swap ─▶ launched token
│
▼
stakers' pending_rewards (pro-rata of total_staked_lp)
│
▼
claim ─▶ stakers' walletLaunching a token
- Connect Phantom and fill name, symbol, description, image.
- (Optional) Dev buy: SOL you spend on your own token at launch (cap 10 SOL).
- Confirm. We generate a one-time deposit address and DB row in pending_payment.
- You send 0.025 SOL + dev_buy to that address.
- Helius RPC detects the deposit. Status → funded.
- Image + metadata pin to IPFS. PumpPortal create tx is signed by the treasury. Status → live.
All trading revenue on the token is routed to LP stakers.
Graduation to PumpSwap
Tokens trade on the pump.fun bonding curve until the market cap hits ~$69k (pump.fun standard). At that point pump.fun auto-migrates remaining liquidity into a PumpSwap AMM pool. A PumpSwap LP mint is created — this is the SPL token you receive when you add liquidity on PumpSwap.
Bulliq reads the LP mint from the pool, stores it on the launch's reward_pools row, and stake/unstake flows light up automatically.
Staking LP tokens
- Provide liquidity on PumpSwap → receive LP tokens in your wallet.
- Open the token detail page on Bulliq and pick an amount (or MAX).
- Phantom signs a server-built SPL transfer that sends LP tokens to the treasury ATA.
- Server verifies the on-chain transfer via Helius (mint matches the pool's LP mint, recipient = treasury ATA, signer = your wallet, signature is not reused).
- Your net_staked_lp is increased and you start earning on the next harvest tick.
Reward accounting
Every harvest tick (~5 min), for each launch with stakers:
harvested_sol = collectRevenue(treasury)
swapped_tokens = jupiterSwap(harvested_sol * 0.9, SOL -> token)
platform_cut = harvested_sol * 0.1
for each staker s with net_staked_lp > 0:
share = s.net_staked_lp / total_staked_lp
s.pending += swapped_tokens * share
pool.total_distributed += swapped_tokens
pool.last_collect_at = now()Accounting is checkpoint-based: you earn rewards from every tick where your stake was active. Unstaking after a tick keeps the rewards you already accrued — they sit in pending_rewards until you claim.
Claim & unstake
Both flows are gated by Phantom signMessage (ed25519). The signed payload includes a nonce and timestamp; signatures older than 5 min are rejected. The treasury is the signer of the resulting on-chain transfer.
| Action | What happens |
|---|---|
| claimRewards | Treasury sends your pending_rewards (launched token) → your wallet. pending_rewards resets to 0. |
| requestUnstake | Treasury sends the requested amount of LP tokens → your wallet. net_staked_lp decreases. |
Launch states
- pending_payment — deposit address generated, waiting for SOL.
- funded — deposit detected on-chain.
- launching — metadata pinned, pump.fun create tx in flight.
- live — mint exists, bonding curve trading is open.
- graduated — PumpSwap pool live, LP mint indexed, staking enabled.
- failed — launch reverted before going live; deposit refundable.
Fees & numbers
Platform launch fee 0.025 SOL (covers deposit addr + IPFS + signing)
Dev buy (optional) 0 - 10 SOL
Trading revenue share 0.05% (pump.fun standard, owned by treasury)
Platform cut on harvest ~10% (gas + infra)
To LP stakers ~90% (swapped into the launched token)
Harvest cadence every 5 min
Deposit detect every 1 min
Signature TTL 5 minError reference
| Error | Meaning |
|---|---|
| WalletNotConnected | Connect Phantom to continue. |
| NotGraduated | Token has not migrated to PumpSwap yet — LP mint does not exist. |
| NoLpBalance | Your wallet has no PumpSwap LP tokens for this pool. |
| MintMismatch | Submitted transfer is for a different SPL mint than the pool's LP mint. |
| RecipientMismatch | Transfer recipient is not the treasury ATA. |
| DuplicateStake | This transfer signature was already credited. |
| SignatureExpired | Phantom signature is older than 5 min — re-sign. |
| SignatureInvalid | ed25519 verify failed for the connected wallet. |
| InsufficientStake | Net staked LP below requested unstake amount. |
| NoRewards | pending_rewards is 0 — nothing to claim. |
Security
- ✓ Treasury private keys are AES-256-GCM encrypted at rest.
- ✓ Encrypted columns are revoked from the public Data API — only server-side workers can decrypt.
- ✓ Cron endpoints require a shared x-cron-secret header.
- ✓ Claim and unstake require an ed25519 signature from the staker's wallet with a 5-min replay window.
- ✓ Stake credit requires an on-chain Helius lookup of the transfer signature — never trusted from the client.
- ✓ Pinned metadata is content-addressed on IPFS (immutable).
- ✓ No admin path can sweep stakers' LP — every treasury action is constrained by the staker's signed request.
Roadmap
- ✓Custodial treasury per launch
- ✓PumpPortal launch pipeline
- ✓Helius-verified LP staking
- ✓Harvest + Jupiter swap → pro-rata credit
- ✓Phantom signMessage gating
- Auto-compound option
- PumpSwap migration webhook
- Per-token APR + earnings history
- One-click add-LP + stake combo
- Notifications on claim-ready
- $CASH — revenue share for $CASH stakers
- Reduced platform cut for $CASH holders
Config
PLATFORM_FEE_LAMPORTS 25_000_000 (0.025 SOL)
DEV_BUY_CAP_LAMPORTS 10_000_000_000 (10 SOL)
HARVEST_INTERVAL 5 min
DEPOSIT_DETECT 1 min
SIG_TTL 300 s
RPC Helius (mainnet)
IPFS Pinata
SWAP Jupiter AggregatorOpen source. Built in public. Not financial advice — meme tokens are highly speculative.
