关于 PumpFun Claims Bot
PumpFun Claims Bot 是一个只读的 Telegram 频道推送程序,用于广播 PumpFun 链上活动,并附带可信度评分等情报信息。项目同时提供可单独使用的 MCP 服务,适合关注 PumpFun 链上数据的用户。
主要功能
- 01推送 GitHub 社交手续费领取与代币毕业事件
- 02基于确定性规则的 0-100 可信度评分
- 03记录开发者历史记录,追踪重复领取者
- 04基于 Groq 模型的首次领取一句话摘要
- 05多 RPC 端点自动故障切换
适用场景
- 01在 Telegram 频道中实时接收 PumpFun 领取事件
- 02在 AI 助手中查询 PumpFun 代币与领取信息
- 03检查某个 GitHub 开发者的历史代币记录
MCP 相关
项目提供 MCP 服务,可通过 npx pumpfun-claims-bot 启动,供 Claude Desktop、Cursor 等 MCP 客户端调用 PumpFun 链上情报。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y pumpfun-claims-botGITHUB_TOKEN密钥GitHub personal access token — raises API rate limit from 60 to 5000 req/hrSOLANA_RPC_URLSolana RPC HTTP URL for on-chain queries (defaults to public mainnet)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
9收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mint | string | 是 | 代币铸造地址 |
详细介绍
PumpFun Claims Bot
只读 Telegram 频道信息流,实时播报 PumpFun 链上活动——GitHub 社交费用领取、代币毕业等。向 Telegram 频道发布经过情报增强的丰富卡片。
网站 · 实时频道 · MCP 服务 · 部署指南 · 参与贡献
想要交互式监控? telegram-bot 支持监控管理、群聊、REST API、SSE 流式传输和 Webhook。对于只需单向广播的频道,请使用此频道机器人。
相关源代码
Pump.fun GitHub 领取记录 — nirholas/pumpfun-github-claims
是面向 @pumpfunclaims
信息流的配套仓库。它提供独立的机器人源代码和文档,用于追踪每位 GitHub 开发者和每种代币的首次奖励
领取记录,并将此前领取过的代币作为上下文。
其实现状态
记录了剩余的代币归属工作。本仓库提供更全面的工具集,包括 Web 仪表板、MCP 服务、可信度评分和
开发者声誉追踪。两个仓库均继续作为信息来源开放。
功能
GitHub 声明实际上能证明什么
声明卡片始于一笔来自 Pump.fun GitHub 社交费用账户的真实链上提款。这是有用的证据,但不能自动证明该 GitHub 用户创建、拥有或认可某个币。代币元数据由用户提供,存在冒充账号,而且一个社交费用账户可能由多个币共用。
| 标签 | 含义 |
|---|---|
| 已验证的 GitHub 费用声明 | 声明的 GitHub 用户与代币元数据中链接的仓库所有者完全一致。 |
| 创建者钱包 GitHub 费用声明 | 接收钱包也创建了该代币,但尚未确认仓库所有权。 |
| 身份不匹配 | 声明的用户名与链接仓库的所有者不同;应将冒充账号视为危险信号。 |
| 未验证 | 提款真实,但 GitHub 与代币之间的关系尚未得到证明。 |
| 未解析的共享账户 | 该费用账户对应多个币,因此未选择主 CA 或单币金额。 |
“首次”指的是 GitHub 费用账户首次发生提款,不一定是所显示的币。只有在已验证仓库关系或创建者钱包关系后,才会显示交易按钮。信息流仅用于发现线索,绝不代表认可。
信息流类型
| 信息流 | 说明 | 开关 |
|---|---|---|
| GitHub 社交费用声明 | GitHub 开发者领取 PumpFun 社交费用 PDA 奖励 | FEED_CLAIMS |
| 代币毕业 | 代币从联合曲线毕业至 PumpAMM | FEED_GRADUATIONS |
声明情报
每张 GitHub 社交费用声明卡片都包含:
| 功能 | 说明 |
|---|---|
| 🟢 可信度评分 | 确定性的 0-100 评分(强/中等/谨慎/高风险),综合所有信任信号,并透明列出各项因素的 ± 影响 |
| 📊 开发者过往记录 | 持续追踪每位开发者的声誉——展示重复开发者以往的代币及其平均可信度,让最新币看似干净的连续费用收割者一眼就能被识破 |
| 🚨 首次声明提醒 | GitHub 用户首次声明时显示 🚨🚨🚨 FIRST TIME CLAIM 横幅 |
| ⚠️ 虚假声明检测 | 检测是否调用了 claim_social_fee_pda 指令,却未实际支付任何费用 |
| 📊 声明计数器 | 跨重启持续追踪的顺序声明编号 |
| 💹 累计 SOL | 有史以来从 PDA 声明的 SOL 总量 |
| 👤 GitHub 个人资料 | 用户名、简介、仓库、关注者、账号年龄、所在地、博客 |
| 𝕏 社交链接 | Twitter/X 个人资料及关注者数量(来自 GitHub 个人资料) |
| 🏅 网红徽章 | 为关注者众多的 GitHub/X 账号颁发的分级徽章 |
| 📈 代币情报 | 毕业/联合曲线状态、曲线进度百分比、创建时长、回复数 |
| 🔗 代币社交链接 | 来自代币元数据的 Twitter、Telegram、网站链接 |
| 🏷️ 代币标记 | NSFW、封禁、返现状态指示器 |
| ⚠️ 信任信号 | 对新建 GitHub 账号(少于 30 天)、零仓库、虚假声明发出警告 |
| 🔗 交易链接 | 带有联盟代码的 Axiom、GMGN、Padre 链接 |
| ️ 代币图片 | 以照片卡片形式显示代币图片或 GitHub 头像 |
毕业卡片
丰富的毕业卡片包含创建者个人资料、主要持有者分析、24 小时交易量、开发者钱包活动、池流动性和捆绑交易检测。
网红等级系统
结合 GitHub 和 X/Twitter 关注者数据对声明者进行分类:
| 等级 | 徽章 | X 关注者 | GitHub 关注者 |
|---|---|---|---|
| 巨型网红 | 🔥🔥 MEGA INFLUENCER | ≥ 100K | ≥ 10K |
| 网红 | 🔥 Influencer | ≥ 10K | ≥ 1K |
| 知名人士 | ⭐ Notable | ≥ 1K | ≥ 100 |
任一阈值达标即可触发对应等级——拥有 50K X 关注者和 50 位 GitHub 关注者的用户仍符合网红等级。
可信度评分与开发者过往记录
每张认领卡片都会首先展示一个确定性的 0-100 可信度结论,综合机器人已收集的信任信号,以及认领开发者在此前代币中的长期过往记录。
评分是确定且透明的——相同输入始终得到相同分数,无需调用模型,并且每一分都归因于标题下方列出的具体因素:
| 等级 | 徽章 | 分数 |
|---|---|---|
| 较强 | 🟢 | 75-100 |
| 中等 | 🟡 | 55-74 |
| 谨慎 | 🟠 | 35-54 |
| 高风险 | 🔴 | 0-34 |
评分从中性的 50 分开始,并根据加权因素调整:认领验证(+22,或 GitHub 所有者不匹配时 -20)、账号年龄(5 年以上 +14,不足 30 天 -18)、公开仓库、关注者数量、获得星标的非分叉仓库、仿冒项目(-10/-16)、捆绑情况、持有者集中度、过往 Rug 事件和封禁记录。
开发者过往记录让一次性评分拥有记忆。每次评分都会关联到认领者的 GitHub 用户 ID 并持久化保存,因此该开发者下次发行代币时,卡片会显示其历史记录——揭露那些最新代币看似干净的惯犯手续费收割者,并为真正有信誉的建设者提供认可:
🟢 Credibility: 100/100 · Strong
↑ claim verified · GitHub 6y · 42 repos · repo 150★
📊 Dev track record: 3 prior tokens · avg 🔴 19/100 (High Risk)
逻辑分别位于 src/credibility.ts(纯函数 scoreCredibility)和 src/dev-reputation.ts(持久化存储)中,两者都经过了完整测试覆盖。
AI 驱动的认领摘要
首次认领会获得由 Groq(llama-3.3-70b-versatile)生成的一句话 AI 评价:
- 分析 30 多项信号:代币元数据、GitHub 个人资料、创建者历史记录、交易活动
- 最多 120 个字符——直接鲜明,面向交易者
- 5 秒超时,并提供优雅回退(失败时返回空字符串)
- 输出经过 HTML 消毒,可安全用于 Telegram
示例:
"真实的 GitHub 项目,开发者迅速完成认领" · "热门仓库的分叉项目,请谨慎操作"
架构
Solana RPC (WebSocket + HTTP polling)
│
▼
┌───────────────────┐
│ SocialFeeIndex │──▶ Bootstraps ~148K SharingConfig → mint mappings
└────────┬──────────┘
│
┌────────▼──────────┐
│ ClaimMonitor │──▶ Decodes PumpFees program claim transactions
│ EventMonitor │──▶ Decodes Pump program logs (graduations)
└────────┬──────────┘
│ FeeClaimEvent / GraduationEvent
┌────────▼──────────┐
│ Enrichment Layer │
│ ├─ GitHub API │──▶ User profile, repos, followers
│ ├─ X/Twitter API │──▶ Follower counts, influencer tier
│ ├─ PumpFun API │──▶ Token info, creator profile, holders, trades
│ ├─ ClaimTracker │──▶ First-claim detection, persistent counts
│ └─ Fake Detect │──▶ Instruction called but no payout (amountLamports=0)
└────────┬──────────┘
│ ClaimFeedContext
┌────────▼──────────┐
│ Formatters │──▶ Rich HTML cards with sections & emoji layout
└────────┬──────────┘
│
┌────────▼──────────┐
│ grammY Bot │──▶ Posts photo + caption to Telegram channel
│ (retry + rate │ Falls back to text-only if photo fails
│ limiting) │
└───────────────────┘
多 RPC 故障转移
RpcFallback 类通过自动轮换管理多个 Solana RPC 端点:
- 任一端点连续失败 3 次后,进行轮询轮换
- 每个失败端点在重试前有 60 秒冷却时间
- 最早到期回退——如果所有端点都处于冷却中,则选择最先结束冷却的端点
- 成功后重置——单次调用成功即可重置失败计数器
- 通过
SOLANA_RPC_URLS(逗号分隔)进行配置
监控的程序
| 程序 | ID | 用途 |
|---|---|---|
| PumpFees | pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ | 费用分成、社交费用 PDA 领取 |
| Pump | 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P | 联合曲线(毕业) |
| PumpAMM | pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA | AMM(毕业池事件) |
已解码的领取指令(v1 及 2026 年 10 月升级中的 V2 变体):
| 指令 | 程序 | 备注 |
|---|---|---|
claim_social_fee_pda、claim_social_fee_pda_v2 | PumpFees | GitHub 社交费用领取;V2 可以使用 USDC 等报价铸币领取 |
collect_creator_fee、collect_creator_fee_v2 | Pump | 从创作者金库转给创作者 |
distribute_creator_fees、distribute_creator_fees_v2 | Pump | 将创作者费用分配给股东 |
transfer_creator_fees_to_pump、transfer_creator_fees_to_pump_v2 | PumpAMM | 将池的创作者费用转回 Pump 金库(无付款事件) |
collect_coin_creator_fee | PumpAMM | 将池的创作者费用转给创作者 |
claim_cashback、claim_cashback_v2 | Pump、PumpAMM | 交易者返现 |
sweep_creator_fee 和 sweep_protocol_fee(Pump 和 PumpAMM)虽会被识别,但不会计为领取:sweep 只会将联合曲线或池中仍持有的费用转入创作者金库,不会向任何人付款。领取交易通常会先执行 sweep,再执行领取;系统只会报告领取(金库转给创作者),且每笔领取都由其各自的事件付款,因此不会重复计数。仅包含 sweep 的交易不会发布任何内容。
事件解码器会从已知前缀读取所需字段,并忽略尾随字节,因此升级前的事件和 2026 年 10 月的较长布局都能解码。交易识别 buy_v3、sell_v3、buy_exact_quote_in_v3 和 multi_hop_swap 指令名称。升级后,买入指令可以完成联合曲线,并在同一指令中继续在新的 PumpSwap 池上买入(在执行 migrate 之前进行合成迁移);巨鲸动态会将该 PostCompleteBuyEvent 金额计入买家的总额,并标记该交易已完成联合曲线。
安装
npm(MCP 服务 — 推荐用于 AI 助手)
使用 npx 即刻运行 MCP 服务,无需克隆:
npx pumpfun-claims-bot
或全局安装:
npm install -g pumpfun-claims-bot
pumpfun-claims-bot
添加到 MCP 客户端配置中(Claude Desktop、Cursor、VS Code Copilot):
{
"mcpServers": {
"pumpfun": {
"command": "npx",
"args": ["pumpfun-claims-bot"]
}
}
}
npm 包: npm 上的 pumpfun-claims-bot
从源码安装(完整机器人 + Telegram 动态)
git clone https://github.com/nirholas/pumpfun-claims-bot.git
cd pumpfun-claims-bot && npm install
快速开始
1. 创建 Telegram 机器人
- 在 Telegram 上向 @BotFather 发送消息
- 输入
/newbot→ 按照提示操作 → 复制机器人令牌 - 创建一个公开频道(例如,
@pumpfunclaims) - 将机器人添加为频道的管理员(必须拥有“发布消息”权限)
2. 配置环境
cp .env.example .env
# ── Required ──────────────────────────────────────────────
TELEGRAM_BOT_TOKEN=your-bot-token-from-botfather
CHANNEL_ID=@your_channel_name # or numeric chat ID like -100xxx
# ── Solana RPC ────────────────────────────────────────────
SOLANA_RPC_URL=https://mainnet.helius-rpc.com/?api-key=your-key
SOLANA_WS_URL=wss://mainnet.helius-rpc.com/?api-key=your-key
# Comma-separated fallback RPCs (rotates on 429/5xx/timeout)
SOLANA_RPC_URLS=https://mainnet.helius-rpc.com/?api-key=key1,https://your-other-rpc.com
# ── Feed Toggles (all default false except FEED_CLAIMS) ───
FEED_CLAIMS=true # GitHub social fee claims (default: true)
FEED_GRADUATIONS=false # Token graduations to PumpAMM (default: false)
FEED_LAUNCHES=false # New token launches (default: false)
FEED_WHALES=false # Large buy/sell whale alerts (default: false)
FEED_FEE_DISTRIBUTIONS=false # Creator fee distribution events (default: false)
# ── Claim Filter ──────────────────────────────────────────
REQUIRE_GITHUB=true # Only post claims with GitHub social fee PDA (default: true)
# ── Enrichment APIs ───────────────────────────────────────
GITHUB_TOKEN=ghp_your_token # Raises GitHub rate limit: 60 → 5000 req/hr
GROQ_API_KEY=gsk_your_key # Groq API for AI one-liner summaries
# X/Twitter follower counts & influencer detection
# Get cookies from x.com DevTools → Application → Cookies
# X_AUTH_TOKEN=your_auth_token_cookie
# X_CT0_TOKEN=your_ct0_cookie
# ── Affiliate Ref Codes ───────────────────────────────────
# Appended to Axiom / GMGN / Padre trading links in cards
# AXIOM_REF=your_ref
# GMGN_REF=your_ref
# PADRE_REF=your_ref
# ── Tuning ────────────────────────────────────────────────
POLL_INTERVAL_SECONDS=30 # HTTP polling fallback interval (default: 30)
WHALE_THRESHOLD_SOL=10 # Minimum SOL for whale alerts (default: 10)
LOG_LEVEL=info # debug | info | warn | error (default: info)
# ── Health Check ──────────────────────────────────────────
# PORT=3000 # Set automatically by Railway
环境变量参考
| 变量 | 必填 | 默认值 | 描述 |
|---|---|---|---|
TELEGRAM_BOT_TOKEN | ✅ | — | Bot 令牌 — 向 @BotFather 发送消息 → /newbot |
CHANNEL_ID | ✅ | — | 要发布到的频道(@channelname 或 -100xxx)— 通过 @userinfobot 获取数字 ID |
SOLANA_RPC_URL | ✅ | https://api.mainnet-beta.solana.com | 主要的 Solana HTTP RPC — 可在 Helius、QuickNode 或 Alchemy 获取免费套餐 |
SOLANA_WS_URL | — | 根据 SOLANA_RPC_URL 推导 | Solana WebSocket URL — 使用与 SOLANA_RPC_URL 相同的提供商,并将 https:// 替换为 wss:// |
SOLANA_RPC_URLS | — | — | 以逗号分隔的备用 RPC URL — 遇到 429 / 5xx / 超时错误时自动轮换 |
FEED_CLAIMS | — | true | 发布 GitHub 社交费用领取卡片 |
FEED_GRADUATIONS | — | false | 发布代币毕业卡片 |
FEED_LAUNCHES | — | false | 发布新代币发行卡片 |
FEED_WHALES | — | false | 发布巨鲸买入 / 卖出提醒 |
FEED_FEE_DISTRIBUTIONS | — | false | 发布创建者费用分配事件 |
REQUIRE_GITHUB | — | true | 跳过没有 GitHub 社交费用 PDA 的领取 |
GITHUB_TOKEN | — | — | GitHub PAT — 在此创建(无需任何权限范围)— 将速率限制从每小时 60 次提高到 5000 次 |
GROQ_API_KEY | — | — | 用于 AI 一句话摘要的 Groq API 密钥 — 在 console.groq.com 获取免费密钥 |
X_AUTH_TOKEN | — | — | X/Twitter auth_token cookie — 打开 x.com,DevTools → Application → Cookies → 复制 auth_token |
X_CT0_TOKEN | — | — | X/Twitter ct0 cookie(CSRF 令牌)— 同上位置,复制 ct0 |
AXIOM_REF | — | — | 用于 Axiom 交易链接的推广推荐码 |
GMGN_REF | — | — | 用于 GMGN 交易链接的推广推荐码 |
PADRE_REF | — | — | 用于 Padre 交易链接的推广推荐码 |
POLL_INTERVAL_SECONDS | — | 30 | WebSocket 不可用时的 HTTP 轮询间隔 |
WHALE_THRESHOLD_SOL | — | 10 | 触发巨鲸提醒所需的最低 SOL 交易额 |
LOG_LEVEL | — | info | 日志详细程度:debug | info | warn | error |
PORT | — | 3000 | 健康检查 HTTP 服务端口 — 由 Railway 自动设置 |
MCP_ENABLED | — | false | 启用 MCP(Model Context Protocol)服务,以集成 AI 助手 |
MCP_PORT | — | 3001 | MCP 服务 HTTP 端口(Streamable HTTP 传输) |
3. 运行
# Install dependencies
npm install
# Development (hot reload via tsx)
npm run dev
# Production
npm run build
npm start
4. 使用 Docker 部署
docker build -t pumpfun-channel-bot .
docker run -d --env-file .env pumpfun-channel-bot
5. 部署到 Railway
Railway 会从 GitHub 自动部署,并提供持久卷来存储领取跟踪数据。
# Install Railway CLI
npm install -g @railway/cli
railway login
# Create & link project
railway init
railway link
# Set environment variables
railway variables set TELEGRAM_BOT_TOKEN=your-token
railway variables set CHANNEL_ID=@your_channel_name
railway variables set SOLANA_RPC_URL=https://mainnet.helius-rpc.com/?api-key=your-key
railway variables set SOLANA_WS_URL=wss://mainnet.helius-rpc.com/?api-key=your-key
railway variables set FEED_CLAIMS=true
railway variables set REQUIRE_GITHUB=true
# Create persistent volume for claim tracker data
railway volume create --mount /app/data
# Deploy
railway up
部署配置请参阅 railway.json:
{
"$schema": "https://railway.app/railway.schema.json",
"build": {
"builder": "DOCKERFILE",
"dockerfilePath": "Dockerfile"
},
"deploy": {
"restartPolicyType": "ON_FAILURE",
"restartPolicyMaxRetries": 10
}
}
项目结构
pumpfun-claims-bot/
├── src/
│ ├── index.ts # Entry point — wires monitors, enrichment, & Telegram posting
│ ├── config.ts # Environment variable loading & validation
│ ├── mcp-server.ts # MCP server — exposes tools via Streamable HTTP or stdio
│ ├── mcp-stdio.ts # Standalone MCP entry point (stdio transport)
│ ├── claim-monitor.ts # PumpFees program monitor (WebSocket + HTTP polling)
│ ├── claim-routing.ts # Decides which claims are posted, skipped, or re-routed
│ ├── claim-tracker.ts # First-claim detection + claim counter (persisted to disk)
│ ├── credibility.ts # Deterministic 0-100 credibility scoring
│ ├── dev-reputation.ts # Persistent per-developer track record store
│ ├── event-monitor.ts # Pump program log decoder (graduations, launches)
│ ├── social-fee-index.ts # SocialFeeIndex — maps SharingConfig PDAs → mints (~148K)
│ ├── formatters.ts # Rich HTML card builders for Telegram
│ ├── pump-client.ts # PumpFun HTTP API client (token info, creator profiles)
│ ├── github-client.ts # GitHub API client (user profiles, rate-limited cache)
│ ├── x-client.ts # X/Twitter profile fetcher + influencer tier logic
│ ├── groq-client.ts # Groq AI one-liner summaries
│ ├── rpc-fallback.ts # Multi-RPC failover with round-robin
│ ├── health.ts # HTTP health check server
│ ├── types.ts # Program IDs, discriminators, event types
│ └── logger.ts # Leveled console logger
├── src/__tests__/ # Vitest suites (203 tests) + shared fixtures
├── packages/web/ # React dashboard, mock-data build (see Web Dashboard)
├── web/web/ # React dashboard, live-SSE build (see Web Dashboard)
├── leaderboard-bot/ # Separate Telegram bot: GitHub dev earnings leaderboard
├── data/ # Persisted state (gitignored, Railway volume mount)
│ └── github-first-claims.json
├── Dockerfile # Multi-stage Docker build
├── railway.json # Railway deployment config
├── package.json
└── tsconfig.json
工作原理
领取检测流程
Transaction detected on PumpFees program
│
▼
Skip sweep_creator_fee / sweep_protocol_fee (not a payout)
│
▼
Identify instruction: claim_social_fee_pda or claim_social_fee_pda_v2?
│
├─ YES ──▶ Parse platform (2 = GitHub) + user_id from Anchor args
│ │
│ ▼
│ Check amountLamports from SocialFeePdaClaimed event
│ │
│ ├─ amountLamports > 0 ──▶ Real claim
│ │ ├─ Check ClaimTracker: first time for this GitHub user?
│ │ │ ├─ YES ──▶ 🚨 FIRST TIME CLAIM banner
│ │ │ └─ NO ──▶ Standard claim card
│ │ └─ Enrich: GitHub API + PumpFun API + X profile
│ │
│ └─ amountLamports = 0 ──▶ ⚠️ FAKE CLAIM (instruction called, no payout)
│
└─ NO ───▶ Other claim type (creator fee, cashback, etc.)
SocialFeeIndex 引导加载
启动时,Bot 会从 PumpFees 程序获取所有 SharingConfig 账户,以建立从社交费用 PDA 地址到代币铸造地址的反向映射。这样无需额外的 RPC 调用,即可解析社交费用领取所属的代币。
- 启动时加载约 148K 个映射
- 通过 WebSocket 订阅
CreateFeeSharingConfig和UpdateFeeShares事件进行增量更新 - 查找:
socialFeeIndex.getMintForPda(pdaAddress)→ 代币铸造地址 - 一个 PDA → 多个代币铸造地址 — 可处理在多个代币中重复使用 PDA 的诈骗者
虚假领取检测
有些用户会调用 claim_social_fee_pda 指令,针对随机代币 PDA 发起领取,但他们实际上没有可领取的费用。机器人会通过以下方式检测:
- 指令判别器与
claim_social_fee_pda或claim_social_fee_pda_v2匹配 - 交易日志中不包含
SocialFeePdaClaimed事件,或该事件显示amountLamports = 0 - 仍会从指令参数(Anchor Borsh 格式)中解析 GitHub 用户 ID 和平台
虚假领取会附带 ⚠️ FAKE CLAIM 警告,以及 🚩 Fake claim — no fees paid out 信任提示。
首次领取跟踪
ClaimTracker 会持久保存成功领取过的 GitHub 用户 ID 集合:
- 内存集合:在处理期间快速查询
- 防抖磁盘持久化:延迟 5 秒写入
data/github-first-claims.json - 拆分检查/标记模式:
hasGithubUserClaimed()检查但不产生副作用;只有 Telegram 帖子成功发布后,才会调用markGithubUserClaimed() - 领取计数器:
incrementGithubClaimCount()返回该用户的顺序领取编号 - 虚假领取不会设置首次领取状态
三层首次领取验证
- 本地去重 — 如果已经发布过,则跳过(通过持久化 JSON 在重启后保留状态)
- 链上验证 —
lifetimeClaimedLamports == amountLamports可确认这确实是链上的首次领取 - 优雅降级 — 如果验证失败,则跳过首次领取横幅(避免重新部署后产生误报)
领取卡片示例
🚨🚨🚨 FIRST TIME CLAIM 🚨🚨🚨
🐙 $PUMP — PumpCoin 💹 $45K
↳ GitHub dev claimed PumpFun social fees
📊 Claim #1 · 0.1043 SOL lifetime ($15.65)
🏦 0.1043 SOL ($15.65)
↳ 8mNp...4rWz
👤 nirholas (Nicholas)
↳ 📦 45 · 👁 200 · 📅 5y ago
TypeScript SDK builder
𝕏 nichxbt · 1.2K
📈 Bonding curve (72%) · Created 3h ago · 💬 12
𝕏 @pump_coin · 💬 TG · 🌐 pumpcoin.io
⚠️ GitHub account created 15d ago
CA: 7xKXt...p3Bz
Axiom · GMGN · Padre
🔍 TX
要求
- Node.js >= 20.0.0
- Telegram 机器人令牌(通过 @BotFather 获取)
- Telegram 频道,并将机器人添加为管理员
- Solana RPC 端点 — 建议使用专用 RPC(Helius、QuickNode、Triton)。公共主网端点也可用,但可能会触发速率限制。
- GitHub 令牌(可选)— 将 API 速率限制从每小时 60 次提升至 5,000 次
故障排除
机器人未发布消息
- 检查机器人权限 — 机器人必须是频道管理员,并具有“发布消息”权限
- 确认 CHANNEL_ID — 公共频道使用
@channel_name,私有频道使用数字 ID(例如-100xxx)。如需查找数字 ID,请将频道消息转发给 @userinfobot - Telegram 403 错误 — 表示机器人不是该频道的成员或管理员。请通过“频道设置”→“管理员”→“添加管理员”将其添加
- 检查日志 — 设置
LOG_LEVEL=debug以查看机器人处理的所有事件
速率限制
Telegram 对机器人向频道发送消息的速率限制约为每秒 30 条。grammY 框架会自动处理速率限制:
- 消息可能会延迟,但不会丢失
- 机器人包含一个会遵循
retry_after标头的重试辅助工具 - 如果活动量很高,可增大
POLL_INTERVAL_SECONDS以减少事件数量
RPC 连接问题
- 公共 RPC 端点存在速率限制 — 生产环境建议使用专用 RPC
- 设置
SOLANA_RPC_URLS,提供多个端点以实现自动故障转移 - 如果 WebSocket 断开连接,机器人会回退到通过
POLL_INTERVAL_SECONDS进行 HTTP 轮询 RpcFallback类会在已配置的端点之间进行轮询- 设置
LOG_LEVEL=debug以查看连接状态
未收到领取记录
- 只接收 GitHub 领取? — 设置
REQUIRE_GITHUB=true,仅发布 GitHub 社交费用领取记录 - 信息流已禁用? — 确认已设置
FEED_CLAIMS=true - SocialFeeIndex 速度慢? — 初始引导会获取约 148K 个账户。启动时需要 30–60 秒。检查日志中是否有
SocialFeeIndex: loaded N mappings - 触发速率限制? — 未进行身份验证时,GitHub API 每小时允许 60 次请求。设置
GITHUB_TOKEN可提升至每小时 5,000 次
流水线统计
机器人每 60 秒记录一次流水线计数器:
Pipeline: 15 total → 8 social → 3 first / 5 repeat → 8 posted (skip: 7 cashback)
- total:收到的所有领取事件
- social:GitHub 社交费用 PDA 领取
- first/repeat:首次领取者与回访领取者
- posted:成功发送到 Telegram
- skip cashback:返现领取(用户退款,不属于创作者活动)
Web 仪表板
仓库中包含两个 React 前端,它们并不是同一个应用:
| 目录 | 内容 | 构建 |
|---|---|---|
web/web/ | 完整仪表板:SSE 事件流、监控列表、SEO 资源(robots.txt、sitemap.xml、llms.txt)。它有自己的锁文件,因此可以运行 npm ci。 | cd web/web && npm ci && npm run build |
packages/web/ | 同一 UI 的较早版本精简副本。其 Dashboard 会渲染生成的示例事件,不含 SSE 客户端。 | cd packages/web && npm ci && npm run build |
以下列出的功能描述的是 web/web/。目前两个目录都能成功构建;
将它们整合为一个仍是待完成的工作。
深层链接(/dashboard、/docs 等)是客户端路由,因此任何静态托管服务
都必须将未知路径重写到 index.html。每个应用现在都附带一个包含
该重写规则的 vercel.json;在非 Vercel 托管环境中,请配置等效的 SPA 回退。
页面
| 页面 | 路由 | 描述 |
|---|---|---|
| 首页 | / | 项目概览着陆页 |
| 仪表板 | /dashboard | 通过 SSE 流式传输实时事件 |
| 创建 Coin | /create | 代币创建界面 |
| 文档 | /docs | API 文档和 Telegram 命令 |
| 软件包 | /packages | 软件包浏览器 |
仪表板功能
- 服务器发送事件(SSE) — 通过
/api/v1/claims/stream实时流式传输,支持自动重连(延迟 3 秒) - 事件筛选器 — 全部、发布、大户、毕业、领取、分发
- 实时统计栏 — 各类事件的计数器
- 监控列表 — 添加/移除要监控的钱包地址(
GET/POST/DELETE /api/v1/watches) - 丰富的事件卡片 — 代币发布、大户交易、毕业、费用领取,附带完整上下文
- 连接状态 — 显示连接状态并提供错误消息
- 模拟数据回退 — SSE 不可用时使用模拟数据流
技术栈
| 层 | 技术 |
|---|---|
| 框架 | React 18 |
| 路由器 | React Router |
| 构建工具 | Vite 5 |
| 样式 | Tailwind CSS |
| 语言 | TypeScript |
MCP 服务
机器人内置了 Model Context Protocol(MCP)服务,可让 AI 助手(Claude、Copilot、Cursor 等)以对话方式查询 PumpFun 链上数据。
MCP 工具
| 工具 | 描述 |
|---|---|
get_token_info | 代币元数据、市值、联合曲线进度、标记 |
get_token_holders | 持仓量最大的持有者及集中度指标 |
get_token_trades | 最近的交易活动 — 交易量、买入/卖出次数 |
get_pool_liquidity | 已毕业代币的 PumpSwap AMM 池流动性 |
get_bundle_info | 捆绑检测(诈骗指标) |
get_creator_profile | 创作者发布历史、诈骗概率估算、近期代币 |
get_github_user | 按用户名或数字 ID 查询 GitHub 个人资料 |
get_claim_history | GitHub 用户的领取状态 — 次数、已领取的铸币地址 |
get_sol_price | 当前 SOL/USD 价格 |
用法:Stdio 传输(Claude Desktop / Cursor / VS Code)
将以下内容添加到 MCP 客户端配置中(例如 claude_desktop_config.json):
{
"mcpServers": {
"pumpfun": {
"command": "npx",
"args": ["pumpfun-claims-bot"]
}
}
}
或者从源代码运行:
# Development (tsx)
npm run mcp:dev
# Production (compiled)
npm run build && npm run mcp
用法:Streamable HTTP 传输(嵌入式)
将 MCP_ENABLED=true 设为启用,即可与主机器人一同运行:
MCP_ENABLED=true MCP_PORT=3001 npm run dev
MCP 端点位于所配置端口的 POST /mcp。客户端使用 Streamable HTTP 传输进行连接。
示例查询
连接后,可以向 AI 助手提问:
- “查询铸币地址 7xKXt...p3Bz 的代币信息”
- “GitHub 用户 12345 领取过 PumpFun 费用吗?”
- “这个代币的最大持有者有哪些?”
- “检查这个代币发布是否经过捆绑”
- “当前 SOL 价格是多少?”
健康检查 API
该机器人提供 HTTP 健康检查服务,供 Railway / Docker 探针使用。
| 端点 | 方法 | 说明 |
|---|---|---|
/health | GET | 包含运行时长和统计数据的健康状态 |
/ | GET | /health 的别名 |
响应:
{
"status": "ok",
"uptime": "12345s",
"uptimeMs": 12345000
}
- 状态为
ok时返回 200,状态为degraded时返回 503 - 通过回调注入动态统计数据(管道计数器、连接状态)
- 端口可通过
PORT或HEALTH_PORT环境变量配置(默认值:3000)
测试
项目使用 Vitest:共 12 个测试套件、204 项测试,运行 npm test 后全部通过。
# Run all tests
npm test
# Watch mode (re-runs on file changes)
npm run test:watch
测试套件
每个测试套件都位于 src/__tests__/ 中(另有共享示例数据 fixtures.ts)。
| 套件 | 文件 | 覆盖范围 |
|---|---|---|
| 认领跟踪器 | claim-tracker.test.ts | 首次认领检测、持久化、计数器、累计总数 |
| MCP 标准输入输出 | mcp-stdio.test.ts | CLI 初始化、工具发现、发布版本和干净的协议输出 |
| 认领路由 | claim-routing.test.ts | 哪些认领会发布、跳过或路由到哪个信息流 |
| 可信度 | credibility.test.ts | 确定性 0-100 评分、各因素归因、等级边界 |
| 开发者声誉 | dev-reputation.test.ts | 持久化的开发者个人记录和平均值 |
| 格式化器 | formatters.test.ts | HTML 卡片生成、转义、空值处理、边界情况 |
| GitHub 客户端 | github-client.test.ts | URL 解析、API 响应处理、缓存行为 |
| Groq 客户端 | groq-client.test.ts | AI 摘要生成、API 密钥处理、HTML 安全性 |
| Pump 客户端 | pump-client.test.ts | 代币、持有者、交易和创建者 API 响应处理 |
| RPC 回退 | rpc-fallback.test.ts | 轮询切换、冷却时间、可重试错误处理 |
| X 客户端 | x-client.test.ts | 影响者等级分类、粉丝数格式化 |
| E2E 管道 | e2e.test.ts | 端到端认领跟踪、格式化、GitHub 信息流 |
本地开发
# Install dependencies
npm install
# Run with hot reload (tsx)
npm run dev
# Type-check without emitting
npm run typecheck
设置 LOG_LEVEL=debug——无论事件是否发布到 Telegram,所有事件都会记录到标准输出。
技术栈
| 组件 | 技术 |
|---|---|
| 运行时 | Node.js >= 20(ESM) |
| 语言 | TypeScript 5.7(严格模式) |
| 区块链 | 通过 @solana/web3.js 使用 Solana |
| Telegram | grammY 框架 |
| AI | Groq API(llama-3.3-70b-versatile) |
| 前端 | React 18 + Vite 5 + Tailwind CSS |
| 测试 | Vitest |
| 容器 | Docker(多阶段 Alpine、非 root 用户) |
| MCP | @modelcontextprotocol/sdk(Streamable HTTP + 标准输入输出) |
| 托管 | Railway(从 GitHub 自动部署) |
| 依赖项 | 6 个生产依赖、4 个开发依赖——刻意保持精简 |
贡献
欢迎贡献!请参阅 CONTRIBUTING.md 了解指南。
- Fork 仓库
- 创建功能分支(
git checkout -b feat/my-feature) - 运行测试(
npm test)和类型检查(npm run typecheck) - 提交 Pull Request
安全
发现漏洞?请负责任地报告——请参阅 SECURITY.md。
许可证
保留所有权利。请参阅 LICENSE。
文档
完整文档网站:https://nirholas.github.io/pumpfun-claims-bot/
Star 历史
支持项目
如果 pumpfun-claims-bot 为你节省了时间,请在 GitHub 上为它加星。星标能让其他开发者和 AI Agent 找到值得信赖的代码仓库,而且只需点击一下。
认识会用到它的人吗?在 X 上发布 · 分享到 Bluesky · 分享到 LinkedIn · 提交到 Hacker News · 分享到 Reddit
也为 AI Agent 而打造
编码 Agent 和大模型工具可以直接读取此代码仓库:AGENTS.md、llms.txt、llms-full.txt。将 https://github.com/nirholas/pumpfun-claims-bot 提供给 Agent,它就能获取所需的上下文。
同一作者的更多项目
- nirholas 的所有代码仓库:完整目录,按主题分组
- three.ws:面向 3D AI Agent 的平台,提供 Solana 钱包、技能市场和 x402 支付
- 有疑问或想法:创建议题或发起讨论
贡献者
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。