Pump.fun Bounties for OpenClaw
OpenClaw skill for automating **technical and on-chain deliverables** on
Pump.fun bounty boards: holder verification, tx proofs, scripted actions,
and automated claim flows.
When to use this skill
- Bounty deliverable type is
on_chain,holder_proof,script, ortx_proof - User asks OpenClaw to "claim bounty", "verify holders", or "submit tx proof"
- Scheduled agent run with
--skill pumpfun-bounties
Do **not** use for tweet/thread/meme bounties. Use the HermesAgent skill.
Prerequisites
| Variable | Required | Description |
|---|---|---|
PUMPFUN_API_KEY | Yes | Pump.fun API key |
SOLANA_RPC_URL | Yes | Helius or mainnet RPC endpoint |
SOLANA_KEYPAIR_PATH | Yes | Path to signing keypair JSON |
BOUNTY_MIN_REWARD_SOL | No | Minimum reward (default: 0.05) |
MAX_TX_FEE_LAMPORTS | No | Fee cap per tx (default: 50000) |
Wallet safety
- Use a **dedicated bounty wallet**. Never the user's primary holdings wallet
- Refuse bounties requiring unlimited token approvals
- Simulate every transaction before signing (
simulateTransaction) - Abort if simulated balance change exceeds
reward_sol * 0.1in fees
Bounty lifecycle
1. Discover
GET https://frontend-api.pump.fun/bounties?status=open&sort=deadline_ascFilter:
deliverable_type∈on_chain,holder_proof,script,tx_proofreward_sol >= BOUNTY_MIN_REWARD_SOL- Not in
~/.openclaw/bountyos/completed.json
2. Classify deliverable
| Type | Action |
|---|---|
holder_proof | Snapshot token holders at block, export merkle root |
tx_proof | Execute specified on-chain action, capture signature |
on_chain | Interact with program ID from brief (swap, stake, etc.) |
script | Run deliverable script, hash stdout as proof |
Parse program_id, mint, min_hold_duration, and required_actions from
the bounty JSON schema.
3. Execute
**Holder proof example:**
import { Connection, PublicKey } from '@solana/web3.js'
const holders = await fetchTokenHolders(mint, snapshotSlot)
const merkleRoot = buildMerkleRoot(holders)
const proofPayload = { merkleRoot, slot: snapshotSlot, count: holders.length }**Tx proof example:**
const tx = await buildBountyTx(brief)
const simulation = await connection.simulateTransaction(tx)
if (simulation.value.err) throw new Error('Simulation failed')
const sig = await sendAndConfirm(tx, keypair)4. Submit proof
POST https://frontend-api.pump.fun/bounties/{bounty_id}/submit
Content-Type: application/json
{
"proof_type": "tx_signature",
"proof_value": "5Kn8...",
"agent": "openclaw",
"metadata": {
"slot": 284012345,
"program_id": "..."
}
}For merkle proofs, upload JSON to a public gist or IPFS pin and submit the
URL as proof_url.
5. Claim payout
After submission status reaches approved:
const claimIx = await fetchClaimInstruction(bounty_id, wallet_pubkey)
const claimTx = new Transaction().add(claimIx)
const payoutSig = await sendAndConfirm(claimTx, keypair)Record in ~/.openclaw/bountyos/completed.json:
{
"bounty_id": "abc123",
"payout_sig": "3xY9...",
"reward_sol": 0.25,
"completed_at": "2026-06-08T14:30:00Z"
}File layout
~/.openclaw/bountyos/
├── completed.json
├── active.json
├── keypair.json # dedicated bounty wallet (chmod 600)
├── scripts/
│ ├── fetch-holders.ts
│ └── claim-bounty.ts
└── logs/
└── YYYY-MM-DD.jsonlOpenClaw integration
Install:
cp -r public/skills/openclaw ~/.openclaw/skills/pumpfun-bountiesInvoke:
openclaw run --skill pumpfun-bounties --schedule "0 */6 * * *"Manual run:
openclaw run --skill pumpfun-bounties --bounty-id abc123Safety rules
- Simulate before every sign
- Never approve unknown token spend authorities
- Reject bounties with unaudited
program_idnot on the allowlist - Log every signature to
logs/before submitting proof - Confirm with user if single bounty reward exceeds 2 SOL
Allowlisted programs
Only interact with these program IDs unless user explicitly overrides:
6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P: Pump.funTokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA: SPL TokenATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL: Associated Token
Troubleshooting
| Error | Action |
|---|---|
| Simulation failed | Read logs, check ATA exists |
| Insufficient SOL for fees | Top up bounty wallet, retry |
| Claim instruction missing | Bounty may need manual approval wait |
| RPC timeout | Failover to backup SOLANA_RPC_URL |