mcpField
P
PumpFun Claims Bot

PumpFun Claims Bot

本地服务
github.com/nirholas金融数据232 周前更新

关于 PumpFun Claims Bot

PumpFun Claims Bot 是一个只读的 Telegram 频道推送程序,用于广播 PumpFun 链上活动,并附带可信度评分等情报信息。项目同时提供可单独使用的 MCP 服务,适合关注 PumpFun 链上数据的用户。

主要功能

  1. 01推送 GitHub 社交手续费领取与代币毕业事件
  2. 02基于确定性规则的 0-100 可信度评分
  3. 03记录开发者历史记录,追踪重复领取者
  4. 04基于 Groq 模型的首次领取一句话摘要
  5. 05多 RPC 端点自动故障切换

适用场景

  1. 01在 Telegram 频道中实时接收 PumpFun 领取事件
  2. 02在 AI 助手中查询 PumpFun 代币与领取信息
  3. 03检查某个 GitHub 开发者的历史代币记录

MCP 相关

项目提供 MCP 服务,可通过 npx pumpfun-claims-bot 启动,供 Claude Desktop、Cursor 等 MCP 客户端调用 PumpFun 链上情报。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"nirholas-pumpfun-claims-bot": {
"command": "npx",
"args": [
"-y",
"pumpfun-claims-bot"
],
"env": {
"GITHUB_TOKEN": "<GITHUB_TOKEN>",
"SOLANA_RPC_URL": "<SOLANA_RPC_URL>"
}
}
}
}
启动命令npx -y pumpfun-claims-bot
需要配置的环境变量
GITHUB_TOKEN密钥GitHub personal access token — raises API rate limit from 60 to 5000 req/hr
SOLANA_RPC_URLSolana RPC HTTP URL for on-chain queries (defaults to public mainnet)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmpumpfun-claims-bot1.0.1

工具

9

收录的工具列表 · 更新于 2 周前

参数类型必填说明
mintstring是代币铸造地址

详细介绍

PumpFun Claims Bot

PumpFun Claims Bot — Solana 链上事件 → 信息增强流水线 → Telegram 频道卡片

CI 许可证 星标 Telegram npm MCP Node.js Solana 部署到 Railway

只读 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
代币毕业代币从联合曲线毕业至 PumpAMMFEED_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用途
PumpFeespfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ费用分成、社交费用 PDA 领取
Pump6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P联合曲线(毕业)
PumpAMMpAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEAAMM(毕业池事件)

已解码的领取指令(v1 及 2026 年 10 月升级中的 V2 变体):

指令程序备注
claim_social_fee_pda、claim_social_fee_pda_v2PumpFeesGitHub 社交费用领取;V2 可以使用 USDC 等报价铸币领取
collect_creator_fee、collect_creator_fee_v2Pump从创作者金库转给创作者
distribute_creator_fees、distribute_creator_fees_v2Pump将创作者费用分配给股东
transfer_creator_fees_to_pump、transfer_creator_fees_to_pump_v2PumpAMM将池的创作者费用转回 Pump 金库(无付款事件)
collect_coin_creator_feePumpAMM将池的创作者费用转给创作者
claim_cashback、claim_cashback_v2Pump、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 机器人
  1. 在 Telegram 上向 @BotFather 发送消息
  2. 输入 /newbot → 按照提示操作 → 复制机器人令牌
  3. 创建一个公开频道(例如,@pumpfunclaims)
  4. 将机器人添加为频道的管理员(必须拥有“发布消息”权限)
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—30WebSocket 不可用时的 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—3001MCP 服务 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 上部署

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 发起领取,但他们实际上没有可领取的费用。机器人会通过以下方式检测:

  1. 指令判别器与 claim_social_fee_pda 或 claim_social_fee_pda_v2 匹配
  2. 交易日志中不包含 SocialFeePdaClaimed 事件,或该事件显示 amountLamports = 0
  3. 仍会从指令参数(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() 返回该用户的顺序领取编号
  • 虚假领取不会设置首次领取状态
三层首次领取验证
  1. 本地去重 — 如果已经发布过,则跳过(通过持久化 JSON 在重启后保留状态)
  2. 链上验证 — lifetimeClaimedLamports == amountLamports 可确认这确实是链上的首次领取
  3. 优雅降级 — 如果验证失败,则跳过首次领取横幅(避免重新部署后产生误报)

领取卡片示例

🚨🚨🚨 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 次

故障排除

机器人未发布消息
  1. 检查机器人权限 — 机器人必须是频道管理员,并具有“发布消息”权限
  2. 确认 CHANNEL_ID — 公共频道使用 @channel_name,私有频道使用数字 ID(例如 -100xxx)。如需查找数字 ID,请将频道消息转发给 @userinfobot
  3. Telegram 403 错误 — 表示机器人不是该频道的成员或管理员。请通过“频道设置”→“管理员”→“添加管理员”将其添加
  4. 检查日志 — 设置 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代币创建界面
文档/docsAPI 文档和 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_historyGitHub 用户的领取状态 — 次数、已领取的铸币地址
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 探针使用。

端点方法说明
/healthGET包含运行时长和统计数据的健康状态
/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.tsCLI 初始化、工具发现、发布版本和干净的协议输出
认领路由claim-routing.test.ts哪些认领会发布、跳过或路由到哪个信息流
可信度credibility.test.ts确定性 0-100 评分、各因素归因、等级边界
开发者声誉dev-reputation.test.ts持久化的开发者个人记录和平均值
格式化器formatters.test.tsHTML 卡片生成、转义、空值处理、边界情况
GitHub 客户端github-client.test.tsURL 解析、API 响应处理、缓存行为
Groq 客户端groq-client.test.tsAI 摘要生成、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
TelegramgrammY 框架
AIGroq 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 了解指南。

  1. Fork 仓库
  2. 创建功能分支(git checkout -b feat/my-feature)
  3. 运行测试(npm test)和类型检查(npm run typecheck)
  4. 提交 Pull Request

安全

发现漏洞?请负责任地报告——请参阅 SECURITY.md。

许可证

保留所有权利。请参阅 LICENSE。

文档

完整文档网站:https://nirholas.github.io/pumpfun-claims-bot/

  • 快速入门介绍安装和首次运行。
  • 示例提供可直接复制粘贴的代码片段。

Star 历史

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,它就能获取所需的上下文。

同一作者的更多项目

贡献者

贡献者

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。